webhookdb 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/messages/web/install-customer-login.liquid +1 -1
- data/data/messages/web/install-success.liquid +2 -2
- data/db/migrations/038_webhookdb_api_key.rb +13 -0
- data/db/migrations/039_saved_query.rb +17 -0
- data/lib/webhookdb/api/db.rb +2 -19
- data/lib/webhookdb/api/helpers.rb +27 -0
- data/lib/webhookdb/api/install.rb +23 -1
- data/lib/webhookdb/api/saved_queries.rb +219 -0
- data/lib/webhookdb/api/service_integrations.rb +17 -12
- data/lib/webhookdb/api/sync_targets.rb +2 -6
- data/lib/webhookdb/api/system.rb +13 -2
- data/lib/webhookdb/api/webhook_subscriptions.rb +12 -18
- data/lib/webhookdb/api.rb +11 -2
- data/lib/webhookdb/apps.rb +2 -0
- data/lib/webhookdb/email_octopus.rb +2 -0
- data/lib/webhookdb/envfixer.rb +29 -0
- data/lib/webhookdb/fixtures/saved_queries.rb +27 -0
- data/lib/webhookdb/fixtures/service_integrations.rb +4 -0
- data/lib/webhookdb/front.rb +23 -11
- data/lib/webhookdb/google_calendar.rb +6 -0
- data/lib/webhookdb/icalendar.rb +6 -0
- data/lib/webhookdb/idempotency.rb +94 -33
- data/lib/webhookdb/jobs/backfill.rb +24 -5
- data/lib/webhookdb/jobs/icalendar_enqueue_syncs.rb +7 -1
- data/lib/webhookdb/jobs/prepare_database_connections.rb +2 -2
- data/lib/webhookdb/jobs/scheduled_backfills.rb +19 -13
- data/lib/webhookdb/oauth/{front.rb → front_provider.rb} +21 -4
- data/lib/webhookdb/oauth/{intercom.rb → intercom_provider.rb} +1 -1
- data/lib/webhookdb/oauth.rb +8 -7
- data/lib/webhookdb/organization/alerting.rb +11 -0
- data/lib/webhookdb/organization.rb +8 -2
- data/lib/webhookdb/postgres/model_utilities.rb +19 -0
- data/lib/webhookdb/postgres.rb +3 -0
- data/lib/webhookdb/replicator/column.rb +9 -1
- data/lib/webhookdb/replicator/front_conversation_v1.rb +5 -1
- data/lib/webhookdb/replicator/front_marketplace_root_v1.rb +2 -5
- data/lib/webhookdb/replicator/front_message_v1.rb +5 -1
- data/lib/webhookdb/replicator/front_signalwire_message_channel_app_v1.rb +325 -0
- data/lib/webhookdb/replicator/front_v1_mixin.rb +9 -1
- data/lib/webhookdb/replicator/icalendar_calendar_v1.rb +6 -3
- data/lib/webhookdb/replicator/signalwire_message_v1.rb +28 -14
- data/lib/webhookdb/replicator/twilio_sms_v1.rb +3 -1
- data/lib/webhookdb/saved_query.rb +28 -0
- data/lib/webhookdb/service_integration.rb +36 -3
- data/lib/webhookdb/signalwire.rb +40 -0
- data/lib/webhookdb/spec_helpers/citest.rb +18 -9
- data/lib/webhookdb/spec_helpers/postgres.rb +9 -0
- data/lib/webhookdb/spec_helpers/service.rb +5 -0
- data/lib/webhookdb/spec_helpers/shared_examples_for_columns.rb +25 -13
- data/lib/webhookdb/spec_helpers/whdb.rb +7 -0
- data/lib/webhookdb/sync_target.rb +1 -1
- data/lib/webhookdb/tasks/specs.rb +4 -2
- data/lib/webhookdb/version.rb +1 -1
- data/lib/webhookdb.rb +24 -26
- metadata +39 -4
data/lib/webhookdb/signalwire.rb
CHANGED
@@ -9,5 +9,45 @@ module Webhookdb::Signalwire
|
|
9
9
|
|
10
10
|
configurable(:signalwire) do
|
11
11
|
setting :http_timeout, 30
|
12
|
+
setting :sms_allowlist, [], convert: ->(s) { s.split }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.send_sms(from:, to:, body:, project_id:, **kw)
|
16
|
+
sms_allowed = self.sms_allowlist.any? { |pattern| File.fnmatch(pattern, to) }
|
17
|
+
unless sms_allowed
|
18
|
+
self.logger.warn("signalwire_sms_not_allowed", to:)
|
19
|
+
return {"sid" => "skipped"}
|
20
|
+
end
|
21
|
+
return self.http_request(
|
22
|
+
:post,
|
23
|
+
"/2010-04-01/Accounts/#{project_id}/Messages.json",
|
24
|
+
body: {
|
25
|
+
From: from,
|
26
|
+
To: to,
|
27
|
+
Body: body,
|
28
|
+
},
|
29
|
+
project_id:,
|
30
|
+
**kw,
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.http_request(method, tail, space_url:, project_id:, api_key:, logger:, headers: {}, body: nil, **kw)
|
35
|
+
url = "https://#{space_url}.signalwire.com" + tail
|
36
|
+
headers["Content-Type"] = "application/x-www-form-urlencoded"
|
37
|
+
headers["Accept"] = "application/json"
|
38
|
+
kw[:body] = URI.encode_www_form(body) if body
|
39
|
+
resp = Webhookdb::Http.send(
|
40
|
+
method,
|
41
|
+
url,
|
42
|
+
basic_auth: {
|
43
|
+
username: project_id,
|
44
|
+
password: api_key,
|
45
|
+
},
|
46
|
+
logger:,
|
47
|
+
timeout: self.http_timeout,
|
48
|
+
headers:,
|
49
|
+
**kw,
|
50
|
+
)
|
51
|
+
return resp.parsed_response
|
12
52
|
end
|
13
53
|
end
|
@@ -4,10 +4,18 @@ require "webhookdb/slack"
|
|
4
4
|
require "webhookdb/spec_helpers"
|
5
5
|
|
6
6
|
module Webhookdb::SpecHelpers::Citest
|
7
|
-
|
7
|
+
INTEGRATION_TESTS_DIR = Pathname(__FILE__).dirname.parent.parent.parent + "integration"
|
8
|
+
|
9
|
+
# Run RSpec against the given folders, create a DatabaseDocument for the html results,
|
10
|
+
# and POST to Slack about it.
|
11
|
+
def self.run_tests(folders)
|
8
12
|
out = StringIO.new
|
9
13
|
err = StringIO.new
|
10
|
-
|
14
|
+
folders = [folders] unless folders.respond_to?(:to_ary)
|
15
|
+
args = folders.map { |f| "#{f}/" }
|
16
|
+
args << "--format"
|
17
|
+
args << "html"
|
18
|
+
RSpec::Core::Runner.run(args, err, out)
|
11
19
|
|
12
20
|
notifier = Webhookdb::Slack.new_notifier(
|
13
21
|
force_channel: "#webhookdb-notifications",
|
@@ -17,13 +25,14 @@ module Webhookdb::SpecHelpers::Citest
|
|
17
25
|
outstring = out.string
|
18
26
|
result = Webhookdb::SpecHelpers::Citest.parse_rspec_html(outstring)
|
19
27
|
unless result.ok?
|
20
|
-
msg = "Errored or unparseable output running #{
|
28
|
+
msg = "Errored or unparseable output running #{folders.join(', ')} tests:" \
|
29
|
+
"\nerror: #{err.string}\nout: #{outstring}"
|
21
30
|
notifier.post text: msg
|
22
31
|
return
|
23
32
|
end
|
24
33
|
|
25
|
-
url = self.put_results(
|
26
|
-
payload = self.result_to_payload(
|
34
|
+
url = self.put_results(result.html)
|
35
|
+
payload = self.result_to_payload(result, url)
|
27
36
|
notifier.post(payload)
|
28
37
|
end
|
29
38
|
|
@@ -43,9 +52,9 @@ module Webhookdb::SpecHelpers::Citest
|
|
43
52
|
return result
|
44
53
|
end
|
45
54
|
|
46
|
-
def self.put_results(
|
55
|
+
def self.put_results(html, key: "integration")
|
47
56
|
now = Time.now
|
48
|
-
key = "test-results/#{
|
57
|
+
key = "test-results/#{key}/#{now.year}/#{now.month}/#{now.in_time_zone('UTC').iso8601}.html"
|
49
58
|
doc = Webhookdb::DatabaseDocument.create(
|
50
59
|
key:,
|
51
60
|
content: html,
|
@@ -55,13 +64,13 @@ module Webhookdb::SpecHelpers::Citest
|
|
55
64
|
return url
|
56
65
|
end
|
57
66
|
|
58
|
-
def self.result_to_payload(
|
67
|
+
def self.result_to_payload(result, html_url, prefix: "Integration Tests")
|
59
68
|
color = "good"
|
60
69
|
color = "warning" if result.pending.nonzero?
|
61
70
|
color = "danger" if result.failures.nonzero?
|
62
71
|
|
63
72
|
return {
|
64
|
-
text: "
|
73
|
+
text: "#{prefix}: #{result.examples} examples, #{result.failures} failures, #{result.pending} pending",
|
65
74
|
attachments: [
|
66
75
|
{
|
67
76
|
color:,
|
@@ -31,6 +31,7 @@ module Webhookdb::SpecHelpers::Postgres
|
|
31
31
|
context.around(:each) do |example|
|
32
32
|
Webhookdb::Postgres.unsafe_skip_transaction_check = true if example.metadata[:no_transaction_check]
|
33
33
|
|
34
|
+
_truncate(example)
|
34
35
|
setting = example.metadata[:db]
|
35
36
|
if setting && setting != :no_transaction
|
36
37
|
Webhookdb::SpecHelpers::Postgres.wrap_example_in_transactions(example)
|
@@ -44,11 +45,19 @@ module Webhookdb::SpecHelpers::Postgres
|
|
44
45
|
Webhookdb::Postgres.unsafe_skip_transaction_check = false if example.metadata[:no_transaction_check]
|
45
46
|
|
46
47
|
truncate_all if example.metadata[:db] == :no_transaction
|
48
|
+
_truncate(example)
|
47
49
|
end
|
48
50
|
|
49
51
|
super
|
50
52
|
end
|
51
53
|
|
54
|
+
module_function def _truncate(example)
|
55
|
+
tr = example.metadata[:truncate]
|
56
|
+
return unless tr
|
57
|
+
tr = [tr] unless tr.respond_to?(:to_ary)
|
58
|
+
tr.each(&:truncate)
|
59
|
+
end
|
60
|
+
|
52
61
|
### Run the specified +example+ in the context of a transaction for each loaded
|
53
62
|
### model superclass. Raises if any of the loaded superclasses aren't
|
54
63
|
### configured.
|
@@ -423,6 +423,11 @@ module Webhookdb::SpecHelpers::Service
|
|
423
423
|
super
|
424
424
|
end
|
425
425
|
|
426
|
+
def delete(uri, params={}, env={}, &)
|
427
|
+
env, params = make_json_request(env, params)
|
428
|
+
super
|
429
|
+
end
|
430
|
+
|
426
431
|
def make_json_request(env, params)
|
427
432
|
env["CONTENT_TYPE"] ||= "application/json"
|
428
433
|
params = Webhookdb::Json.encode(params) if env["CONTENT_TYPE"] == "application/json" && !params.is_a?(String)
|
@@ -27,7 +27,7 @@ RSpec.shared_examples "a service column converter" do |isomorphic_proc|
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
RSpec.shared_examples "a service column defaulter" do |isomorphic_proc|
|
30
|
+
RSpec.shared_examples "a service column defaulter" do |isomorphic_proc, ruby: true, sql: true|
|
31
31
|
let(:resource) { nil }
|
32
32
|
let(:event) { nil }
|
33
33
|
let(:enrichment) { nil }
|
@@ -37,20 +37,32 @@ RSpec.shared_examples "a service column defaulter" do |isomorphic_proc|
|
|
37
37
|
let(:expected_query) { nil }
|
38
38
|
let(:db) { Webhookdb::Postgres::Model.db }
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
if ruby
|
41
|
+
it "returns expected value using ruby proc" do
|
42
|
+
v = isomorphic_proc.ruby.call(resource:, event:, enrichment:, service_integration:)
|
43
|
+
expect(v).to expected
|
44
|
+
end
|
45
|
+
else
|
46
|
+
it "is not implemented for ruby" do
|
47
|
+
expect { isomorphic_proc.ruby.call }.to raise_error(NotImplementedError)
|
48
|
+
end
|
43
49
|
end
|
44
50
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
if sql
|
52
|
+
it "returns expected value using sql proc" do
|
53
|
+
e = isomorphic_proc.sql.call(service_integration:)
|
54
|
+
if expected_query.respond_to?(:match)
|
55
|
+
expect(db.select(e).sql).to match(expected_query)
|
56
|
+
elsif expected_query
|
57
|
+
expect(db.select(e).sql).to eq(expected_query)
|
58
|
+
else
|
59
|
+
v = db.select(e).first.to_a[0][1]
|
60
|
+
expect(v).to expected
|
61
|
+
end
|
62
|
+
end
|
63
|
+
else
|
64
|
+
it "is not implemented for sql" do
|
65
|
+
expect { isomorphic_proc.sql.call }.to raise_error(NotImplementedError)
|
54
66
|
end
|
55
67
|
end
|
56
68
|
end
|
@@ -136,4 +136,11 @@ module Webhookdb::SpecHelpers::Whdb
|
|
136
136
|
raise "Must provide :replicator or have :svc available" if replicator.nil?
|
137
137
|
return replicator.admin_dataset { |ds| ds.where(pk: row.fetch(:pk)).update(fields) }
|
138
138
|
end
|
139
|
+
|
140
|
+
RSpec::Matchers.define(:be_a_uuid) do
|
141
|
+
match do |v|
|
142
|
+
uuid = /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/i
|
143
|
+
v =~ uuid
|
144
|
+
end
|
145
|
+
end
|
139
146
|
end
|
@@ -55,7 +55,7 @@ class Webhookdb::SyncTarget < Webhookdb::Postgres::Model(:sync_targets)
|
|
55
55
|
|
56
56
|
after_configured do
|
57
57
|
if Webhookdb::RACK_ENV == "test"
|
58
|
-
safename = ENV
|
58
|
+
safename = ENV.fetch("USER", "root").gsub(/[^A-Za-z]/, "")
|
59
59
|
self.default_schema = "synctest_#{safename}"
|
60
60
|
end
|
61
61
|
end
|
@@ -10,13 +10,15 @@ module Webhookdb::Tasks
|
|
10
10
|
def initialize
|
11
11
|
super()
|
12
12
|
namespace :specs do
|
13
|
-
desc "Run API integration tests"
|
13
|
+
desc "Run API integration tests in the 'integration' folder of this gem. " \
|
14
|
+
"To run your own tests, create a task similar to this one, " \
|
15
|
+
"that calls Webhookdb::SpecHelpers::Citest.run_tests."
|
14
16
|
task :integration do
|
15
17
|
require "rspec/core"
|
16
18
|
require "slack-notifier"
|
17
19
|
require "webhookdb/spec_helpers/integration"
|
18
20
|
require "webhookdb/spec_helpers/citest"
|
19
|
-
Webhookdb::SpecHelpers::Citest.run_tests(
|
21
|
+
Webhookdb::SpecHelpers::Citest.run_tests(Webhookdb::SpecHelpers::Citest::INTEGRATION_TESTS_DIR)
|
20
22
|
end
|
21
23
|
|
22
24
|
desc "The release process needs to finish quickly, so start the integration tests in another dyno."
|
data/lib/webhookdb/version.rb
CHANGED
data/lib/webhookdb.rb
CHANGED
@@ -8,15 +8,12 @@ require "money"
|
|
8
8
|
require "pathname"
|
9
9
|
require "phony"
|
10
10
|
|
11
|
+
require "webhookdb/envfixer"
|
11
12
|
require "webhookdb/json"
|
13
|
+
require "webhookdb/method_utilities"
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
json = Oj.load(text)
|
16
|
-
json.each do |k, v|
|
17
|
-
ENV[k] = v
|
18
|
-
end
|
19
|
-
end
|
15
|
+
Webhookdb::Envfixer.replace_localhost_for_docker(ENV)
|
16
|
+
Webhookdb::Envfixer.merge_heroku_env(ENV)
|
20
17
|
|
21
18
|
Money.locale_backend = :i18n
|
22
19
|
Money.default_currency = "USD"
|
@@ -36,6 +33,7 @@ end
|
|
36
33
|
module Webhookdb
|
37
34
|
include Appydays::Loggable
|
38
35
|
include Appydays::Configurable
|
36
|
+
extend Webhookdb::MethodUtilities
|
39
37
|
|
40
38
|
# Error raised when we cannot take an action
|
41
39
|
# because some condition has not been set up right.
|
@@ -72,6 +70,9 @@ module Webhookdb
|
|
72
70
|
|
73
71
|
DATA_DIR = Pathname(__FILE__).dirname.parent + "data"
|
74
72
|
|
73
|
+
singleton_attr_reader :globals_cache
|
74
|
+
@globals_cache = {}
|
75
|
+
|
75
76
|
configurable(:webhookdb) do
|
76
77
|
setting :log_level_override,
|
77
78
|
nil,
|
@@ -86,6 +87,10 @@ module Webhookdb
|
|
86
87
|
setting :support_email, "hello@webhookdb.com"
|
87
88
|
setting :use_globals_cache, false
|
88
89
|
setting :regression_mode, false
|
90
|
+
|
91
|
+
after_configured do
|
92
|
+
globals_cache.clear
|
93
|
+
end
|
89
94
|
end
|
90
95
|
|
91
96
|
# Regression mode is true when we re replaying webhooks locally,
|
@@ -96,9 +101,6 @@ module Webhookdb
|
|
96
101
|
return self.regression_mode
|
97
102
|
end
|
98
103
|
|
99
|
-
require "webhookdb/method_utilities"
|
100
|
-
extend Webhookdb::MethodUtilities
|
101
|
-
|
102
104
|
require "webhookdb/sentry"
|
103
105
|
|
104
106
|
def self.load_app
|
@@ -115,9 +117,6 @@ module Webhookdb
|
|
115
117
|
# :section: Globals cache
|
116
118
|
#
|
117
119
|
|
118
|
-
singleton_attr_reader :globals_cache
|
119
|
-
@globals_cache = {}
|
120
|
-
|
121
120
|
# If globals caching is enabled, see if there is a cached value under +key+
|
122
121
|
# and return it if so. If there is not, evaluate the given block and store that value.
|
123
122
|
# Generally used for looking up well-known database objects like certain roles.
|
@@ -127,7 +126,7 @@ module Webhookdb
|
|
127
126
|
return result if result
|
128
127
|
end
|
129
128
|
result = yield()
|
130
|
-
self.globals_cache[key] = result
|
129
|
+
(self.globals_cache[key] = result) if self.use_globals_cache
|
131
130
|
return result
|
132
131
|
end
|
133
132
|
|
@@ -153,18 +152,6 @@ module Webhookdb
|
|
153
152
|
return key
|
154
153
|
end
|
155
154
|
|
156
|
-
#
|
157
|
-
# :section: Unambiguous/promo code chars
|
158
|
-
#
|
159
|
-
|
160
|
-
# Remove ambiguous characters (L, I, 1 or 0, O) and vowels from possible codes
|
161
|
-
# to avoid creating ambiguous codes or real words.
|
162
|
-
UNAMBIGUOUS_CHARS = "CDFGHJKMNPQRTVWXYZ23469".chars.freeze
|
163
|
-
|
164
|
-
def self.take_unambiguous_chars(n)
|
165
|
-
return Array.new(n) { UNAMBIGUOUS_CHARS.sample }.join
|
166
|
-
end
|
167
|
-
|
168
155
|
# Convert a string into something we consistently use for slugs:
|
169
156
|
# a-z, 0-9, and underscores only. Leading numbers are converted to words.
|
170
157
|
#
|
@@ -192,6 +179,17 @@ module Webhookdb
|
|
192
179
|
"9" => "nine",
|
193
180
|
}.freeze
|
194
181
|
|
182
|
+
def self.parse_bool(s)
|
183
|
+
# rubocop:disable Style/NumericPredicate
|
184
|
+
return false if s == nil? || s.blank? || s == 0
|
185
|
+
# rubocop:enable Style/NumericPredicate
|
186
|
+
return true if s.is_a?(Integer)
|
187
|
+
sb = s.to_s.downcase
|
188
|
+
return true if ["true", "t", "yes", "y", "on", "1"].include?(sb)
|
189
|
+
return false if ["false", "f", "no", "n", "off", "0"].include?(sb)
|
190
|
+
raise ArgumentError, "unparseable bool: #{s.inspect}"
|
191
|
+
end
|
192
|
+
|
195
193
|
# Return the request user and admin stored in TLS. See service.rb for implementation.
|
196
194
|
#
|
197
195
|
# Note that the second return value (the admin) will be nil if not authed as an admin,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webhookdb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WebhookDB
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -248,6 +248,20 @@ dependencies:
|
|
248
248
|
- - ">="
|
249
249
|
- !ruby/object:Gem::Version
|
250
250
|
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: jwt
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - "~>"
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '2.7'
|
258
|
+
type: :runtime
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - "~>"
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '2.7'
|
251
265
|
- !ruby/object:Gem::Dependency
|
252
266
|
name: liquid
|
253
267
|
requirement: !ruby/object:Gem::Requirement
|
@@ -724,6 +738,20 @@ dependencies:
|
|
724
738
|
- - "~>"
|
725
739
|
- !ruby/object:Gem::Version
|
726
740
|
version: '10.4'
|
741
|
+
- !ruby/object:Gem::Dependency
|
742
|
+
name: uuidx
|
743
|
+
requirement: !ruby/object:Gem::Requirement
|
744
|
+
requirements:
|
745
|
+
- - "~>"
|
746
|
+
- !ruby/object:Gem::Version
|
747
|
+
version: '0.10'
|
748
|
+
type: :runtime
|
749
|
+
prerelease: false
|
750
|
+
version_requirements: !ruby/object:Gem::Requirement
|
751
|
+
requirements:
|
752
|
+
- - "~>"
|
753
|
+
- !ruby/object:Gem::Version
|
754
|
+
version: '0.10'
|
727
755
|
- !ruby/object:Gem::Dependency
|
728
756
|
name: warden
|
729
757
|
requirement: !ruby/object:Gem::Requirement
|
@@ -824,6 +852,8 @@ files:
|
|
824
852
|
- db/migrations/035_synchronous_backfill.rb
|
825
853
|
- db/migrations/036_oauth.rb
|
826
854
|
- db/migrations/037_oauth_used.rb
|
855
|
+
- db/migrations/038_webhookdb_api_key.rb
|
856
|
+
- db/migrations/039_saved_query.rb
|
827
857
|
- integration/async_spec.rb
|
828
858
|
- integration/auth_spec.rb
|
829
859
|
- integration/database_spec.rb
|
@@ -854,6 +884,7 @@ files:
|
|
854
884
|
- lib/webhookdb/api/me.rb
|
855
885
|
- lib/webhookdb/api/organizations.rb
|
856
886
|
- lib/webhookdb/api/replay.rb
|
887
|
+
- lib/webhookdb/api/saved_queries.rb
|
857
888
|
- lib/webhookdb/api/service_integrations.rb
|
858
889
|
- lib/webhookdb/api/services.rb
|
859
890
|
- lib/webhookdb/api/stripe.rb
|
@@ -889,6 +920,7 @@ files:
|
|
889
920
|
- lib/webhookdb/developer_alert.rb
|
890
921
|
- lib/webhookdb/email_octopus.rb
|
891
922
|
- lib/webhookdb/enumerable.rb
|
923
|
+
- lib/webhookdb/envfixer.rb
|
892
924
|
- lib/webhookdb/fixtures.rb
|
893
925
|
- lib/webhookdb/fixtures/backfill_jobs.rb
|
894
926
|
- lib/webhookdb/fixtures/customers.rb
|
@@ -901,6 +933,7 @@ files:
|
|
901
933
|
- lib/webhookdb/fixtures/organization_memberships.rb
|
902
934
|
- lib/webhookdb/fixtures/organizations.rb
|
903
935
|
- lib/webhookdb/fixtures/reset_codes.rb
|
936
|
+
- lib/webhookdb/fixtures/saved_queries.rb
|
904
937
|
- lib/webhookdb/fixtures/service_integrations.rb
|
905
938
|
- lib/webhookdb/fixtures/subscriptions.rb
|
906
939
|
- lib/webhookdb/fixtures/sync_targets.rb
|
@@ -975,8 +1008,8 @@ files:
|
|
975
1008
|
- lib/webhookdb/microsoft_calendar.rb
|
976
1009
|
- lib/webhookdb/nextpax.rb
|
977
1010
|
- lib/webhookdb/oauth.rb
|
978
|
-
- lib/webhookdb/oauth/
|
979
|
-
- lib/webhookdb/oauth/
|
1011
|
+
- lib/webhookdb/oauth/front_provider.rb
|
1012
|
+
- lib/webhookdb/oauth/intercom_provider.rb
|
980
1013
|
- lib/webhookdb/oauth/session.rb
|
981
1014
|
- lib/webhookdb/organization.rb
|
982
1015
|
- lib/webhookdb/organization/alerting.rb
|
@@ -1014,6 +1047,7 @@ files:
|
|
1014
1047
|
- lib/webhookdb/replicator/front_conversation_v1.rb
|
1015
1048
|
- lib/webhookdb/replicator/front_marketplace_root_v1.rb
|
1016
1049
|
- lib/webhookdb/replicator/front_message_v1.rb
|
1050
|
+
- lib/webhookdb/replicator/front_signalwire_message_channel_app_v1.rb
|
1017
1051
|
- lib/webhookdb/replicator/front_v1_mixin.rb
|
1018
1052
|
- lib/webhookdb/replicator/github_issue_comment_v1.rb
|
1019
1053
|
- lib/webhookdb/replicator/github_issue_v1.rb
|
@@ -1073,6 +1107,7 @@ files:
|
|
1073
1107
|
- lib/webhookdb/replicator/webhook_request.rb
|
1074
1108
|
- lib/webhookdb/replicator/webhookdb_customer_v1.rb
|
1075
1109
|
- lib/webhookdb/role.rb
|
1110
|
+
- lib/webhookdb/saved_query.rb
|
1076
1111
|
- lib/webhookdb/sentry.rb
|
1077
1112
|
- lib/webhookdb/service.rb
|
1078
1113
|
- lib/webhookdb/service/auth.rb
|