ngrok-api 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +21 -0
  3. data/.gitignore +13 -0
  4. data/.rubocop.yml +28 -0
  5. data/.rubocop_airbnb.yml +2 -0
  6. data/.simplecov +1 -0
  7. data/Gemfile +33 -0
  8. data/Guardfile +16 -0
  9. data/README.md +61 -0
  10. data/Rakefile +7 -0
  11. data/doc/NgrokAPI/Client.html +542 -0
  12. data/doc/NgrokAPI/Error.html +305 -0
  13. data/doc/NgrokAPI/Errors/NotFoundError.html +309 -0
  14. data/doc/NgrokAPI/Errors.html +115 -0
  15. data/doc/NgrokAPI/HttpClient.html +1104 -0
  16. data/doc/NgrokAPI/Models/ApiKey.html +1138 -0
  17. data/doc/NgrokAPI/Models/EndpointConfiguration.html +1366 -0
  18. data/doc/NgrokAPI/Models/Listable.html +934 -0
  19. data/doc/NgrokAPI/Models/ReservedDomain.html +2498 -0
  20. data/doc/NgrokAPI/Models/TlsCertificate.html +1064 -0
  21. data/doc/NgrokAPI/Models.html +117 -0
  22. data/doc/NgrokAPI/PagedIterator.html +631 -0
  23. data/doc/NgrokAPI/Services/ApiKeysClient.html +1333 -0
  24. data/doc/NgrokAPI/Services/EndpointConfigurationsClient.html +2201 -0
  25. data/doc/NgrokAPI/Services/ReservedDomainsClient.html +2541 -0
  26. data/doc/NgrokAPI/Services/TlsCertificatesClient.html +1417 -0
  27. data/doc/NgrokAPI/Services.html +117 -0
  28. data/doc/NgrokAPI.html +157 -0
  29. data/doc/_index.html +309 -0
  30. data/doc/class_list.html +51 -0
  31. data/doc/css/common.css +1 -0
  32. data/doc/css/full_list.css +58 -0
  33. data/doc/css/style.css +497 -0
  34. data/doc/file.README.html +126 -0
  35. data/doc/file_list.html +56 -0
  36. data/doc/frames.html +17 -0
  37. data/doc/index.html +126 -0
  38. data/doc/js/app.js +314 -0
  39. data/doc/js/full_list.js +216 -0
  40. data/doc/js/jquery.js +4 -0
  41. data/doc/method_list.html +1227 -0
  42. data/doc/top-level-namespace.html +110 -0
  43. data/docs/NgrokAPI/Client.html +542 -0
  44. data/docs/NgrokAPI/Error.html +305 -0
  45. data/docs/NgrokAPI/Errors/NotFoundError.html +309 -0
  46. data/docs/NgrokAPI/Errors.html +115 -0
  47. data/docs/NgrokAPI/HttpClient.html +1104 -0
  48. data/docs/NgrokAPI/Models/ApiKey.html +1138 -0
  49. data/docs/NgrokAPI/Models/EndpointConfiguration.html +1366 -0
  50. data/docs/NgrokAPI/Models/Listable.html +934 -0
  51. data/docs/NgrokAPI/Models/ReservedDomain.html +2498 -0
  52. data/docs/NgrokAPI/Models/TlsCertificate.html +1064 -0
  53. data/docs/NgrokAPI/Models.html +117 -0
  54. data/docs/NgrokAPI/PagedIterator.html +631 -0
  55. data/docs/NgrokAPI/Services/ApiKeysClient.html +1333 -0
  56. data/docs/NgrokAPI/Services/EndpointConfigurationsClient.html +2201 -0
  57. data/docs/NgrokAPI/Services/ReservedDomainsClient.html +2541 -0
  58. data/docs/NgrokAPI/Services/TlsCertificatesClient.html +1417 -0
  59. data/docs/NgrokAPI/Services.html +117 -0
  60. data/docs/NgrokAPI.html +157 -0
  61. data/docs/_index.html +309 -0
  62. data/docs/class_list.html +51 -0
  63. data/docs/css/common.css +1 -0
  64. data/docs/css/full_list.css +58 -0
  65. data/docs/css/style.css +497 -0
  66. data/docs/file.README.html +126 -0
  67. data/docs/file_list.html +56 -0
  68. data/docs/frames.html +17 -0
  69. data/docs/index.html +126 -0
  70. data/docs/js/app.js +314 -0
  71. data/docs/js/full_list.js +216 -0
  72. data/docs/js/jquery.js +4 -0
  73. data/docs/method_list.html +1227 -0
  74. data/docs/top-level-namespace.html +110 -0
  75. data/lib/ngrokapi/client.rb +49 -0
  76. data/lib/ngrokapi/error.rb +14 -0
  77. data/lib/ngrokapi/errors/not_found_error.rb +16 -0
  78. data/lib/ngrokapi/http_client.rb +132 -0
  79. data/lib/ngrokapi/models/api_key.rb +64 -0
  80. data/lib/ngrokapi/models/endpoint_configuration.rb +119 -0
  81. data/lib/ngrokapi/models/listable.rb +42 -0
  82. data/lib/ngrokapi/models/reserved_domain.rb +211 -0
  83. data/lib/ngrokapi/models/tls_certificate.rb +62 -0
  84. data/lib/ngrokapi/paged_iterator.rb +40 -0
  85. data/lib/ngrokapi/services/api_keys_client.rb +144 -0
  86. data/lib/ngrokapi/services/endpoint_configurations_client.rb +313 -0
  87. data/lib/ngrokapi/services/reserved_domains_client.rb +313 -0
  88. data/lib/ngrokapi/services/tls_certificates_client.rb +161 -0
  89. data/lib/ngrokapi/version.rb +7 -0
  90. data/lib/ngrokapi.rb +13 -0
  91. data/ngrok-api.gemspec +27 -0
  92. data/spec/ngrokapi/client_spec.rb +33 -0
  93. data/spec/ngrokapi/http_client_spec.rb +75 -0
  94. data/spec/ngrokapi/models/api_key_spec.rb +43 -0
  95. data/spec/ngrokapi/models/listable_spec.rb +43 -0
  96. data/spec/ngrokapi/models/reserved_domain_spec.rb +100 -0
  97. data/spec/ngrokapi/paged_iterator_spec.rb +84 -0
  98. data/spec/ngrokapi/services/api_keys_client_spec.rb +127 -0
  99. data/spec/spec_helper.rb +80 -0
  100. metadata +144 -0
