magic-admin 0.1.3 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b2721444247603f2b017dbb7fe6bbd9c69bf43c2599b7387a507517ea2ff2a1e
4
- data.tar.gz: 60f188da5c724bd944cf67b137ebb2ff207b383eb4283001b81b079fa2416063
3
+ metadata.gz: ede94b2b390f884340868e4617be9079e5c826cc87a7b9987b306c065dcd631e
4
+ data.tar.gz: 9357a383e855816df3b594f30ae6638ec3d1c2a469d9f6697fed8fe8cae64020
5
5
  SHA512:
6
- metadata.gz: c7559b2eb31df236c76955de14797d72b31180a92d94e29c7a6c2af116274376427f1bca086ef1785b8c8eb1180d47506234cee0e2a7eec13293fc9e77c7a4df
7
- data.tar.gz: 1b46344396e84cbdc37a2d3a976ee7e6131bc4e2a96513b272f5034f7879001fb9bf303a6368d37cfaf1d66d86d638e9e9bc04966c7e0f9450f78bc7baf115e1
6
+ metadata.gz: 2230ff87ba679e82c4f040a313ee73c272e758fa339c0614565510872a44461d0903fae6c76b61417b7eb366bb531d78268d7fdcab8ef6f3b8ed097bee95beff
7
+ data.tar.gz: a5cea3c3dba4ac26e75d987e185c9fde47d7c21f4ae4ea01de930139e87ec5b20260576ad360b47715382667f2759ec473178115011accbf7299a76e4d210515
data/CHANGELOG.md CHANGED
@@ -16,6 +16,26 @@
16
16
 
17
17
  - <PR-#ISSUE> ...
18
18
 
19
+ ## `1.0.0` - 7/5/2023
20
+
21
+ #### Added
22
+
23
+ - <PR-#20> Add Magic Connect Admin SDK support for Token Resource
24
+ - [Security Enhancement]: Validate `aud` using Magic client ID.
25
+ - Pull client ID from Magic servers if not provided in constructor.
26
+
27
+ ## `0.2.0` - 11/23/2022
28
+
29
+ #### Added
30
+
31
+ - <PR-#18> Support mult-chain wallets in get_metadata calls
32
+
33
+ ## `0.1.4` - 04/05/2022
34
+
35
+ #### Changed
36
+
37
+ - <PR-#16> https://github.com/magiclabs/magic-admin-ruby/issues/15
38
+
19
39
  ## `0.1.3` - 03/29/2022
20
40
 
21
41
  #### Changed
@@ -9,6 +9,24 @@ module MagicAdmin
9
9
  # It provides methods to interact with the DID Token.
10
10
  class Token
11
11
 
12
+ # attribute reader for magic client object
13
+ attr_reader :magic
14
+
15
+ # The constructor allows you to create a token object
16
+ # when your application interacting with the Magic API
17
+ #
18
+ # Arguments:
19
+ # magic: A Magic object.
20
+ #
21
+ # Returns:
22
+ # A token object that provides access to all the supported resources.
23
+ #
24
+ # Examples:
25
+ # Token.new(<magic>)
26
+ def initialize(magic)
27
+ @magic = magic
28
+ end
29
+
12
30
  # Description:
13
31
  # Method validate did_token
14
32
  #
@@ -20,12 +38,13 @@ module MagicAdmin
20
38
  def validate(did_token)
21
39
  time = Time.now.to_i
22
40
  proof, claim = decode(did_token)
23
- rec_address = rec_pub_address(claim, proof)
41
+ rec_address = rec_pub_address(claim, proof).to_s
24
42
 
25
43
  validate_public_address!(rec_address, did_token)
26
44
  validate_claim_fields!(claim)
27
45
  validate_claim_ext!(time, claim["ext"])
28
46
  validate_claim_nbf!(time, claim["nbf"])
47
+ validate_claim_aud!(magic.client_id, claim["aud"])
29
48
  end
