Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce HTTP client and base URL as configuration options #37

Merged
merged 14 commits into from
Oct 23, 2023

Conversation

LauraBeatris
Copy link
Contributor

@LauraBeatris LauraBeatris commented Oct 20, 2023

Closes #6

This PR defines an interface for HTTP client, it allows applications to use other implementations based on the library of their preference. Next PRs will integrate WorkOS.Client to other SDK modules and delete the current WorkOS.API.

Configuring WorkOS via app config:

config :workos, WorkOS.Client
  api_key: "test_123",
  client_id: "test_123", 
  base_url: "https://api.workos.com",
  client: WorkOS.Client.TeslaClient

By choosing to configure WorkOS via app config, passing a client struct is always optional.

client = WorkOS.client(api_key: System.fetch_env!("WORKOS_API_KEY"))

The only required config options are :api_key and :client_id. If you would like to replace the HTTP client, configure the :client option and define your own client module. By default, this library uses Tesla.

@LauraBeatris LauraBeatris changed the title Introduce configuration modules Introduce configuration modules and HTTP client behaviors Oct 21, 2023
@LauraBeatris LauraBeatris changed the title Introduce configuration modules and HTTP client behaviors Introduce configuration modules and HTTP client interface Oct 21, 2023
@LauraBeatris LauraBeatris changed the title Introduce configuration modules and HTTP client interface Introduce app config and HTTP client interface Oct 21, 2023
@LauraBeatris LauraBeatris force-pushed the refactor-main-module branch 2 times, most recently from 8e853a4 to e2e5cc1 Compare October 21, 2023 18:11
@LauraBeatris LauraBeatris changed the title Introduce app config and HTTP client interface Introduce HTTP client interface Oct 21, 2023
@LauraBeatris LauraBeatris changed the title Introduce HTTP client interface Introduce HTTP client as a config option Oct 21, 2023
@LauraBeatris LauraBeatris changed the title Introduce HTTP client as a config option Introduce HTTP client and base URL as configuration options Oct 21, 2023
@LauraBeatris LauraBeatris marked this pull request as ready for review October 21, 2023 19:45
@LauraBeatris LauraBeatris mentioned this pull request Oct 22, 2023
@LauraBeatris LauraBeatris removed the enhancement New feature or request label Oct 22, 2023
@LauraBeatris LauraBeatris changed the base branch from main to release/1.0.0 October 23, 2023 00:35
config/test.ex Outdated
import Config

if workos_api_key =
System.get_env("WORKOS_API_KEY") and workos_client_id = System.get_env("WORKOS_CLIENT_ID") do
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
System.get_env("WORKOS_API_KEY") and workos_client_id = System.get_env("WORKOS_CLIENT_ID") do
System.get_env("WORKOS_API_KEY") and workos_client_id = System.get_env("WORKOS_CLIENT_ID") do

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That line was particularly long, and this was also the final formation by mix format.

I ended up creating separate variables rather than performing pattern matching inline. c337813

@LauraBeatris LauraBeatris merged commit 6239bc2 into release/1.0.0 Oct 23, 2023
@LauraBeatris LauraBeatris deleted the refactor-main-module branch October 23, 2023 23:55
LauraBeatris added a commit that referenced this pull request Dec 4, 2023
* Add config modules

* Start to build behavior for HTTP client

* Add `Castable` module to define behavior for casting or transforming data

* Handle response

* Add HTTP methods to client behavior

* Add `TeslaClient` implementation

* Add comment to prod.exs to fix `mix format`

* Fix casing for `WorkOS` namespace

* Add `@deprecated` to `WorkOS.API`

* Fix test config

* Validate config

* Fix linter

* Add module for structured error response

