workos 1.6.1 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18ce86de81ae6d0135098cff2358718a85e32216b668fa8812561518765d08c3
4
- data.tar.gz: 8536d98714bbd426436f2b6ac0a24164da2837e6d4ec1f9162d4bcbb167fd344
3
+ metadata.gz: e98cbe7f34c4d550972ac7b4dc734e17ed9b2390b08898d2b20fdf5e69da71ea
4
+ data.tar.gz: c998bf772be7cc75e1730debd7efefa764d87676c62b325daf45784846ce3a12
5
5
  SHA512:
6
- metadata.gz: f4befc50b81553c325994aca87349d8c4badc3af319cd1924967542352dd5b9e0c36ad8375fa71f1605979dd9415e720d03bf55a9fe74bbba35d7fa2127d34ad
7
- data.tar.gz: 25f9bf26defd800826522200a2328f1ce1c1e1ae169cad9c3a297a4f45d0f120a9fd25d0d60d1ff5050c56408b7ef25619827a6083307f17203f66a0ce72c72e
6
+ metadata.gz: 01d4bcee2864d6a8b58e8cd3ffef78d77e11028bfbcd9005c4a2cecafaabe0cec97856f94b70aa9391dee50d08502ed8d7afa9456763d16a44f0fcc78a912694
7
+ data.tar.gz: ae83d9e5e204771f3d261a2f3135e077cc8b19d700ccf7984447e5536297ba65fba3779c3988daf612ce2c9624c9a825b8dd9b0e633e47c8839f3466a6837440
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- workos (1.6.1)
4
+ workos (2.1.1)
5
5
  sorbet-runtime (~> 0.5)
6
6
 
7
7
  GEM
@@ -60,7 +60,7 @@ GEM
60
60
  simplecov_json_formatter (0.1.2)
61
61
  sorbet (0.5.6388)
62
62
  sorbet-static (= 0.5.6388)
63
- sorbet-runtime (0.5.9300)
63
+ sorbet-runtime (0.5.9528)
64
64
  sorbet-static (0.5.6388-universal-darwin-14)
65
65
  sorbet-static (0.5.6388-universal-darwin-15)
66
66
  sorbet-static (0.5.6388-universal-darwin-16)
@@ -93,4 +93,4 @@ DEPENDENCIES
93
93
  yard
94
94
 
95
95
  BUNDLED WITH
96
- 2.2.22
96
+ 2.2.33
@@ -21,7 +21,7 @@ module WorkOS
21
21
  @name = T.let(raw.name, String)
22
22
  @connection_type = T.let(raw.connection_type, String)
23
23
  @domains = T.let(raw.domains, Array)
24
- @organization_id = T.let(raw.organization_id, String)
24
+ @organization_id = raw.organization_id
25
25
  @state = T.let(raw.state, String)
26
26
  @status = T.let(raw.status, String)
27
27
  @created_at = T.let(raw.created_at, String)
@@ -20,7 +20,7 @@ module WorkOS
20
20
  @domain = raw.domain
21
21
  @type = T.let(raw.type, String)
22
22
  @state = T.let(raw.state, String)
23
- @organization_id = T.let(raw.organization_id, String)
23
+ @organization_id = raw.organization_id
24
24
  @created_at = T.let(raw.created_at, String)
25
25
  @updated_at = T.let(raw.updated_at, String)
26
26
  end
@@ -53,6 +53,35 @@ module WorkOS
53
53
  )
54
54
  end
55
55
 
56
+ # Retrieve directory.
57
+ #
58
+ # @param [String] id Directory unique identifier
59
+ #
60
+ # @example
61
+ # WorkOS::SSO.get_directory(id: 'directory_01FK17DWRHH7APAFXT5B52PV0W')
62
+ # => #<WorkOS::Directory:0x00007fb6e4193d20
63
+ # @id="directory_01FK17DWRHH7APAFXT5B52PV0W",
64
+ # @name="Foo Corp",
65
+ # @domain="foo-corp.com",
66
+ # @type="okta scim v2.0",
67
+ # @state="linked",
68
+ # @organization_id="org_01F6Q6TFP7RD2PF6J03ANNWDKV",
69
+ # @created_at="2021-10-27T15:55:47.856Z",
70
+ # @updated_at="2021-10-27T16:03:43.990Z"
71
+ #
72
+ # @return [WorkOS::Directory]
73
+ sig { params(id: String).returns(WorkOS::Directory) }
74
+ def get_directory(id:)
75
+ request = get_request(
76
+ auth: true,
77
+ path: "/directories/#{id}",
78
+ )
79
+
80
+ response = execute_request(request: request)
81
+
82
+ WorkOS::Directory.new(response.body)
83
+ end
84
+
56
85
  # Retrieve directory groups.