30
49
 
31
50
  # Description:
@@ -141,6 +160,15 @@ module MagicAdmin
141
160
  raise DIDTokenError, message
142
161
  end
143
162
 
163
+ def validate_claim_aud!(client_id, claim_aud)
164
+
165
+ return true unless client_id != claim_aud
166
+
167
+ message = "Audience does not match client ID. Please ensure your secret key matches the application which generated the DID token."
168
+ raise DIDTokenError, message
169
+ end
170
+
144
171
  end
145
172
  end
146
173
  end
174
+
@@ -34,43 +34,58 @@ module MagicAdmin
34
34
  # Arguments:
35
35
  # issuer: Extracted iss component of DID Token generated by a Magic user
36
36
  # on the client-side.
37
+ # wallet_type: The type of wallet to retrieve. To query specific wallet(s),
38
+ # the value passed must be consistent with the enumerated values in
39
+ # MagicAdmin::Resource::WalletType. ALL wallets will be returned if wallet_type=ANY
40
+ # is passed. If the wallet_type is None or does not match any WalletType
41
+ # enums, then no wallets are returned.
37
42
  #
38
43
  # Returns:
39
44
  # Metadata information about the user
40
- def get_metadata_by_issuer(issuer)
45
+ def get_metadata_by_issuer(issuer, wallet_type=MagicAdmin::Resource::WalletType::NONE)
41
46
  headers = MagicAdmin::Util.headers(magic.secret_key)
42
- options = { params: { issuer: issuer }, headers: headers }
47
+ options = { params: { issuer: issuer , wallet_type: wallet_type }, headers: headers }
43
48
  magic.http_client
44
49
  .call(:get, "/v1/admin/auth/user/get", options)
45
50
  end
46
51
 
47
52
  # Description:
48
53
  # Method Retrieves information about the user by
49
- # the supplied public_address
54
+ # the supplied public_address and wallet type
50
55
  #
51
56
  # Arguments:
52
57
  # public_address: Extracted The user's Ethereum public address component
53
58
  # of DID Token generated by a Magic user on the client-side.
59
+ # wallet_type: The type of wallet to retrieve. To query specific wallet(s),
60
+ # the value passed must be consistent with the enumerated values in
61
+ # MagicAdmin::Resource::WalletType. ALL wallets will be returned if wallet_type=ANY
62
+ # is passed. If the wallet_type is None or does not match any WalletType
63
+ # enums, then no wallets are returned.
54
64
  #
55
65
  # Returns:
56
66
  # Metadata information about the user
57
- def get_metadata_by_public_address(public_address)
67
+ def get_metadata_by_public_address(public_address, wallet_type=MagicAdmin::Resource::WalletType::NONE)
58
68
  issuer = token.construct_issuer_with_public_address(public_address)
59
- get_metadata_by_issuer(issuer)
69
+ get_metadata_by_issuer(issuer, wallet_type)
60
70
  end
61
71
 
62
72
  # Description:
63
73
  # Method Retrieves information about the user by
64
- # the supplied DID Token
74
+ # the supplied DID Token and wallet type
65
75
  #
66
76
  # Arguments:
67
77
  # did_token: A DID Token generated by a Magic user on the client-side.
78
+ # wallet_type: The type of wallet to retrieve. To query specific wallet(s),
79
+ # the value passed must be consistent with the enumerated values in
80
+ # MagicAdmin::Resource::WalletType. ALL wallets will be returned if wallet_type=ANY
81
+ # is passed. If the wallet_type is None or does not match any WalletType
82
+ # enums, then no wallets are returned.
68
83
  #
69
84
  # Returns:
70
85
  # Metadata information about the user
71
- def get_metadata_by_token(did_token)
86
+ def get_metadata_by_token(did_token, wallet_type=MagicAdmin::Resource::WalletType::NONE)
72
87
  issuer = token.get_issuer(did_token)
