From dc5102fed24880a1129d61f97f34dbd80ced57bf Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Wed, 2 Jul 2025 13:44:29 -0300 Subject: [PATCH 1/6] feat: organization_domain events --- workos/types/events/event.py | 12 ++++++++++++ workos/types/events/event_type.py | 3 +++ workos/types/organizations/organization_domain.py | 3 +++ 3 files changed, 18 insertions(+) diff --git a/workos/types/events/event.py b/workos/types/events/event.py index 8e03be5d..886e3b7c 100644 --- a/workos/types/events/event.py +++ b/workos/types/events/event.py @@ -192,6 +192,15 @@ class OrganizationDomainVerificationFailedEvent( class OrganizationDomainVerifiedEvent(EventModel[OrganizationDomain]): event: Literal["organization_domain.verified"] +class OrganizationDomainCreatedEvent(EventModel[OrganizationDomain]): + event: Literal["organization_domain.created"] + +class OrganizationDomainUpdatedEvent(EventModel[OrganizationDomain]): + event: Literal["organization_domain.updated"] + +class OrganizationDomainDeletedEvent(EventModel[OrganizationDomain]): + event: Literal["organization_domain.deleted"] + class OrganizationMembershipCreatedEvent(EventModel[OrganizationMembership]): event: Literal["organization_membership.created"] @@ -272,6 +281,9 @@ class UserUpdatedEvent(EventModel[User]): OrganizationCreatedEvent, OrganizationDeletedEvent, OrganizationUpdatedEvent, + OrganizationDomainCreatedEvent, + OrganizationDomainDeletedEvent, + OrganizationDomainUpdatedEvent, OrganizationDomainVerificationFailedEvent, OrganizationDomainVerifiedEvent, OrganizationMembershipCreatedEvent, diff --git a/workos/types/events/event_type.py b/workos/types/events/event_type.py index ade1614b..cefb8054 100644 --- a/workos/types/events/event_type.py +++ b/workos/types/events/event_type.py @@ -36,6 +36,9 @@ "organization.updated", "organization_domain.verification_failed", "organization_domain.verified", + "organization_domain.created", + "organization_domain.deleted", + "organization_domain.updated", "organization_membership.created", "organization_membership.deleted", "organization_membership.updated", diff --git a/workos/types/organizations/organization_domain.py b/workos/types/organizations/organization_domain.py index 955b23ff..3bac6aba 100644 --- a/workos/types/organizations/organization_domain.py +++ b/workos/types/organizations/organization_domain.py @@ -13,3 +13,6 @@ class OrganizationDomain(WorkOSModel): ] = None verification_strategy: Optional[LiteralOrUntyped[Literal["manual", "dns"]]] = None verification_token: Optional[str] = None + verification_prefix: Optional[str] = None + created_at: str = None + updated_at: str = None From 391fcfa75e0ca5636495c5674f493178c7ddd505 Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Wed, 2 Jul 2025 13:46:33 -0300 Subject: [PATCH 2/6] formatting --- workos/types/events/event.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workos/types/events/event.py b/workos/types/events/event.py index 886e3b7c..26b1826d 100644 --- a/workos/types/events/event.py +++ b/workos/types/events/event.py @@ -192,12 +192,15 @@ class OrganizationDomainVerificationFailedEvent( class OrganizationDomainVerifiedEvent(EventModel[OrganizationDomain]): event: Literal["organization_domain.verified"] + class OrganizationDomainCreatedEvent(EventModel[OrganizationDomain]): event: Literal["organization_domain.created"] + class OrganizationDomainUpdatedEvent(EventModel[OrganizationDomain]): event: Literal["organization_domain.updated"] + class OrganizationDomainDeletedEvent(EventModel[OrganizationDomain]): event: Literal["organization_domain.deleted"] From 854fb2e13eb13fef9c16103ddc5f1cd87a6934f5 Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Wed, 2 Jul 2025 14:14:19 -0300 Subject: [PATCH 3/6] fix types --- workos/types/organizations/organization_domain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workos/types/organizations/organization_domain.py b/workos/types/organizations/organization_domain.py index 3bac6aba..3a6dafcd 100644 --- a/workos/types/organizations/organization_domain.py +++ b/workos/types/organizations/organization_domain.py @@ -14,5 +14,5 @@ class OrganizationDomain(WorkOSModel): verification_strategy: Optional[LiteralOrUntyped[Literal["manual", "dns"]]] = None verification_token: Optional[str] = None verification_prefix: Optional[str] = None - created_at: str = None - updated_at: str = None + created_at: str + updated_at: str From 4d760d80db0e203b636d922a867b6080239e5966 Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Wed, 2 Jul 2025 14:28:32 -0300 Subject: [PATCH 4/6] Fix tests --- tests/test_organizations.py | 2 ++ tests/utils/fixtures/mock_organization.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index ddd08060..a53eb10a 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -38,6 +38,8 @@ def mock_organization_updated(self): "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", "verification_strategy": "dns", "verification_token": "token", + "created_at": datetime.datetime.now().isoformat(), + "updated_at": datetime.datetime.now().isoformat(), } ], } diff --git a/tests/utils/fixtures/mock_organization.py b/tests/utils/fixtures/mock_organization.py index 3316105b..d401a398 100644 --- a/tests/utils/fixtures/mock_organization.py +++ b/tests/utils/fixtures/mock_organization.py @@ -20,6 +20,8 @@ def __init__(self, id): id="org_domain_01EHT88Z8WZEFWYPM6EC9BX2R8", organization_id="org_12345", domain="example.io", + created_at=now, + updated_at=now, ) ], metadata={"key": "value"}, From 5fc00205da1f1a2fc9d391907bdf5df7ec992d99 Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Wed, 2 Jul 2025 19:36:33 -0300 Subject: [PATCH 5/6] Fix test --- tests/test_organizations.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index a53eb10a..ea88395c 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -199,6 +199,9 @@ def test_update_organization_with_domain_data( "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", "verification_strategy": "dns", "verification_token": "token", + "created_at": datetime.datetime.now().isoformat(), + "updated_at": datetime.datetime.now().isoformat(), + "verification_prefix": None, } def test_delete_organization(self, capture_and_mock_http_client_request): From b2c596e7ec3fc49f681e1d9d275a9fa65e123236 Mon Sep 17 00:00:00 2001 From: Adam Jenkins Date: Wed, 2 Jul 2025 19:50:44 -0300 Subject: [PATCH 6/6] assert timestamps are strings --- tests/test_organizations.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/tests/test_organizations.py b/tests/test_organizations.py index ea88395c..87598466 100644 --- a/tests/test_organizations.py +++ b/tests/test_organizations.py @@ -191,18 +191,17 @@ def test_update_organization_with_domain_data( } assert updated_organization.id == "org_01EHT88Z8J8795GZNQ4ZP1J81T" assert updated_organization.name == "Example Organization" - assert updated_organization.domains[0].dict() == { - "domain": "example.io", - "object": "organization_domain", - "id": "org_domain_01EHT88Z8WZEFWYPM6EC9BX2R8", - "state": "verified", - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "verification_strategy": "dns", - "verification_token": "token", - "created_at": datetime.datetime.now().isoformat(), - "updated_at": datetime.datetime.now().isoformat(), - "verification_prefix": None, - } + domain = updated_organization.domains[0] + assert domain.domain == "example.io" + assert domain.object == "organization_domain" + assert domain.id == "org_domain_01EHT88Z8WZEFWYPM6EC9BX2R8" + assert domain.state == "verified" + assert domain.organization_id == "org_01EHT88Z8J8795GZNQ4ZP1J81T" + assert domain.verification_strategy == "dns" + assert domain.verification_token == "token" + assert domain.verification_prefix is None + assert isinstance(domain.created_at, str) + assert isinstance(domain.updated_at, str) def test_delete_organization(self, capture_and_mock_http_client_request): request_kwargs = capture_and_mock_http_client_request(