57
86
  #
58
87
  # @param [Hash] options An options hash
@@ -23,7 +23,7 @@ module WorkOS
23
23
  @email = T.let(raw.email, String)
24
24
  @first_name = raw.first_name
25
25
  @last_name = raw.last_name
26
- @organization_id = T.let(raw.organization_id, String)
26
+ @organization_id = raw.organization_id
27
27
  @connection_id = T.let(raw.connection_id, String)
28
28
  @connection_type = T.let(raw.connection_type, String)
29
29
  @idp_id = raw.idp_id
data/lib/workos/sso.rb CHANGED
@@ -21,23 +21,27 @@ module WorkOS
21
21
  # Generate an Oauth2 authorization URL where your users will
22
22
  # authenticate using the configured SSO Identity Provider.
23
23
  #
24
+ # @param [String] redirect_uri The URI where users are directed
25
+ # after completing the authentication step. Must match a
26
+ # configured redirect URI on your WorkOS dashboard.
27
+ # @param [String] client_id The WorkOS client ID for the environment
28
+ # where you've configured your SSO connection.
24
29
  # @param [String] domain The domain for the relevant SSO Connection
25
- # configured on your WorkOS dashboard. One of provider or domain is
26
- # required
30
+ # configured on your WorkOS dashboard. One of provider, domain,
31
+ # connection, or organization is required.
32
+ # The domain is deprecated.
27
33
  # @param [String] provider A provider name for an Identity Provider
28
- # configured on your WorkOS dashboard. Only 'Google' is supported.
34
+ # configured on your WorkOS dashboard. Only 'GoogleOAuth' and
35
+ # 'MicrosoftOAuth' are supported.
29
36
  # @param [String] connection The ID for a Connection configured on
30
37
  # WorkOS.
31
- # @param [String] client_id The WorkOS client ID for the environment
32
- # where you've configured your SSO connection.
33
- # @param [String] redirect_uri The URI where users are directed
34
- # after completing the authentication step. Must match a
35
- # configured redirect URI on your WorkOS dashboard.
36
- # @param [String] state An aribtrary state object
38
+ # @param [String] organization The ID for an Organization configured
39
+ # on WorkOS.
40
+ # @param [String] state An arbitrary state object
37
41
  # that is preserved and available to the client in the response.
38
42
  # @example
39
43
  # WorkOS::SSO.authorization_url(
40
- # domain: 'acme.com',
44
+ # connection: 'conn_123',
41
45
  # client_id: 'project_01DG5TGK363GRVXP3ZS40WNGEZ',
42
46
  # redirect_uri: 'https://workos.com/callback',
43
47
  # state: {
@@ -45,19 +49,23 @@ module WorkOS
45
49
  # }.to_s
46
50
  # )
47
51
  #
48
- # => "https://api.workos.com/sso/authorize?domain=acme.com" \
52
+ # => "https://api.workos.com/sso/authorize?connection=conn_123" \
49
53
  # "&client_id=project_01DG5TGK363GRVXP3ZS40WNGEZ" \
50
54
  # "&redirect_uri=https%3A%2F%2Fworkos.com%2Fcallback&" \
51
55
  # "response_type=code&state=%7B%3Anext_page%3D%3E%22%2Fdocs%22%7D"
52
56
  #
53
57
  # @return [String]
58
+ # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
54
59
  sig do
55
60
  params(
56
61
  redirect_uri: String,
57
62
  client_id: T.nilable(String),
58
63
  domain: T.nilable(String),
64
+ domain_hint: T.nilable(String),
65
+ login_hint: T.nilable(String),
59
66
  provider: T.nilable(String),
60
67
  connection: T.nilable(String),
68
+ organization: T.nilable(String),
61
69
  state: T.nilable(String),
62
70
  ).returns(String)
63
71
  end
@@ -65,14 +73,23 @@ module WorkOS
65
73
  redirect_uri:,
66
74
  client_id: nil,
67
75
  domain: nil,
76
+ domain_hint: nil,
77
+ login_hint: nil,
68
78
  provider: nil,
