cpaas-sdk 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CHANGELOG.md +11 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.md +1 -0
  8. data/README.md +25 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/cpaas-sdk.gemspec +32 -0
  13. data/docs/Cpaas.html +446 -0
  14. data/docs/Cpaas/Conversation.html +1742 -0
  15. data/docs/Cpaas/Notification.html +301 -0
  16. data/docs/Cpaas/TwoFactor.html +908 -0
  17. data/docs/_index.html +146 -0
  18. data/docs/_index.md +21 -0
  19. data/docs/class_list.html +51 -0
  20. data/docs/css/common.css +1 -0
  21. data/docs/css/full_list.css +58 -0
  22. data/docs/css/style.css +496 -0
  23. data/docs/file.README.html +102 -0
  24. data/docs/file._index.html +94 -0
  25. data/docs/file_list.html +56 -0
  26. data/docs/frames.html +17 -0
  27. data/docs/index.html +94 -0
  28. data/docs/js/app.js +303 -0
  29. data/docs/js/full_list.js +216 -0
  30. data/docs/js/jquery.js +4 -0
  31. data/docs/method_list.html +251 -0
  32. data/docs/mv_index.html +102 -0
  33. data/docs/top-level-namespace.html +663 -0
  34. data/examples/2fa/.env.example +6 -0
  35. data/examples/2fa/.gitignore +159 -0
  36. data/examples/2fa/.ruby-gemset +1 -0
  37. data/examples/2fa/.ruby-version +1 -0
  38. data/examples/2fa/Gemfile +8 -0
  39. data/examples/2fa/README.md +34 -0
  40. data/examples/2fa/app.rb +134 -0
  41. data/examples/2fa/config.ru +10 -0
  42. data/examples/2fa/helper.rb +37 -0
  43. data/examples/2fa/public/stylesheets/forms.css +28 -0
  44. data/examples/2fa/public/stylesheets/global.css +7 -0
  45. data/examples/2fa/public/stylesheets/layout.css +45 -0
  46. data/examples/2fa/public/stylesheets/main.css +3 -0
  47. data/examples/2fa/views/alert.erb +5 -0
  48. data/examples/2fa/views/dashboard.erb +4 -0
  49. data/examples/2fa/views/index.erb +17 -0
  50. data/examples/2fa/views/login.erb +13 -0
  51. data/examples/2fa/views/verify.erb +8 -0
  52. data/examples/sms/.env.example +4 -0
  53. data/examples/sms/.gitignore +159 -0
  54. data/examples/sms/.ruby-gemset +1 -0
  55. data/examples/sms/.ruby-version +1 -0
  56. data/examples/sms/Gemfile +8 -0
  57. data/examples/sms/README.md +80 -0
  58. data/examples/sms/app.rb +87 -0
  59. data/examples/sms/config.ru +10 -0
  60. data/examples/sms/helper.rb +33 -0
  61. data/examples/sms/public/scripts/notification.js +46 -0
  62. data/examples/sms/public/stylesheets/forms.css +28 -0
  63. data/examples/sms/public/stylesheets/global.css +7 -0
  64. data/examples/sms/public/stylesheets/layout.css +74 -0
  65. data/examples/sms/public/stylesheets/main.css +3 -0
  66. data/examples/sms/views/alert.erb +5 -0
  67. data/examples/sms/views/index.erb +48 -0
  68. data/lib/cpaas-sdk.rb +30 -0
  69. data/lib/cpaas-sdk/api.rb +139 -0
  70. data/lib/cpaas-sdk/config.rb +9 -0
  71. data/lib/cpaas-sdk/resources.rb +4 -0
  72. data/lib/cpaas-sdk/resources/conversation.rb +268 -0
  73. data/lib/cpaas-sdk/resources/notification.rb +62 -0
  74. data/lib/cpaas-sdk/resources/notification_channel.rb +39 -0
  75. data/lib/cpaas-sdk/resources/twofactor.rb +136 -0
  76. data/lib/cpaas-sdk/util.rb +93 -0
  77. data/lib/cpaas-sdk/version.rb +3 -0
  78. data/tutorials/2FA.md +109 -0
  79. data/tutorials/2fa-flow.png +0 -0
  80. data/tutorials/GetStarted.md +86 -0
  81. data/tutorials/SMSMessaging.md +132 -0
  82. data/tutorials/index.html +86 -0
  83. data/tutorials/quickstarts.yml +15 -0
  84. metadata +238 -0