73
- get_metadata_by_issuer(issuer)
88
+ get_metadata_by_issuer(issuer, wallet_type)
74
89
  end
75
90
 
76
91
  # Description:
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MagicAdmin
4
+ module Resource
5
+ class WalletType
6
+ ETH = "ETH"
7
+ HARMONY = "HARMONY"
8
+ ICON = "ICON"
9
+ FLOW = "FLOW"
10
+ TEZOS = "TEZOS"
11
+ ZILLIQA = "ZILLIQA"
12
+ POLKADOT = "POLKADOT"
13
+ SOLANA = "SOLANA"
14
+ AVAX = "AVAX"
15
+ ALGOD = "ALGOD"
16
+ COSMOS = "COSMOS"
17
+ CELO = "CELO"
18
+ BITCOIN = "BITCOIN"
19
+ NEAR = "NEAR"
20
+ HELIUM = "HELIUM"
21
+ CONFLUX = "CONFLUX"
22
+ TERRA = "TERRA"
23
+ TAQUITO = "TAQUITO"
24
+ ED = "ED"
25
+ HEDERA = "HEDERA"
26
+ NONE = "NONE"
27
+ ANY = "ANY"
28
+ end
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MagicAdmin
4
- VERSION = "0.1.3"
4
+ VERSION = "1.0.0"
5
5
  end
data/lib/magic-admin.rb CHANGED
@@ -24,6 +24,7 @@ require "magic-admin/http/response"
24
24
  # Magic Resource Classes
25
25
  require "magic-admin/resource/token"
26
26
  require "magic-admin/resource/user"
27
+ require "magic-admin/resource/wallet"
27
28
 
28
29
  # Magic Class to access resources
29
30
  class Magic
@@ -37,6 +38,9 @@ class Magic
37
38
  # attribute reader for magic http client
38
39
  attr_reader :http_client
39
40
 
41
+ # attribute reader for magic client id
42
+ attr_reader :client_id
43
+
40
44
  # The constructor allows you to specify your own API secret key
41
45
  # and HTTP request strategy when your application interacting
42
46
  # with the Magic API.
@@ -71,9 +75,11 @@ class Magic
71
75
  def initialize(api_secret_key: nil,
72
76
  retries: nil,
73
77
  timeout: nil,
74
- backoff: nil)
78
+ backoff: nil,
79
+ client_id: nil)
75
80
  secret_key!(api_secret_key)
76
81
  http_client!(retries, timeout, backoff)
82
+ client_id!(client_id, api_secret_key)
77
83
  end
78
84
 
79
85
  # Description:
@@ -97,7 +103,7 @@ class Magic
97
103
  # all the supported resources.
98
104
 
99
105
  def token
100
- MagicAdmin::Resource::Token.new
106
+ MagicAdmin::Resource::Token.new(self)
101
107
  end
102
108
 
103
109
  private
@@ -132,4 +138,20 @@ class Magic
132
138
  configure_timeout(timeout),
133
139
  configure_backoff(backoff))
134
140
  end
141
+
142
+ def client_id!(client_id, secret_key)
143
+ @client_id = client_id || ENV["MAGIC_CLIENT_ID"]
144
+ if !@client_id
145
+ headers = MagicAdmin::Util.headers(secret_key)
146
+ options = { headers: headers }
147
+ response = self.http_client
148
+ .call(:get, "/v1/admin/client/get", options)
149
+
150
+ message = "Magic api secret key is not valid."
151
+ raise MagicAdmin::MagicError, message unless response.data[:data][:client_id]
152
+
153
+ @client_id = response.data[:data][:client_id]
154
+ end
155
+ end
156
+
135
157
  end
data/test/magic_test.rb CHANGED
@@ -4,7 +4,17 @@ require "spec_helper"
4
4
 
5
5
  describe Magic do
