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.
- checksums.yaml +7 -0
- data/README.md +305 -0
- data/SECURITY.md +27 -0
- data/lib/notiflows/client.rb +117 -0
- data/lib/notiflows/errors.rb +228 -0
- data/lib/notiflows/file_part.rb +58 -0
- data/lib/notiflows/internal/cursor_page.rb +100 -0
- data/lib/notiflows/internal/transport/base_client.rb +573 -0
- data/lib/notiflows/internal/transport/pooled_net_requester.rb +210 -0
- data/lib/notiflows/internal/type/array_of.rb +168 -0
- data/lib/notiflows/internal/type/base_model.rb +531 -0
- data/lib/notiflows/internal/type/base_page.rb +55 -0
- data/lib/notiflows/internal/type/boolean.rb +77 -0
- data/lib/notiflows/internal/type/converter.rb +327 -0
- data/lib/notiflows/internal/type/enum.rb +131 -0
- data/lib/notiflows/internal/type/file_input.rb +111 -0
- data/lib/notiflows/internal/type/hash_of.rb +188 -0
- data/lib/notiflows/internal/type/request_parameters.rb +42 -0
- data/lib/notiflows/internal/type/union.rb +237 -0
- data/lib/notiflows/internal/type/unknown.rb +81 -0
- data/lib/notiflows/internal/util.rb +920 -0
- data/lib/notiflows/internal.rb +20 -0
- data/lib/notiflows/models/delivery.rb +189 -0
- data/lib/notiflows/models/delivery_list_params.rb +78 -0
- data/lib/notiflows/models/delivery_retrieve_params.rb +14 -0
- data/lib/notiflows/models/notification.rb +151 -0
- data/lib/notiflows/models/notification_list_deliveries_params.rb +78 -0
- data/lib/notiflows/models/notification_list_params.rb +70 -0
- data/lib/notiflows/models/notification_retrieve_params.rb +14 -0
- data/lib/notiflows/models/notiflow_run_params.rb +197 -0
- data/lib/notiflows/models/notiflow_run_response.rb +19 -0
- data/lib/notiflows/models/topic.rb +27 -0
- data/lib/notiflows/models/topic_delete_params.rb +14 -0
- data/lib/notiflows/models/topic_list_params.rb +38 -0
- data/lib/notiflows/models/topic_retrieve_params.rb +14 -0
- data/lib/notiflows/models/topics/bulk_operation_response.rb +51 -0
- data/lib/notiflows/models/topics/bulk_subscribe_request.rb +20 -0
- data/lib/notiflows/models/topics/subscription_list_params.rb +56 -0
- data/lib/notiflows/models/topics/subscription_subscribe_bulk_params.rb +16 -0
- data/lib/notiflows/models/topics/subscription_unsubscribe_bulk_params.rb +16 -0
- data/lib/notiflows/models/user.rb +111 -0
- data/lib/notiflows/models/user_delete_params.rb +14 -0
- data/lib/notiflows/models/user_list_params.rb +54 -0
- data/lib/notiflows/models/user_retrieve_params.rb +14 -0
- data/lib/notiflows/models/user_upsert_params.rb +122 -0
- data/lib/notiflows/models/users/channel_setting_delete_params.rb +22 -0
- data/lib/notiflows/models/users/channel_setting_retrieve_params.rb +22 -0
- data/lib/notiflows/models/users/channel_setting_update_params.rb +45 -0
- data/lib/notiflows/models/users/channel_settings.rb +91 -0
- data/lib/notiflows/models/users/delivery_list_params.rb +80 -0
- data/lib/notiflows/models/users/delivery_retrieve_params.rb +22 -0
- data/lib/notiflows/models/users/mobile_push_settings.rb +20 -0
- data/lib/notiflows/models/users/notification_list_params.rb +72 -0
- data/lib/notiflows/models/users/notification_retrieve_params.rb +22 -0
- data/lib/notiflows/models/users/preference_retrieve_params.rb +16 -0
- data/lib/notiflows/models/users/preference_update_params.rb +16 -0
- data/lib/notiflows/models/users/preferences.rb +116 -0
- data/lib/notiflows/models/users/slack_settings.rb +29 -0
- data/lib/notiflows/models/users/subscription.rb +45 -0
- data/lib/notiflows/models/users/subscription_list_params.rb +56 -0
- data/lib/notiflows/models/users/subscription_retrieve_params.rb +22 -0
- data/lib/notiflows/models/users/subscription_subscribe_params.rb +28 -0
- data/lib/notiflows/models/users/subscription_unsubscribe_params.rb +22 -0
- data/lib/notiflows/models/users/update_preferences_request.rb +45 -0
- data/lib/notiflows/models.rb +79 -0
- data/lib/notiflows/request_options.rb +77 -0
- data/lib/notiflows/resources/deliveries.rb +77 -0
- data/lib/notiflows/resources/notifications.rb +112 -0
- data/lib/notiflows/resources/notiflows.rb +60 -0
- data/lib/notiflows/resources/topics/subscriptions.rb +106 -0
- data/lib/notiflows/resources/topics.rb +91 -0
- data/lib/notiflows/resources/users/channel_settings.rb +132 -0
- data/lib/notiflows/resources/users/deliveries.rb +82 -0
- data/lib/notiflows/resources/users/notifications.rb +80 -0
- data/lib/notiflows/resources/users/preferences.rb +86 -0
- data/lib/notiflows/resources/users/subscriptions.rb +135 -0
- data/lib/notiflows/resources/users.rb +167 -0
- data/lib/notiflows/version.rb +5 -0
- data/lib/notiflows.rb +109 -0
- data/manifest.yaml +17 -0
- data/rbi/notiflows/client.rbi +82 -0
- data/rbi/notiflows/errors.rbi +205 -0
- data/rbi/notiflows/file_part.rbi +37 -0
- data/rbi/notiflows/internal/cursor_page.rbi +37 -0
- data/rbi/notiflows/internal/transport/base_client.rbi +298 -0
- data/rbi/notiflows/internal/transport/pooled_net_requester.rbi +83 -0
- data/rbi/notiflows/internal/type/array_of.rbi +104 -0
- data/rbi/notiflows/internal/type/base_model.rbi +308 -0
- data/rbi/notiflows/internal/type/base_page.rbi +42 -0
- data/rbi/notiflows/internal/type/boolean.rbi +58 -0
- data/rbi/notiflows/internal/type/converter.rbi +216 -0
- data/rbi/notiflows/internal/type/enum.rbi +82 -0
- data/rbi/notiflows/internal/type/file_input.rbi +59 -0
- data/rbi/notiflows/internal/type/hash_of.rbi +104 -0
- data/rbi/notiflows/internal/type/request_parameters.rbi +29 -0
- data/rbi/notiflows/internal/type/union.rbi +128 -0
- data/rbi/notiflows/internal/type/unknown.rbi +58 -0
- data/rbi/notiflows/internal/util.rbi +487 -0
- data/rbi/notiflows/internal.rbi +18 -0
- data/rbi/notiflows/models/delivery.rbi +226 -0
- data/rbi/notiflows/models/delivery_list_params.rbi +123 -0
- data/rbi/notiflows/models/delivery_retrieve_params.rbi +27 -0
- data/rbi/notiflows/models/notification.rbi +190 -0
- data/rbi/notiflows/models/notification_list_deliveries_params.rbi +126 -0
- data/rbi/notiflows/models/notification_list_params.rbi +112 -0
- data/rbi/notiflows/models/notification_retrieve_params.rbi +30 -0
- data/rbi/notiflows/models/notiflow_run_params.rbi +320 -0
- data/rbi/notiflows/models/notiflow_run_response.rbi +31 -0
- data/rbi/notiflows/models/topic.rbi +32 -0
- data/rbi/notiflows/models/topic_delete_params.rbi +27 -0
- data/rbi/notiflows/models/topic_list_params.rbi +68 -0
- data/rbi/notiflows/models/topic_retrieve_params.rbi +27 -0
- data/rbi/notiflows/models/topics/bulk_operation_response.rbi +93 -0
- data/rbi/notiflows/models/topics/bulk_subscribe_request.rbi +35 -0
- data/rbi/notiflows/models/topics/subscription_list_params.rbi +95 -0
- data/rbi/notiflows/models/topics/subscription_subscribe_bulk_params.rbi +32 -0
- data/rbi/notiflows/models/topics/subscription_unsubscribe_bulk_params.rbi +32 -0
- data/rbi/notiflows/models/user.rbi +126 -0
- data/rbi/notiflows/models/user_delete_params.rbi +27 -0
- data/rbi/notiflows/models/user_list_params.rbi +90 -0
- data/rbi/notiflows/models/user_retrieve_params.rbi +27 -0
- data/rbi/notiflows/models/user_upsert_params.rbi +203 -0
- data/rbi/notiflows/models/users/channel_setting_delete_params.rbi +43 -0
- data/rbi/notiflows/models/users/channel_setting_retrieve_params.rbi +43 -0
- data/rbi/notiflows/models/users/channel_setting_update_params.rbi +92 -0
- data/rbi/notiflows/models/users/channel_settings.rbi +156 -0
- data/rbi/notiflows/models/users/delivery_list_params.rbi +128 -0
- data/rbi/notiflows/models/users/delivery_retrieve_params.rbi +43 -0
- data/rbi/notiflows/models/users/mobile_push_settings.rbi +35 -0
- data/rbi/notiflows/models/users/notification_list_params.rbi +117 -0
- data/rbi/notiflows/models/users/notification_retrieve_params.rbi +43 -0
- data/rbi/notiflows/models/users/preference_retrieve_params.rbi +32 -0
- data/rbi/notiflows/models/users/preference_update_params.rbi +34 -0
- data/rbi/notiflows/models/users/preferences.rbi +241 -0
- data/rbi/notiflows/models/users/slack_settings.rbi +49 -0
- data/rbi/notiflows/models/users/subscription.rbi +64 -0
- data/rbi/notiflows/models/users/subscription_list_params.rbi +95 -0
- data/rbi/notiflows/models/users/subscription_retrieve_params.rbi +43 -0
- data/rbi/notiflows/models/users/subscription_subscribe_params.rbi +47 -0
- data/rbi/notiflows/models/users/subscription_unsubscribe_params.rbi +43 -0
- data/rbi/notiflows/models/users/update_preferences_request.rbi +124 -0
- data/rbi/notiflows/models.rbi +42 -0
- data/rbi/notiflows/request_options.rbi +59 -0
- data/rbi/notiflows/resources/deliveries.rbi +67 -0
- data/rbi/notiflows/resources/notifications.rbi +100 -0
- data/rbi/notiflows/resources/notiflows.rbi +52 -0
- data/rbi/notiflows/resources/topics/subscriptions.rbi +88 -0
- data/rbi/notiflows/resources/topics.rbi +69 -0
- data/rbi/notiflows/resources/users/channel_settings.rbi +104 -0
- data/rbi/notiflows/resources/users/deliveries.rbi +69 -0
- data/rbi/notiflows/resources/users/notifications.rbi +66 -0
- data/rbi/notiflows/resources/users/preferences.rbi +76 -0
- data/rbi/notiflows/resources/users/subscriptions.rbi +102 -0
- data/rbi/notiflows/resources/users.rbi +147 -0
- data/rbi/notiflows/version.rbi +5 -0
- data/sig/notiflows/client.rbs +41 -0
- data/sig/notiflows/errors.rbs +117 -0
- data/sig/notiflows/file_part.rbs +21 -0
- data/sig/notiflows/internal/cursor_page.rbs +22 -0
- data/sig/notiflows/internal/transport/base_client.rbs +133 -0
- data/sig/notiflows/internal/transport/pooled_net_requester.rbs +48 -0
- data/sig/notiflows/internal/type/array_of.rbs +48 -0
- data/sig/notiflows/internal/type/base_model.rbs +102 -0
- data/sig/notiflows/internal/type/base_page.rbs +24 -0
- data/sig/notiflows/internal/type/boolean.rbs +26 -0
- data/sig/notiflows/internal/type/converter.rbs +79 -0
- data/sig/notiflows/internal/type/enum.rbs +32 -0
- data/sig/notiflows/internal/type/file_input.rbs +25 -0
- data/sig/notiflows/internal/type/hash_of.rbs +48 -0
- data/sig/notiflows/internal/type/request_parameters.rbs +19 -0
- data/sig/notiflows/internal/type/union.rbs +52 -0
- data/sig/notiflows/internal/type/unknown.rbs +26 -0
- data/sig/notiflows/internal/util.rbs +185 -0
- data/sig/notiflows/internal.rbs +9 -0
- data/sig/notiflows/models/delivery.rbs +130 -0
- data/sig/notiflows/models/delivery_list_params.rbs +77 -0
- data/sig/notiflows/models/delivery_retrieve_params.rbs +15 -0
- data/sig/notiflows/models/notification.rbs +104 -0
- data/sig/notiflows/models/notification_list_deliveries_params.rbs +77 -0
- data/sig/notiflows/models/notification_list_params.rbs +70 -0
- data/sig/notiflows/models/notification_retrieve_params.rbs +15 -0
- data/sig/notiflows/models/notiflow_run_params.rbs +199 -0
- data/sig/notiflows/models/notiflow_run_response.rbs +13 -0
- data/sig/notiflows/models/topic.rbs +15 -0
- data/sig/notiflows/models/topic_delete_params.rbs +15 -0
- data/sig/notiflows/models/topic_list_params.rbs +38 -0
- data/sig/notiflows/models/topic_retrieve_params.rbs +15 -0
- data/sig/notiflows/models/topics/bulk_operation_response.rbs +39 -0
- data/sig/notiflows/models/topics/bulk_subscribe_request.rbs +15 -0
- data/sig/notiflows/models/topics/subscription_list_params.rbs +58 -0
- data/sig/notiflows/models/topics/subscription_subscribe_bulk_params.rbs +17 -0
- data/sig/notiflows/models/topics/subscription_unsubscribe_bulk_params.rbs +17 -0
- data/sig/notiflows/models/user.rbs +75 -0
- data/sig/notiflows/models/user_delete_params.rbs +15 -0
- data/sig/notiflows/models/user_list_params.rbs +56 -0
- data/sig/notiflows/models/user_retrieve_params.rbs +15 -0
- data/sig/notiflows/models/user_upsert_params.rbs +112 -0
- data/sig/notiflows/models/users/channel_setting_delete_params.rbs +26 -0
- data/sig/notiflows/models/users/channel_setting_retrieve_params.rbs +26 -0
- data/sig/notiflows/models/users/channel_setting_update_params.rbs +42 -0
- data/sig/notiflows/models/users/channel_settings.rbs +68 -0
- data/sig/notiflows/models/users/delivery_list_params.rbs +79 -0
- data/sig/notiflows/models/users/delivery_retrieve_params.rbs +26 -0
- data/sig/notiflows/models/users/mobile_push_settings.rbs +15 -0
- data/sig/notiflows/models/users/notification_list_params.rbs +72 -0
- data/sig/notiflows/models/users/notification_retrieve_params.rbs +26 -0
- data/sig/notiflows/models/users/preference_retrieve_params.rbs +17 -0
- data/sig/notiflows/models/users/preference_update_params.rbs +17 -0
- data/sig/notiflows/models/users/preferences.rbs +118 -0
- data/sig/notiflows/models/users/slack_settings.rbs +24 -0
- data/sig/notiflows/models/users/subscription.rbs +32 -0
- data/sig/notiflows/models/users/subscription_list_params.rbs +58 -0
- data/sig/notiflows/models/users/subscription_retrieve_params.rbs +26 -0
- data/sig/notiflows/models/users/subscription_subscribe_params.rbs +25 -0
- data/sig/notiflows/models/users/subscription_unsubscribe_params.rbs +26 -0
- data/sig/notiflows/models/users/update_preferences_request.rbs +52 -0
- data/sig/notiflows/models.rbs +39 -0
- data/sig/notiflows/request_options.rbs +34 -0
- data/sig/notiflows/resources/deliveries.rbs +24 -0
- data/sig/notiflows/resources/notifications.rbs +36 -0
- data/sig/notiflows/resources/notiflows.rbs +16 -0
- data/sig/notiflows/resources/topics/subscriptions.rbs +31 -0
- data/sig/notiflows/resources/topics.rbs +23 -0
- data/sig/notiflows/resources/users/channel_settings.rbs +28 -0
- data/sig/notiflows/resources/users/deliveries.rbs +28 -0
- data/sig/notiflows/resources/users/notifications.rbs +27 -0
- data/sig/notiflows/resources/users/preferences.rbs +21 -0
- data/sig/notiflows/resources/users/subscriptions.rbs +37 -0
- data/sig/notiflows/resources/users.rbs +52 -0
- data/sig/notiflows/version.rbs +3 -0
- 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
|