notiflows 0.0.1

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 (231) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +305 -0
  3. data/SECURITY.md +27 -0
  4. data/lib/notiflows/client.rb +117 -0
  5. data/lib/notiflows/errors.rb +228 -0
  6. data/lib/notiflows/file_part.rb +58 -0
  7. data/lib/notiflows/internal/cursor_page.rb +100 -0
  8. data/lib/notiflows/internal/transport/base_client.rb +573 -0
  9. data/lib/notiflows/internal/transport/pooled_net_requester.rb +210 -0
  10. data/lib/notiflows/internal/type/array_of.rb +168 -0
  11. data/lib/notiflows/internal/type/base_model.rb +531 -0
  12. data/lib/notiflows/internal/type/base_page.rb +55 -0
  13. data/lib/notiflows/internal/type/boolean.rb +77 -0
  14. data/lib/notiflows/internal/type/converter.rb +327 -0
  15. data/lib/notiflows/internal/type/enum.rb +131 -0
  16. data/lib/notiflows/internal/type/file_input.rb +111 -0
  17. data/lib/notiflows/internal/type/hash_of.rb +188 -0
  18. data/lib/notiflows/internal/type/request_parameters.rb +42 -0
  19. data/lib/notiflows/internal/type/union.rb +237 -0
  20. data/lib/notiflows/internal/type/unknown.rb +81 -0
  21. data/lib/notiflows/internal/util.rb +920 -0
  22. data/lib/notiflows/internal.rb +20 -0
  23. data/lib/notiflows/models/delivery.rb +189 -0
  24. data/lib/notiflows/models/delivery_list_params.rb +78 -0
  25. data/lib/notiflows/models/delivery_retrieve_params.rb +14 -0
  26. data/lib/notiflows/models/notification.rb +151 -0
  27. data/lib/notiflows/models/notification_list_deliveries_params.rb +78 -0
  28. data/lib/notiflows/models/notification_list_params.rb +70 -0
  29. data/lib/notiflows/models/notification_retrieve_params.rb +14 -0
  30. data/lib/notiflows/models/notiflow_run_params.rb +197 -0
  31. data/lib/notiflows/models/notiflow_run_response.rb +19 -0
  32. data/lib/notiflows/models/topic.rb +27 -0
  33. data/lib/notiflows/models/topic_delete_params.rb +14 -0
  34. data/lib/notiflows/models/topic_list_params.rb +38 -0
  35. data/lib/notiflows/models/topic_retrieve_params.rb +14 -0
  36. data/lib/notiflows/models/topics/bulk_operation_response.rb +51 -0
  37. data/lib/notiflows/models/topics/bulk_subscribe_request.rb +20 -0
  38. data/lib/notiflows/models/topics/subscription_list_params.rb +56 -0
  39. data/lib/notiflows/models/topics/subscription_subscribe_bulk_params.rb +16 -0
  40. data/lib/notiflows/models/topics/subscription_unsubscribe_bulk_params.rb +16 -0
  41. data/lib/notiflows/models/user.rb +111 -0
  42. data/lib/notiflows/models/user_delete_params.rb +14 -0
  43. data/lib/notiflows/models/user_list_params.rb +54 -0
  44. data/lib/notiflows/models/user_retrieve_params.rb +14 -0
  45. data/lib/notiflows/models/user_upsert_params.rb +122 -0
  46. data/lib/notiflows/models/users/channel_setting_delete_params.rb +22 -0
  47. data/lib/notiflows/models/users/channel_setting_retrieve_params.rb +22 -0
  48. data/lib/notiflows/models/users/channel_setting_update_params.rb +45 -0
  49. data/lib/notiflows/models/users/channel_settings.rb +91 -0
  50. data/lib/notiflows/models/users/delivery_list_params.rb +80 -0
  51. data/lib/notiflows/models/users/delivery_retrieve_params.rb +22 -0
  52. data/lib/notiflows/models/users/mobile_push_settings.rb +20 -0
  53. data/lib/notiflows/models/users/notification_list_params.rb +72 -0
  54. data/lib/notiflows/models/users/notification_retrieve_params.rb +22 -0
  55. data/lib/notiflows/models/users/preference_retrieve_params.rb +16 -0
  56. data/lib/notiflows/models/users/preference_update_params.rb +16 -0
  57. data/lib/notiflows/models/users/preferences.rb +116 -0
  58. data/lib/notiflows/models/users/slack_settings.rb +29 -0
  59. data/lib/notiflows/models/users/subscription.rb +45 -0
  60. data/lib/notiflows/models/users/subscription_list_params.rb +56 -0
  61. data/lib/notiflows/models/users/subscription_retrieve_params.rb +22 -0
  62. data/lib/notiflows/models/users/subscription_subscribe_params.rb +28 -0
  63. data/lib/notiflows/models/users/subscription_unsubscribe_params.rb +22 -0
  64. data/lib/notiflows/models/users/update_preferences_request.rb +45 -0
  65. data/lib/notiflows/models.rb +79 -0
  66. data/lib/notiflows/request_options.rb +77 -0
  67. data/lib/notiflows/resources/deliveries.rb +77 -0
  68. data/lib/notiflows/resources/notifications.rb +112 -0
  69. data/lib/notiflows/resources/notiflows.rb +60 -0
  70. data/lib/notiflows/resources/topics/subscriptions.rb +106 -0
  71. data/lib/notiflows/resources/topics.rb +91 -0
  72. data/lib/notiflows/resources/users/channel_settings.rb +132 -0
  73. data/lib/notiflows/resources/users/deliveries.rb +82 -0
  74. data/lib/notiflows/resources/users/notifications.rb +80 -0
  75. data/lib/notiflows/resources/users/preferences.rb +86 -0
  76. data/lib/notiflows/resources/users/subscriptions.rb +135 -0
  77. data/lib/notiflows/resources/users.rb +167 -0
  78. data/lib/notiflows/version.rb +5 -0
  79. data/lib/notiflows.rb +109 -0
  80. data/manifest.yaml +17 -0
  81. data/rbi/notiflows/client.rbi +82 -0
  82. data/rbi/notiflows/errors.rbi +205 -0
  83. data/rbi/notiflows/file_part.rbi +37 -0
  84. data/rbi/notiflows/internal/cursor_page.rbi +37 -0
  85. data/rbi/notiflows/internal/transport/base_client.rbi +298 -0
  86. data/rbi/notiflows/internal/transport/pooled_net_requester.rbi +83 -0
  87. data/rbi/notiflows/internal/type/array_of.rbi +104 -0
  88. data/rbi/notiflows/internal/type/base_model.rbi +308 -0
  89. data/rbi/notiflows/internal/type/base_page.rbi +42 -0
  90. data/rbi/notiflows/internal/type/boolean.rbi +58 -0
  91. data/rbi/notiflows/internal/type/converter.rbi +216 -0
  92. data/rbi/notiflows/internal/type/enum.rbi +82 -0
  93. data/rbi/notiflows/internal/type/file_input.rbi +59 -0
  94. data/rbi/notiflows/internal/type/hash_of.rbi +104 -0
  95. data/rbi/notiflows/internal/type/request_parameters.rbi +29 -0
  96. data/rbi/notiflows/internal/type/union.rbi +128 -0
  97. data/rbi/notiflows/internal/type/unknown.rbi +58 -0
  98. data/rbi/notiflows/internal/util.rbi +487 -0
  99. data/rbi/notiflows/internal.rbi +18 -0
  100. data/rbi/notiflows/models/delivery.rbi +226 -0
  101. data/rbi/notiflows/models/delivery_list_params.rbi +123 -0
  102. data/rbi/notiflows/models/delivery_retrieve_params.rbi +27 -0
  103. data/rbi/notiflows/models/notification.rbi +190 -0
  104. data/rbi/notiflows/models/notification_list_deliveries_params.rbi +126 -0
  105. data/rbi/notiflows/models/notification_list_params.rbi +112 -0
  106. data/rbi/notiflows/models/notification_retrieve_params.rbi +30 -0
  107. data/rbi/notiflows/models/notiflow_run_params.rbi +320 -0
  108. data/rbi/notiflows/models/notiflow_run_response.rbi +31 -0
  109. data/rbi/notiflows/models/topic.rbi +32 -0
  110. data/rbi/notiflows/models/topic_delete_params.rbi +27 -0
  111. data/rbi/notiflows/models/topic_list_params.rbi +68 -0
  112. data/rbi/notiflows/models/topic_retrieve_params.rbi +27 -0
  113. data/rbi/notiflows/models/topics/bulk_operation_response.rbi +93 -0
  114. data/rbi/notiflows/models/topics/bulk_subscribe_request.rbi +35 -0
  115. data/rbi/notiflows/models/topics/subscription_list_params.rbi +95 -0
  116. data/rbi/notiflows/models/topics/subscription_subscribe_bulk_params.rbi +32 -0
  117. data/rbi/notiflows/models/topics/subscription_unsubscribe_bulk_params.rbi +32 -0
  118. data/rbi/notiflows/models/user.rbi +126 -0
  119. data/rbi/notiflows/models/user_delete_params.rbi +27 -0
  120. data/rbi/notiflows/models/user_list_params.rbi +90 -0
  121. data/rbi/notiflows/models/user_retrieve_params.rbi +27 -0
  122. data/rbi/notiflows/models/user_upsert_params.rbi +203 -0
  123. data/rbi/notiflows/models/users/channel_setting_delete_params.rbi +43 -0
  124. data/rbi/notiflows/models/users/channel_setting_retrieve_params.rbi +43 -0
  125. data/rbi/notiflows/models/users/channel_setting_update_params.rbi +92 -0
  126. data/rbi/notiflows/models/users/channel_settings.rbi +156 -0
  127. data/rbi/notiflows/models/users/delivery_list_params.rbi +128 -0
  128. data/rbi/notiflows/models/users/delivery_retrieve_params.rbi +43 -0
  129. data/rbi/notiflows/models/users/mobile_push_settings.rbi +35 -0
  130. data/rbi/notiflows/models/users/notification_list_params.rbi +117 -0
  131. data/rbi/notiflows/models/users/notification_retrieve_params.rbi +43 -0
  132. data/rbi/notiflows/models/users/preference_retrieve_params.rbi +32 -0
  133. data/rbi/notiflows/models/users/preference_update_params.rbi +34 -0
  134. data/rbi/notiflows/models/users/preferences.rbi +241 -0
  135. data/rbi/notiflows/models/users/slack_settings.rbi +49 -0
  136. data/rbi/notiflows/models/users/subscription.rbi +64 -0
  137. data/rbi/notiflows/models/users/subscription_list_params.rbi +95 -0
  138. data/rbi/notiflows/models/users/subscription_retrieve_params.rbi +43 -0
  139. data/rbi/notiflows/models/users/subscription_subscribe_params.rbi +47 -0
  140. data/rbi/notiflows/models/users/subscription_unsubscribe_params.rbi +43 -0
  141. data/rbi/notiflows/models/users/update_preferences_request.rbi +124 -0
  142. data/rbi/notiflows/models.rbi +42 -0
  143. data/rbi/notiflows/request_options.rbi +59 -0
  144. data/rbi/notiflows/resources/deliveries.rbi +67 -0
  145. data/rbi/notiflows/resources/notifications.rbi +100 -0
  146. data/rbi/notiflows/resources/notiflows.rbi +52 -0
  147. data/rbi/notiflows/resources/topics/subscriptions.rbi +88 -0
  148. data/rbi/notiflows/resources/topics.rbi +69 -0
  149. data/rbi/notiflows/resources/users/channel_settings.rbi +104 -0
  150. data/rbi/notiflows/resources/users/deliveries.rbi +69 -0
  151. data/rbi/notiflows/resources/users/notifications.rbi +66 -0
  152. data/rbi/notiflows/resources/users/preferences.rbi +76 -0
  153. data/rbi/notiflows/resources/users/subscriptions.rbi +102 -0
  154. data/rbi/notiflows/resources/users.rbi +147 -0
  155. data/rbi/notiflows/version.rbi +5 -0
  156. data/sig/notiflows/client.rbs +41 -0
  157. data/sig/notiflows/errors.rbs +117 -0
  158. data/sig/notiflows/file_part.rbs +21 -0
  159. data/sig/notiflows/internal/cursor_page.rbs +22 -0
  160. data/sig/notiflows/internal/transport/base_client.rbs +133 -0
  161. data/sig/notiflows/internal/transport/pooled_net_requester.rbs +48 -0
  162. data/sig/notiflows/internal/type/array_of.rbs +48 -0
  163. data/sig/notiflows/internal/type/base_model.rbs +102 -0
  164. data/sig/notiflows/internal/type/base_page.rbs +24 -0
  165. data/sig/notiflows/internal/type/boolean.rbs +26 -0
  166. data/sig/notiflows/internal/type/converter.rbs +79 -0
  167. data/sig/notiflows/internal/type/enum.rbs +32 -0
  168. data/sig/notiflows/internal/type/file_input.rbs +25 -0
  169. data/sig/notiflows/internal/type/hash_of.rbs +48 -0
  170. data/sig/notiflows/internal/type/request_parameters.rbs +19 -0
  171. data/sig/notiflows/internal/type/union.rbs +52 -0
  172. data/sig/notiflows/internal/type/unknown.rbs +26 -0
  173. data/sig/notiflows/internal/util.rbs +185 -0
  174. data/sig/notiflows/internal.rbs +9 -0
  175. data/sig/notiflows/models/delivery.rbs +130 -0
  176. data/sig/notiflows/models/delivery_list_params.rbs +77 -0
  177. data/sig/notiflows/models/delivery_retrieve_params.rbs +15 -0
  178. data/sig/notiflows/models/notification.rbs +104 -0
  179. data/sig/notiflows/models/notification_list_deliveries_params.rbs +77 -0
  180. data/sig/notiflows/models/notification_list_params.rbs +70 -0
  181. data/sig/notiflows/models/notification_retrieve_params.rbs +15 -0
  182. data/sig/notiflows/models/notiflow_run_params.rbs +199 -0
  183. data/sig/notiflows/models/notiflow_run_response.rbs +13 -0
  184. data/sig/notiflows/models/topic.rbs +15 -0
  185. data/sig/notiflows/models/topic_delete_params.rbs +15 -0
  186. data/sig/notiflows/models/topic_list_params.rbs +38 -0
  187. data/sig/notiflows/models/topic_retrieve_params.rbs +15 -0
  188. data/sig/notiflows/models/topics/bulk_operation_response.rbs +39 -0
  189. data/sig/notiflows/models/topics/bulk_subscribe_request.rbs +15 -0
  190. data/sig/notiflows/models/topics/subscription_list_params.rbs +58 -0
  191. data/sig/notiflows/models/topics/subscription_subscribe_bulk_params.rbs +17 -0
  192. data/sig/notiflows/models/topics/subscription_unsubscribe_bulk_params.rbs +17 -0
  193. data/sig/notiflows/models/user.rbs +75 -0
  194. data/sig/notiflows/models/user_delete_params.rbs +15 -0
  195. data/sig/notiflows/models/user_list_params.rbs +56 -0
  196. data/sig/notiflows/models/user_retrieve_params.rbs +15 -0
  197. data/sig/notiflows/models/user_upsert_params.rbs +112 -0
  198. data/sig/notiflows/models/users/channel_setting_delete_params.rbs +26 -0
  199. data/sig/notiflows/models/users/channel_setting_retrieve_params.rbs +26 -0
  200. data/sig/notiflows/models/users/channel_setting_update_params.rbs +42 -0
  201. data/sig/notiflows/models/users/channel_settings.rbs +68 -0
  202. data/sig/notiflows/models/users/delivery_list_params.rbs +79 -0
  203. data/sig/notiflows/models/users/delivery_retrieve_params.rbs +26 -0
  204. data/sig/notiflows/models/users/mobile_push_settings.rbs +15 -0
  205. data/sig/notiflows/models/users/notification_list_params.rbs +72 -0
  206. data/sig/notiflows/models/users/notification_retrieve_params.rbs +26 -0
  207. data/sig/notiflows/models/users/preference_retrieve_params.rbs +17 -0
  208. data/sig/notiflows/models/users/preference_update_params.rbs +17 -0
  209. data/sig/notiflows/models/users/preferences.rbs +118 -0
  210. data/sig/notiflows/models/users/slack_settings.rbs +24 -0
  211. data/sig/notiflows/models/users/subscription.rbs +32 -0
  212. data/sig/notiflows/models/users/subscription_list_params.rbs +58 -0
  213. data/sig/notiflows/models/users/subscription_retrieve_params.rbs +26 -0
  214. data/sig/notiflows/models/users/subscription_subscribe_params.rbs +25 -0
  215. data/sig/notiflows/models/users/subscription_unsubscribe_params.rbs +26 -0
  216. data/sig/notiflows/models/users/update_preferences_request.rbs +52 -0
  217. data/sig/notiflows/models.rbs +39 -0
  218. data/sig/notiflows/request_options.rbs +34 -0
  219. data/sig/notiflows/resources/deliveries.rbs +24 -0
  220. data/sig/notiflows/resources/notifications.rbs +36 -0
  221. data/sig/notiflows/resources/notiflows.rbs +16 -0
  222. data/sig/notiflows/resources/topics/subscriptions.rbs +31 -0
  223. data/sig/notiflows/resources/topics.rbs +23 -0
  224. data/sig/notiflows/resources/users/channel_settings.rbs +28 -0
  225. data/sig/notiflows/resources/users/deliveries.rbs +28 -0
  226. data/sig/notiflows/resources/users/notifications.rbs +27 -0
  227. data/sig/notiflows/resources/users/preferences.rbs +21 -0
  228. data/sig/notiflows/resources/users/subscriptions.rbs +37 -0
  229. data/sig/notiflows/resources/users.rbs +52 -0
  230. data/sig/notiflows/version.rbs +3 -0
  231. metadata +302 -0
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notiflows
4
+ module Resources
5
+ class Topics
6
+ class Subscriptions
7
+ # Retrieve all users subscribed to a specific topic.
8
+ #
9
+ # @overload list(topic_id, after: nil, before: nil, created_after: nil, created_before: nil, limit: nil, request_options: {})
10
+ #
11
+ # @param topic_id [String] Topic name
12
+ #
13
+ # @param after [String] Cursor for fetching the next page
14
+ #
15
+ # @param before [String] Cursor for fetching the previous page
16
+ #
17
+ # @param created_after [String] Filter by created after (ISO 8601 datetime)
18
+ #
19
+ # @param created_before [String] Filter by created before (ISO 8601 datetime)
20
+ #
21
+ # @param limit [Integer] Number of items per page (default: 25, max: 1000)
22
+ #
23
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
24
+ #
25
+ # @return [Notiflows::Internal::CursorPage<Notiflows::Models::Users::Subscription>]
26
+ #
27
+ # @see Notiflows::Models::Topics::SubscriptionListParams
28
+ def list(topic_id, params = {})
29
+ parsed, options = ::Notiflows::Topics::SubscriptionListParams.dump_request(params)
30
+ @client.request(
31
+ method: :get,
32
+ path: ["topics/%1$s/subscriptions", topic_id],
33
+ query: parsed,
34
+ page: ::Notiflows::Internal::CursorPage,
35
+ model: ::Notiflows::Users::Subscription,
36
+ options: options
37
+ )
38
+ end
39
+
40
+ # Subscribe multiple users to a topic in a single request.
41
+ #
42
+ # - Topics are created automatically if they don't exist.
43
+ # - If a user is already subscribed, they are included in the `successful`
44
+ # response.
45
+ # - Returns `207 Multi-Status` if some subscriptions failed.
46
+ #
47
+ # @overload subscribe_bulk(topic_id, user_external_ids:, request_options: {})
48
+ #
49
+ # @param topic_id [String] Topic name
50
+ #
51
+ # @param user_external_ids [Array<String>] List of user external IDs to subscribe/unsubscribe
52
+ #
53
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
54
+ #
55
+ # @return [Notiflows::Models::Topics::BulkOperationResponse]
56
+ #
57
+ # @see Notiflows::Models::Topics::SubscriptionSubscribeBulkParams
58
+ def subscribe_bulk(topic_id, params)
59
+ parsed, options = ::Notiflows::Topics::SubscriptionSubscribeBulkParams.dump_request(params)
60
+ @client.request(
61
+ method: :post,
62
+ path: ["topics/%1$s/subscriptions", topic_id],
63
+ body: parsed,
64
+ model: ::Notiflows::Topics::BulkOperationResponse,
65
+ options: options
66
+ )
67
+ end
68
+
69
+ # Unsubscribe multiple users from a topic in a single request.
70
+ #
71
+ # - Returns `207 Multi-Status` if some unsubscriptions failed (e.g., user not
72
+ # found).
73
+ # - Users not subscribed to the topic are included in the `failed` response.
74
+ #
75
+ # @overload unsubscribe_bulk(topic_id, user_external_ids:, request_options: {})
76
+ #
77
+ # @param topic_id [String] Topic name
78
+ #
79
+ # @param user_external_ids [Array<String>] List of user external IDs to subscribe/unsubscribe
80
+ #
81
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
82
+ #
83
+ # @return [Notiflows::Models::Topics::BulkOperationResponse]
84
+ #
85
+ # @see Notiflows::Models::Topics::SubscriptionUnsubscribeBulkParams
86
+ def unsubscribe_bulk(topic_id, params)
87
+ parsed, options = ::Notiflows::Topics::SubscriptionUnsubscribeBulkParams.dump_request(params)
88
+ @client.request(
89
+ method: :delete,
90
+ path: ["topics/%1$s/subscriptions", topic_id],
91
+ body: parsed,
92
+ model: ::Notiflows::Topics::BulkOperationResponse,
93
+ options: options
94
+ )
95
+ end
96
+
97
+ # @api private
98
+ #
99
+ # @param client [Notiflows::Client]
100
+ def initialize(client:)
101
+ @client = client
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notiflows
4
+ module Resources
5
+ class Topics
6
+ # @return [Notiflows::Resources::Topics::Subscriptions]
7
+ attr_reader :subscriptions
8
+
9
+ # Retrieve a topic by name.
10
+ #
11
+ # @overload retrieve(id, request_options: {})
12
+ #
13
+ # @param id [String] Topic name
14
+ #
15
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
16
+ #
17
+ # @return [Notiflows::Models::Topic]
18
+ #
19
+ # @see Notiflows::Models::TopicRetrieveParams
20
+ def retrieve(id, params = {})
21
+ @client.request(
22
+ method: :get,
23
+ path: ["topics/%1$s", id],
24
+ model: ::Notiflows::Topic,
25
+ options: params[:request_options]
26
+ )
27
+ end
28
+
29
+ # Retrieve a paginated list of all topics in your project.
30
+ #
31
+ # Topics are used for pub/sub notification patterns. Users subscribe to topics,
32
+ # and you can run notiflows for all subscribers of a topic.
33
+ #
34
+ # @overload list(after: nil, before: nil, limit: nil, request_options: {})
35
+ #
36
+ # @param after [String] Cursor for fetching the next page
37
+ #
38
+ # @param before [String] Cursor for fetching the previous page
39
+ #
40
+ # @param limit [Integer] Number of items per page (default: 25, max: 1000)
41
+ #
42
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
43
+ #
44
+ # @return [Notiflows::Internal::CursorPage<Notiflows::Models::Topic>]
45
+ #
46
+ # @see Notiflows::Models::TopicListParams
47
+ def list(params = {})
48
+ parsed, options = ::Notiflows::TopicListParams.dump_request(params)
49
+ @client.request(
50
+ method: :get,
51
+ path: "topics",
52
+ query: parsed,
53
+ page: ::Notiflows::Internal::CursorPage,
54
+ model: ::Notiflows::Topic,
55
+ options: options
56
+ )
57
+ end
58
+
59
+ # Delete a topic and all its subscriptions.
60
+ #
61
+ # **Warning:** This removes all user subscriptions to this topic. Users will need
62
+ # to re-subscribe if the topic is recreated.
63
+ #
64
+ # @overload delete(id, request_options: {})
65
+ #
66
+ # @param id [String] Topic name
67
+ #
68
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
69
+ #
70
+ # @return [nil]
71
+ #
72
+ # @see Notiflows::Models::TopicDeleteParams
73
+ def delete(id, params = {})
74
+ @client.request(
75
+ method: :delete,
76
+ path: ["topics/%1$s", id],
77
+ model: NilClass,
78
+ options: params[:request_options]
79
+ )
80
+ end
81
+
82
+ # @api private
83
+ #
84
+ # @param client [Notiflows::Client]
85
+ def initialize(client:)
86
+ @client = client
87
+ @subscriptions = Subscriptions.new(client: client)
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notiflows
4
+ module Resources
5
+ class Users
6
+ class ChannelSettings
7
+ # Retrieve a user's settings for a specific channel.
8
+ #
9
+ # Channel settings store provider-specific data like device tokens (for push) or
10
+ # Slack user IDs (for chat).
11
+ #
12
+ # @overload retrieve(channel_id, user_external_id:, request_options: {})
13
+ #
14
+ # @param channel_id [String] Channel ID (UUID)
15
+ #
16
+ # @param user_external_id [String] User external ID
17
+ #
18
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
19
+ #
20
+ # @return [Notiflows::Models::Users::UsersChannelSettings]
21
+ #
22
+ # @see Notiflows::Models::Users::ChannelSettingRetrieveParams
23
+ def retrieve(channel_id, params)
24
+ parsed, options = ::Notiflows::Users::ChannelSettingRetrieveParams.dump_request(params)
25
+ user_external_id =
26
+ parsed.delete(:user_external_id) do
27
+ raise ArgumentError.new("missing required path argument #{_1}")
28
+ end
29
+ @client.request(
30
+ method: :get,
31
+ path: ["users/%1$s/channel-settings/%2$s", user_external_id, channel_id],
32
+ model: ::Notiflows::Users::UsersChannelSettings,
33
+ options: options
34
+ )
35
+ end
36
+
37
+ # Update a user's settings for a specific channel. Creates the settings if they
38
+ # don't exist.
39
+ #
40
+ # **Provider-specific settings:**
41
+ #
42
+ # **Mobile Push (APNS/FCM):**
43
+ #
44
+ # ```json
45
+ # {
46
+ # "settings": {
47
+ # "device_tokens": ["token1", "token2"]
48
+ # }
49
+ # }
50
+ # ```
51
+ #
52
+ # **Slack:**
53
+ #
54
+ # ```json
55
+ # {
56
+ # "settings": {
57
+ # "slack_channel_id": "C0123456789",
58
+ # "slack_user_id": "U0123456789"
59
+ # }
60
+ # }
61
+ # ```
62
+ #
63
+ # At least one of `slack_channel_id` or `slack_user_id` must be provided.
64
+ #
65
+ # @overload update(channel_id, user_external_id:, settings:, request_options: {})
66
+ #
67
+ # @param channel_id [String] Path param: Channel ID (UUID)
68
+ #
69
+ # @param user_external_id [String] Path param: User external ID
70
+ #
71
+ # @param settings [Notiflows::Models::Users::MobilePushSettings, Notiflows::Models::Users::SlackSettings] Body param: Provider-specific settings. Structure depends on channel provider.
72
+ #
73
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
74
+ #
75
+ # @return [Notiflows::Models::Users::UsersChannelSettings]
76
+ #
77
+ # @see Notiflows::Models::Users::ChannelSettingUpdateParams
78
+ def update(channel_id, params)
79
+ parsed, options = ::Notiflows::Users::ChannelSettingUpdateParams.dump_request(params)
80
+ user_external_id =
81
+ parsed.delete(:user_external_id) do
82
+ raise ArgumentError.new("missing required path argument #{_1}")
83
+ end
84
+ @client.request(
85
+ method: :put,
86
+ path: ["users/%1$s/channel-settings/%2$s", user_external_id, channel_id],
87
+ body: parsed,
88
+ model: ::Notiflows::Users::UsersChannelSettings,
89
+ options: options
90
+ )
91
+ end
92
+
93
+ # Remove a user's settings for a specific channel.
94
+ #
95
+ # After deletion, the user will no longer receive notifications through this
96
+ # channel until new settings are configured.
97
+ #
98
+ # @overload delete(channel_id, user_external_id:, request_options: {})
99
+ #
100
+ # @param channel_id [String] Channel ID (UUID)
101
+ #
102
+ # @param user_external_id [String] User external ID
103
+ #
104
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
105
+ #
106
+ # @return [nil]
107
+ #
108
+ # @see Notiflows::Models::Users::ChannelSettingDeleteParams
109
+ def delete(channel_id, params)
110
+ parsed, options = ::Notiflows::Users::ChannelSettingDeleteParams.dump_request(params)
111
+ user_external_id =
112
+ parsed.delete(:user_external_id) do
113
+ raise ArgumentError.new("missing required path argument #{_1}")
114
+ end
115
+ @client.request(
116
+ method: :delete,
117
+ path: ["users/%1$s/channel-settings/%2$s", user_external_id, channel_id],
118
+ model: NilClass,
119
+ options: options
120
+ )
121
+ end
122
+
123
+ # @api private
124
+ #
125
+ # @param client [Notiflows::Client]
126
+ def initialize(client:)
127
+ @client = client
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notiflows
4
+ module Resources
5
+ class Users
6
+ class Deliveries
7
+ # Retrieve details of a specific delivery attempt for a user.
8
+ #
9
+ # @overload retrieve(delivery_id, user_external_id:, request_options: {})
10
+ #
11
+ # @param delivery_id [String] Delivery ID (UUID)
12
+ #
13
+ # @param user_external_id [String] User external ID
14
+ #
15
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
16
+ #
17
+ # @return [Notiflows::Models::Delivery]
18
+ #
19
+ # @see Notiflows::Models::Users::DeliveryRetrieveParams
20
+ def retrieve(delivery_id, params)
21
+ parsed, options = ::Notiflows::Users::DeliveryRetrieveParams.dump_request(params)
22
+ user_external_id =
23
+ parsed.delete(:user_external_id) do
24
+ raise ArgumentError.new("missing required path argument #{_1}")
25
+ end
26
+ @client.request(
27
+ method: :get,
28
+ path: ["users/%1$s/deliveries/%2$s", user_external_id, delivery_id],
29
+ model: ::Notiflows::Delivery,
30
+ options: options
31
+ )
32
+ end
33
+
34
+ # Retrieve all delivery attempts for a user across all channels.
35
+ #
36
+ # @overload list(user_external_id, after: nil, before: nil, channel_id: nil, created_after: nil, created_before: nil, limit: nil, status: nil, topic: nil, request_options: {})
37
+ #
38
+ # @param user_external_id [String] User external ID
39
+ #
40
+ # @param after [String] Cursor for fetching the next page
41
+ #
42
+ # @param before [String] Cursor for fetching the previous page
43
+ #
44
+ # @param channel_id [String] Filter by channel ID (UUID)
45
+ #
46
+ # @param created_after [String] Filter by created after (ISO 8601 datetime)
47
+ #
48
+ # @param created_before [String] Filter by created before (ISO 8601 datetime)
49
+ #
50
+ # @param limit [Integer] Number of items per page (default: 25, max: 1000)
51
+ #
52
+ # @param status [String] Filter by status (pending, sent, failed)
53
+ #
54
+ # @param topic [String] Filter by topic name
55
+ #
56
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
57
+ #
58
+ # @return [Notiflows::Internal::CursorPage<Notiflows::Models::Delivery>]
59
+ #
60
+ # @see Notiflows::Models::Users::DeliveryListParams
61
+ def list(user_external_id, params = {})
62
+ parsed, options = ::Notiflows::Users::DeliveryListParams.dump_request(params)
63
+ @client.request(
64
+ method: :get,
65
+ path: ["users/%1$s/deliveries", user_external_id],
66
+ query: parsed,
67
+ page: ::Notiflows::Internal::CursorPage,
68
+ model: ::Notiflows::Delivery,
69
+ options: options
70
+ )
71
+ end
72
+
73
+ # @api private
74
+ #
75
+ # @param client [Notiflows::Client]
76
+ def initialize(client:)
77
+ @client = client
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notiflows
4
+ module Resources
5
+ class Users
6
+ class Notifications
7
+ # Retrieve a specific notification for a user, including all delivery attempts.
8
+ #
9
+ # @overload retrieve(notification_id, user_external_id:, request_options: {})
10
+ #
11
+ # @param notification_id [String] Notification ID (UUID)
12
+ #
13
+ # @param user_external_id [String] User external ID
14
+ #
15
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
16
+ #
17
+ # @return [Notiflows::Models::Notification]
18
+ #
19
+ # @see Notiflows::Models::Users::NotificationRetrieveParams
20
+ def retrieve(notification_id, params)
21
+ parsed, options = ::Notiflows::Users::NotificationRetrieveParams.dump_request(params)
22
+ user_external_id =
23
+ parsed.delete(:user_external_id) do
24
+ raise ArgumentError.new("missing required path argument #{_1}")
25
+ end
26
+ @client.request(
27
+ method: :get,
28
+ path: ["users/%1$s/notifications/%2$s", user_external_id, notification_id],
29
+ model: ::Notiflows::Notification,
30
+ options: options
31
+ )
32
+ end
33
+
34
+ # Retrieve all notifications sent to a specific user.
35
+ #
36
+ # @overload list(user_external_id, after: nil, before: nil, created_after: nil, created_before: nil, limit: nil, status: nil, topic: nil, request_options: {})
37
+ #
38
+ # @param user_external_id [String] User external ID
39
+ #
40
+ # @param after [String] Cursor for fetching the next page
41
+ #
42
+ # @param before [String] Cursor for fetching the previous page
43
+ #
44
+ # @param created_after [String] Filter by created after (ISO 8601 datetime)
45
+ #
46
+ # @param created_before [String] Filter by created before (ISO 8601 datetime)
47
+ #
48
+ # @param limit [Integer] Number of items per page (default: 25, max: 1000)
49
+ #
50
+ # @param status [String] Filter by status
51
+ #
52
+ # @param topic [String] Filter by topic
53
+ #
54
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
55
+ #
56
+ # @return [Notiflows::Internal::CursorPage<Notiflows::Models::Notification>]
57
+ #
58
+ # @see Notiflows::Models::Users::NotificationListParams
59
+ def list(user_external_id, params = {})
60
+ parsed, options = ::Notiflows::Users::NotificationListParams.dump_request(params)
61
+ @client.request(
62
+ method: :get,
63
+ path: ["users/%1$s/notifications", user_external_id],
64
+ query: parsed,
65
+ page: ::Notiflows::Internal::CursorPage,
66
+ model: ::Notiflows::Notification,
67
+ options: options
68
+ )
69
+ end
70
+
71
+ # @api private
72
+ #
73
+ # @param client [Notiflows::Client]
74
+ def initialize(client:)
75
+ @client = client
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Notiflows
4
+ module Resources
5
+ class Users
6
+ class Preferences
7
+ # Retrieve a user's notification preferences.
8
+ #
9
+ # Preferences control which notifications the user receives:
10
+ #
11
+ # - `channel_types`: Global opt-in/opt-out per channel type (email, sms, push,
12
+ # etc.)
13
+ # - `notiflows`: Per-notiflow preferences with optional channel overrides
14
+ #
15
+ # @overload retrieve(user_external_id, request_options: {})
16
+ #
17
+ # @param user_external_id [String] User external ID
18
+ #
19
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
20
+ #
21
+ # @return [::Notiflows::Models::Users::UsersPreferences]
22
+ #
23
+ # @see Notiflows::Models::Users::PreferenceRetrieveParams
24
+ def retrieve(user_external_id, params = {})
25
+ @client.request(
26
+ method: :get,
27
+ path: ["users/%1$s/preferences", user_external_id],
28
+ model: ::Notiflows::Users::UsersPreferences,
29
+ options: params[:request_options]
30
+ )
31
+ end
32
+
33
+ # Update a user's notification preferences. Only provided fields are updated
34
+ # (partial update).
35
+ #
36
+ # **Channel types:** Set to `false` to opt the user out of a channel globally.
37
+ #
38
+ # **Notiflow preferences:** Override settings for specific notiflows:
39
+ #
40
+ # ```json
41
+ # {
42
+ # "notiflows": {
43
+ # "notiflow_uuid": {
44
+ # "enabled": true,
45
+ # "channel_types": {
46
+ # "email": false
47
+ # }
48
+ # }
49
+ # }
50
+ # }
51
+ # ```
52
+ #
53
+ # @overload update(user_external_id, channel_types: nil, notiflows: nil, request_options: {})
54
+ #
55
+ # @param user_external_id [String] User external ID
56
+ #
57
+ # @param channel_types [Hash{Symbol=>Boolean}] Global channel type preferences
58
+ #
59
+ # @param notiflows [Hash{Symbol=>::Notiflows::Models::Users::UpdatePreferencesRequest::Notiflow}] Per-notiflow preferences (keyed by notiflow ID)
60
+ #
61
+ # @param request_options [Notiflows::RequestOptions, Hash{Symbol=>Object}, nil]
62
+ #
63
+ # @return [::Notiflows::Models::Users::UsersPreferences]
64
+ #
65
+ # @see Notiflows::Models::Users::PreferenceUpdateParams
66
+ def update(user_external_id, params = {})
67
+ parsed, options = ::Notiflows::Users::PreferenceUpdateParams.dump_request(params)
68
+ @client.request(
69
+ method: :put,
70
+ path: ["users/%1$s/preferences", user_external_id],
71
+ body: parsed,
72
+ model: ::Notiflows::Users::UsersPreferences,
73
+ options: options
74
+ )
75
+ end
76
+
77
+ # @api private
78
+ #
79
+ # @param client [Notiflows::Client]
80
+ def initialize(client:)
81
+ @client = client
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end