6
6
  let(:env_secret_key) { "<ENV_MAGIC_API_SECRET_KEY>" }
7
- let(:agr_secret_key) { "<ARG_MAGIC_API_SECRET_KEY>" }
7
+ let(:arg_secret_key) { "<ARG_MAGIC_API_SECRET_KEY>" }
8
+
9
+ let(:env_client_id) { "<ENV_MAGIC_CLIENT_ID>" }
10
+ let(:arg_client_id) { "<ARG_MAGIC_CLIENT_ID>" }
11
+ let(:returned_client_id) { "<RETURNED_CLIENT_ID>" }
12
+
13
+ before(:each) do
14
+ allow_any_instance_of(MagicAdmin::Http::Client).to receive(:call).and_return(
15
+ double(data: { data: { client_id: returned_client_id } })
16
+ )
17
+ end
8
18
 
9
19
  describe "magic object without arguments and environment variables" do
10
20
  it "should raise an error" do
@@ -20,14 +30,14 @@ describe Magic do
20
30
  end
21
31
 
22
32
  it "should be set with arguments" do
23
- magic = Magic.new(api_secret_key: agr_secret_key)
24
- expect(magic.secret_key).to eq(agr_secret_key)
33
+ magic = Magic.new(api_secret_key: arg_secret_key)
34
+ expect(magic.secret_key).to eq(arg_secret_key)
25
35
  end
26
36
 
27
37
  it "should be set with arguments ignore environment variable" do
28
38
  ENV["MAGIC_API_SECRET_KEY"] = env_secret_key
29
- magic = Magic.new(api_secret_key: agr_secret_key)
30
- expect(magic.secret_key).to eq(agr_secret_key)
39
+ magic = Magic.new(api_secret_key: arg_secret_key)
40
+ expect(magic.secret_key).to eq(arg_secret_key)
31
41
  expect(magic.secret_key).not_to eq(env_secret_key)
32
42
  end
33
43
  end
@@ -121,4 +131,45 @@ describe Magic do
121
131
  end
122
132
  end
123
133
  end
134
+
135
+ describe "magic object set client_id" do
136
+
137
+ let(:api_secret_key) { "<API_SECRET_KEY>" }
138
+
139
+ before(:each) do
140
+ ENV["MAGIC_API_SECRET_KEY"] = api_secret_key
141
+ end
142
+
143
+ it "should be set with environment variable" do
144
+ ENV["MAGIC_CLIENT_ID"] = env_client_id
145
+ magic = Magic.new
146
+ expect(magic.client_id).to eq(env_client_id)
147
+ end
148
+
149
+ it "should be set with argument" do
150
+ ENV["MAGIC_CLIENT_ID"] = nil
151
+ magic = Magic.new(client_id: arg_client_id)
152
+ expect(magic.client_id).to eq(arg_client_id)
153
+ end
154
+
155
+ it "should be set with argument ignore environment variable" do
156
+ ENV["MAGIC_CLIENT_ID"] = env_client_id
157
+ magic = Magic.new(client_id: arg_client_id)
158
+ expect(magic.client_id).to eq(arg_client_id)
159
+ expect(magic.client_id).not_to eq(env_client_id)
160
+ end
161
+
162
+ it "should retrieve from API if not set" do
163
+ ENV["MAGIC_CLIENT_ID"] = nil
164
+ magic = Magic.new
165
+ expect(magic.client_id).to eq(returned_client_id)
166
+ end
167
+
168
+ it "should raise an error if API key is invalid" do
169
+ allow_any_instance_of(MagicAdmin::Http::Client).to receive(:call).and_return(
170
+ double(data: { data: { } })
171
+ )
172
+ expect { Magic.new }.to raise_exception MagicAdmin::MagicError
173
+ end
174
+ end
124
175
  end