@@ -0,0 +1,110 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.26
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Top Level Namespace
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ </div>
80
+
81
+ <h2>Defined Under Namespace</h2>
82
+ <p class="children">
83
+
84
+
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="NgrokAPI.html" title="NgrokAPI (module)">NgrokAPI</a></span>
86
+
87
+
88
+
89
+
90
+ </p>
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ </div>
101
+
102
+ <div id="footer">
103
+ Generated on Fri Sep 24 19:20:29 2021 by
104
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
+ 0.9.26 (ruby-3.0.1).
106
+ </div>
107
+
108
+ </div>
109
+ </body>
110
+ </html>
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ ##
5
+ # Low-level api client for communicating with Ngrok's HTTP API.
6
+ # Use this object to instantiate your clients.
7
+ class Client
8
+ def initialize(
9
+ api_key:,
10
+ base_url: 'https://api.ngrok.com'
11
+ )
12
+ @client = NgrokAPI::HttpClient.new(api_key: api_key, base_url: base_url)
13
+ end
14
+
15
+ ##
16
+ # Creates and returns an instance of a NgrokAPI::Services::ApiKeysClient
17
+ #
18
+ # @return [NgrokAPI::Services::ApiKeysClient]
19
+ def api_keys
20
+ @_api_keys ||= NgrokAPI::Services::ApiKeysClient.new(client: @client)
21
+ end
22
+
23
+ ##
24
+ # Creates and returns an instance of a NgrokAPI::Services::EndpointConfigurationsClient
25
+ #
26
+ # @return [NgrokAPI::Services::EndpointConfigurationsClient]
27
+ def endpoint_configurations
28
+ @_endpoint_configurations ||= NgrokAPI::Services::EndpointConfigurationsClient.new(
29
+ client: @client
30
+ )
31
+ end
32
+
33
+ ##
34
+ # Creates and returns an instance of a NgrokAPI::Services::ReservedDomainsClient
35
+ #
36
+ # @return [NgrokAPI::Services::ReservedDomainsClient]
37
+ def reserved_domains
38
+ @_reserved_domains ||= NgrokAPI::Services::ReservedDomainsClient.new(client: @client)
39
+ end
40
+
41
+ ##
42
+ # Creates and returns an instance of a NgrokAPI::Services::TlsCertificatesClient
43
+ #
44
+ # @return [NgrokAPI::Services::TlsCertificatesClient]
45
+ def tls_certificates
46
+ @_tls_certificates ||= NgrokAPI::Services::TlsCertificatesClient.new(client: @client)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ ##
5
+ # Base Error class for all Ngrok Errors
6
+ class Error < StandardError
7
+ attr_reader :response
8
+
9
+ def initialize(msg: "An error occurred with the NgrokAPI", response: nil)
10
+ @response = response
11
+ super(msg)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ module Errors
5
+ ##
6
+ # Error representing a 404 not found
7
+ class NotFoundError < NgrokAPI::Error
8
+ attr_reader :response
9
+
10
+ def initialize(msg: "Resource not found", response: nil)
11
+ @response = response
12
+ super(msg: msg, response: response)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ ##
5
+ # Low-level api client for communicating with Ngrok's HTTP API using HTTP. You should not have
6
+ # to use this class directly, but use the individual clients to make your API calls.
7
+ class HttpClient
8
+ attr_reader :api_key,
9
+ :base_url
10
+
11
+ def initialize(
12
+ api_key:,
13
+ base_url: 'https://api.ngrok.com'
14
+ )
15
+ @api_key = api_key
16
+ @base_url = base_url
17
+ end
18
+
19
+ ##
20
+ # Make a DELETE request to a given URI
21
+ #
22
+ # @param [string] path URL resource path.
23
+ # @param [boolean] danger determine if we should throw an exception on 404 or not
24
+ # @return [nil]
25
+ def delete(path, danger: false)
26
+ uri = get_uri(path)
27
+ req = Net::HTTP::Delete.new(uri, headers)
28
+ json_do(uri, req, danger: danger)
29
+ end
30
+
31
+ ##
32
+ # Make a GET request to a given URI with optional data
33
+ #
34
+ # @param [string] path URL resource path
35
+ # @param [boolean] danger determine if we should throw an exception on 404 or not
36
+ # @param [hash] data hash which will be converted to query parameters or form data
37
+ # @return [json] response body
38
+ def get(path, danger: false, data: {})
39
+ uri = get_uri(path, data: data)
40
+ req = Net::HTTP::Get.new(uri, headers)
41
+ json_do(uri, req, danger: danger)
42
+ end
43
+
44
+ ##
45
+ # Make a GET request
46
+ #
47
+ # @param [string] before_id URL resource path
48
+ # @param [integer] limit URL resource path
49
+ # @param [string] path resource path, mutually exclusive with url
50
+ # @param [string] url Full URL of the resource, mutually exclusive with path
51
+ # @return [json] response body
52
+ def list(before_id: nil, limit: nil, path: nil, url: nil)
53
+ if url
54
+ get(url)
55
+ else
56
+ data = {}
57
+ data[:before_id] = before_id if before_id
58
+ data[:limit] = limit if limit
59
+ get(path, data: data)
60
+ end
61
+ end
62
+
63
+ ##
64
+ # Make a PATCH request to a given URI with optional data
65
+ #
66
+ # @param [string] path URL resource path
67
+ # @param [boolean] danger determine if we should throw an exception on 404 or not
68
+ # @param [hash] data hash which will be converted to query parameters or form data
69
+ # @return [json] response body
70
+ def patch(path, danger: false, data: {})
71
+ uri = get_uri(path)
72
+ req = Net::HTTP::Patch.new(uri, headers_with_json)
73
+ json_do(uri, req, danger: danger, data: data.to_json)
74
+ end
75
+
76
+ ##
77
+ # Make a POST request to a given URI with optional data
78
+ #
79
+ # @param [string] path URL resource path
80
+ # @param [boolean] danger determine if we should throw an exception on 404 or not
81
+ # @param [hash] data hash which will be converted to query parameters or form data
82
+ # @return [json] response body
83
+ def post(path, danger: false, data: {})
84
+ uri = get_uri(path)
85
+ req = Net::HTTP::Post.new(uri, headers_with_json)
86
+ json_do(uri, req, danger: danger, data: data.to_json)
87
+ end
88
+
89
+ private
90
+
91
+ def headers
92
+ {
93
+ 'Authorization': "Bearer #{@api_key}",
94
+ 'Ngrok-Version': '2',
95
+ }
96
+ end
97
+
98
+ def headers_with_json
99
+ headers.merge({ 'Content-Type': 'application/json' })
100
+ end
101
+
102
+ def json_do(uri, req, danger: false, data: nil)
103
+ resp = Net::HTTP.start(uri.hostname, uri.port, req_options(uri)) do |http|
104
+ http.request(req, data)
105
+ end
106
+ if danger
107
+ if resp.code.to_i == 404
108
+ raise NgrokAPI::Errors::NotFoundError.new(response: resp)
109
+ elsif resp.code.to_i >= 400
110
+ raise NgrokAPI::Error.new(response: resp)
111
+ end
112
+ end
113
+ if resp.body && resp.body != ''
114
+ JSON.parse(resp.body)
115
+ end
116
+ end
117
+
118
+ def req_options(uri)
119
+ { use_ssl: uri.scheme == 'https' }
120
+ end
121
+
122
+ def get_uri(path, data: nil)
123
+ data = (!data.nil? && data != {}) ? "?#{URI.encode_www_form(data)}" : ""
124
+ URI("#{url(path)}#{data}")
125
+ end
126
+
127
+ def url(path)
128
+ path = path.delete_prefix(@base_url)
129
+ "#{@base_url}#{path}"
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ module Models
5
+ ##
6
+ # A resource representing data from the api_keys API
7
+ class ApiKey
8
+ attr_reader :id,
9
+ :client,
10
+ :created_at,
11
+ :description,
12
+ :metadata,
13
+ :result,
14
+ :token,
15
+ :uri
16
+
17
+ def initialize(client:, result:)
18
+ @client = client
19
+ @result = result
20
+ @created_at = @result['created_at']
21
+ @id = @result['id']
22
+ @description = @result['description']
23
+ @metadata = @result['metadata']
24
+ @token = @result['token']
25
+ @uri = @result['uri']
26
+ end
27
+
28
+ def ==(other)
29
+ @result == other.result
30
+ end
31
+
32
+ def to_s
33
+ @result.to_s
34
+ end
35
+
36
+ ##
37
+ # Delete this API key.
38
+ #
39
+ # @return [nil] result from delete request
40
+ #
41
+ # https://ngrok.com/docs/api#api-api-keys-delete
42
+ def delete
43
+ @client.delete(id: @id)
44
+ end
45
+
46
+ # rubocop:disable LineLength
47
+
48
+ ##
49
+ # Update the attributes of this API key.
50
+ #
51
+ # @param [string] description human-readable description of what uses the API key to authenticate. optional, max 255 bytes.
52
+ # @param [string] metadata arbitrary user-defined data of this API key. optional, max 4096 bytes
53
+ # @return [NgrokAPI::Models::ApiKey] result from update request
54
+ #
55
+ # https://ngrok.com/docs/api#api-api-keys-update
56
+ def update(description: nil, metadata: nil)
57
+ @description = description if description
58
+ @metadata = metadata if metadata
59
+ @client.update(id: @id, description: description, metadata: metadata)
60
+ end
61
+ # rubocop:enable LineLength
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ module Models
5
+ ##
6
+ # A resource representing data from the endpoint_configuration API
7
+ class EndpointConfiguration
8
+ attr_reader :id,
9
+ :client,
10
+ :created_at,
11
+ :description,
12
+ :metadata,
13
+ :result,
14
+ :uri
15
+
16
+ def initialize(client:, result:)
17
+ @client = client
18
+ @result = result
19
+ @created_at = @result['created_at']
20
+ @id = @result['id']
21
+ @description = @result['description']
22
+ @metadata = @result['metadata']
23
+ @uri = @result['uri']
24
+ end
25
+
26
+ def ==(other)
27
+ @result == other.result
28
+ end
29
+
30
+ def to_s
31
+ @result.to_s
32
+ end
33
+
34
+ ##
35
+ # Delete this endpoint configuration.
36
+ #
37
+ # @return [nil] result from delete request
38
+ #
39
+ # https://ngrok.com/docs/api#api-endpoint-configurations-delete
40
+ def delete
41
+ @client.delete(id: @id)
42
+ end
43
+
44
+ # rubocop:disable LineLength
45
+
46
+ ##
47
+ # Update this endpoint configuration. If a module is not specified in the update, it will not be modified.
48
+ # However, each module configuration that is specified will completely replace the existing value.
49
+ # There is no way to delete an existing module via this API, instead use the delete module API.
50
+ #
51
+ # @param [string] description human-readable description of what this endpoint configuration will be do when applied or what traffic it will be applied to. Optional, max 255 bytes
52
+ # @param [string] metadata arbitrary user-defined machine-readable data of this endpoint configuration. Optional, max 4096 bytes.
53
+ # @param [string] circuit_breaker circuit breaker module configuration
54
+ # @param [string] compression compression module configuration
55
+ # @param [string] request_headers request headers module configuration
56
+ # @param [string] response_headers response headers module configuration
57
+ # @param [string] ip_policy ip policy module configuration
58
+ # @param [string] mutual_tls mutual TLS module configuration
59
+ # @param [string] tls_termination TLS termination module configuration
60
+ # @param [string] webhook_validation webhook validation module configuration
61
+ # @param [string] oauth oauth module configuration
62
+ # @param [string] logging logging module configuration
63
+ # @param [string] saml saml module configuration
64
+ # @param [string] oidc oidc module configuration
65
+ # @return [NgrokAPI::Models::EndpointConfiguration] result from update request
66
+ #
67
+ # https://ngrok.com/docs/api#api-endpoint-configurations-update
68
+ def update(
69
+ description: nil,
70
+ metadata: nil,
71
+ circuit_breaker: nil,
72
+ compression: nil,
73
+ request_headers: nil,
74
+ response_headers: nil,
75
+ ip_policy: nil,
76
+ mutual_tls: nil,
77
+ tls_termination: nil,
78
+ webhook_validation: nil,
79
+ oauth: nil,
80
+ logging: nil,
81
+ saml: nil,
82
+ oidc: nil
83
+ )
84
+ @description = description if description
85
+ @metadata = metadata if metadata
86
+ @circuit_breaker = circuit_breaker if circuit_breaker
87
+ @compression = compression if compression
88
+ @request_headers = request_headers if request_headers
89
+ @response_headers = response_headers if response_headers
90
+ @ip_policy = ip_policy if ip_policy
91
+ @mutual_tls = mutual_tls if mutual_tls
92
+ @tls_termination = tls_termination if tls_termination
93
+ @webhook_validation = webhook_validation if webhook_validation
94
+ @oauth = oauth if oauth
95
+ @logging = logging if logging
96
+ @saml = saml if saml
97
+ @oidc = oidc if oidc
98
+ @client.update(
99
+ id: @id,
100
+ description: description,
101
+ metadata: metadata,
102
+ circuit_breaker: circuit_breaker,
103
+ compression: compression,
104
+ request_headers: request_headers,
105
+ response_headers: response_headers,
106
+ ip_policy: ip_policy,
107
+ mutual_tls: mutual_tls,
108
+ tls_termination: tls_termination,
109
+ webhook_validation: webhook_validation,
110
+ oauth: oauth,
111
+ logging: logging,
112
+ saml: saml,
113
+ oidc: oidc
114
+ )
115
+ end
116
+ # rubocop:enable LineLength
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module NgrokAPI
4
+ module Models
5
+ ##
6
+ # A resource representing multiple instances from a given "list" API call
7
+ class Listable
8
+ attr_reader :client,
9
+ :klass,
10
+ :iter,
11
+ :items,
12
+ :list_property,
13
+ :next_page_uri,
14
+ :result,
15
+ :uri
16
+
17
+ def initialize(client:, result:, list_property:, klass:)
18
+ @client = client
19
+ @result = result
20
+ @list_property = list_property
21
+ @next_page_uri = @result['next_page_uri']
22
+ @uri = @result['uri']
23
+ @items = @result[list_property].map do |item|
24
+ klass.new(client: client, result: item)
25
+ end
26
+ @iter = NgrokAPI::PagedIterator.new(
27
+ client: client,
28
+ page: self,
29
+ list_property: list_property
30
+ )
31
+ end
32
+
33
+ def ==(other)
34
+ @result == other.result
35
+ end
36
+
37
+ def to_s
38
+ @result.to_s
39
+ end
40
+ end
41
+ end
42
+ end