diff --git a/BotManager.gemspec b/BotManager.gemspec index 2a722a9..be2922e 100644 --- a/BotManager.gemspec +++ b/BotManager.gemspec @@ -43,4 +43,5 @@ Gem::Specification.new do |spec| spec.add_dependency "aws-sdk-lexmodelbuildingservice", "~> 1.10.0" spec.add_dependency "aws-sdk-lambda", "~> 1.10.0" spec.add_dependency "oauth2", "~> 1.4.1" + spec.add_dependency "alexa-smapi", "~> 0.1.0" end diff --git a/Gemfile.lock b/Gemfile.lock index 7d62f71..b429c99 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,6 +2,7 @@ PATH remote: . specs: BotManager (0.1.0) + alexa-smapi (~> 0.1.0) aws-sdk-lambda (~> 1.10.0) aws-sdk-lexmodelbuildingservice (~> 1.10.0) oauth2 (~> 1.4.1) @@ -9,9 +10,11 @@ PATH GEM remote: https://rubygems.org/ specs: + alexa-smapi (0.1.0) + oauth2 (~> 1.4.1) aws-eventstream (1.0.1) - aws-partitions (1.117.0) - aws-sdk-core (3.40.0) + aws-partitions (1.141.0) + aws-sdk-core (3.46.2) aws-eventstream (~> 1.0) aws-partitions (~> 1.0) aws-sigv4 (~> 1.0) diff --git a/lib/BotManager/alexa/api/client.rb b/lib/BotManager/alexa/api/client.rb deleted file mode 100644 index d3f4e1a..0000000 --- a/lib/BotManager/alexa/api/client.rb +++ /dev/null @@ -1,65 +0,0 @@ -require 'oauth2' -require_relative 'endpoints/skill_management' -require_relative 'endpoints/interaction_model_management' -require_relative 'endpoints/account_linking_management' -require_relative 'endpoints/beta_test_management' -require_relative 'endpoints/skill_validation' -require_relative 'endpoints/vendor_management' - -module BotManager - - module Alexa - - module Api - - class Client < ::OAuth2::AccessToken - - include Endpoints::SkillManagement - include Endpoints::InteractionModelManagement - include Endpoints::AccountLinkingManagement - include Endpoints::BetaTestManagement - include Endpoints::SkillValidation - include Endpoints::VendorManagement - - def initialize client_id, client_secret, refresh_token - - Faraday::Utils.default_params_encoder = Faraday::FlatParamsEncoder - - oauth2 = OAuth2::Client.new client_id, - client_secret, - :site => "https://api.amazonalexa.com/", - :authorize_url => "https://www.amazon.com/ap/oa", - :token_url => "https://api.amazon.com/auth/o2/token", - :header_format => "%s" - - params = { - refresh_token: refresh_token, - header_format: "%s" - } - - super(oauth2, '', params) - - new_token = self.refresh! - - @token = new_token.token - @expires_in = new_token.expires_in.to_i - @expires_at = new_token.expires_at.to_i - - end - - def refresh_token! - new_token = self.refresh! - - @token = new_token.token - @expires_in = new_token.expires_in.to_i - @expires_at = new_token.expires_at.to_i - @token - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/api/endpoints/account_linking_management.rb b/lib/BotManager/alexa/api/endpoints/account_linking_management.rb deleted file mode 100644 index f932866..0000000 --- a/lib/BotManager/alexa/api/endpoints/account_linking_management.rb +++ /dev/null @@ -1,43 +0,0 @@ -module BotManager - - module Alexa - - module Api - - module Endpoints - - module AccountLinkingManagement - - def get_account_linking_information skill_id, stage='development' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/accountLinkingClient" - - get(endpoint) - - end - - def update_account_linking skill_id, body, stage='development' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/accountLinkingClient" - - put(endpoint, {body: body.to_json}) - - end - - def delete_account_linking_partner skill_id - - endpoint = "/v1/skills/#{skill_id}/stages/development/accountLinkingClient" - - delete(endpoint) - - end - - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/api/endpoints/beta_test_management.rb b/lib/BotManager/alexa/api/endpoints/beta_test_management.rb deleted file mode 100644 index 6a54a67..0000000 --- a/lib/BotManager/alexa/api/endpoints/beta_test_management.rb +++ /dev/null @@ -1,211 +0,0 @@ -module BotManager - - module Alexa - - module Api - - module Endpoints - - module BetaTestManagement - - def create_beta_test skill_id, feedback_email - - endpoint = "/v1/skills/#{skill_id}/betaTest" - - post(endpoint, {body:{"feedbackEmail": feedback_email}}) - - end - - def get_beta_test skill_id - - endpoint = "/v1/skills/#{skill_id}/betaTest" - - get(endpoint) - - end - - def update_beta_test skill_id, feedback_email - - endpoint = "/v1/skills/#{skill_id}/betaTest" - - put(endpoint, {body:{"feedbackEmail": feedback_email}}) - - end - - def start_beta_test skill_id - - endpoint = "/v1/skills/#{skill_id}/betaTest/start" - - post(endpoint) - - end - - def end_beta_test skill_id - - endpoint = "/v1/skills/#{skill_id}/betaTest/end" - - post(endpoint) - - end - - def get_beta_testers skill_id, max_results=nil, next_token=nil - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers" - - if !max_results.nil? && !max_results.empty? - endpoint += "&maxResults=#{max_results}" - end - - if !next_token.nil? && !next_token.empty? - endpoint += "&nextToken=#{next_token}" - end - - get(endpoint) - - end - - def add_beta_tester skill_id, email_id - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/add" - - body = { - "testers": [ - { - "emailId": email_id - } - ] - } - - post(endpoint, {body: body}) - - end - - def add_beta_testers skill_id, email_ids=[] - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/add" - - testers = [] - - email_ids.each do |email| - testers.append({"emailId": email}) - end - - body = { - "testers": testers - } - - post(endpoint, {body: body}) - - end - - def remove_beta_tester skill_id, email_id - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/remove" - - body = { - "testers": [ - { - "emailId": email_id - } - ] - } - - post(endpoint, {body: body}) - - end - - def remove_beta_testers skill_id, email_ids=[] - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/remove" - - testers = [] - - email_ids.each do |email| - testers.append({"emailId": email}) - end - - body = { - "testers": testers - } - - post(endpoint, {body: body}) - - end - - def send_reminder_to_tester skill_id, email_id - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/sendReminder" - - body = { - "testers": [ - { - "emailId": email_id - } - ] - } - - post(endpoint, {body: body}) - - end - - def send_reminder_to_testers skill_id, email_ids=[] - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/sendReminder" - - testers = [] - - email_ids.each do |email| - testers.append({"emailId": email}) - end - - body = { - "testers": testers - } - - post(endpoint, {body: body}) - - end - - def request_feedback_from_tester skill_id, email_id - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/requestFeedback" - - body = { - "testers": [ - { - "emailId": email_id - } - ] - } - - post(endpoint, {body: body}) - - end - - def request_feedback_from_testers skill_id, email_ids=[] - - endpoint = "/v1/skills/#{skill_id}/betaTest/testers/requestFeedback" - - testers = [] - - email_ids.each do |email| - testers.append({"emailId": email}) - end - - body = { - "testers": testers - } - - post(endpoint, {body: body}) - - end - - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/api/endpoints/interaction_model_management.rb b/lib/BotManager/alexa/api/endpoints/interaction_model_management.rb deleted file mode 100644 index fe4f7cf..0000000 --- a/lib/BotManager/alexa/api/endpoints/interaction_model_management.rb +++ /dev/null @@ -1,35 +0,0 @@ -module BotManager - - module Alexa - - module Api - - module Endpoints - - module InteractionModelManagement - - def get_interaction_model skill_id, stage='development', locale='en-US' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/interactionModel/locales/#{locale}" - - get(endpoint) - - end - - def update_interaction_model skill_id, manifest, stage='development', locale='en-US' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/interactionModel/locales/#{locale}" - - put(endpoint, {body: manifest.to_json}) - - end - - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/api/endpoints/skill_management.rb b/lib/BotManager/alexa/api/endpoints/skill_management.rb deleted file mode 100644 index 4f2e88e..0000000 --- a/lib/BotManager/alexa/api/endpoints/skill_management.rb +++ /dev/null @@ -1,91 +0,0 @@ -module BotManager - - module Alexa - - module Api - - module Endpoints - - module SkillManagement - - def get_skills vendor_id, skill_ids=[], max_results=nil, next_token=nil - - endpoint = "/v1/skills?vendorId=#{vendor_id}" - - if (!skill_ids.nil? && !skill_ids.empty?) && skill_ids.length < 10 - - skill_ids_param = '' - - skill_ids.each do |id| - param = "skillId=#{id}" - skill_ids_param += "&#{param}" - end - - endpoint += "#{skill_ids_param}" - - end - - if (skill_ids.nil? || skill_ids.empty?) && (!max_results.nil? && !max_results.to_s.empty?) - endpoint += "&maxResults=#{max_results}" - end - - if (skill_ids.nil? || skill_ids.empty?) && (!next_token.nil? && !next_token.empty?) - endpoint += "&nextToken=#{next_token}" - end - - get(endpoint) - end - - def get_skill skill_id, stage='development' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/manifest" - - get(endpoint) - - end - - def create_skill vendor_id, manifest - - endpoint = '/v1/skills' - - body = { - "vendorId": vendor_id, - }.merge(manifest) - - post(endpoint, {body: body.to_json}) - - end - - def update_skill skill_id, manifest - - endpoint = "/v1/skills/#{skill_id}/stages/development/manifest" - - put(endpoint, {body: manifest.to_json}) - - end - - def get_skill_resource_status skill_id, resource='manifest' - - endpoint = "/v1/skills/#{skill_id}/status?resource=#{resource}" - - get(endpoint) - - end - - def delete_skill skill_id - - endpoint = "/v1/skills/#{skill_id}" - - delete(endpoint) - - end - - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/api/endpoints/skill_validation.rb b/lib/BotManager/alexa/api/endpoints/skill_validation.rb deleted file mode 100644 index 4be10f8..0000000 --- a/lib/BotManager/alexa/api/endpoints/skill_validation.rb +++ /dev/null @@ -1,43 +0,0 @@ -module BotManager - - module Alexa - - module Api - - module Endpoints - - module SkillValidation - - def validate_skill skill_id, locales=[], stage='development' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/validations" - - if locales.nil? && locales.empty? - locales = ['en-US'] - end - - body = { - locales: locales - } - - post(endpoint, {body: body}) - - end - - def get_skill_validation skill_id, validation_id, stage='development' - - endpoint = "/v1/skills/#{skill_id}/stages/#{stage}/validations/#{validation_id}" - - get(endpoint) - - end - - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/api/endpoints/vendor_management.rb b/lib/BotManager/alexa/api/endpoints/vendor_management.rb deleted file mode 100644 index 881df53..0000000 --- a/lib/BotManager/alexa/api/endpoints/vendor_management.rb +++ /dev/null @@ -1,27 +0,0 @@ -module BotManager - - module Alexa - - module Api - - module Endpoints - - module VendorManagement - - def get_vendors - - endpoint = "/v1/vendors" - - get(endpoint) - - end - - end - - end - - end - - end - -end \ No newline at end of file diff --git a/lib/BotManager/alexa/manager.rb b/lib/BotManager/alexa/manager.rb index 1c75fd6..bc90c2a 100644 --- a/lib/BotManager/alexa/manager.rb +++ b/lib/BotManager/alexa/manager.rb @@ -1,7 +1,7 @@ -require 'BotManager/alexa/api/client' require 'BotManager/alexa/builders/skill_manifest_builder' require 'BotManager/alexa/builders/new_skill_manifest_builder' require 'aws-sdk-lambda' +require 'alexa/smapi' module BotManager @@ -10,7 +10,7 @@ module Alexa class Manager def initialize client_id, client_secret, refresh_token, vendor_id - @client = Api::Client.new client_id, client_secret, refresh_token + @client = ::Alexa::SMAPI::Client.new client_id, client_secret, refresh_token @lambda = ::Aws::Lambda::Client.new @vendor_id = vendor_id @skills = {}