@@ -3,11 +3,16 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe MagicAdmin::Resource::Token do
6
+ let(:client_id) {'did:magic:testtest-test-test-test-testtesttest'}
7
+ let(:magic) { instance_double("MagicAdmin::Magic", client_id: client_id) }
8
+
9
+ subject(:token) { described_class.new(magic) }
10
+
6
11
  describe "instance methods" do
7
12
  describe "public methods" do
8
13
  it "#validate" do
9
- claim = { "ext" => 1000, "nbf" => "nbf" }
10
- rec_address = double("rec_address")
14
+ claim = { "ext" => 1000, "nbf" => "nbf", "aud" => client_id }
15
+ rec_address = double("rec_address").to_s
11
16
  proof = double("proof")
12
17
  time_now = 1_202_020
13
18
  allow(Time).to receive(:now).and_return(time_now)
@@ -27,6 +32,9 @@ describe MagicAdmin::Resource::Token do
27
32
 
28
33
  expect(subject).to receive(:validate_claim_nbf!)
29
34
  .with(time_now, claim["nbf"])
35
+
36
+ expect(subject).to receive(:validate_claim_aud!)
37
+ .with(client_id, claim["aud"])
30
38
 
31
39
  subject.validate(spec_did_token)
32
40
  end
@@ -182,6 +190,25 @@ describe MagicAdmin::Resource::Token do
182
190
  end .to raise_error(MagicAdmin::DIDTokenError, msg)
183
191
  end
184
192
  end
193
+
194
+ context "#validate_claim_aud!" do
195
+ it "return true when aud matches" do
196
+ claim_aud = 'aud'
197
+ client_id = 'aud'
198
+ expect(subject.send(:validate_claim_ext!,
199
+ client_id,
200
+ claim_aud)).to be_truthy
201
+ end
202
+
203
+ it "raise error when aud does not match" do
204
+ claim_aud = 'audDiff'
205
+ client_id = 'aud'
206
+ msg = "Audience does not match client ID. Please ensure your secret key matches the application which generated the DID token."
207
+ expect do
208
+ subject.send(:validate_claim_aud!, client_id, claim_aud)
209
+ end .to raise_error(MagicAdmin::DIDTokenError, msg)
210
+ end
211
+ end
185
212
  end
186
213
  end
187
214
  end
@@ -3,17 +3,17 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe MagicAdmin::Resource::User do
6
- let(:magic) { Magic.new(api_secret_key: spec_api_secret_key) }
6
+ let(:magic) { Magic.new(api_secret_key: spec_api_secret_key, client_id: spec_client_id) }
7
7
  let(:public_address) do
8
- MagicAdmin::Resource::Token.new.get_public_address(spec_did_token)
8
+ MagicAdmin::Resource::Token.new(magic).get_public_address(spec_did_token)
9
9
  end
10
10
 
11
11
  let(:issuer) do
12
- MagicAdmin::Resource::Token.new.get_issuer(spec_did_token)
12
+ MagicAdmin::Resource::Token.new(magic).get_issuer(spec_did_token)
13
13
  end
14
14
 
15
15
  let(:construct_issuer_with_public_address) do
16
- MagicAdmin::Resource::Token.new.construct_issuer_with_public_address(public_address)
16
+ MagicAdmin::Resource::Token.new(magic).construct_issuer_with_public_address(public_address)
17
17
  end
18
18
 
19
19
  let(:stub_response_body) do
@@ -26,19 +26,47 @@ describe MagicAdmin::Resource::User do
26
26
  expect(subject).to respond_to(:magic)
27
27
  end
28
28
 
29
- context "#get_metadata_by_issuer" do
30
- it "send request with options" do
29
+ describe "#get_metadata_by_issuer with or without wallet" do
30
+ before(:each) do
31
31
  allow(MagicAdmin::Util).to receive(:headers)