69
79
  connection: nil,
80
+ organization: nil,
70
81
  state: ''
71
82
  )
83
+ if domain
84
+ warn '[DEPRECATION] `domain` is deprecated.
85
+ Please use `organization` instead.'
86
+ end
87
+
72
88
  validate_authorization_url_arguments(
73
89
  provider: provider,
74
90
  domain: domain,
75
91
  connection: connection,
92
+ organization: organization,
76
93
  )
77
94
 
78
95
  query = URI.encode_www_form({
@@ -81,12 +98,16 @@ module WorkOS
81
98
  response_type: 'code',
82
99
  state: state,
83
100
  domain: domain,
101
+ domain_hint: domain_hint,
102
+ login_hint: login_hint,
84
103
  provider: provider,
85
104
  connection: connection,
105
+ organization: organization,
86
106
  }.compact)
87
107
 
88
108
  "https://#{WorkOS::API_HOSTNAME}/sso/authorize?#{query}"
89
109
  end
110
+ # rubocop:enable Metrics/MethodLength, Metrics/ParameterLists
90
111
 
91
112
  sig do
92
113
  params(
@@ -229,16 +250,18 @@ module WorkOS
229
250
  domain: T.nilable(String),
230
251
  provider: T.nilable(String),
231
252
  connection: T.nilable(String),
253
+ organization: T.nilable(String),
232
254
  ).void
233
255
  end
234
256
  def validate_authorization_url_arguments(
235
257
  domain:,
236
258
  provider:,
237
- connection:
259
+ connection:,
260
+ organization:
238
261
  )
239
- if [domain, provider, connection].all?(&:nil?)
240
- raise ArgumentError, 'Either connection, domain, or ' \
241
- 'provider is required.'
262
+ if [domain, provider, connection, organization].all?(&:nil?)
263
+ raise ArgumentError, 'Either connection, domain, ' \
264
+ 'provider, or organization is required.'
242
265
  end
243
266
 
244
267
  return unless provider && !PROVIDERS.include?(provider)
@@ -10,7 +10,7 @@ module WorkOS
10
10
  const :name, String
11
11
  const :connection_type, String
12
12
  const :domains, T::Array[T.untyped]
13
- const :organization_id, String
13
+ const :organization_id, T.nilable(String)
14
14
  const :state, String
15
15
  const :status, String
16
16
  const :created_at, String
@@ -11,7 +11,7 @@ module WorkOS
11
11
  const :domain, T.nilable(String)
12
12
  const :type, String
13
13
  const :state, String
14
- const :organization_id, String
14
+ const :organization_id, T.nilable(String)
15
15
  const :created_at, String
16
16
  const :updated_at, String
17
17
  end
@@ -10,7 +10,7 @@ module WorkOS
10
10
  const :email, String
11
11
  const :first_name, T.nilable(String)
12
12
  const :last_name, T.nilable(String)
13
- const :organization_id, String
13
+ const :organization_id, T.nilable(String)
14
14
  const :connection_id, String
15
15
  const :connection_type, String
16
16
  const :idp_id, T.nilable(String)
@@ -2,5 +2,5 @@
2
2
  # typed: strong
3
3
 
4
4
  module WorkOS
5
- VERSION = '1.6.1'
5
+ VERSION = '2.1.1'
6
6
  end
@@ -65,7 +65,7 @@ module WorkOS
65
65
  tolerance: Integer,
66
66
  ).returns(T::Boolean)
67
67
  end
68
- # rubocop:disable Metrics/MethodLength
68
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
69
69
  def verify_header(
70
70
  payload:,
71
71
  sig_header:,
@@ -86,7 +86,9 @@ module WorkOS
86
86
  )
87
87
  end
88
88
 
89
- if timestamp < Time.now - tolerance
89
+ timestamp_to_time = Time.at(timestamp.to_i / 1000)
90
+
91
+ if timestamp_to_time < Time.now - tolerance
90
92
  raise WorkOS::SignatureVerificationError.new(
91
93
  message: 'Timestamp outside the tolerance zone',
92
94
  )
@@ -101,7 +103,7 @@ module WorkOS
101
103
 
102
104
  true
103
105
  end
104
- # rubocop:enable Metrics/MethodLength
106
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
105
107
 
106
108
  sig do
