Class: Spaceship::ConnectAPI::Client

Inherits:
Object
  • Object
show all
Defined in:
spaceship/lib/spaceship/connect_api/client.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cookie: nil, current_team_id: nil, token: nil, tunes_client: nil, portal_client: nil) ⇒ Client

Returns a new instance of Client.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 65

def initialize(cookie: nil, current_team_id: nil, token: nil, tunes_client: nil, portal_client: nil)
  @token = token

  # If using web session...
  # Spaceship::Tunes is needed for TestFlight::API, Tunes::API, and Users::API
  # Spaceship::Portal is needed for Provisioning::API
  @tunes_client = tunes_client
  @portal_client = portal_client

  # Extending this instance to add API endpoints from these modules
  # Each of these modules adds a new setter method for an instance
  # of an ConnectAPI::APIClient
  # These get set in set_indvidual_clients
  self.extend(Spaceship::ConnectAPI::TestFlight::API)
  self.extend(Spaceship::ConnectAPI::Tunes::API)
  self.extend(Spaceship::ConnectAPI::Provisioning::API)
  self.extend(Spaceship::ConnectAPI::Users::API)

  set_indvidual_clients(
    cookie: cookie,
    current_team_id: current_team_id,
    token: token,
    tunes_client: @tunes_client,
    portal_client: @portal_client
  )
end

Instance Attribute Details

#portal_clientObject

Returns the value of attribute portal_client.



12
13
14
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 12

def portal_client
  @portal_client
end

#tokenObject

Returns the value of attribute token.



10
11
12
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 10

def token
  @token
end

#tunes_clientObject

Returns the value of attribute tunes_client.



11
12
13
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 11

def tunes_client
  @tunes_client
end

Class Method Details

.auth(key_id: nil, issuer_id: nil, filepath: nil) ⇒ Spaceship::ConnectAPI::Client

Initializes client with Apple’s App Store Connect JWT auth key.

This method will automatically use the key id, issuer id, and filepath from environment variables if not given.

All three parameters are needed to authenticate.

Parameters:

  • key_id (String) (defaults to: nil)

    (optional): The key id

  • issuer_id (String) (defaults to: nil)

    (optional): The issuer id

  • filepath (String) (defaults to: nil)

    (optional): The filepath

Returns:

Raises:

  • InvalidUserCredentialsError: raised if authentication failed



28
29
30
31
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 28

def self.auth(key_id: nil, issuer_id: nil, filepath: nil)
  token = Spaceship::ConnectAPI::Token.create(key_id: key_id, issuer_id: issuer_id, filepath: filepath)
  return ConnectAPI::Client.new(token: token)
end

.login(user = nil, password = nil, use_portal: true, use_tunes: true, portal_team_id: nil, tunes_team_id: nil, team_name: nil) ⇒ Spaceship::ConnectAPI::Client

Authenticates with Apple’s web services. This method has to be called once to generate a valid session.

This method will automatically use the username from the Appfile (if available) and fetch the password from the Keychain (if available)

Parameters:

  • user (String) (defaults to: nil)

    (optional): The username (usually the email address)

  • password (String) (defaults to: nil)

    (optional): The password

  • use_portal (Boolean) (defaults to: true)

    (optional): Whether to log in to Spaceship::Portal or not

  • use_tunes (Boolean) (defaults to: true)

    (optional): Whether to log in to Spaceship::Tunes or not

  • portal_team_id (String) (defaults to: nil)

    (optional): The Spaceship::Portal team id

  • tunes_team_id (String) (defaults to: nil)

    (optional): The Spaceship::Tunes team id

  • team_name (String) (defaults to: nil)

    (optional): The team name

Returns:

Raises:

  • InvalidUserCredentialsError: raised if authentication failed



50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 50

def self.(user = nil, password = nil, use_portal: true, use_tunes: true, portal_team_id: nil, tunes_team_id: nil, team_name: nil)
  portal_client = Spaceship::Portal.(user, password) if use_portal
  tunes_client = Spaceship::Tunes.(user, password) if use_tunes

  # The clients will automatically select the first team if none is given
  if portal_client && (!portal_team_id.nil? || !team_name.nil?)
    portal_client.select_team(team_id: portal_team_id, team_name: team_name)
  end
  if tunes_client && (!tunes_team_id.nil? || !team_name.nil?)
    tunes_client.select_team(team_id: tunes_team_id, team_name: team_name)
  end

  return ConnectAPI::Client.new(tunes_client: tunes_client, portal_client: portal_client)
end

Instance Method Details

#in_house?Boolean

Returns:

  • (Boolean)


92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 92

def in_house?
  if token
    if token.in_house.nil?
      message = [
        "Cannot determine if team is App Store or Enterprise via the App Store Connect API (yet)",
        "Set 'in_house' on your Spaceship::ConnectAPI::Token",
        "Or set 'in_house' in your App Store Connect API key JSON file",
        "Or set the 'SPACESHIP_CONNECT_API_IN_HOUSE' environment variable to 'true'",
        "View more info in the docs at https://docs.fastlane.tools/app-store-connect-api/"
      ]
      raise message.join('\n')
    end
    return !!token.in_house
  elsif @portal_client
    return @portal_client.in_house?
  else
    raise "No App Store Connect API token or Portal Client set"
  end
end

#select_team(portal_team_id: nil, tunes_team_id: nil, team_name: nil) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'spaceship/lib/spaceship/connect_api/client.rb', line 112

def select_team(portal_team_id: nil, tunes_team_id: nil, team_name: nil)
  @portal_client.select_team(team_id: portal_team_id, team_name: team_name) unless @portal_client.nil?
  @tunes_client.select_team(team_id: tunes_team_id, team_name: team_name) unless @tunes_client.nil?

  # Updating the tunes and portal clients requires resetting
  # of the clients in the API modules
  set_indvidual_clients(
    cookie: nil,
    current_team_id: nil,
    token: nil,
    tunes_client: tunes_client,
    portal_client: portal_client
  )
end