32
- .with(magic.secret_key)
33
- .and_return({})
34
- expect(magic.http_client).to receive(:call)
35
- .with(:get,
36
- "/v1/admin/auth/user/get",
37
- {
38
- params: { issuer: issuer }, headers: {}
39
- })
40
-
41
- subject.get_metadata_by_issuer(issuer)
32
+ .with(magic.secret_key)
33
+ .and_return({})
34
+ end
35
+
36
+ context "#get_metadata_by_issuer no wallet" do
37
+ it "send request with options" do
38
+ expect(magic.http_client).to receive(:call)
39
+ .with(:get,
40
+ "/v1/admin/auth/user/get",
41
+ {
42
+ params: { issuer: issuer, wallet_type: MagicAdmin::Resource::WalletType::NONE }, headers: {}
43
+ })
44
+ subject.get_metadata_by_issuer(issuer)
45
+ end
46
+ end
47
+
48
+ context "#get_metadata_by_issuer with wallet that does not exist" do
49
+ it "send request with options" do
50
+ expect(magic.http_client).to receive(:call)
51
+ .with(:get,
52
+ "/v1/admin/auth/user/get",
53
+ {
54
+ params: { issuer: issuer, wallet_type: "dne" }, headers: {}
55
+ })
56
+ subject.get_metadata_by_issuer(issuer, "dne")
57
+ end
58
+ end
59
+
60
+ context "#get_metadata_by_issuer with wallet" do
61
+ it "send request with options" do
62
+ expect(magic.http_client).to receive(:call)
63
+ .with(:get,
64
+ "/v1/admin/auth/user/get",
65
+ {
66
+ params: { issuer: issuer, wallet_type: MagicAdmin::Resource::WalletType::ALGOD }, headers: {}
67
+ })
68
+ subject.get_metadata_by_issuer(issuer, MagicAdmin::Resource::WalletType::ALGOD)
69
+ end
42
70
  end
43
71
  end
44
72
 
@@ -46,6 +74,7 @@ describe MagicAdmin::Resource::User do
46
74
  it "return response" do
47
75
  url = "https://api.magic.link/v1/admin/auth/user/get?issuer="
48
76
  url += construct_issuer_with_public_address
77
+ url += "&wallet_type=" + MagicAdmin::Resource::WalletType::NONE
49
78
  stub_request(:get, url)
50
79
  .to_return(status: 200, body: stub_response_body.to_json, headers: {})
51
80
  reps = subject.get_metadata_by_public_address(public_address)
@@ -53,46 +82,69 @@ describe MagicAdmin::Resource::User do
53
82
  end
54
83
  end
55
84
 
56
- context "#get_metadata_by_token" do
85
+ context "#get_metadata_by_public_address" do
57
86
  it "return response" do
58
87
  url = "https://api.magic.link/v1/admin/auth/user/get?issuer="
59
- url += issuer
88
+ url += construct_issuer_with_public_address
89
+ url += "&wallet_type=" + MagicAdmin::Resource::WalletType::SOLANA
60
90
  stub_request(:get, url)
61
91
  .to_return(status: 200, body: stub_response_body.to_json, headers: {})
62
- reps = subject.get_metadata_by_token(spec_did_token)
63
-
92
+ reps = subject.get_metadata_by_public_address(public_address, MagicAdmin::Resource::WalletType::SOLANA)
64
93
  expect(reps.status_code).to eq(200)
65
94
  end
66
95
  end
67
96
 
68
- context "#logout_by_issuer" do
97
+ context "#get_metadata_by_token" do
69
98
  it "return response" do
70
- url = "https://api.magic.link/v2/admin/auth/user/logout"
71
- stub_request(:post, url)
99
+ url = "https://api.magic.link/v1/admin/auth/user/get?issuer="
100
+ url += issuer
101
+ url += "&wallet_type=" + MagicAdmin::Resource::WalletType::NONE
102
+ stub_request(:get, url)
72
103
  .to_return(status: 200, body: stub_response_body.to_json, headers: {})