* Extract env variables to separate variables
LauraBeatris added a commit that referenced this pull request Dec 20, 2023
* Introduce HTTP client and base URL as configuration options (#37)

* Add config modules

* Start to build behavior for HTTP client

* Add `Castable` module to define behavior for casting or transforming data

* Handle response

* Add HTTP methods to client behavior

* Add `TeslaClient` implementation

* Add comment to prod.exs to fix `mix format`

* Fix casing for `WorkOS` namespace

* Add `@deprecated` to `WorkOS.API`

* Fix test config

* Validate config

* Fix linter

* Add module for structured error response

* Extract env variables to separate variables

* Add livebook example (#38)

* Add `ISSUE_TEMPLATE.md` (#34)

* Permit `expires_in` param when creating passwordless session (#35)

Co-authored-by: Mark Tran <mark.tran@gmail.com>

* Start to build behavior for HTTP client

* Add `Castable` module to define behavior for casting or transforming data

* Handle response

* Add HTTP methods to client behavior

* Add `TeslaClient` implementation

* Add comment to prod.exs to fix `mix format`

* Fix casing for `WorkOS` namespace

* Add `@deprecated` to `WorkOS.API`

* Fix test config

* Validate config

* Fix linter

* Add livebook file

---------

Co-authored-by: Jordan Mackie <12185627+jmackie@users.noreply.github.com>
Co-authored-by: Mark Tran <mark.tran@gmail.com>

* Introduce new SSO module and tests structure (#39)

* Update `mix.exs`

* Add util module

* Add `Connection` struct

* Add `List` castable module

* Add `list_connections` method

* Add `delete_connection` method

* Add `get_connection` method

* Add draft for `get_authorization_url`

* Add `dialyxir` dependency

* Remove old SSO module

* Define logic for `get_authorization_url`

* Add `Profile` and `ProfileAndToken` response structs

* Add `get_profile` function

* Add basic layer for tests

* Add structs to `mix.exs`

* Fix guard on `get_authorization_url`

* Remove deprecated tests

* Add doc comments for parameter options of `get_authorization_url`

* Remove `Application.put_env` from `test_helper`

* Add draft test

* Fix extension of test files to `exs`

* Apply case for test config

* Define base URL for test

* Fix test

* Implement tests for `get_authorization_url`

* Define test for `get_profile_and_token`

* Implement tests for `get_profile_and_token`

* Implement tests for `get_profile`

* Implement test for `get_connection`

* Implement test for `list_connections`

* Rename `ClientMock` to `SSO.ClientMock`

* Implement test for `delete_connection`

* Fix return type for `delete_connection`

* Fix `mix credo` issues

* Update comment indentation

* Handle case where `get_authorization_url` is called without having the application config loaded

* Add validation for `redirect_uri`

* Include `client_id` on WorkOS Client

* Update livebook examples

* Fix connection struct

* Add `WorkOS.Empty`

* Remove `IO.inspect`

* Refactor `Organizations` module  (#44)

* Add skeleton for Organizations module

* Remove old `Organizations` module

* Add missing `object` key to connections domain

* Add response struct for organizations

* Implement functions for `Organization` module

* Add `create_organization` and `update_organization`

* Extract exceptions to separate modules

* Allow to call `list` functions without client and map args

* Implement tests for organizations

* Update Livebook examples

* Remove `Logger`

* Remove `WorkOS.Util` and fix timestamps

* Refactor `Portal` module (#45)

* Add basic modules

* Define function clauses

* Include implementation

* Add Portal link response struct

* Add portal client mock

* Implement tests

* Add example to Livebook

* Refactor `Webhooks` module (#46)

* Restructure modules

* Add `Event` struct to `mix.exs`

* Refactor `DirectorySync` module (#47)

* Add base modules

* Implement `get_directory`

* Implement `list_directories`

* Implement `delete_directory`

* Implement `Directory.User`

* Add tests for directory users

* Remove `WorkOS.Util`

* Add Livebook examples

* Rollback `Util` changes

* Remove `DateTime` from timestamps to match API reference

* Add missing `object` keys to response structs

* Remove WorkOS.Util

* Refactor `Passwordless` module (#48)

* Add base modules

* Implement functions

* Implement tests

* Remove `message` property

* Add `Events` module (#49)

* Add base modules

* Implement `list_events`

* Implement tests

* Add to Livebook

* Refactor `AuditLogs` module (#50)

* Add export response struct

* Add base modules

* Add implementation for `create_export`

* Add tests for `create_export`

* Add `get_export` method

* Add `add_event` method

* Add examples to Livebook

* Remove MFA module (#51)

* Add User Management API  (#53)

* Add draft for User Management module

* Add `Invitation` struct

* Add `User` struct

* Add User API methods

* Add methods from `Invitation` API

* Add `OrganizationMembership` API methods

* Add Password Reset API methods

* Add Email Verification API methods

* Add MFA response structs

* Add Multi-Factor API methods

* Add Magic Auth API methods

* Add Authentication API methods

* Add `get_authorization_url`

* Update Livebook

* Fixes `authorize` parameters

* Add Domain Verification API (#55)

* Remove legacy `WorkOS.API`

* Add `OrganizationDomain` struct

* Add Domain Verification API methods

* Add domain verification API methods

* Update README.md

* Format modules

* Fix `credo` issues

* Fix dialyzer issues

* Rename `DomainVerification` to `OrganizationDomains` (#56)

* Rename to `OrganizationDomains`

* Add to Livebook

* Remove `domain` option and add tests for error case

* Update workflow

* Bump to `1.0.0`

* Introduce Dialyzer artifacts

* Remove `:hackney`

* Update `elixirc_paths`

* Rollback `elixirc_paths`

* Import `ExUnit.Assertions` on mock files

* Update `plug_crypto`

* Update `jason`

* Remove support for oldest OTP version

* Update `dialyxir`

* Remove enum constants

* Update mock API keys

* Add deprecated `MFA` API module  (#58)

* Fix timestamp mapping

* Add deprecated response structs

* Add deprecated API

* Add tests

* Fix generate_link types

* Install `hackney`

* Fix query params

* Fix `list_groups` params

* Fix `send_session` route from Magic Link

* Pass `code` as keyword argument

* Fix `challenge_factor`

* Fix `get_organization` snippet from Livebook

* Add organization ID as parameter on `update_organization`

* Add `semaphore.yml`

* Fix `WorkOS.Empty` struct

* Fix `get_profile_and_token` snippet on Livebook

* Fix `get_profile` Livebook snippet

* Add experimental disclaimer back to README.md

* Rollback semaphore

* Rollback `elixir.yml` workflow due to branch policies

---------

Co-authored-by: Jordan Mackie <12185627+jmackie@users.noreply.github.com>
Co-authored-by: Mark Tran <mark.tran@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Make Hackney an optional dependency
2 participants