workos 5.39.0__tar.gz → 5.40.0__tar.gz
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.
- {workos-5.39.0 → workos-5.40.0}/PKG-INFO +1 -1
- {workos-5.39.0 → workos-5.40.0}/pyproject.toml +1 -1
- {workos-5.39.0 → workos-5.40.0}/src/workos/async_client.py +5 -5
- workos-5.40.0/src/workos/audit_logs.py +561 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/directory_sync.py +24 -5
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/__init__.py +6 -0
- workos-5.40.0/src/workos/types/audit_logs/audit_log_action.py +28 -0
- workos-5.40.0/src/workos/types/audit_logs/audit_log_configuration.py +41 -0
- workos-5.40.0/src/workos/types/audit_logs/audit_log_retention.py +13 -0
- workos-5.40.0/src/workos/types/audit_logs/audit_log_schema.py +49 -0
- workos-5.40.0/src/workos/types/audit_logs/audit_log_schema_input.py +78 -0
- workos-5.40.0/src/workos/types/audit_logs/list_filters.py +13 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/list_resource.py +3 -0
- workos-5.39.0/src/workos/audit_logs.py +0 -125
- {workos-5.39.0 → workos-5.40.0}/README.md +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/_base_client.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/_client_configuration.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/api_keys.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/client.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/events.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/exceptions.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/fga.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/mfa.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/organization_domains.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/organizations.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/passwordless.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/pipes.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/portal.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/py.typed +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/session.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/sso.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/api_keys/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/api_keys/api_keys.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/audit_log_event.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/audit_log_event_actor.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/audit_log_event_context.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/audit_log_event_target.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/audit_log_export.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/audit_logs/audit_log_metadata.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/directory.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/directory_group.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/directory_state.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/directory_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/directory_user.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/directory_sync/list_filters.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/authentication_payload.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/connection_payload_with_legacy_fields.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/directory_group_membership_payload.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/directory_group_with_previous_attributes.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/directory_payload.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/directory_payload_with_legacy_fields.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/directory_user_with_previous_attributes.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/event.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/event_model.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/event_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/list_filters.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/organization_domain_verification_failed_payload.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/previous_attributes.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/events/session_payload.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/feature_flags/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/feature_flags/feature_flag.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/feature_flags/list_filters.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/authorization_resource_types.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/authorization_resources.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/check.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/list_filters.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/warnings.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/fga/warrant.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/metadata.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/mfa/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/mfa/authentication_challenge.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/mfa/authentication_challenge_verification_response.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/mfa/authentication_factor.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/mfa/authentication_factor_totp_and_challenge_response.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/mfa/enroll_authentication_factor_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organization_domains/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organization_domains/organization_domain.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organizations/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organizations/domain_data_input.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organizations/list_filters.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organizations/organization.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/organizations/organization_common.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/passwordless/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/passwordless/passwordless_session.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/passwordless/passwordless_session_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/pipes/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/pipes/pipes.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/portal/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/portal/portal_link.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/portal/portal_link_intent.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/portal/portal_link_intent_options.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/roles/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/roles/role.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/sso/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/sso/connection.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/sso/connection_domain.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/sso/profile.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/sso/sso_provider_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/authenticate_with_common.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/authentication_response.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/email_verification.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/impersonator.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/invitation.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/list_filters.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/magic_auth.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/oauth_tokens.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/organization_membership.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/password_hash_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/password_reset.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/screen_hint.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/session.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/user.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/user_management/user_management_provider_type.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/vault/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/vault/key.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/vault/object.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/webhooks/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/webhooks/webhook.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/webhooks/webhook_model.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/webhooks/webhook_payload.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/widgets/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/widgets/widget_scope.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/widgets/widget_token_response.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/types/workos_model.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/typing/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/typing/literals.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/typing/sync_or_async.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/typing/untyped_literal.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/typing/webhooks.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/user_management.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/utils/__init__.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/utils/_base_http_client.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/utils/crypto_provider.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/utils/http_client.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/utils/pagination_order.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/utils/request_helper.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/vault.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/webhooks.py +0 -0
- {workos-5.39.0 → workos-5.40.0}/src/workos/widgets.py +0 -0
|
@@ -2,7 +2,7 @@ from typing import Optional
|
|
|
2
2
|
from importlib.metadata import version
|
|
3
3
|
from workos._base_client import BaseClient
|
|
4
4
|
from workos.api_keys import AsyncApiKeys
|
|
5
|
-
from workos.audit_logs import
|
|
5
|
+
from workos.audit_logs import AsyncAuditLogs
|
|
6
6
|
from workos.directory_sync import AsyncDirectorySync
|
|
7
7
|
from workos.events import AsyncEvents
|
|
8
8
|
from workos.fga import FGAModule
|
|
@@ -64,10 +64,10 @@ class AsyncClient(BaseClient):
|
|
|
64
64
|
return self._sso
|
|
65
65
|
|
|
66
66
|
@property
|
|
67
|
-
def audit_logs(self) ->
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
def audit_logs(self) -> AsyncAuditLogs:
|
|
68
|
+
if not getattr(self, "_audit_logs", None):
|
|
69
|
+
self._audit_logs = AsyncAuditLogs(self._http_client)
|
|
70
|
+
return self._audit_logs
|
|
71
71
|
|
|
72
72
|
@property
|
|
73
73
|
def directory_sync(self) -> AsyncDirectorySync:
|
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
from typing import Dict, Literal, Optional, Protocol, Sequence
|
|
2
|
+
|
|
3
|
+
from workos.types.audit_logs import (
|
|
4
|
+
AuditLogAction,
|
|
5
|
+
AuditLogConfiguration,
|
|
6
|
+
AuditLogExport,
|
|
7
|
+
AuditLogRetention,
|
|
8
|
+
AuditLogSchema,
|
|
9
|
+
AuditLogSchemaListFilters,
|
|
10
|
+
AuditLogActionListFilters,
|
|
11
|
+
)
|
|
12
|
+
from workos.types.audit_logs.audit_log_schema_input import (
|
|
13
|
+
AuditLogSchemaActorInput,
|
|
14
|
+
AuditLogSchemaTargetInput,
|
|
15
|
+
MetadataSchemaInput,
|
|
16
|
+
serialize_schema_options,
|
|
17
|
+
)
|
|
18
|
+
from workos.types.audit_logs.audit_log_event import AuditLogEvent
|
|
19
|
+
from workos.types.list_resource import ListMetadata, ListPage, WorkOSListResource
|
|
20
|
+
from workos.typing.sync_or_async import SyncOrAsync
|
|
21
|
+
from workos.utils.http_client import AsyncHTTPClient, SyncHTTPClient
|
|
22
|
+
from workos.utils.pagination_order import PaginationOrder
|
|
23
|
+
from workos.utils.request_helper import (
|
|
24
|
+
DEFAULT_LIST_RESPONSE_LIMIT,
|
|
25
|
+
REQUEST_METHOD_GET,
|
|
26
|
+
REQUEST_METHOD_POST,
|
|
27
|
+
REQUEST_METHOD_PUT,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
EVENTS_PATH = "audit_logs/events"
|
|
31
|
+
EXPORTS_PATH = "audit_logs/exports"
|
|
32
|
+
ACTIONS_PATH = "audit_logs/actions"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
AuditLogActionsListResource = WorkOSListResource[
|
|
36
|
+
AuditLogAction, AuditLogActionListFilters, ListMetadata
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
AuditLogSchemasListResource = WorkOSListResource[
|
|
40
|
+
AuditLogSchema, AuditLogSchemaListFilters, ListMetadata
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class AuditLogsModule(Protocol):
|
|
45
|
+
"""Offers methods through the WorkOS Audit Logs service."""
|
|
46
|
+
|
|
47
|
+
def create_event(
|
|
48
|
+
self,
|
|
49
|
+
*,
|
|
50
|
+
organization_id: str,
|
|
51
|
+
event: AuditLogEvent,
|
|
52
|
+
idempotency_key: Optional[str] = None,
|
|
53
|
+
) -> SyncOrAsync[None]:
|
|
54
|
+
"""Create an Audit Logs event.
|
|
55
|
+
|
|
56
|
+
Kwargs:
|
|
57
|
+
organization_id (str): Organization's unique identifier.
|
|
58
|
+
event (AuditLogEvent): An AuditLogEvent object.
|
|
59
|
+
idempotency_key (str): Idempotency key. (Optional)
|
|
60
|
+
Returns:
|
|
61
|
+
None
|
|
62
|
+
"""
|
|
63
|
+
...
|
|
64
|
+
|
|
65
|
+
def create_export(
|
|
66
|
+
self,
|
|
67
|
+
*,
|
|
68
|
+
organization_id: str,
|
|
69
|
+
range_start: str,
|
|
70
|
+
range_end: str,
|
|
71
|
+
actions: Optional[Sequence[str]] = None,
|
|
72
|
+
targets: Optional[Sequence[str]] = None,
|
|
73
|
+
actor_names: Optional[Sequence[str]] = None,
|
|
74
|
+
actor_ids: Optional[Sequence[str]] = None,
|
|
75
|
+
) -> SyncOrAsync[AuditLogExport]:
|
|
76
|
+
"""Trigger the creation of an export of audit logs.
|
|
77
|
+
|
|
78
|
+
Kwargs:
|
|
79
|
+
organization_id (str): Organization's unique identifier.
|
|
80
|
+
range_start (str): Start date of the date range filter.
|
|
81
|
+
range_end (str): End date of the date range filter.
|
|
82
|
+
actions (list): Optional list of actions to filter. (Optional)
|
|
83
|
+
actor_names (list): Optional list of actors to filter by name. (Optional)
|
|
84
|
+
actor_ids (list): Optional list of actors to filter by ID. (Optional)
|
|
85
|
+
targets (list): Optional list of targets to filter. (Optional)
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
AuditLogExport: Object that describes the audit log export
|
|
89
|
+
"""
|
|
90
|
+
...
|
|
91
|
+
|
|
92
|
+
def get_export(self, audit_log_export_id: str) -> SyncOrAsync[AuditLogExport]:
|
|
93
|
+
"""Retrieve a created export.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
audit_log_export_id (str): Audit log export unique identifier.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
AuditLogExport: Object that describes the audit log export
|
|
100
|
+
"""
|
|
101
|
+
...
|
|
102
|
+
|
|
103
|
+
def create_schema(
|
|
104
|
+
self,
|
|
105
|
+
*,
|
|
106
|
+
action: str,
|
|
107
|
+
targets: Sequence[AuditLogSchemaTargetInput],
|
|
108
|
+
actor: Optional[AuditLogSchemaActorInput] = None,
|
|
109
|
+
metadata: Optional[MetadataSchemaInput] = None,
|
|
110
|
+
idempotency_key: Optional[str] = None,
|
|
111
|
+
) -> SyncOrAsync[AuditLogSchema]:
|
|
112
|
+
"""Create an Audit Log schema for an action.
|
|
113
|
+
|
|
114
|
+
Kwargs:
|
|
115
|
+
action (str): The action name for the schema (e.g., 'user.signed_in').
|
|
116
|
+
targets (list): List of target definitions with type and optional metadata.
|
|
117
|
+
Each target has a 'type' and optional 'metadata' mapping property
|
|
118
|
+
names to types (e.g., {"status": "string"}).
|
|
119
|
+
actor (dict): Optional actor definition with metadata schema. (Optional)
|
|
120
|
+
The metadata maps property names to types (e.g., {"role": "string"}).
|
|
121
|
+
metadata (dict): Optional event-level metadata schema. (Optional)
|
|
122
|
+
Maps property names to types (e.g., {"invoice_id": "string"}).
|
|
123
|
+
idempotency_key (str): Idempotency key. (Optional)
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
AuditLogSchema: The created audit log schema
|
|
127
|
+
"""
|
|
128
|
+
...
|
|
129
|
+
|
|
130
|
+
def list_schemas(
|
|
131
|
+
self,
|
|
132
|
+
*,
|
|
133
|
+
action: str,
|
|
134
|
+
limit: int = DEFAULT_LIST_RESPONSE_LIMIT,
|
|
135
|
+
before: Optional[str] = None,
|
|
136
|
+
after: Optional[str] = None,
|
|
137
|
+
order: PaginationOrder = "desc",
|
|
138
|
+
) -> SyncOrAsync[AuditLogSchemasListResource]:
|
|
139
|
+
"""List all schemas for an Audit Log action.
|
|
140
|
+
|
|
141
|
+
Kwargs:
|
|
142
|
+
action (str): The action name to list schemas for.
|
|
143
|
+
limit (int): Maximum number of records to return. (Optional)
|
|
144
|
+
before (str): Pagination cursor to receive records before a provided ID. (Optional)
|
|
145
|
+
after (str): Pagination cursor to receive records after a provided ID. (Optional)
|
|
146
|
+
order (Literal["asc","desc"]): Sort order by created_at timestamp. (Optional)
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
AuditLogSchemasListResource: Paginated list of audit log schemas
|
|
150
|
+
"""
|
|
151
|
+
...
|
|
152
|
+
|
|
153
|
+
def list_actions(
|
|
154
|
+
self,
|
|
155
|
+
*,
|
|
156
|
+
limit: int = DEFAULT_LIST_RESPONSE_LIMIT,
|
|
157
|
+
before: Optional[str] = None,
|
|
158
|
+
after: Optional[str] = None,
|
|
159
|
+
order: PaginationOrder = "desc",
|
|
160
|
+
) -> SyncOrAsync[AuditLogActionsListResource]:
|
|
161
|
+
"""List all registered Audit Log actions.
|
|
162
|
+
|
|
163
|
+
Kwargs:
|
|
164
|
+
limit (int): Maximum number of records to return. (Optional)
|
|
165
|
+
before (str): Pagination cursor to receive records before a provided ID. (Optional)
|
|
166
|
+
after (str): Pagination cursor to receive records after a provided ID. (Optional)
|
|
167
|
+
order (Literal["asc","desc"]): Sort order by created_at timestamp. (Optional)
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
AuditLogActionsListResource: Paginated list of audit log actions
|
|
171
|
+
"""
|
|
172
|
+
...
|
|
173
|
+
|
|
174
|
+
def get_retention(self, organization_id: str) -> SyncOrAsync[AuditLogRetention]:
|
|
175
|
+
"""Get the event retention period for an organization.
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
organization_id (str): Organization's unique identifier.
|
|
179
|
+
|
|
180
|
+
Returns:
|
|
181
|
+
AuditLogRetention: The retention configuration
|
|
182
|
+
"""
|
|
183
|
+
...
|
|
184
|
+
|
|
185
|
+
def set_retention(
|
|
186
|
+
self,
|
|
187
|
+
*,
|
|
188
|
+
organization_id: str,
|
|
189
|
+
retention_period_in_days: Literal[30, 365],
|
|
190
|
+
) -> SyncOrAsync[AuditLogRetention]:
|
|
191
|
+
"""Set the event retention period for an organization.
|
|
192
|
+
|
|
193
|
+
Kwargs:
|
|
194
|
+
organization_id (str): Organization's unique identifier.
|
|
195
|
+
retention_period_in_days (int): The number of days to retain events (30 or 365).
|
|
196
|
+
|
|
197
|
+
Returns:
|
|
198
|
+
AuditLogRetention: The updated retention configuration
|
|
199
|
+
"""
|
|
200
|
+
...
|
|
201
|
+
|
|
202
|
+
def get_configuration(
|
|
203
|
+
self, organization_id: str
|
|
204
|
+
) -> SyncOrAsync[AuditLogConfiguration]:
|
|
205
|
+
"""Get the audit log configuration for an organization.
|
|
206
|
+
|
|
207
|
+
Args:
|
|
208
|
+
organization_id (str): Organization's unique identifier.
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
AuditLogConfiguration: The complete audit log configuration
|
|
212
|
+
"""
|
|
213
|
+
...
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class AuditLogs(AuditLogsModule):
|
|
217
|
+
_http_client: SyncHTTPClient
|
|
218
|
+
|
|
219
|
+
def __init__(self, http_client: SyncHTTPClient):
|
|
220
|
+
self._http_client = http_client
|
|
221
|
+
|
|
222
|
+
def create_event(
|
|
223
|
+
self,
|
|
224
|
+
*,
|
|
225
|
+
organization_id: str,
|
|
226
|
+
event: AuditLogEvent,
|
|
227
|
+
idempotency_key: Optional[str] = None,
|
|
228
|
+
) -> None:
|
|
229
|
+
json = {"organization_id": organization_id, "event": event}
|
|
230
|
+
|
|
231
|
+
headers: Dict[str, str] = {}
|
|
232
|
+
if idempotency_key:
|
|
233
|
+
headers["idempotency-key"] = idempotency_key
|
|
234
|
+
|
|
235
|
+
self._http_client.request(
|
|
236
|
+
EVENTS_PATH, method=REQUEST_METHOD_POST, json=json, headers=headers
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
def create_export(
|
|
240
|
+
self,
|
|
241
|
+
*,
|
|
242
|
+
organization_id: str,
|
|
243
|
+
range_start: str,
|
|
244
|
+
range_end: str,
|
|
245
|
+
actions: Optional[Sequence[str]] = None,
|
|
246
|
+
targets: Optional[Sequence[str]] = None,
|
|
247
|
+
actor_names: Optional[Sequence[str]] = None,
|
|
248
|
+
actor_ids: Optional[Sequence[str]] = None,
|
|
249
|
+
) -> AuditLogExport:
|
|
250
|
+
json = {
|
|
251
|
+
"actions": actions,
|
|
252
|
+
"actor_ids": actor_ids,
|
|
253
|
+
"actor_names": actor_names,
|
|
254
|
+
"organization_id": organization_id,
|
|
255
|
+
"range_start": range_start,
|
|
256
|
+
"range_end": range_end,
|
|
257
|
+
"targets": targets,
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
response = self._http_client.request(
|
|
261
|
+
EXPORTS_PATH, method=REQUEST_METHOD_POST, json=json
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
return AuditLogExport.model_validate(response)
|
|
265
|
+
|
|
266
|
+
def get_export(self, audit_log_export_id: str) -> AuditLogExport:
|
|
267
|
+
response = self._http_client.request(
|
|
268
|
+
f"{EXPORTS_PATH}/{audit_log_export_id}",
|
|
269
|
+
method=REQUEST_METHOD_GET,
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
return AuditLogExport.model_validate(response)
|
|
273
|
+
|
|
274
|
+
def create_schema(
|
|
275
|
+
self,
|
|
276
|
+
*,
|
|
277
|
+
action: str,
|
|
278
|
+
targets: Sequence[AuditLogSchemaTargetInput],
|
|
279
|
+
actor: Optional[AuditLogSchemaActorInput] = None,
|
|
280
|
+
metadata: Optional[MetadataSchemaInput] = None,
|
|
281
|
+
idempotency_key: Optional[str] = None,
|
|
282
|
+
) -> AuditLogSchema:
|
|
283
|
+
json = serialize_schema_options(targets, actor, metadata)
|
|
284
|
+
|
|
285
|
+
headers: Dict[str, str] = {}
|
|
286
|
+
if idempotency_key:
|
|
287
|
+
headers["idempotency-key"] = idempotency_key
|
|
288
|
+
|
|
289
|
+
response = self._http_client.request(
|
|
290
|
+
f"{ACTIONS_PATH}/{action}/schemas",
|
|
291
|
+
method=REQUEST_METHOD_POST,
|
|
292
|
+
json=json,
|
|
293
|
+
headers=headers,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
return AuditLogSchema.model_validate(response)
|
|
297
|
+
|
|
298
|
+
def list_schemas(
|
|
299
|
+
self,
|
|
300
|
+
*,
|
|
301
|
+
action: str,
|
|
302
|
+
limit: int = DEFAULT_LIST_RESPONSE_LIMIT,
|
|
303
|
+
before: Optional[str] = None,
|
|
304
|
+
after: Optional[str] = None,
|
|
305
|
+
order: PaginationOrder = "desc",
|
|
306
|
+
) -> AuditLogSchemasListResource:
|
|
307
|
+
list_params: AuditLogSchemaListFilters = {
|
|
308
|
+
"limit": limit,
|
|
309
|
+
"before": before,
|
|
310
|
+
"after": after,
|
|
311
|
+
"order": order,
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
response = self._http_client.request(
|
|
315
|
+
f"{ACTIONS_PATH}/{action}/schemas",
|
|
316
|
+
method=REQUEST_METHOD_GET,
|
|
317
|
+
params=list_params,
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
return WorkOSListResource[
|
|
321
|
+
AuditLogSchema, AuditLogSchemaListFilters, ListMetadata
|
|
322
|
+
](
|
|
323
|
+
list_method=lambda **kwargs: self.list_schemas(action=action, **kwargs),
|
|
324
|
+
list_args=list_params,
|
|
325
|
+
**ListPage[AuditLogSchema](**response).model_dump(),
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
def list_actions(
|
|
329
|
+
self,
|
|
330
|
+
*,
|
|
331
|
+
limit: int = DEFAULT_LIST_RESPONSE_LIMIT,
|
|
332
|
+
before: Optional[str] = None,
|
|
333
|
+
after: Optional[str] = None,
|
|
334
|
+
order: PaginationOrder = "desc",
|
|
335
|
+
) -> AuditLogActionsListResource:
|
|
336
|
+
list_params: AuditLogActionListFilters = {
|
|
337
|
+
"limit": limit,
|
|
338
|
+
"before": before,
|
|
339
|
+
"after": after,
|
|
340
|
+
"order": order,
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
response = self._http_client.request(
|
|
344
|
+
ACTIONS_PATH,
|
|
345
|
+
method=REQUEST_METHOD_GET,
|
|
346
|
+
params=list_params,
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
return WorkOSListResource[
|
|
350
|
+
AuditLogAction, AuditLogActionListFilters, ListMetadata
|
|
351
|
+
](
|
|
352
|
+
list_method=self.list_actions,
|
|
353
|
+
list_args=list_params,
|
|
354
|
+
**ListPage[AuditLogAction](**response).model_dump(),
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
def get_retention(self, organization_id: str) -> AuditLogRetention:
|
|
358
|
+
response = self._http_client.request(
|
|
359
|
+
f"organizations/{organization_id}/audit_logs_retention",
|
|
360
|
+
method=REQUEST_METHOD_GET,
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
return AuditLogRetention.model_validate(response)
|
|
364
|
+
|
|
365
|
+
def set_retention(
|
|
366
|
+
self,
|
|
367
|
+
*,
|
|
368
|
+
organization_id: str,
|
|
369
|
+
retention_period_in_days: Literal[30, 365],
|
|
370
|
+
) -> AuditLogRetention:
|
|
371
|
+
json = {"retention_period_in_days": retention_period_in_days}
|
|
372
|
+
|
|
373
|
+
response = self._http_client.request(
|
|
374
|
+
f"organizations/{organization_id}/audit_logs_retention",
|
|
375
|
+
method=REQUEST_METHOD_PUT,
|
|
376
|
+
json=json,
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
return AuditLogRetention.model_validate(response)
|
|
380
|
+
|
|
381
|
+
def get_configuration(self, organization_id: str) -> AuditLogConfiguration:
|
|
382
|
+
response = self._http_client.request(
|
|
383
|
+
f"organizations/{organization_id}/audit_log_configuration",
|
|
384
|
+
method=REQUEST_METHOD_GET,
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
return AuditLogConfiguration.model_validate(response)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
class AsyncAuditLogs(AuditLogsModule):
|
|
391
|
+
_http_client: AsyncHTTPClient
|
|
392
|
+
|
|
393
|
+
def __init__(self, http_client: AsyncHTTPClient):
|
|
394
|
+
self._http_client = http_client
|
|
395
|
+
|
|
396
|
+
async def create_event(
|
|
397
|
+
self,
|
|
398
|
+
*,
|
|
399
|
+
organization_id: str,
|
|
400
|
+
event: AuditLogEvent,
|
|
401
|
+
idempotency_key: Optional[str] = None,
|
|
402
|
+
) -> None:
|
|
403
|
+
json = {"organization_id": organization_id, "event": event}
|
|
404
|
+
|
|
405
|
+
headers: Dict[str, str] = {}
|
|
406
|
+
if idempotency_key:
|
|
407
|
+
headers["idempotency-key"] = idempotency_key
|
|
408
|
+
|
|
409
|
+
await self._http_client.request(
|
|
410
|
+
EVENTS_PATH, method=REQUEST_METHOD_POST, json=json, headers=headers
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
async def create_export(
|
|
414
|
+
self,
|
|
415
|
+
*,
|
|
416
|
+
organization_id: str,
|
|
417
|
+
range_start: str,
|
|
418
|
+
range_end: str,
|
|
419
|
+
actions: Optional[Sequence[str]] = None,
|
|
420
|
+
targets: Optional[Sequence[str]] = None,
|
|
421
|
+
actor_names: Optional[Sequence[str]] = None,
|
|
422
|
+
actor_ids: Optional[Sequence[str]] = None,
|
|
423
|
+
) -> AuditLogExport:
|
|
424
|
+
json = {
|
|
425
|
+
"actions": actions,
|
|
426
|
+
"actor_ids": actor_ids,
|
|
427
|
+
"actor_names": actor_names,
|
|
428
|
+
"organization_id": organization_id,
|
|
429
|
+
"range_start": range_start,
|
|
430
|
+
"range_end": range_end,
|
|
431
|
+
"targets": targets,
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
response = await self._http_client.request(
|
|
435
|
+
EXPORTS_PATH, method=REQUEST_METHOD_POST, json=json
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
return AuditLogExport.model_validate(response)
|
|
439
|
+
|
|
440
|
+
async def get_export(self, audit_log_export_id: str) -> AuditLogExport:
|
|
441
|
+
response = await self._http_client.request(
|
|
442
|
+
f"{EXPORTS_PATH}/{audit_log_export_id}",
|
|
443
|
+
method=REQUEST_METHOD_GET,
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
return AuditLogExport.model_validate(response)
|
|
447
|
+
|
|
448
|
+
async def create_schema(
|
|
449
|
+
self,
|
|
450
|
+
*,
|
|
451
|
+
action: str,
|
|
452
|
+
targets: Sequence[AuditLogSchemaTargetInput],
|
|
453
|
+
actor: Optional[AuditLogSchemaActorInput] = None,
|
|
454
|
+
metadata: Optional[MetadataSchemaInput] = None,
|
|
455
|
+
idempotency_key: Optional[str] = None,
|
|
456
|
+
) -> AuditLogSchema:
|
|
457
|
+
json = serialize_schema_options(targets, actor, metadata)
|
|
458
|
+
|
|
459
|
+
headers: Dict[str, str] = {}
|
|
460
|
+
if idempotency_key:
|
|
461
|
+
headers["idempotency-key"] = idempotency_key
|
|
462
|
+
|
|
463
|
+
response = await self._http_client.request(
|
|
464
|
+
f"{ACTIONS_PATH}/{action}/schemas",
|
|
465
|
+
method=REQUEST_METHOD_POST,
|
|
466
|
+
json=json,
|
|
467
|
+
headers=headers,
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
return AuditLogSchema.model_validate(response)
|
|
471
|
+
|
|
472
|
+
async def list_schemas(
|
|
473
|
+
self,
|
|
474
|
+
*,
|
|
475
|
+
action: str,
|
|
476
|
+
limit: int = DEFAULT_LIST_RESPONSE_LIMIT,
|
|
477
|
+
before: Optional[str] = None,
|
|
478
|
+
after: Optional[str] = None,
|
|
479
|
+
order: PaginationOrder = "desc",
|
|
480
|
+
) -> AuditLogSchemasListResource:
|
|
481
|
+
list_params: AuditLogSchemaListFilters = {
|
|
482
|
+
"limit": limit,
|
|
483
|
+
"before": before,
|
|
484
|
+
"after": after,
|
|
485
|
+
"order": order,
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
response = await self._http_client.request(
|
|
489
|
+
f"{ACTIONS_PATH}/{action}/schemas",
|
|
490
|
+
method=REQUEST_METHOD_GET,
|
|
491
|
+
params=list_params,
|
|
492
|
+
)
|
|
493
|
+
|
|
494
|
+
return WorkOSListResource[
|
|
495
|
+
AuditLogSchema, AuditLogSchemaListFilters, ListMetadata
|
|
496
|
+
](
|
|
497
|
+
list_method=lambda **kwargs: self.list_schemas(action=action, **kwargs),
|
|
498
|
+
list_args=list_params,
|
|
499
|
+
**ListPage[AuditLogSchema](**response).model_dump(),
|
|
500
|
+
)
|
|
501
|
+
|
|
502
|
+
async def list_actions(
|
|
503
|
+
self,
|
|
504
|
+
*,
|
|
505
|
+
limit: int = DEFAULT_LIST_RESPONSE_LIMIT,
|
|
506
|
+
before: Optional[str] = None,
|
|
507
|
+
after: Optional[str] = None,
|
|
508
|
+
order: PaginationOrder = "desc",
|
|
509
|
+
) -> AuditLogActionsListResource:
|
|
510
|
+
list_params: AuditLogActionListFilters = {
|
|
511
|
+
"limit": limit,
|
|
512
|
+
"before": before,
|
|
513
|
+
"after": after,
|
|
514
|
+
"order": order,
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
response = await self._http_client.request(
|
|
518
|
+
ACTIONS_PATH,
|
|
519
|
+
method=REQUEST_METHOD_GET,
|
|
520
|
+
params=list_params,
|
|
521
|
+
)
|
|
522
|
+
|
|
523
|
+
return WorkOSListResource[
|
|
524
|
+
AuditLogAction, AuditLogActionListFilters, ListMetadata
|
|
525
|
+
](
|
|
526
|
+
list_method=self.list_actions,
|
|
527
|
+
list_args=list_params,
|
|
528
|
+
**ListPage[AuditLogAction](**response).model_dump(),
|
|
529
|
+
)
|
|
530
|
+
|
|
531
|
+
async def get_retention(self, organization_id: str) -> AuditLogRetention:
|
|
532
|
+
response = await self._http_client.request(
|
|
533
|
+
f"organizations/{organization_id}/audit_logs_retention",
|
|
534
|
+
method=REQUEST_METHOD_GET,
|
|
535
|
+
)
|
|
536
|
+
|
|
537
|
+
return AuditLogRetention.model_validate(response)
|
|
538
|
+
|
|
539
|
+
async def set_retention(
|
|
540
|
+
self,
|
|
541
|
+
*,
|
|
542
|
+
organization_id: str,
|
|
543
|
+
retention_period_in_days: Literal[30, 365],
|
|
544
|
+
) -> AuditLogRetention:
|
|
545
|
+
json = {"retention_period_in_days": retention_period_in_days}
|
|
546
|
+
|
|
547
|
+
response = await self._http_client.request(
|
|
548
|
+
f"organizations/{organization_id}/audit_logs_retention",
|
|
549
|
+
method=REQUEST_METHOD_PUT,
|
|
550
|
+
json=json,
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
return AuditLogRetention.model_validate(response)
|
|
554
|
+
|
|
555
|
+
async def get_configuration(self, organization_id: str) -> AuditLogConfiguration:
|
|
556
|
+
response = await self._http_client.request(
|
|
557
|
+
f"organizations/{organization_id}/audit_log_configuration",
|
|
558
|
+
method=REQUEST_METHOD_GET,
|
|
559
|
+
)
|
|
560
|
+
|
|
561
|
+
return AuditLogConfiguration.model_validate(response)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Optional, Protocol
|
|
1
|
+
from typing import Any, Dict, Optional, Protocol, Union
|
|
2
2
|
|
|
3
3
|
from workos.types.directory_sync.list_filters import (
|
|
4
4
|
DirectoryGroupListFilters,
|
|
@@ -32,6 +32,24 @@ DirectoriesListResource = WorkOSListResource[
|
|
|
32
32
|
Directory, DirectoryListFilters, ListMetadata
|
|
33
33
|
]
|
|
34
34
|
|
|
35
|
+
# Mapping from SDK parameter names to API parameter names
|
|
36
|
+
PARAM_KEY_MAPPING = {
|
|
37
|
+
"directory_id": "directory",
|
|
38
|
+
"group_id": "group",
|
|
39
|
+
"user_id": "user",
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _prepare_request_params(
|
|
44
|
+
list_params: Union[DirectoryUserListFilters, DirectoryGroupListFilters],
|
|
45
|
+
) -> Dict[str, Any]:
|
|
46
|
+
"""Convert list_params to API request params by renaming keys."""
|
|
47
|
+
request_params: Dict[str, Any] = dict(list_params)
|
|
48
|
+
for sdk_key, api_key in PARAM_KEY_MAPPING.items():
|
|
49
|
+
if sdk_key in request_params:
|
|
50
|
+
request_params[api_key] = request_params.pop(sdk_key)
|
|
51
|
+
return request_params
|
|
52
|
+
|
|
35
53
|
|
|
36
54
|
class DirectorySyncModule(Protocol):
|
|
37
55
|
"""Offers methods through the WorkOS Directory Sync service."""
|
|
@@ -191,7 +209,7 @@ class DirectorySync(DirectorySyncModule):
|
|
|
191
209
|
response = self._http_client.request(
|
|
192
210
|
"directory_users",
|
|
193
211
|
method=REQUEST_METHOD_GET,
|
|
194
|
-
params=list_params,
|
|
212
|
+
params=_prepare_request_params(list_params),
|
|
195
213
|
)
|
|
196
214
|
|
|
197
215
|
return WorkOSListResource(
|
|
@@ -225,7 +243,7 @@ class DirectorySync(DirectorySyncModule):
|
|
|
225
243
|
response = self._http_client.request(
|
|
226
244
|
"directory_groups",
|
|
227
245
|
method=REQUEST_METHOD_GET,
|
|
228
|
-
params=list_params,
|
|
246
|
+
params=_prepare_request_params(list_params),
|
|
229
247
|
)
|
|
230
248
|
|
|
231
249
|
return WorkOSListResource[
|
|
@@ -329,7 +347,7 @@ class AsyncDirectorySync(DirectorySyncModule):
|
|
|
329
347
|
response = await self._http_client.request(
|
|
330
348
|
"directory_users",
|
|
331
349
|
method=REQUEST_METHOD_GET,
|
|
332
|
-
params=list_params,
|
|
350
|
+
params=_prepare_request_params(list_params),
|
|
333
351
|
)
|
|
334
352
|
|
|
335
353
|
return WorkOSListResource(
|
|
@@ -354,6 +372,7 @@ class AsyncDirectorySync(DirectorySyncModule):
|
|
|
354
372
|
"after": after,
|
|
355
373
|
"order": order,
|
|
356
374
|
}
|
|
375
|
+
|
|
357
376
|
if user_id is not None:
|
|
358
377
|
list_params["user_id"] = user_id
|
|
359
378
|
if directory_id is not None:
|
|
@@ -362,7 +381,7 @@ class AsyncDirectorySync(DirectorySyncModule):
|
|
|
362
381
|
response = await self._http_client.request(
|
|
363
382
|
"directory_groups",
|
|
364
383
|
method=REQUEST_METHOD_GET,
|
|
365
|
-
params=list_params,
|
|
384
|
+
params=_prepare_request_params(list_params),
|
|
366
385
|
)
|
|
367
386
|
|
|
368
387
|
return WorkOSListResource[
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
from .audit_log_action import *
|
|
2
|
+
from .audit_log_configuration import *
|
|
1
3
|
from .audit_log_event_actor import *
|
|
2
4
|
from .audit_log_event_context import *
|
|
3
5
|
from .audit_log_event_target import *
|
|
4
6
|
from .audit_log_event import *
|
|
5
7
|
from .audit_log_export import *
|
|
6
8
|
from .audit_log_metadata import *
|
|
9
|
+
from .audit_log_retention import *
|
|
10
|
+
from .audit_log_schema import *
|
|
11
|
+
from .audit_log_schema_input import *
|
|
12
|
+
from .list_filters import *
|