73
- reps = subject.logout_by_issuer(issuer)
104
+ reps = subject.get_metadata_by_token(spec_did_token)
74
105
 
75
106
  expect(reps.status_code).to eq(200)
76
107
  end
77
108
  end
78
109
 
79
- context "#logout_by_public_address" do
110
+ context "#get_metadata_by_token" do
80
111
  it "return response" do
81
- url = "https://api.magic.link/v2/admin/auth/user/logout"
82
- stub_request(:post, url)
112
+ url = "https://api.magic.link/v1/admin/auth/user/get?issuer="
113
+ url += issuer
114
+ url += "&wallet_type=" + MagicAdmin::Resource::WalletType::ANY
115
+ stub_request(:get, url)
83
116
  .to_return(status: 200, body: stub_response_body.to_json, headers: {})
84
- reps = subject.logout_by_public_address(public_address)
117
+ reps = subject.get_metadata_by_token(spec_did_token, MagicAdmin::Resource::WalletType::ANY)
118
+
85
119
  expect(reps.status_code).to eq(200)
86
120
  end
87
121
  end
88
122
 
89
- context "#logout_by_token" do
90
- it "return response" do
123
+ describe "#get_metadata_by_issuer object network strategy" do
124
+ before(:each) do
91
125
  url = "https://api.magic.link/v2/admin/auth/user/logout"
92
- stub_request(:post, url)
93
- .to_return(status: 200, body: stub_response_body.to_json, headers: {})
94
- reps = subject.logout_by_token(spec_did_token)
95
- expect(reps.status_code).to eq(200)
126
+ stub_request(:post, url).to_return(status: 200, body: stub_response_body.to_json, headers: {})
127
+ end
128
+
129
+ context "#logout_by_issuer" do
130
+ it "return response" do
131
+ reps = subject.logout_by_issuer(issuer)
132
+ expect(reps.status_code).to eq(200)
133
+ end
134
+ end
135
+
136
+ context "#logout_by_public_address" do
137
+ it "return response" do
138
+ reps = subject.logout_by_public_address(public_address)
139
+ expect(reps.status_code).to eq(200)
140
+ end
141
+ end
142
+
143
+ context "#logout_by_token" do
144
+ it "return response" do
145
+ reps = subject.logout_by_token(spec_did_token)
146
+ expect(reps.status_code).to eq(200)
147
+ end
96
148
  end
97
149
  end
98
150
  end
data/test/spec_helper.rb CHANGED
@@ -46,3 +46,6 @@ def spec_api_secret_key
46
46
  "sk_test_TESTTESTTESTTEST"
47
47
  end
48
48
 
49
+ def spec_client_id
50
+ "clientId12345="
51
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magic-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Magic Labs Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-01 00:00:00.000000000 Z
11
+ date: 2023-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eth
@@ -123,6 +123,7 @@ files:
123
123
  - lib/magic-admin/http/response.rb
124
124
  - lib/magic-admin/resource/token.rb
125
125
  - lib/magic-admin/resource/user.rb
126
+ - lib/magic-admin/resource/wallet.rb
126
127
  - lib/magic-admin/util.rb
127
128
  - lib/magic-admin/version.rb
128
129
  - magic-admin.gemspec
@@ -138,7 +139,7 @@ homepage: https://docs.magic.link/admin-sdk/ruby
138
139
  licenses:
139
140
  - MIT
140
141
  metadata: {}
141
- post_install_message:
142
+ post_install_message:
142
143
  rdoc_options: []
143
144
  require_paths:
144
145
  - lib
@@ -153,8 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
154
  - !ruby/object:Gem::Version
154
155
  version: '0'
155
156
  requirements: []
156
- rubygems_version: 3.2.15
157
- signing_key:
157
+ rubygems_version: 3.4.10
158
+ signing_key:
158
159
  specification_version: 4
159
160
  summary: Ruby bindings for the Magic Admin API
160
161
  test_files: