hubspot-api-client 3.2.0 → 7.0.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/CHANGELOG.md +27 -0
- data/lib/hubspot-api-client.rb +70 -0
- data/lib/hubspot/codegen/cms/audit-logs/api/default_api.rb +106 -0
- data/lib/hubspot/codegen/cms/audit-logs/api_client.rb +422 -0
- data/lib/hubspot/codegen/cms/audit-logs/api_error.rb +61 -0
- data/lib/hubspot/codegen/cms/audit-logs/configuration.rb +258 -0
- data/lib/hubspot/codegen/cms/audit-logs/models/collection_response_public_audit_log.rb +226 -0
- data/lib/hubspot/codegen/cms/audit-logs/models/error.rb +292 -0
- data/lib/hubspot/codegen/cms/audit-logs/models/error_detail.rb +258 -0
- data/lib/hubspot/codegen/cms/audit-logs/models/next_page.rb +224 -0
- data/lib/hubspot/codegen/cms/audit-logs/models/paging.rb +210 -0
- data/lib/hubspot/codegen/cms/audit-logs/models/public_audit_log.rb +352 -0
- data/lib/hubspot/codegen/cms/domains/api/domains_api.rb +183 -0
- data/lib/hubspot/codegen/cms/domains/api_client.rb +422 -0
- data/lib/hubspot/codegen/cms/domains/api_error.rb +61 -0
- data/lib/hubspot/codegen/cms/domains/configuration.rb +258 -0
- data/lib/hubspot/codegen/cms/domains/models/collection_response_with_total_domain.rb +240 -0
- data/lib/hubspot/codegen/cms/domains/models/domain.rb +1091 -0
- data/lib/hubspot/codegen/cms/domains/models/domain_cdn_config.rb +497 -0
- data/lib/hubspot/codegen/cms/domains/models/domain_setup_info.rb +231 -0
- data/lib/hubspot/codegen/cms/domains/models/error.rb +292 -0
- data/lib/hubspot/codegen/cms/domains/models/error_detail.rb +258 -0
- data/lib/hubspot/codegen/cms/domains/models/next_page.rb +224 -0
- data/lib/hubspot/codegen/cms/domains/models/paging.rb +210 -0
- data/lib/hubspot/codegen/cms/performance/api/default_api.rb +186 -0
- data/lib/hubspot/codegen/cms/performance/api_client.rb +422 -0
- data/lib/hubspot/codegen/cms/performance/api_error.rb +61 -0
- data/lib/hubspot/codegen/cms/performance/configuration.rb +251 -0
- data/lib/hubspot/codegen/cms/performance/models/error.rb +292 -0
- data/lib/hubspot/codegen/cms/performance/models/error_detail.rb +258 -0
- data/lib/hubspot/codegen/cms/performance/models/performance_view.rb +528 -0
- data/lib/hubspot/codegen/cms/performance/models/public_performance_response.rb +332 -0
- data/lib/hubspot/codegen/cms/site-search/api/default_api.rb +225 -0
- data/lib/hubspot/codegen/cms/site-search/api_client.rb +422 -0
- data/lib/hubspot/codegen/cms/site-search/api_error.rb +61 -0
- data/lib/hubspot/codegen/cms/site-search/configuration.rb +258 -0
- data/lib/hubspot/codegen/cms/site-search/models/content_search_result.rb +427 -0
- data/lib/hubspot/codegen/cms/site-search/models/error.rb +292 -0
- data/lib/hubspot/codegen/cms/site-search/models/error_detail.rb +258 -0
- data/lib/hubspot/codegen/cms/site-search/models/indexed_data.rb +279 -0
- data/lib/hubspot/codegen/cms/site-search/models/public_search_results.rb +282 -0
- data/lib/hubspot/codegen/cms/site-search/models/search_hit_field.rb +259 -0
- data/lib/hubspot/codegen/cms/url-redirects/api/redirects_api.rb +368 -0
- data/lib/hubspot/codegen/cms/url-redirects/api_client.rb +422 -0
- data/lib/hubspot/codegen/cms/url-redirects/api_error.rb +61 -0
- data/lib/hubspot/codegen/cms/url-redirects/configuration.rb +258 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/collection_response_with_total_url_mapping.rb +242 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/error.rb +292 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/error_detail.rb +258 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/next_page.rb +224 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/paging.rb +210 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/url_mapping.rb +596 -0
- data/lib/hubspot/codegen/cms/url-redirects/models/url_mapping_create_request_body.rb +306 -0
- data/lib/hubspot/codegen/crm/companies/api/associations_api.rb +2 -2
- data/lib/hubspot/codegen/crm/companies/api/basic_api.rb +20 -12
- data/lib/hubspot/codegen/crm/companies/api/batch_api.rb +40 -24
- data/lib/hubspot/codegen/crm/companies/api/search_api.rb +10 -6
- data/lib/hubspot/codegen/crm/companies/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/companies/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/companies/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/companies/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/companies/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/crm/contacts/api/associations_api.rb +2 -2
- data/lib/hubspot/codegen/crm/contacts/api/basic_api.rb +20 -12
- data/lib/hubspot/codegen/crm/contacts/api/batch_api.rb +40 -24
- data/lib/hubspot/codegen/crm/contacts/api/search_api.rb +10 -6
- data/lib/hubspot/codegen/crm/contacts/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/contacts/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/contacts/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/contacts/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/contacts/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/crm/deals/api/associations_api.rb +2 -2
- data/lib/hubspot/codegen/crm/deals/api/basic_api.rb +20 -12
- data/lib/hubspot/codegen/crm/deals/api/batch_api.rb +40 -24
- data/lib/hubspot/codegen/crm/deals/api/search_api.rb +10 -6
- data/lib/hubspot/codegen/crm/deals/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/deals/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/deals/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/deals/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/deals/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/crm/extensions/cards/configuration.rb +0 -7
- data/lib/hubspot/codegen/crm/line_items/api/associations_api.rb +2 -2
- data/lib/hubspot/codegen/crm/line_items/api/basic_api.rb +20 -12
- data/lib/hubspot/codegen/crm/line_items/api/batch_api.rb +40 -24
- data/lib/hubspot/codegen/crm/line_items/api/search_api.rb +10 -6
- data/lib/hubspot/codegen/crm/line_items/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/line_items/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/line_items/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/line_items/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/line_items/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/crm/owners/api/default_api.rb +0 -2
- data/lib/hubspot/codegen/crm/products/api/associations_api.rb +2 -2
- data/lib/hubspot/codegen/crm/products/api/basic_api.rb +20 -12
- data/lib/hubspot/codegen/crm/products/api/batch_api.rb +40 -24
- data/lib/hubspot/codegen/crm/products/api/search_api.rb +10 -6
- data/lib/hubspot/codegen/crm/products/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/products/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/products/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/products/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/products/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/crm/properties/api/batch_api.rb +30 -18
- data/lib/hubspot/codegen/crm/properties/api/core_api.rb +20 -12
- data/lib/hubspot/codegen/crm/properties/api/groups_api.rb +20 -12
- data/lib/hubspot/codegen/crm/properties/models/batch_read_input_property_name.rb +18 -18
- data/lib/hubspot/codegen/crm/properties/models/batch_response_property.rb +29 -23
- data/lib/hubspot/codegen/crm/properties/models/property_create.rb +14 -4
- data/lib/hubspot/codegen/crm/properties/models/property_update.rb +14 -4
- data/lib/hubspot/codegen/crm/quotes/api/associations_api.rb +1 -157
- data/lib/hubspot/codegen/crm/quotes/api/basic_api.rb +2 -190
- data/lib/hubspot/codegen/crm/quotes/api/batch_api.rb +11 -187
- data/lib/hubspot/codegen/crm/quotes/api/default_api.rb +426 -0
- data/lib/hubspot/codegen/crm/quotes/api/search_api.rb +11 -7
- data/lib/hubspot/codegen/crm/quotes/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/quotes/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/quotes/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/quotes/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/quotes/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/crm/tickets/api/associations_api.rb +2 -2
- data/lib/hubspot/codegen/crm/tickets/api/basic_api.rb +20 -12
- data/lib/hubspot/codegen/crm/tickets/api/batch_api.rb +40 -24
- data/lib/hubspot/codegen/crm/tickets/api/search_api.rb +10 -6
- data/lib/hubspot/codegen/crm/tickets/models/batch_read_input_simple_public_object_id.rb +20 -20
- data/lib/hubspot/codegen/crm/tickets/models/batch_response_simple_public_object.rb +29 -38
- data/lib/hubspot/codegen/crm/tickets/models/batch_response_simple_public_object_with_errors.rb +333 -0
- data/lib/hubspot/codegen/crm/tickets/models/filter.rb +15 -15
- data/lib/hubspot/codegen/crm/tickets/models/simple_public_object_batch_input.rb +18 -18
- data/lib/hubspot/codegen/oauth/configuration.rb +0 -14
- data/lib/hubspot/codegen/webhooks/api/subscriptions_api.rb +16 -12
- data/lib/hubspot/codegen/webhooks/configuration.rb +0 -7
- data/lib/hubspot/codegen/webhooks/models/batch_response_subscription_response.rb +1 -21
- data/lib/hubspot/codegen/webhooks/models/batch_response_subscription_response_with_errors.rb +331 -0
- data/lib/hubspot/codegen/webhooks/models/settings_response.rb +28 -28
- data/lib/hubspot/codegen/webhooks/models/subscription_create_request.rb +16 -13
- data/lib/hubspot/codegen/webhooks/models/subscription_patch_request.rb +7 -7
- data/lib/hubspot/codegen/webhooks/models/subscription_response.rb +45 -39
- data/lib/hubspot/exceptions.rb +11 -0
- data/lib/hubspot/helpers/webhooks_helper.rb +31 -0
- data/lib/hubspot/version.rb +1 -1
- data/sample-apps/imports-contacts-app/.env.template +2 -0
- data/sample-apps/imports-contacts-app/.env.test.template +3 -0
- data/sample-apps/imports-contacts-app/.gitignore +37 -0
- data/sample-apps/imports-contacts-app/.rspec +1 -0
- data/sample-apps/imports-contacts-app/.ruby-version +1 -0
- data/sample-apps/imports-contacts-app/Dockerfile +22 -0
- data/sample-apps/imports-contacts-app/Gemfile +33 -0
- data/sample-apps/imports-contacts-app/Gemfile.lock +271 -0
- data/sample-apps/imports-contacts-app/README.md +27 -0
- data/sample-apps/imports-contacts-app/Rakefile +6 -0
- data/sample-apps/imports-contacts-app/app/assets/config/manifest.js +3 -0
- data/sample-apps/imports-contacts-app/app/assets/images/.keep +0 -0
- data/sample-apps/imports-contacts-app/app/assets/javascripts/application.js +15 -0
- data/sample-apps/imports-contacts-app/app/assets/javascripts/cable.js +13 -0
- data/sample-apps/imports-contacts-app/app/assets/javascripts/channels/.keep +0 -0
- data/sample-apps/imports-contacts-app/app/assets/stylesheets/application.css +87 -0
- data/sample-apps/imports-contacts-app/app/controllers/application_controller.rb +12 -0
- data/sample-apps/imports-contacts-app/app/controllers/concerns/.keep +0 -0
- data/sample-apps/imports-contacts-app/app/controllers/concerns/exception_handler.rb +12 -0
- data/sample-apps/imports-contacts-app/app/controllers/imports_controller.rb +24 -0
- data/sample-apps/imports-contacts-app/app/controllers/oauth/authorization_controller.rb +19 -0
- data/sample-apps/imports-contacts-app/app/helpers/application_helper.rb +2 -0
- data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/authorize_hubspot.rb +0 -0
- data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/get_authorization_uri.rb +1 -1
- data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/base.rb +0 -0
- data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/generate.rb +2 -2
- data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/refresh.rb +3 -4
- data/sample-apps/imports-contacts-app/app/lib/services/hubspot/imports/create.rb +52 -0
- data/sample-apps/imports-contacts-app/app/models/application_record.rb +3 -0
- data/sample-apps/imports-contacts-app/app/models/concerns/.keep +0 -0
- data/sample-apps/imports-contacts-app/app/views/imports/index.html.erb +70 -0
- data/sample-apps/imports-contacts-app/app/views/layouts/application.html.erb +23 -0
- data/sample-apps/imports-contacts-app/app/views/oauth/authorization/login.html.erb +15 -0
- data/sample-apps/imports-contacts-app/app/views/shared/_header.html.erb +15 -0
- data/sample-apps/imports-contacts-app/bin/bundle +3 -0
- data/sample-apps/imports-contacts-app/bin/rails +9 -0
- data/sample-apps/imports-contacts-app/bin/rake +9 -0
- data/sample-apps/imports-contacts-app/bin/setup +36 -0
- data/sample-apps/imports-contacts-app/bin/spring +17 -0
- data/sample-apps/imports-contacts-app/bin/update +31 -0
- data/sample-apps/imports-contacts-app/bin/yarn +11 -0
- data/sample-apps/imports-contacts-app/config.ru +5 -0
- data/sample-apps/imports-contacts-app/config/application.rb +19 -0
- data/sample-apps/imports-contacts-app/config/boot.rb +3 -0
- data/sample-apps/imports-contacts-app/config/cable.yml +10 -0
- data/sample-apps/imports-contacts-app/config/database.yml +25 -0
- data/sample-apps/imports-contacts-app/config/environment.rb +5 -0
- data/sample-apps/imports-contacts-app/config/environments/development.rb +61 -0
- data/sample-apps/imports-contacts-app/config/environments/production.rb +94 -0
- data/sample-apps/imports-contacts-app/config/environments/test.rb +46 -0
- data/sample-apps/imports-contacts-app/config/initializers/assets.rb +14 -0
- data/sample-apps/imports-contacts-app/config/initializers/filter_parameter_logging.rb +4 -0
- data/sample-apps/imports-contacts-app/config/initializers/hubspot-api-client.rb +3 -0
- data/sample-apps/imports-contacts-app/config/initializers/mime_types.rb +1 -0
- data/sample-apps/imports-contacts-app/config/initializers/wrap_parameters.rb +14 -0
- data/sample-apps/imports-contacts-app/config/locales/en.yml +33 -0
- data/sample-apps/imports-contacts-app/config/puma.rb +34 -0
- data/sample-apps/imports-contacts-app/config/routes.rb +11 -0
- data/sample-apps/imports-contacts-app/config/spring.rb +6 -0
- data/sample-apps/imports-contacts-app/db/seeds.rb +7 -0
- data/sample-apps/imports-contacts-app/docker-compose.yml +11 -0
- data/sample-apps/imports-contacts-app/docker-entrypoint.sh +8 -0
- data/sample-apps/imports-contacts-app/lib/assets/.keep +0 -0
- data/sample-apps/imports-contacts-app/lib/tasks/.keep +0 -0
- data/sample-apps/imports-contacts-app/log/.keep +0 -0
- data/sample-apps/imports-contacts-app/package.json +5 -0
- data/sample-apps/imports-contacts-app/public/404.html +67 -0
- data/sample-apps/imports-contacts-app/public/422.html +67 -0
- data/sample-apps/imports-contacts-app/public/500.html +66 -0
- data/sample-apps/imports-contacts-app/public/apple-touch-icon-precomposed.png +0 -0
- data/sample-apps/imports-contacts-app/public/apple-touch-icon.png +0 -0
- data/sample-apps/imports-contacts-app/public/examples/example.csv +2 -0
- data/sample-apps/imports-contacts-app/public/favicon.ico +0 -0
- data/sample-apps/imports-contacts-app/public/robots.txt +1 -0
- data/sample-apps/imports-contacts-app/tmp/.keep +0 -0
- data/sample-apps/search-result-paging-app/.env.template +4 -0
- data/sample-apps/search-result-paging-app/.gitignore +35 -0
- data/sample-apps/search-result-paging-app/.rspec +1 -0
- data/sample-apps/search-result-paging-app/.ruby-version +1 -0
- data/sample-apps/search-result-paging-app/Dockerfile +22 -0
- data/sample-apps/search-result-paging-app/Gemfile +35 -0
- data/sample-apps/search-result-paging-app/Gemfile.lock +279 -0
- data/sample-apps/search-result-paging-app/README.md +0 -0
- data/sample-apps/search-result-paging-app/Rakefile +6 -0
- data/sample-apps/search-result-paging-app/app/assets/config/manifest.js +3 -0
- data/sample-apps/search-result-paging-app/app/assets/images/.keep +0 -0
- data/sample-apps/search-result-paging-app/app/assets/javascripts/application.js +25 -0
- data/sample-apps/search-result-paging-app/app/assets/javascripts/cable.js +13 -0
- data/sample-apps/search-result-paging-app/app/assets/javascripts/channels/.keep +0 -0
- data/sample-apps/search-result-paging-app/app/assets/stylesheets/application.css +77 -0
- data/sample-apps/search-result-paging-app/app/controllers/application_controller.rb +12 -0
- data/sample-apps/search-result-paging-app/app/controllers/concerns/.keep +0 -0
- data/sample-apps/search-result-paging-app/app/controllers/concerns/exception_handler.rb +12 -0
- data/sample-apps/search-result-paging-app/app/controllers/home_controller.rb +14 -0
- data/sample-apps/search-result-paging-app/app/controllers/oauth/authorization_controller.rb +19 -0
- data/sample-apps/search-result-paging-app/app/helpers/application_helper.rb +2 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/get_page.rb +26 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/search.rb +35 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/create.rb +23 -0
- data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/destroy.rb +16 -0
- data/sample-apps/search-result-paging-app/app/models/application_record.rb +3 -0
- data/sample-apps/search-result-paging-app/app/models/concerns/.keep +0 -0
- data/sample-apps/search-result-paging-app/app/views/home/index.html.erb +13 -0
- data/sample-apps/search-result-paging-app/app/views/layouts/application.html.erb +23 -0
- data/sample-apps/search-result-paging-app/app/views/oauth/authorization/login.html.erb +15 -0
- data/sample-apps/search-result-paging-app/app/views/shared/_header.html.erb +18 -0
- data/sample-apps/search-result-paging-app/bin/bundle +3 -0
- data/sample-apps/search-result-paging-app/bin/rails +9 -0
- data/sample-apps/search-result-paging-app/bin/rake +9 -0
- data/sample-apps/search-result-paging-app/bin/setup +36 -0
- data/sample-apps/search-result-paging-app/bin/spring +17 -0
- data/sample-apps/search-result-paging-app/bin/update +31 -0
- data/sample-apps/search-result-paging-app/bin/yarn +11 -0
- data/sample-apps/search-result-paging-app/config.ru +5 -0
- data/sample-apps/search-result-paging-app/config/application.rb +19 -0
- data/sample-apps/search-result-paging-app/config/boot.rb +3 -0
- data/sample-apps/search-result-paging-app/config/cable.yml +10 -0
- data/sample-apps/search-result-paging-app/config/database.yml +25 -0
- data/sample-apps/search-result-paging-app/config/environment.rb +5 -0
- data/sample-apps/search-result-paging-app/config/environments/development.rb +61 -0
- data/sample-apps/search-result-paging-app/config/environments/production.rb +94 -0
- data/sample-apps/search-result-paging-app/config/environments/test.rb +46 -0
- data/sample-apps/search-result-paging-app/config/initializers/assets.rb +14 -0
- data/sample-apps/search-result-paging-app/config/initializers/filter_parameter_logging.rb +4 -0
- data/sample-apps/search-result-paging-app/config/initializers/hubspot-api-client.rb +3 -0
- data/sample-apps/search-result-paging-app/config/initializers/mime_types.rb +1 -0
- data/sample-apps/search-result-paging-app/config/initializers/wrap_parameters.rb +14 -0
- data/sample-apps/search-result-paging-app/config/locales/en.yml +33 -0
- data/sample-apps/search-result-paging-app/config/puma.rb +34 -0
- data/sample-apps/search-result-paging-app/config/routes.rb +7 -0
- data/sample-apps/search-result-paging-app/config/spring.rb +6 -0
- data/sample-apps/search-result-paging-app/db/seeds.rb +7 -0
- data/sample-apps/search-result-paging-app/docker-compose.yml +11 -0
- data/sample-apps/search-result-paging-app/docker-entrypoint.sh +8 -0
- data/sample-apps/search-result-paging-app/lib/assets/.keep +0 -0
- data/sample-apps/search-result-paging-app/lib/tasks/.keep +0 -0
- data/sample-apps/search-result-paging-app/lib/tasks/search_contacts.rake +36 -0
- data/sample-apps/search-result-paging-app/log/.keep +0 -0
- data/sample-apps/search-result-paging-app/package.json +5 -0
- data/sample-apps/search-result-paging-app/public/404.html +67 -0
- data/sample-apps/search-result-paging-app/public/422.html +67 -0
- data/sample-apps/search-result-paging-app/public/500.html +66 -0
- data/sample-apps/search-result-paging-app/public/apple-touch-icon-precomposed.png +0 -0
- data/sample-apps/search-result-paging-app/public/apple-touch-icon.png +0 -0
- data/sample-apps/search-result-paging-app/public/favicon.ico +0 -0
- data/sample-apps/search-result-paging-app/public/robots.txt +1 -0
- data/sample-apps/search-result-paging-app/tmp/.keep +0 -0
- data/sample-apps/trello-integration-app/.env +13 -0
- data/sample-apps/webhooks-contacts-app/.env.template +3 -1
- data/sample-apps/webhooks-contacts-app/Gemfile.lock +1 -1
- data/sample-apps/webhooks-contacts-app/README.md +24 -21
- data/sample-apps/webhooks-contacts-app/app/assets/stylesheets/application.css +7 -55
- data/sample-apps/webhooks-contacts-app/app/controllers/events_controller.rb +8 -10
- data/sample-apps/webhooks-contacts-app/app/controllers/home_controller.rb +44 -0
- data/sample-apps/webhooks-contacts-app/app/controllers/oauth/authorization_controller.rb +6 -6
- data/sample-apps/webhooks-contacts-app/app/controllers/webhooks_controller.rb +1 -1
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/configure_target_url.rb +25 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/create_or_activate_subscription.rb +44 -0
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/handle.rb +13 -1
- data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/pause_active_subscriptions.rb +39 -0
- data/sample-apps/webhooks-contacts-app/app/models/event.rb +3 -0
- data/sample-apps/webhooks-contacts-app/app/views/events/index.html.erb +14 -16
- data/sample-apps/webhooks-contacts-app/app/views/home/index.html.erb +47 -0
- data/sample-apps/webhooks-contacts-app/app/views/oauth/authorization/login.html.erb +6 -6
- data/sample-apps/webhooks-contacts-app/app/views/shared/_header.html.erb +3 -0
- data/sample-apps/webhooks-contacts-app/config/database.yml +9 -9
- data/sample-apps/webhooks-contacts-app/config/routes.rb +2 -0
- data/sample-apps/webhooks-contacts-app/db/schema.rb +2 -5
- data/sample-apps/webhooks-contacts-app/docker-compose.yml +13 -10
- metadata +616 -7
|
@@ -1,16 +1,29 @@
|
|
|
1
|
-
# HubSpot-ruby sample Webhooks
|
|
1
|
+
# HubSpot-ruby sample Webhooks app
|
|
2
2
|
|
|
3
|
-
This is a sample app for the [hubspot-ruby SDK](
|
|
3
|
+
This is a sample app for the [hubspot-ruby SDK](../../../..).
|
|
4
4
|
Currently, this app focuses on demonstrating the functionality of [Webhooks API](https://developers.hubspot.com/docs-beta/crm/extensions), contact creation/deletion in particular.
|
|
5
5
|
|
|
6
|
-
Please see the documentation on [
|
|
6
|
+
Please see the documentation on [Creating an app in HubSpot](https://developers.hubspot.com/docs-beta/creating-an-app)
|
|
7
7
|
|
|
8
8
|
### HubSpot Public API links used in this application
|
|
9
9
|
|
|
10
|
-
- [Initiate an Integration with OAuth 2.0](https://developers.hubspot.com/docs/methods/oauth2/initiate-oauth-integration)
|
|
11
|
-
- [Get OAuth 2.0 Access Token and Refresh Tokens](https://developers.hubspot.com/docs/methods/oauth2/get-access-and-refresh-tokens)
|
|
12
|
-
- [Refresh OAuth 2.0 Access Token](https://developers.hubspot.com/docs/methods/oauth2/refresh-access-token)
|
|
13
10
|
- [Read a batch of contact objects by ID](https://developers.hubspot.com/docs-beta/crm/contacts)
|
|
11
|
+
### Note on the Data Base
|
|
12
|
+
This application uses MySQL database to store the events coming from Webhooks. There is a single events table:
|
|
13
|
+
```
|
|
14
|
+
create table if not exists events
|
|
15
|
+
(
|
|
16
|
+
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
17
|
+
event_type VARCHAR(255),
|
|
18
|
+
object_id int default null,
|
|
19
|
+
event_id bigint default null,
|
|
20
|
+
occurred_at bigint default null,
|
|
21
|
+
property_name varchar(255) default null,
|
|
22
|
+
property_value varchar(255) default null,
|
|
23
|
+
created_at datetime default CURRENT_TIMESTAMP
|
|
24
|
+
);
|
|
25
|
+
```
|
|
26
|
+
Please note that event_id sent by HubSpot needs to be stored as int
|
|
14
27
|
|
|
15
28
|
### Setup App
|
|
16
29
|
|
|
@@ -19,19 +32,15 @@ Make sure you have [Docker Compose](https://docs.docker.com/compose/) and [Ngrok
|
|
|
19
32
|
### Configure
|
|
20
33
|
|
|
21
34
|
1. Copy .env.template to .env
|
|
22
|
-
2. Paste your HUBSPOT_CLIENT_ID and
|
|
35
|
+
2. Paste your HUBSPOT_CLIENT_ID, HUBSPOT_CLIENT_SECRET, HUBSPOT_APPLICATION_ID and HUBSPOT_DEVELOPER_API_KEY
|
|
23
36
|
|
|
24
37
|
### Running
|
|
25
38
|
|
|
26
|
-
The best way to run this project (with the least configuration), is using docker compose.
|
|
39
|
+
The best way to run this project (with the least configuration), is using docker compose. Change to the webroot and start it
|
|
27
40
|
|
|
28
41
|
```bash
|
|
29
42
|
docker-compose up --build
|
|
30
43
|
```
|
|
31
|
-
In another terminal, run:
|
|
32
|
-
```bash
|
|
33
|
-
docker-compose run web rake db:create db:migrate
|
|
34
|
-
```
|
|
35
44
|
|
|
36
45
|
Copy Ngrok url from console. Now you should now be able to navigate to that url and use the application.
|
|
37
46
|
|
|
@@ -40,12 +49,6 @@ Copy Ngrok url from console. Now you should now be able to navigate to that url
|
|
|
40
49
|
If you are using Ngrok free plan and testing the application with large amount of import/deletions of Contacts you are likely to see Ngrok "Too Many Connections" error.
|
|
41
50
|
This is caused by a large amount of weebhooks events being sent to Ngrok tunnel. To avoid it you can deploy sample applications on your server w/o Ngrok or upgrade to Ngrok Enterprise version
|
|
42
51
|
|
|
43
|
-
###
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
Following [Webhooks Setup](https://developers.hubspot.com/docs/methods/webhooks/webhooks-overview) guide please note:
|
|
48
|
-
|
|
49
|
-
- Every time the app is restarted you should update the webhooks url
|
|
50
|
-
- The app supports `contact.creation` and `contact.deletion` subscription types only
|
|
51
|
-
- Subscription are paused by default. You need to activate them manually after creating
|
|
52
|
+
### HubSpot Signature
|
|
53
|
+
To help improve security, HubSpot webhooks are sent with signature so you can verify that it came from HubSpot. This sample application shows how to do that verification. You can read more about validation in general here: https://developers.hubspot.com/docs/api/webhooks/validating-requests.
|
|
54
|
+
The source code for validating webhooks is at [hubspot\utils\webhooks](../../hubspot/utils/webhooks.py) and [an usage example](./src/routes/webhooks.py).
|
|
@@ -63,57 +63,8 @@
|
|
|
63
63
|
color: #606c76
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
.
|
|
67
|
-
|
|
68
|
-
margin-left: 0;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.error-wrapper .result {
|
|
72
|
-
color: white;
|
|
73
|
-
background-color: red;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
input[type=datetime-local] {
|
|
77
|
-
width: 100%;
|
|
78
|
-
height: 3.8rem;
|
|
79
|
-
padding: .6rem 1.0rem;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
h3.alert-success {
|
|
83
|
-
text-align: center;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.delete-button {
|
|
87
|
-
margin-bottom: 0;
|
|
88
|
-
float: right;
|
|
89
|
-
margin-right: 20px;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.delete-button input {
|
|
93
|
-
margin-bottom: 0;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
company a {
|
|
97
|
-
color: #4e585f;
|
|
98
|
-
text-decoration: none;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.company a:hover {
|
|
102
|
-
text-decoration: none;
|
|
103
|
-
cursor: pointer;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.company .company-info {
|
|
107
|
-
display: block;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
pre {
|
|
111
|
-
line-height: 0.7;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
pre p {
|
|
115
|
-
margin: 0;
|
|
116
|
-
margin-left: 5px;
|
|
66
|
+
.hidden {
|
|
67
|
+
display: none;
|
|
117
68
|
}
|
|
118
69
|
|
|
119
70
|
.event.deletion {
|
|
@@ -131,10 +82,11 @@ pre p {
|
|
|
131
82
|
color: #ffffff;
|
|
132
83
|
}
|
|
133
84
|
|
|
134
|
-
.
|
|
135
|
-
|
|
85
|
+
.authorize-button {
|
|
86
|
+
justify-content: center;
|
|
136
87
|
}
|
|
137
88
|
|
|
138
|
-
.
|
|
139
|
-
|
|
89
|
+
.text-center {
|
|
90
|
+
text-align: center;
|
|
140
91
|
}
|
|
92
|
+
|
|
@@ -2,9 +2,14 @@ class EventsController < ApplicationController
|
|
|
2
2
|
MAX_BATCH_SIZE = 100
|
|
3
3
|
|
|
4
4
|
before_action :authorize
|
|
5
|
-
before_action :contacts, only: %i[index]
|
|
6
5
|
|
|
7
6
|
def index
|
|
7
|
+
@events = Event.all
|
|
8
|
+
contact_id_batches = @events.map(&:object_id).uniq.each_slice(MAX_BATCH_SIZE).to_a
|
|
9
|
+
@contacts = contact_id_batches.each_with_object({}) do |batch, memo|
|
|
10
|
+
batch = Services::Hubspot::Contacts::GetBatch.new(batch).call
|
|
11
|
+
batch.each { |contact| memo[contact[:id]] = { name: contact[:name] } }
|
|
12
|
+
end
|
|
8
13
|
end
|
|
9
14
|
|
|
10
15
|
def not_shown_count
|
|
@@ -20,14 +25,7 @@ class EventsController < ApplicationController
|
|
|
20
25
|
session['tokens'] = Token.instance.attributes
|
|
21
26
|
end
|
|
22
27
|
|
|
23
|
-
session['tokens'] = Services::Authorization::Tokens::Refresh.new(tokens: session['tokens'], request: request).call
|
|
24
|
-
Services::Authorization::
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def contacts
|
|
28
|
-
contact_id_batches = Event.all.map(&:object_id).uniq.each_slice(MAX_BATCH_SIZE).to_a
|
|
29
|
-
@contacts = contact_id_batches.each_with_object([]) do |batch, memo|
|
|
30
|
-
memo.concat Services::Hubspot::Contacts::GetBatch.new(batch).call
|
|
31
|
-
end
|
|
28
|
+
session['tokens'] = Services::Hubspot::Authorization::Tokens::Refresh.new(tokens: session['tokens'], request: request).call
|
|
29
|
+
Services::Hubspot::Authorization::Authorize.new(tokens: session['tokens']).call
|
|
32
30
|
end
|
|
33
31
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class HomeController < ApplicationController
|
|
2
|
+
before_action :authorize
|
|
3
|
+
|
|
4
|
+
def index
|
|
5
|
+
@target_url = url_for(controller: :webhooks, action: :callback, only_path: false, protocol: 'https')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
::Hubspot.configure do |config|
|
|
10
|
+
config.api_key = { 'hapikey' => ENV['HUBSPOT_DEVELOPER_API_KEY'] }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
app_id = ENV['HUBSPOT_APPLICATION_ID']
|
|
14
|
+
Services::Hubspot::Webhooks::PauseActiveSubscriptions.new(app_id: app_id).call
|
|
15
|
+
|
|
16
|
+
target_url = url_for(controller: :webhooks, action: :callback, only_path: false, protocol: 'https')
|
|
17
|
+
Services::Hubspot::Webhooks::ConfigureTargetUrl.new(app_id: app_id, target_url: target_url).call
|
|
18
|
+
|
|
19
|
+
subscriptions = [
|
|
20
|
+
{"event_type": "contact.propertyChange", "property_name": "firstname"},
|
|
21
|
+
{"event_type": "contact.creation"},
|
|
22
|
+
{"event_type": "contact.deletion"},
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
subscriptions.each do |subscription|
|
|
26
|
+
Services::Hubspot::Webhooks::CreateOrActivateSubscription.new(app_id: app_id, **subscription).call
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
redirect_to controller: :events, action: :index
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def authorize
|
|
35
|
+
unless authorized?
|
|
36
|
+
redirect_to login_path and return unless Token.any?
|
|
37
|
+
|
|
38
|
+
session['tokens'] = Token.instance.attributes
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
session['tokens'] = Services::Hubspot::Authorization::Tokens::Refresh.new(tokens: session['tokens'], request: request).call
|
|
42
|
+
Services::Hubspot::Authorization::Authorize.new(tokens: session['tokens']).call
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
module Oauth
|
|
2
2
|
class AuthorizationController < ApplicationController
|
|
3
3
|
def authorize
|
|
4
|
-
url = Services::Authorization::GetAuthorizationUri.new(request: request).call
|
|
4
|
+
url = Services::Hubspot::Authorization::GetAuthorizationUri.new(request: request).call
|
|
5
5
|
redirect_to url
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def callback
|
|
9
|
-
tokens = Services::Authorization::Tokens::Generate.new(
|
|
9
|
+
session[:tokens] = Services::Hubspot::Authorization::Tokens::Generate.new(
|
|
10
10
|
code: params[:code],
|
|
11
11
|
request: request
|
|
12
12
|
).call
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Services::Authorization::AuthorizeHubspot.new(tokens: tokens).call
|
|
16
|
-
redirect_to '/events'
|
|
13
|
+
Services::Hubspot::Authorization::Authorize.new(tokens: session[:tokens]).call
|
|
14
|
+
redirect_to '/'
|
|
17
15
|
end
|
|
16
|
+
|
|
17
|
+
def login;end
|
|
18
18
|
end
|
|
19
19
|
end
|
|
@@ -3,7 +3,7 @@ class WebhooksController < ApplicationController
|
|
|
3
3
|
|
|
4
4
|
def callback
|
|
5
5
|
webhooks = JSON.parse(request.raw_post)
|
|
6
|
-
webhooks.each { |webhook| Services::Hubspot::Webhooks::Handle.new(webhook).call }
|
|
6
|
+
webhooks.each { |webhook| Services::Hubspot::Webhooks::Handle.new(webhook: webhook, request: request).call }
|
|
7
7
|
render json: {}
|
|
8
8
|
end
|
|
9
9
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Authorization
|
|
4
|
+
class Authorize
|
|
5
|
+
def initialize(tokens:)
|
|
6
|
+
@tokens = tokens
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call
|
|
10
|
+
::Hubspot.configure do |config|
|
|
11
|
+
config.access_token = @tokens[:access_token]
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Authorization
|
|
4
|
+
class GetAuthorizationUri
|
|
5
|
+
CALLBACK_PATH = '/oauth/callback'.freeze
|
|
6
|
+
|
|
7
|
+
def initialize(request:)
|
|
8
|
+
@request = request
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call
|
|
12
|
+
check_presence_of_credentials
|
|
13
|
+
|
|
14
|
+
::Hubspot::OAuthHelper.authorize_url(
|
|
15
|
+
client_id: ENV['HUBSPOT_CLIENT_ID'],
|
|
16
|
+
redirect_uri: redirect_uri,
|
|
17
|
+
scope: %w[contacts]
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def redirect_uri
|
|
24
|
+
@request.protocol + @request.host_with_port + CALLBACK_PATH
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def check_presence_of_credentials
|
|
28
|
+
return if ENV['HUBSPOT_CLIENT_ID'].present?
|
|
29
|
+
|
|
30
|
+
raise(ExceptionHandler::HubspotError.new, 'Please specify HUBSPOT_CLIENT_ID in .env')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Authorization
|
|
4
|
+
module Tokens
|
|
5
|
+
class Base
|
|
6
|
+
CALLBACK_PATH = '/oauth/callback'.freeze
|
|
7
|
+
|
|
8
|
+
def expires_at(expires_in)
|
|
9
|
+
Time.current + (expires_in * 0.95).round
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def redirect_uri
|
|
15
|
+
@request.protocol + @request.host_with_port + CALLBACK_PATH
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/generate.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Authorization
|
|
4
|
+
module Tokens
|
|
5
|
+
class Generate < Tokens::Base
|
|
6
|
+
def initialize(code:, request:)
|
|
7
|
+
@code = code
|
|
8
|
+
@request = request
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call
|
|
12
|
+
default_api = ::Hubspot::OAuth::DefaultApi.new
|
|
13
|
+
tokens = default_api.create_token(
|
|
14
|
+
grant_type: :authorization_code,
|
|
15
|
+
code: @code,
|
|
16
|
+
redirect_uri: redirect_uri,
|
|
17
|
+
client_id: ENV['HUBSPOT_CLIENT_ID'],
|
|
18
|
+
client_secret: ENV['HUBSPOT_CLIENT_SECRET'],
|
|
19
|
+
return_type: 'Object'
|
|
20
|
+
)
|
|
21
|
+
tokens[:expires_at] = expires_at(tokens[:expires_in])
|
|
22
|
+
tokens
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/refresh.rb
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Authorization
|
|
4
|
+
module Tokens
|
|
5
|
+
class Refresh < Tokens::Base
|
|
6
|
+
def initialize(tokens:, request:)
|
|
7
|
+
@tokens = tokens
|
|
8
|
+
@request = request
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call
|
|
12
|
+
@tokens = refresh_tokens if Time.current > @tokens[:expires_at]
|
|
13
|
+
@tokens
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def refresh_tokens
|
|
19
|
+
default_api = ::Hubspot::OAuth::DefaultApi.new
|
|
20
|
+
tokens = default_api.create_token(
|
|
21
|
+
grant_type: :refresh_token,
|
|
22
|
+
refresh_token: @tokens[:refresh_token],
|
|
23
|
+
redirect_uri: redirect_uri,
|
|
24
|
+
client_id: ENV['HUBSPOT_CLIENT_ID'],
|
|
25
|
+
client_secret: ENV['HUBSPOT_CLIENT_SECRET'],
|
|
26
|
+
return_type: 'Object'
|
|
27
|
+
)
|
|
28
|
+
tokens[:expires_at] = expires_at(tokens[:expires_in])
|
|
29
|
+
tokens
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/configure_target_url.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Webhooks
|
|
4
|
+
class ConfigureTargetUrl
|
|
5
|
+
def initialize(app_id:, target_url:)
|
|
6
|
+
@app_id = app_id
|
|
7
|
+
@target_url = target_url
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def call
|
|
11
|
+
::Hubspot::Webhooks::SettingsApi.new.configure(
|
|
12
|
+
@app_id,
|
|
13
|
+
settings_change_request(@target_url)
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def settings_change_request(target_url)
|
|
20
|
+
::Hubspot::Webhooks::SettingsChangeRequest.new(target_url: target_url)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Services
|
|
2
|
+
module Hubspot
|
|
3
|
+
module Webhooks
|
|
4
|
+
class CreateOrActivateSubscription
|
|
5
|
+
def initialize(app_id:, event_type:, property_name: nil)
|
|
6
|
+
@app_id = app_id
|
|
7
|
+
@event_type = event_type
|
|
8
|
+
@property_name = property_name
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call
|
|
12
|
+
begin
|
|
13
|
+
request = subscription_create_request(event_type: @event_type, property_name: @property_name)
|
|
14
|
+
::Hubspot::Webhooks::SubscriptionsApi.new.create(
|
|
15
|
+
@app_id,
|
|
16
|
+
request
|
|
17
|
+
)
|
|
18
|
+
rescue => e
|
|
19
|
+
existing_subscription_id = JSON.parse(JSON.parse(e.response_body)['context']['subscriptionIds'][0])[0]
|
|
20
|
+
::Hubspot::Webhooks::SubscriptionsApi.new.update(
|
|
21
|
+
existing_subscription_id,
|
|
22
|
+
@app_id,
|
|
23
|
+
subscription_patch_request: subscription_patch_request
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def subscription_create_request(event_type:, property_name:)
|
|
31
|
+
::Hubspot::Webhooks::SubscriptionCreateRequest.new(
|
|
32
|
+
active: true,
|
|
33
|
+
event_type: event_type,
|
|
34
|
+
property_name: property_name,
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def subscription_patch_request
|
|
39
|
+
::Hubspot::Webhooks::SubscriptionPatchRequest.new(enabled: true)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|