107
109
  params(
@@ -122,12 +124,12 @@ module WorkOS
122
124
  timestamp = timestamp.sub('t=', '')
123
125
  signature_hash = signature_hash.sub('v1=', '')
124
126
 
125
- [Time.at(timestamp.to_i), signature_hash]
127
+ [timestamp, signature_hash]
126
128
  end
127
129
 
128
130
  sig do
129
131
  params(
130
- timestamp: Time,
132
+ timestamp: String,
131
133
  payload: String,
132
134
  secret: String,
133
135
  ).returns(String)
@@ -137,7 +139,7 @@ module WorkOS
137
139
  payload:,
138
140
  secret:
139
141
  )
140
- unhashed_string = "#{timestamp.to_i}.#{payload}"
142
+ unhashed_string = "#{timestamp}.#{payload}"
141
143
  digest = OpenSSL::Digest.new('sha256')
142
144
  OpenSSL::HMAC.hexdigest(digest, secret, unhashed_string)
143
145
  end
@@ -143,6 +143,38 @@ describe WorkOS::DirectorySync do
143
143
  end
144
144
  end
145
145
 
146
+ describe '.get_directory' do
147
+ context 'with a valid id' do
148
+ it 'gets the directory details' do
149
+ VCR.use_cassette('directory_sync/get_directory_with_valid_id') do
150
+ directory = WorkOS::DirectorySync.get_directory(
151
+ id: 'directory_01FK17DWRHH7APAFXT5B52PV0W',
152
+ )
153
+
154
+ expect(directory.id).to eq('directory_01FK17DWRHH7APAFXT5B52PV0W')
155
+ expect(directory.name).to eq('Testing Active Attribute')
156
+ expect(directory.domain).to eq('example.me')
157
+ expect(directory.type).to eq('azure scim v2.0')
158
+ expect(directory.state).to eq('linked')
159
+ expect(directory.organization_id).to eq('org_01F6Q6TFP7RD2PF6J03ANNWDKV')
160
+ end
161
+ end
162
+ end
163
+
164
+ context 'with an invalid id' do
165
+ it 'raises an error' do
166
+ VCR.use_cassette('directory_sync/get_directory_with_invalid_id') do
167
+ expect do
168
+ WorkOS::DirectorySync.get_directory(id: 'invalid')
169
+ end.to raise_error(
170
+ WorkOS::APIError,
171
+ "Status 404, Directory not found: 'invalid'. - request ID: ",
172
+ )
173
+ end
174
+ end
175
+ end
176
+ end
177
+
146
178
  describe '.list_groups' do
147
179
  context 'with no options' do
148
180
  it 'raises an error' do
@@ -109,7 +109,145 @@ describe WorkOS::SSO do
109
109
  end
110
110
  end
111
111
 