Binary file
@@ -0,0 +1,86 @@
1
+ # Get Started
2
+
3
+ In this quickstart, we will help you dip your toes in before you dive in. This guide will help you get started with the $KANDY$ Ruby SDK.
4
+
5
+ ## Using the SDK
6
+
7
+ To begin, you will need to install the ruby library in your application. The library can be installed by using the following ways:
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cpaas-ruby'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ ```bash
18
+ bundle
19
+ ```
20
+
21
+ Or install it yourself as:
22
+ ```bash
23
+ gem install cpaas-ruby
24
+ ```
25
+
26
+ In your application, you simply need to create a new initializer `config/initializers/cpaas.rb`.
27
+
28
+ ```ruby
29
+ # Call the configure method
30
+ Cpaas.configure do |config|
31
+ # Configuration
32
+ end
33
+ ```
34
+
35
+ After you've configured the SDK client, you can begin playing around with it to learn its functionality and see how it fits in your application. The API reference documentation will help to explain the details of the available features.
36
+
37
+ ## Configuration
38
+
39
+ ```ruby
40
+ Cpaas.configure do |config|
41
+ config.client_id = '<private project key>'
42
+ config.client_secret = '<private project secret>'
43
+ config.base_url = '$KANDYFQDN$'
44
+ end
45
+ ```
46
+
47
+ The information required to be authenticated should be under:
48
+
49
+ + `Projects` -> `{your project}` -> `Project info`/`Project secret`
50
+
51
+ > + `Private Project key` should be mapped to `client_id`
52
+ > + `Private Project secret` should be mapped to `client_secret`
53
+
54
+ ## Usage
55
+
56
+ All modules can be accessed via the client instance. All method invocations follow the namespaced signature
57
+
58
+ `{Client}::{ModuleName}.{method_name}(params)`
59
+
60
+ Example:
61
+
62
+ ```ruby
63
+ Cpaas::Conversation.create_message(params)
64
+ ```
65
+
66
+ ## Default Error Response
67
+
68
+ ### Format
69
+
70
+ ```ruby
71
+ {
72
+ name: '<exception type>',
73
+ exception_id: '<exception id/code>',
74
+ message: '<exception message>'
75
+ }
76
+ ```
77
+
78
+ ### Example
79
+
80
+ ```ruby
81
+ {
82
+ name: 'serviceException',
83
+ exception_id: 'SVC0002',
84
+ message: 'Invalid input value for message part address'
85
+ }
86
+ ```
@@ -0,0 +1,132 @@
1
+ # SMS Messaging
2
+ In this section we will send an SMS to a mobile phone, then investigate how to receive incoming SMS messages.
3
+
4
+ ## Send SMS
5
+ Let's assume that you want to send SMS to +16131234567 using +16139998877 as sender address, saying "hi :)":
6
+
7
+ ```ruby
8
+ Cpaas::Conversation.create_message({
9
+ type: Cpaas::Conversation.types[:SMS],
10
+ destination_address: '+16131234567',
11
+ sender_address: '+16139998877',
12
+ message: 'hi :)'
13
+ })
14
+ ```
15
+ Before moving to how the response body looks, let's walk through the highlights on the SMS request:
16
+
17
+ + `sender_address` indicates which DID number that user desires to send the SMS from. It is expected to be an E.164 formatted number.
18
+ + If `sender_address` field contains `default` keyword, $KANDY$ discovers the default assigned SMS DID number for that user and utilizes it as the sender address.
19
+ + `destination_address` can either be an array of phone numbers or a single phone number string within the params containing the destinations that corresponding SMS message will be sent. For v1, only one destination is supported on $KANDY$.
20
+ + Address value needs to contain a phone number, ideally in E.164 format. Some valid formats are:
21
+ - +16131234567
22
+ - 6131234567
23
+ - tel:+16131234567
24
+ - sip:+16131234567@domain
25
+ - sip:6131234567@domain
26
+ + `message` field contains the text message in `UTF-8` encoded format.
27
+
28
+ > The number provided in `sender_address` field should be an assigned/purchased number for the user, otherwise $KANDY$ replies back with a Forbidden error.
29
+
30
+ Now, let's check the successful response:
31
+
32
+ ```ruby
33
+ {
34
+ delivery_info: [{
35
+ destination_address: '+16131234567',
36
+ delivery_status: 'DeliveredToNetwork'
37
+ }],
38
+ message: 'hi :)',
39
+ sender_address: '+16139998877'
40
+ }
41
+ ```
42
+ In case of requesting `default` sender_address usage, sender_address field in response can be used to understand the actual number used since it contains the number being used as from address.
43
+
44
+ > + The delivery_status can have the following values `DeliveredToNetwork`, `DeliveryImpossible`
45
+
46
+
47
+ ## Receive SMS
48
+ To receive SMS, you need to:
49
+
50
+ + have a SMS capable DID number assigned and configured on $KANDY$
51
+ + subscribe to inbound SMS
52
+
53
+ ### Step 1: Subscription
54
+ You subscribe to receive inbound SMS:
55
+
56
+ ```ruby
57
+ Cpaas::Conversation.subscribe({
58
+ type: Cpaas::Conversation.types[:SMS],
59
+ webhook_url: 'https://myapp.com/inbound-sms/webhook',
60
+ destination_address: '+16139998877'
61
+ })
62
+ ```
63
+ + `destination_address` is an optional parameter to indicate which SMS DID number has been desired to receive SMS messages. Corresponding number should be one of the assigned/purchased numbers of the user or project/application, otherwise $KANDY$ replies back with Forbidden error. Also not providing this parameter triggers $KANDY$ to use the default assigned DID number against this user, in which case the response message for the subscription contains the `destination_address` field. It is highly recommended to provide `destination_address` parameter.
64
+ + `webhook_url` is a webhook that is present in your application which is accessible from the public web. The sms notifications would be delivered to the webhook and the received notification can be consumed by using the `Cpaas::Notification.parse` helper method. The usage of `Cpaas::Notification.parse` is explained in Step 2.
65
+
66
+ A successful subscription would return:
67
+ ```ruby
68
+ {
69
+ webhook_url: 'https://myapp.com/inbound-sms/webhook',
70
+ destination_address: '+16139998877'
71
+ subscription_id: '544f12a3-123ad5e-b169'
72
+ }
73
+ ```
74
+
75
+ > + For every number required to receive incoming SMS, there should be an individual subscription.
76
+ > + When a number has been unassigned from a user or project/application, all corresponding inbound SMS subscriptions are cancelled and `sms_subscription_cancellation_notification` notification is sent.
77
+
78
+ Now, you are ready to receive inbound SMS messages via webhook, for example - 'https://myapp.com/inbound-sms/webhook'.
79
+
80
+ ### Step 2: Receiving notification
81
+ An inbound SMS notification via webhook can be parsed by using the `Cpaas::Notification.parse` method:
82
+
83
+ ```ruby
84
+ def webhook(inbound_notification)
85
+ parsed_Response = Cpaas::Notification.parse(inbound_notification)
86
+ end
87
+ ```
88
+ The parsed response returned from the `Cpaas::Notification.parse` method can look like this:
89
+ ```ruby
90
+ {
91
+ date_time: 1568889113850,
92
+ destination_address: '+15202241139',
93
+ message: 'hi :)',
94
+ message_id: 'SM1-1568889114-1020821-00-66406cba',
95
+ sender_address: '+12066417772',
96
+ notification_id: '5ceb215a-163e-44f8-bbe2-d372d227ef44',
97
+ notification_date_time: 1568889114122,
98
+ type: 'inbound'
99
+ }
100
+ ```
101
+
102
+ ## Real-time outbound SMS sync
103
+ $KANDY$ provides notification for outbound SMS messages, to sync all online clients up-to-date in real time. The outbound notification received can also be parsed by using the `Cpaas::Notification.parse` method:
104
+
105
+ ```ruby
106
+ def webhook(outbound_notification)
107
+ parsed_response = Cpaas::Notification.parse(outbound_notification)
108
+ end
109
+ ```
110
+ The parsed response returned from the `Cpaas::Notification.parse` method can look like this:
111
+
112
+ ```ruby
113
+ {
114
+ date_time: 1569218381777,
115
+ destination_address: '+12533751556',
116
+ message: 'hi',
117
+ message_id: 'SM1-1569218382-1020821-10-d042a653',
118
+ sender_address: '+13162158074',
119
+ notification_id: 'fa1fd235-2042-4273-889e-904b0c6e58c5',
120
+ notification_date_time: 1569218381182,
121
+ type: 'outbound'
122
+ }
123
+ ```
124
+ With the help of this notification, clients can sync their view on sent SMS messages in real-time.
125
+
126
+ > In order to receive this notification, user should have inbound SMS subscription. Obviously this notification cannot be provided when only send SMS has been used without an SMS related subscription.
127
+
128
+ > For trial users, maximum number of SMS messages stored is 1000. When new messages are inserted to history, oldest ones are being removed.
129
+
130
+
131
+ ## References
132
+ For all SMS related method details, refer to [SMS](/developer/references/ruby/1.0.0#sms-send).
@@ -0,0 +1,86 @@
1
+ <!DOCTYPE>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
+ <title>Node.js SDK Tutorials</title>
7
+ <link rel="stylesheet" href="https://unpkg.com/docute@4/dist/docute.css">
8
+ </head>
9
+ <body>
10
+ <div id="docute"></div>
11
+ <script src="https://unpkg.com/docute@4/dist/docute.js"></script>
12
+ <script src="//cdn.jsdelivr.net/remarkable/1.7.1/remarkable.min.js"></script>
13
+ <script>
14
+ const sidebar = [{
15
+ title: "Tutorials",
16
+ links: [
17
+ {
18
+ title: 'Get Started',
19
+ link: 'GetStarted'
20
+ },
21
+ {
22
+ title: 'SMS Messaging',
23
+ link: 'SMSMessaging'
24
+ },
25
+ {
26
+ title: 'Two-Factor Authentication',
27
+ link: '2FA'
28
+ },
29
+ ]
30
+ }]
31
+ const queryParams = new URLSearchParams(window.location.search);
32
+ new Docute({
33
+ target: '#docute',
34
+ sidebar,
35
+ plugins: [
36
+ {
37
+ name: 'Hide Front Matter',
38
+ extend(api) {
39
+ api.processMarkdown(md => md.replace(/---([^]*?)---/m, ''))
40
+ }
41
+ },
42
+ {
43
+ name: 'Convert KANDYFQDN',
44
+ extend(api) {
45
+ const kandyFQDN = queryParams.get('KANDYFQDN') || '$KANDYFQDN$'
46
+ api.processMarkdown(md => md.replace(/\$KANDYFQDN\$/gm, kandyFQDN))
47
+ }
48
+ },
49
+ {
50
+ name: 'Convert KANDY',
51
+ extend(api) {
52
+ const kandy = queryParams.get('KANDY') || '$KANDY$'
53
+ api.processMarkdown(md => md.replace(/\$KANDY\$/gm, kandy))
54
+ }
55
+ },
56
+ {
57
+ // This is required so that docute/vue don't mangle
58
+ // the codepen form.
59
+ name: 'Unescape HTML',
60
+ extend(api) {
61
+ // This hook will wrap the html generated by the markdown
62
+ // in a div that uses vue's "v-html" directive so that the
63
+ // html is not escaped by Vue.
64
+ api.extendMarkdownComponent(component =>{
65
+ const rawHtml = String(component.template)
66
+ // Loop through every line of the markdown to find the codepen form
67
+ // and replace it with a div with the v-html directive and set the form
68
+ // as data for the view so that it gets rendered without being escaped.
69
+ const modifiedHtml = rawHtml.split('\n')
70
+ .map(line => {
71
+ if (line.startsWith('<form action="https://codepen.io/pen/define"')) {
72
+ component.data = () => ({codepenForm: line})
73
+ return '<div v-html="codepenForm"></div>'
74
+ }
75
+ return line
76
+ })
77
+ .join('\n')
78
+ component.template = modifiedHtml
79
+ })
80
+ }
81
+ }
82
+ ]
83
+ })
84
+ </script>
85
+ </body>
86
+ </html>
@@ -0,0 +1,15 @@
1
+ # "Display" data about quickstarts.
2
+ # Information to be displayed on the Quickstarts page.
3
+
4
+ - name: Get Started
5
+ description: This guide will get you started with $KANDY$ REST API Configuration, Authentication & Authorization, and Notification Channels.
6
+ link: /quickstarts/node/GetStarted
7
+
8
+ - name: SMS Messaging
9
+ description: In this section we will send an SMS to a mobile phone, then investigate how to receive delivery receipts and incoming SMS messages.
10
+ link: /quickstarts/node/SMSMessaging
11
+
12
+ - name: 2FA
13
+ description: $KANDY$ provides 2FA (two-factor authentication) API for developers to integrate their user authentication with other means, such as SMS.
14
+ link: /quickstarts/node/2FA
15
+
metadata ADDED
@@ -0,0 +1,238 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cpaas-sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Keepworks
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-11-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.6.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.6.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.9.20
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.20
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.12.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.12.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: jwt
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.2.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.2.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: httparty
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.17'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.17'
125
+ description: SDK to build robust real-time communication applications.
126
+ email:
127
+ - kandy@keepworks.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".travis.yml"
135
+ - CHANGELOG.md
136
+ - Gemfile
137
+ - LICENSE.md
138
+ - README.md
139
+ - Rakefile
140
+ - bin/console
141
+ - bin/setup
142
+ - cpaas-sdk.gemspec
143
+ - docs/Cpaas.html
144
+ - docs/Cpaas/Conversation.html
145
+ - docs/Cpaas/Notification.html
146
+ - docs/Cpaas/TwoFactor.html
147
+ - docs/_index.html
148
+ - docs/_index.md
149
+ - docs/class_list.html
150
+ - docs/css/common.css
151
+ - docs/css/full_list.css
152
+ - docs/css/style.css
153
+ - docs/file.README.html
154
+ - docs/file._index.html
155
+ - docs/file_list.html
156
+ - docs/frames.html
157
+ - docs/index.html
158
+ - docs/js/app.js
159
+ - docs/js/full_list.js
160
+ - docs/js/jquery.js
161
+ - docs/method_list.html
162
+ - docs/mv_index.html
163
+ - docs/top-level-namespace.html
164
+ - examples/2fa/.env.example
165
+ - examples/2fa/.gitignore
166
+ - examples/2fa/.ruby-gemset
167
+ - examples/2fa/.ruby-version
168
+ - examples/2fa/Gemfile
169
+ - examples/2fa/README.md
170
+ - examples/2fa/app.rb
171
+ - examples/2fa/config.ru
172
+ - examples/2fa/helper.rb
173
+ - examples/2fa/public/stylesheets/forms.css
174
+ - examples/2fa/public/stylesheets/global.css
175
+ - examples/2fa/public/stylesheets/layout.css
176
+ - examples/2fa/public/stylesheets/main.css
177
+ - examples/2fa/views/alert.erb
178
+ - examples/2fa/views/dashboard.erb
179
+ - examples/2fa/views/index.erb
180
+ - examples/2fa/views/login.erb
181
+ - examples/2fa/views/verify.erb
182
+ - examples/sms/.env.example
183
+ - examples/sms/.gitignore
184
+ - examples/sms/.ruby-gemset
185
+ - examples/sms/.ruby-version
186
+ - examples/sms/Gemfile
187
+ - examples/sms/README.md
188
+ - examples/sms/app.rb
189
+ - examples/sms/config.ru
190
+ - examples/sms/helper.rb
191
+ - examples/sms/public/scripts/notification.js
192
+ - examples/sms/public/stylesheets/forms.css
193
+ - examples/sms/public/stylesheets/global.css
194
+ - examples/sms/public/stylesheets/layout.css
195
+ - examples/sms/public/stylesheets/main.css
196
+ - examples/sms/views/alert.erb
197
+ - examples/sms/views/index.erb
198
+ - lib/cpaas-sdk.rb
199
+ - lib/cpaas-sdk/api.rb
200
+ - lib/cpaas-sdk/config.rb
201
+ - lib/cpaas-sdk/resources.rb
202
+ - lib/cpaas-sdk/resources/conversation.rb
203
+ - lib/cpaas-sdk/resources/notification.rb
204
+ - lib/cpaas-sdk/resources/notification_channel.rb
205
+ - lib/cpaas-sdk/resources/twofactor.rb
206
+ - lib/cpaas-sdk/util.rb
207
+ - lib/cpaas-sdk/version.rb
208
+ - tutorials/2FA.md
209
+ - tutorials/2fa-flow.png
210
+ - tutorials/GetStarted.md
211
+ - tutorials/SMSMessaging.md
212
+ - tutorials/index.html
213
+ - tutorials/quickstarts.yml
214
+ homepage: https://github.com/Kandy-IO/kandy-cpaas-ruby-sdk
215
+ licenses:
216
+ - SEE LICENSE IN LICENSE.md
217
+ metadata: {}
218
+ post_install_message:
219
+ rdoc_options: []
220
+ require_paths:
221
+ - lib
222
+ required_ruby_version: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ version: '0'
232
+ requirements: []
233
+ rubyforge_project:
234
+ rubygems_version: 2.7.3
235
+ signing_key:
236
+ specification_version: 4
237
+ summary: CPaaS Library
238
+ test_files: []