112
- context 'with neither connection, domain, or provider' do
112
+ context 'with a domain' do
113
+ let(:args) do
114
+ {
115
+ domain: 'foo.com',
116
+ client_id: 'workos-proj-123',
117
+ redirect_uri: 'foo.com/auth/callback',
118
+ state: {
119
+ next_page: '/dashboard/edit',
120
+ }.to_s,
121
+ }
122
+ end
123
+ it 'returns a valid URL' do
124
+ authorization_url = described_class.authorization_url(**args)
125
+
126
+ expect(URI.parse(authorization_url)).to be_a URI
127
+ end
128
+
129
+ it 'returns the expected hostname' do
130
+ authorization_url = described_class.authorization_url(**args)
131
+
132
+ expect(URI.parse(authorization_url).host).to eq(WorkOS::API_HOSTNAME)
133
+ end
134
+
135
+ it 'returns the expected query string' do
136
+ authorization_url = described_class.authorization_url(**args)
137
+
138
+ expect(URI.parse(authorization_url).query).to eq(
139
+ 'client_id=workos-proj-123&redirect_uri=foo.com%2Fauth%2Fcallback' \
140
+ '&response_type=code&state=%7B%3Anext_page%3D%3E%22%2Fdashboard%2F' \
141
+ 'edit%22%7D&domain=foo.com',
142
+ )
143
+ end
144
+ end
145
+
146
+ context 'with a domain_hint' do
147
+ let(:args) do
148
+ {
149
+ connection: 'connection_123',
150
+ domain_hint: 'foo.com',
151
+ client_id: 'workos-proj-123',
152
+ redirect_uri: 'foo.com/auth/callback',
153
+ state: {
154
+ next_page: '/dashboard/edit',
155
+ }.to_s,
156
+ }
157
+ end
158
+ it 'returns a valid URL' do
159
+ authorization_url = described_class.authorization_url(**args)
160
+
161
+ expect(URI.parse(authorization_url)).to be_a URI
162
+ end
163
+
164
+ it 'returns the expected hostname' do
165
+ authorization_url = described_class.authorization_url(**args)
166
+
167
+ expect(URI.parse(authorization_url).host).to eq(WorkOS::API_HOSTNAME)
168
+ end
169
+
170
+ it 'returns the expected query string' do
171
+ authorization_url = described_class.authorization_url(**args)
172
+
173
+ expect(URI.parse(authorization_url).query).to eq(
174
+ 'client_id=workos-proj-123&redirect_uri=foo.com%2Fauth%2Fcallback' \
175
+ '&response_type=code&state=%7B%3Anext_page%3D%3E%22%2Fdashboard%2' \
176
+ 'Fedit%22%7D&domain_hint=foo.com&connection=connection_123',
177
+ )
178
+ end
179
+ end
180
+
181
+ context 'with a login_hint' do
182
+ let(:args) do
183
+ {
184
+ connection: 'connection_123',
185
+ login_hint: 'foo@workos.com',
186
+ client_id: 'workos-proj-123',
187
+ redirect_uri: 'foo.com/auth/callback',
188
+ state: {
189
+ next_page: '/dashboard/edit',
190
+ }.to_s,
191
+ }
192
+ end
193
+ it 'returns a valid URL' do
194
+ authorization_url = described_class.authorization_url(**args)
195
+
196
+ expect(URI.parse(authorization_url)).to be_a URI
197
+ end
198
+
199
+ it 'returns the expected hostname' do
200
+ authorization_url = described_class.authorization_url(**args)
201
+
202
+ expect(URI.parse(authorization_url).host).to eq(WorkOS::API_HOSTNAME)
203
+ end
204
+
205
+ it 'returns the expected query string' do
206
+ authorization_url = described_class.authorization_url(**args)
207
+
208
+ expect(URI.parse(authorization_url).query).to eq(
209
+ 'client_id=workos-proj-123&redirect_uri=foo.com%2Fauth%2Fcallback' \
210
+ '&response_type=code&state=%7B%3Anext_page%3D%3E%22%2Fdashboard%2' \
211
+ 'Fedit%22%7D&login_hint=foo%40workos.com&connection=connection_123',
212
+ )
213
+ end
214
+ end
215
+
216
+ context 'with an organization' do
217
+ let(:args) do
218
+ {
219
+ organization: 'org_123',
220
+ client_id: 'workos-proj-123',
221
+ redirect_uri: 'foo.com/auth/callback',
222
+ state: {
223
+ next_page: '/dashboard/edit',
224
+ }.to_s,
225
+ }
226
+ end
227
+ it 'returns a valid URL' do
228
+ authorization_url = described_class.authorization_url(**args)
229
+
230
+ expect(URI.parse(authorization_url)).to be_a URI
231
+ end
232
+
233
+ it 'returns the expected hostname' do
234
+ authorization_url = described_class.authorization_url(**args)
235
+
236
+ expect(URI.parse(authorization_url).host).to eq(WorkOS::API_HOSTNAME)
237
+ end
238
+
239
+ it 'returns the expected query string' do
240
+ authorization_url = described_class.authorization_url(**args)
241
+
242
+ expect(URI.parse(authorization_url).query).to eq(
243
+ 'client_id=workos-proj-123&redirect_uri=foo.com%2Fauth%2Fcallback' \
244
+ '&response_type=code&state=%7B%3Anext_page%3D%3E%22%2Fdashboard%2F' \
245
+ 'edit%22%7D&organization=org_123',
246
+ )
247
+ end
248
+ end
249
+
250
+ context 'with neither connection, domain, provider, or organization' do
113
251
  let(:args) do
114
252
  {
115
253
  client_id: 'workos-proj-123',
@@ -124,7 +262,7 @@ describe WorkOS::SSO do
124
262
  described_class.authorization_url(**args)
125
263
  end.to raise_error(
126
264
  ArgumentError,
127
- 'Either connection, domain, or provider is required.',
265
+ 'Either connection, domain, provider, or organization is required.',
128
266
  )
129
267
  end
130
268
  end
@@ -177,7 +177,7 @@ describe WorkOS::Webhooks do
177
177
  expect do
178
178
  described_class.construct_event(
179
179
  payload: @payload,
180
- sig_header: "t=9999, v1=#{@signature_hash}",
180
+ sig_header: "t=#{@timestamp.to_i - (200 * 1000)}, v1=#{@signature_hash}",
181
181
  secret: @secret,
182
182
  )
183
183
  end.to raise_error(
@@ -0,0 +1,83 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.workos.com/directories/invalid
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ User-Agent:
17
+ - WorkOS; ruby/3.0.2; x86_64-darwin19; v1.6.1
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 404
23
+ message: Not Found
24
+ headers:
25
+ Date:
26
+ - Sun, 07 Nov 2021 19:18:31 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Content-Security-Policy:
34
+ - 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
35
+ https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
36
+ ''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
37
+ X-Dns-Prefetch-Control:
38
+ - 'off'
39
+ Expect-Ct:
40
+ - max-age=0
41
+ X-Frame-Options:
42
+ - SAMEORIGIN
43
+ Strict-Transport-Security:
44
+ - max-age=15552000; includeSubDomains
45
+ X-Download-Options:
46
+ - noopen
47
+ X-Content-Type-Options:
48
+ - nosniff
49
+ X-Permitted-Cross-Domain-Policies:
50
+ - none
51
+ Referrer-Policy:
52
+ - no-referrer
53
+ X-Xss-Protection:
54
+ - '0'
55
+ Vary:
56
+ - Origin, Accept-Encoding
57
+ Access-Control-Allow-Credentials:
58
+ - 'true'
59
+ X-Request-Id:
60
+ -
61
+ Etag:
62
+ - W/"5d-Sx4XoCfDLxkGIc0yAjSbi2ILYww"
63
+ Via:
64
+ - 1.1 vegur
65
+ Cf-Cache-Status:
66
+ - DYNAMIC
67
+ Report-To:
68
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=9UGS4Swz%2BHWvLOf0MGTCQbJyS0uBKnB72E77LfjybUN%2FXbJaDPBYfHnAUcgVM7JZbTefNquu4bG0Fw0edgQVoGnTK9OWPuO6fVKmo8XkF1G%2FNgibe8B715ZZje%2FZM7m3%2B9bEbNout5ArQfFyyQ%3D%3D"}],"group":"cf-nel","max_age":604800}'
69
+ Nel:
70
+ - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
71
+ Server:
72
+ - cloudflare
73
+ Cf-Ray:
74
+ - 6aa8e86f7b5a66bf-DFW
75
+ Alt-Svc:
76
+ - h3=":443"; ma=86400, h3-29=":443"; ma=86400, h3-28=":443"; ma=86400, h3-27=":443";
77
+ ma=86400
78
+ body:
79
+ encoding: ASCII-8BIT
80
+ string: '{"message":"Directory not found: ''invalid''.","code":"entity_not_found","entity_id":"invalid"}'
81
+ http_version:
82
+ recorded_at: Sun, 07 Nov 2021 19:18:31 GMT
83
+ recorded_with: VCR 5.0.0
@@ -0,0 +1,84 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.workos.com/directories/directory_01FK17DWRHH7APAFXT5B52PV0W
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ User-Agent:
17
+ - WorkOS; ruby/3.0.2; x86_64-darwin19; v1.6.1
18
+ Authorization:
19
+ - Bearer <API_KEY>
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Sun, 07 Nov 2021 19:18:31 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Content-Security-Policy:
34
+ - 'default-src ''self'';base-uri ''self'';block-all-mixed-content;font-src ''self''
35
+ https: data:;frame-ancestors ''self'';img-src ''self'' data:;object-src ''none'';script-src
36
+ ''self'';script-src-attr ''none'';style-src ''self'' https: ''unsafe-inline'';upgrade-insecure-requests'
37
+ X-Dns-Prefetch-Control:
38
+ - 'off'
39
+ Expect-Ct:
40
+ - max-age=0
41
+ X-Frame-Options:
42
+ - SAMEORIGIN
43
+ Strict-Transport-Security:
44
+ - max-age=15552000; includeSubDomains
45
+ X-Download-Options:
46
+ - noopen
47
+ X-Content-Type-Options:
48
+ - nosniff
49
+ X-Permitted-Cross-Domain-Policies:
50
+ - none
51
+ Referrer-Policy:
52
+ - no-referrer
53
+ X-Xss-Protection:
54
+ - '0'
55
+ Vary:
56
+ - Origin, Accept-Encoding
57
+ Access-Control-Allow-Credentials:
58
+ - 'true'
59
+ X-Request-Id:
60
+ - c63229f4-faa3-4693-a769-f132af1d156e
61
+ Etag:
62
+ - W/"149-gnrinkKr5pyIOSLENIObBLph9N0"
63
+ Via:
64
+ - 1.1 vegur
65
+ Cf-Cache-Status:
66
+ - DYNAMIC
67
+ Report-To:
68
+ - '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=8pe6lAa%2BE5FfpwjmgW1wU%2Fn%2BqfVS0xUHV0FKT%2Fvt%2FpQCa1A4nNwqR1hMyE9ytoi%2F3InXs3rP9ELYw%2FpJZ1Ow0uaNd3xoll7al5maCCPI1JWivjr%2Bxx6G1Otiw5iTIaAh3MXoP0pjUAnZVsf4bw%3D%3D"}],"group":"cf-nel","max_age":604800}'
69
+ Nel:
70
+ - '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}'
71
+ Server:
72
+ - cloudflare
73
+ Cf-Ray:
74
+ - 6aa8e86daa570b76-DFW
75
+ Alt-Svc:
76
+ - h3=":443"; ma=86400, h3-29=":443"; ma=86400, h3-28=":443"; ma=86400, h3-27=":443";
77
+ ma=86400
78
+ body:
79
+ encoding: ASCII-8BIT
80
+ string: '{"object":"directory","id":"directory_01FK17DWRHH7APAFXT5B52PV0W","organization_id":"org_01F6Q6TFP7RD2PF6J03ANNWDKV","name":"Testing
81
+ Active Attribute","external_key":"QArgyQQkq4G0MquM","type":"azure scim v2.0","state":"linked","created_at":"2021-10-27T15:55:47.856Z","updated_at":"2021-10-27T16:03:43.990Z","domain":"example.me"}'
82
+ http_version:
83
+ recorded_at: Sun, 07 Nov 2021 19:18:31 GMT
84
+ recorded_with: VCR 5.0.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workos
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.1
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - WorkOS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-03 00:00:00.000000000 Z
11
+ date: 2022-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime
@@ -289,6 +289,8 @@ files:
289
289
  - spec/support/fixtures/vcr_cassettes/audit_trail/get_events.yml
290
290
  - spec/support/fixtures/vcr_cassettes/base/execute_request_unauthenticated.yml
291
291
  - spec/support/fixtures/vcr_cassettes/directory_sync/delete_directory.yml
292
+ - spec/support/fixtures/vcr_cassettes/directory_sync/get_directory_with_invalid_id.yml
293
+ - spec/support/fixtures/vcr_cassettes/directory_sync/get_directory_with_valid_id.yml
292
294
  - spec/support/fixtures/vcr_cassettes/directory_sync/get_group.yml
293
295
  - spec/support/fixtures/vcr_cassettes/directory_sync/get_group_with_invalid_id.yml
294
296
  - spec/support/fixtures/vcr_cassettes/directory_sync/get_user.yml
@@ -362,7 +364,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
362
364
  - !ruby/object:Gem::Version
363
365
  version: '0'
364
366
  requirements: []
365
- rubygems_version: 3.2.30
367
+ rubygems_version: 3.3.5
366
368
  signing_key:
367
369
  specification_version: 4
368
370
  summary: API client for WorkOS
@@ -384,6 +386,8 @@ test_files:
384
386
  - spec/support/fixtures/vcr_cassettes/audit_trail/get_events.yml
385
387
  - spec/support/fixtures/vcr_cassettes/base/execute_request_unauthenticated.yml
386
388
  - spec/support/fixtures/vcr_cassettes/directory_sync/delete_directory.yml
389
+ - spec/support/fixtures/vcr_cassettes/directory_sync/get_directory_with_invalid_id.yml
390
+ - spec/support/fixtures/vcr_cassettes/directory_sync/get_directory_with_valid_id.yml
387
391
  - spec/support/fixtures/vcr_cassettes/directory_sync/get_group.yml
388
392
  - spec/support/fixtures/vcr_cassettes/directory_sync/get_group_with_invalid_id.yml
389
393
  - spec/support/fixtures/vcr_cassettes/directory_sync/get_user.yml