Tapi 0.1.2__py3-none-any.whl

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.
Files changed (69) hide show
  1. tapi/__init__.py +2 -0
  2. tapi/api/__init__.py +46 -0
  3. tapi/api/action/__init__.py +7 -0
  4. tapi/api/action/actions.py +106 -0
  5. tapi/api/action/events.py +33 -0
  6. tapi/api/action/logs.py +34 -0
  7. tapi/api/admin/__init__.py +12 -0
  8. tapi/api/admin/action_egress_control_rules.py +87 -0
  9. tapi/api/admin/admin.py +43 -0
  10. tapi/api/admin/ip_access_control.py +76 -0
  11. tapi/api/admin/job.py +42 -0
  12. tapi/api/admin/scim.py +27 -0
  13. tapi/api/admin/template.py +86 -0
  14. tapi/api/admin/user.py +104 -0
  15. tapi/api/audit_log/__init__.py +5 -0
  16. tapi/api/audit_log/audit_logs.py +24 -0
  17. tapi/api/case/__init__.py +20 -0
  18. tapi/api/case/actions.py +90 -0
  19. tapi/api/case/activities.py +35 -0
  20. tapi/api/case/assignees.py +21 -0
  21. tapi/api/case/blocks.py +112 -0
  22. tapi/api/case/cases.py +132 -0
  23. tapi/api/case/comments.py +102 -0
  24. tapi/api/case/fields.py +69 -0
  25. tapi/api/case/files.py +77 -0
  26. tapi/api/case/inputs.py +64 -0
  27. tapi/api/case/linked_cases.py +57 -0
  28. tapi/api/case/metadata.py +65 -0
  29. tapi/api/case/notes.py +78 -0
  30. tapi/api/case/records.py +54 -0
  31. tapi/api/case/subscribers.py +56 -0
  32. tapi/api/credential/__init__.py +1 -0
  33. tapi/api/credential/credentials.py +240 -0
  34. tapi/api/event/__init__.py +1 -0
  35. tapi/api/event/events.py +44 -0
  36. tapi/api/folder/__init__.py +1 -0
  37. tapi/api/folder/folders.py +71 -0
  38. tapi/api/note/__init__.py +5 -0
  39. tapi/api/note/notes.py +76 -0
  40. tapi/api/record/__init__.py +7 -0
  41. tapi/api/record/artifacts.py +17 -0
  42. tapi/api/record/records.py +85 -0
  43. tapi/api/record/types.py +52 -0
  44. tapi/api/report/__init__.py +5 -0
  45. tapi/api/report/reporting.py +41 -0
  46. tapi/api/resource/__init__.py +1 -0
  47. tapi/api/resource/resources.py +152 -0
  48. tapi/api/story/__init__.py +10 -0
  49. tapi/api/story/change_requests.py +64 -0
  50. tapi/api/story/drafts.py +45 -0
  51. tapi/api/story/groups.py +38 -0
  52. tapi/api/story/runs.py +43 -0
  53. tapi/api/story/stories.py +162 -0
  54. tapi/api/story/versions.py +65 -0
  55. tapi/api/team/__init__.py +4 -0
  56. tapi/api/team/members.py +62 -0
  57. tapi/api/team/teams.py +60 -0
  58. tapi/api/tenant.py +68 -0
  59. tapi/client/__init__.py +1 -0
  60. tapi/client/client.py +55 -0
  61. tapi/utils/helpers.py +9 -0
  62. tapi/utils/http.py +8 -0
  63. tapi/utils/testing_decorators.py +5 -0
  64. tapi/utils/types.py +300 -0
  65. tapi-0.1.2.dist-info/METADATA +2487 -0
  66. tapi-0.1.2.dist-info/RECORD +69 -0
  67. tapi-0.1.2.dist-info/WHEEL +5 -0
  68. tapi-0.1.2.dist-info/licenses/LICENSE +674 -0
  69. tapi-0.1.2.dist-info/top_level.txt +1 -0
tapi/api/team/teams.py ADDED
@@ -0,0 +1,60 @@
1
+ from tapi.client import Client
2
+ from .members import MembersAPI
3
+
4
+
5
+ class TeamsAPI(Client):
6
+ def __init__(self, domain: str, apiKey: str):
7
+ super().__init__(domain, apiKey)
8
+ self.base_endpoint = "teams"
9
+ self.members = MembersAPI(domain, apiKey)
10
+
11
+ def create(
12
+ self,
13
+ name: str
14
+ ):
15
+ return self._http_request(
16
+ "POST",
17
+ self.base_endpoint,
18
+ json = {"name": name}
19
+ )
20
+
21
+ def get(
22
+ self,
23
+ team_id: int
24
+ ):
25
+ return self._http_request(
26
+ "GET",
27
+ f"{self.base_endpoint}/{team_id}"
28
+ )
29
+
30
+ def update(
31
+ self,
32
+ team_id: int,
33
+ name: str
34
+ ):
35
+ return self._http_request(
36
+ "PUT",
37
+ f"{self.base_endpoint}/{team_id}",
38
+ json = {"name": name}
39
+ )
40
+
41
+ def list(
42
+ self,
43
+ include_personal_teams: bool = False,
44
+ per_page: int = 10,
45
+ page: int = 1,
46
+ ):
47
+ return self._http_request(
48
+ "GET",
49
+ self.base_endpoint,
50
+ json = {key: value for key, value in locals().items() if value is not None and key != "self"}
51
+ )
52
+
53
+ def delete(
54
+ self,
55
+ team_id: int
56
+ ):
57
+ return self._http_request(
58
+ "DELETE",
59
+ f"{self.base_endpoint}/{team_id}",
60
+ )
tapi/api/tenant.py ADDED
@@ -0,0 +1,68 @@
1
+ from tapi.client import Client
2
+ from requests import request
3
+ from .case import CasesAPI
4
+ from .team import TeamsAPI
5
+ from .admin import AdminAPI
6
+ from .event import EventsAPI
7
+ from .story import StoriesAPI
8
+ from .folder import FoldersAPI
9
+ from .record import RecordsAPI
10
+ from .report import ReportingAPI
11
+ from .resource import ResourcesAPI
12
+ from .audit_log import AuditLogsAPI
13
+ from .credential import CredentialsAPI
14
+ from typing import Optional, Literal
15
+
16
+
17
+ class TenantAPI(Client):
18
+ def __init__(self, domain: str, apiKey: str):
19
+ super().__init__(domain, apiKey)
20
+ self.base_endpoint = "info"
21
+ self.cases = CasesAPI(domain, apiKey)
22
+ self.teams = TeamsAPI(domain, apiKey)
23
+ self.admin = AdminAPI(domain, apiKey)
24
+ self.events = EventsAPI(domain, apiKey)
25
+ self.stories = StoriesAPI(domain, apiKey)
26
+ self.folders = FoldersAPI(domain, apiKey)
27
+ self.records = RecordsAPI(domain, apiKey)
28
+ self.resources = ResourcesAPI(domain, apiKey)
29
+ self.reporting = ReportingAPI(domain, apiKey)
30
+ self.audit_logs = AuditLogsAPI(domain, apiKey)
31
+ self.credentials = CredentialsAPI(domain, apiKey)
32
+
33
+ def trigger_webhook(
34
+ self,
35
+ path: str,
36
+ secret: str,
37
+ method: Literal["GET", "PUT", "POST", "PATCH", "DELETE"] = "GET",
38
+ domain: Optional[str] = None,
39
+ **kwargs
40
+ ):
41
+ domain = domain or self.domain
42
+
43
+ req = request(
44
+ method = method,
45
+ url = f"https://{domain}.tines.com/webhook/{path}/{secret}",
46
+ **kwargs
47
+ )
48
+
49
+ return req.json()
50
+
51
+ def info(self):
52
+ return self._http_request(
53
+ "GET",
54
+ self.base_endpoint
55
+ )
56
+
57
+ def web_statistics(self):
58
+ return self._http_request(
59
+ "GET",
60
+ f"{self.base_endpoint}/web_stats"
61
+ )
62
+
63
+ def worker_statistics(self):
64
+ return self._http_request(
65
+ "GET",
66
+ f"{self.base_endpoint}/worker_stats"
67
+ )
68
+
@@ -0,0 +1 @@
1
+ from .client import Client
tapi/client/client.py ADDED
@@ -0,0 +1,55 @@
1
+ from tapi.utils.types import HTTPResponse
2
+ from json import JSONDecodeError
3
+ from typing import Union, Dict, Any
4
+ from requests import request, RequestException, Response
5
+
6
+ class Client:
7
+ verify_ssl: bool = True
8
+
9
+ def __init__(self, domain: str, apiKey: str) -> None:
10
+ self.domain = domain
11
+ self.apiKey = apiKey
12
+
13
+ def _http_request(
14
+ self,
15
+ method: str,
16
+ endpoint: str,
17
+ api_version: str = "v1",
18
+ **kwargs
19
+ ) -> HTTPResponse:
20
+ url = f"https://{self.domain}.tines.com/api/{api_version}/{endpoint}"
21
+ headers = {**kwargs.pop("headers", {}), "Authorization": f"Bearer {self.apiKey}"}
22
+
23
+ try:
24
+ response = request(method, url, headers=headers, verify=Client.verify_ssl, **kwargs)
25
+
26
+ return {
27
+ "body": self._parse_body(response),
28
+ "headers": dict(response.headers),
29
+ "status_code": response.status_code
30
+ }
31
+
32
+ except RequestException as e:
33
+ return {
34
+ "body": str(e),
35
+ "headers": {},
36
+ "status_code": 500
37
+ }
38
+
39
+ def _parse_body(
40
+ self,
41
+ response: Response
42
+ ) -> Union[Dict[str, Any], str, bytes]:
43
+ content_type = response.headers.get("Content-Type", "")
44
+
45
+ if "application/json" in content_type:
46
+ try:
47
+ body = response.json()
48
+ except JSONDecodeError:
49
+ body = response.text
50
+ elif "application/pdf" in content_type:
51
+ body = response.content
52
+ else:
53
+ body = response.text
54
+
55
+ return body
tapi/utils/helpers.py ADDED
@@ -0,0 +1,9 @@
1
+ from ipaddress import ip_network
2
+
3
+
4
+ def is_ip_valid(ip: str) -> bool:
5
+ try:
6
+ ip_network(ip, strict=False)
7
+ return True
8
+ except ValueError:
9
+ return False
tapi/utils/http.py ADDED
@@ -0,0 +1,8 @@
1
+ import urllib3
2
+ from tapi.client import Client
3
+
4
+
5
+ def disable_ssl_verification(supress_warnings: bool = True) -> None:
6
+ Client.verify_ssl = False
7
+ if supress_warnings:
8
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
@@ -0,0 +1,5 @@
1
+ from os import getenv
2
+ from unittest import skipIf
3
+
4
+ def premium_feature(func):
5
+ return skipIf(getenv("SKIP_PREMIUM_TESTS") == "1", "Skipping premium test")(func)
tapi/utils/types.py ADDED
@@ -0,0 +1,300 @@
1
+ from enum import IntEnum, StrEnum
2
+ from typing import TypedDict, Union, Dict, Any, Literal, Optional
3
+
4
+
5
+ class KeepEventsFor(IntEnum):
6
+ ONE_HOUR = 3600
7
+ SIX_HOURS = 21600
8
+ ONE_DAY = 86400
9
+ THREE_DAYS = 259200
10
+ SEVEN_DAYS = 604800
11
+ FOURTEEN_DAYS = 1209600
12
+ THIRTY_DAYS = 2592000
13
+ SIXTY_DAYS = 5184000
14
+ NINETY_DAYS = 7776000
15
+ ONE_HUNDRED_EIGHTY_DAYS = 15552000
16
+ THREE_HUNDRED_SIXTY_FIVE_DAYS = 31536000
17
+
18
+ class StoryMode(StrEnum):
19
+ ALL = ""
20
+ LIVE = "LIVE"
21
+ TEST = "TEST"
22
+
23
+ class SendToStoryAccessSource(StrEnum):
24
+ OFF = "OFF"
25
+ STS = "STS"
26
+ WORKBENCH = "WORKBENCH"
27
+ STS_AND_WORKBENCH = "STS_AND_WORKBENCH"
28
+
29
+ class SendToStoryAccess(StrEnum):
30
+ TEAM = "TEAM"
31
+ GLOBAL = "GLOBAL"
32
+ SPECIFIC_TEAMS = "SPECIFIC_TEAMS"
33
+
34
+ class Filter(StrEnum):
35
+ LOCKED = "LOCKED"
36
+ FAVORITE = "FAVORITE"
37
+ DISABLED = "DISABLED"
38
+ PUBLISHED = "PUBLISHED"
39
+ API_ENABLED = "API_ENABLED"
40
+ HIGH_PRIORITY = "HIGH_PRIORITY"
41
+ SEND_TO_STORY_ENABLED = "SEND_TO_STORY_ENABLED"
42
+ CHANGE_CONTROL_ENABLED = "CHANGE_CONTROL_ENABLED"
43
+
44
+ class StoriesReturnOrder(StrEnum):
45
+ NAME = "NAME"
46
+ NAME_DESC = "NAME_DESC"
47
+ RECENTLY_EDITED = "RECENTLY_EDITED"
48
+ ACTION_COUNT_ASC = "ACTION_COUNT_ASC"
49
+ ACTION_COUNT_DESC = "ACTION_COUNT_DESC"
50
+ LEAST_RECENTLY_EDITED = "LEAST_RECENTLY_EDITED"
51
+
52
+ class Mode(StrEnum):
53
+ NEW = "new"
54
+ VERSION_REPLACE = "versionReplace"
55
+
56
+ class Role(StrEnum):
57
+ VIEWER = "VIEWER"
58
+ EDITOR = "EDITOR"
59
+ TEAM_ADMIN = "TEAM_ADMIN"
60
+
61
+ class CasePriority(StrEnum):
62
+ LOW = "LOW"
63
+ HIGH = "HIGH"
64
+ INFO = "INFO"
65
+ MEDIUM = "MEDIUM"
66
+ CRITICAL = "CRITICAL"
67
+
68
+ class CaseStatus(StrEnum):
69
+ OPEN = "OPEN"
70
+ CLOSE = "CLOSE"
71
+
72
+ class CaseReturnOrder(StrEnum):
73
+ OPENED_ASC = "OPENED_ASC"
74
+ OPENED_DESC = "OPENED_DESC"
75
+ CREATED_ASC = "CREATED_ASC"
76
+ CREATED_DESC = "CREATED_DESC"
77
+ PRIORITY_ASC = "PRIORITY_ASC"
78
+ PRIORITY_DESC = "PRIORITY_DESC"
79
+ RECENTLY_EDITED = "RECENTLY_EDITED"
80
+ LEAST_RECENTLY_EDITED = "LEAST_RECENTLY_EDITED"
81
+
82
+ class CaseActionType(StrEnum):
83
+ PAGE = "page"
84
+ WEBHOOK = "webhook"
85
+
86
+
87
+ class CaseActivityType(StrEnum):
88
+ CREATED = "CREATED"
89
+ ASSIGNED = "ASSIGNED"
90
+ COMMENTED = "COMMENTED"
91
+ UNASSIGNED = "UNASSIGNED"
92
+ TAGS_ADDED = "TAGS_ADDED"
93
+ SLA_WARNING = "SLA_WARNING"
94
+ FILE_DELETED = "FILE_DELETED"
95
+ TAGS_REMOVED = "TAGS_REMOVED"
96
+ SLA_EXCEEDED = "SLA_EXCEEDED"
97
+ FILE_ATTACHED = "FILE_ATTACHED"
98
+ FIELD_UPDATED = "FIELD_UPDATED"
99
+ STATUS_UPDATED = "STATUS_UPDATED"
100
+ DELETED_COMMENT = "DELETED_COMMENT"
101
+ METADATA_UPDATED = "METADATA_UPDATED"
102
+ SEVERITY_UPDATED = "SEVERITY_UPDATED"
103
+ LINKED_CASE_ADDED = "LINKED_CASE_ADDED"
104
+ SUB_STATUS_UPDATED = "SUB_STATUS_UPDATED"
105
+ LINKED_CASE_REMOVED = "LINKED_CASE_REMOVED"
106
+ RECORD_RESULT_SET_ADDED = "RECORD_RESULT_SET_ADDED"
107
+ CHECKLIST_ITEM_COMPLETED = "CHECKLIST_ITEM_COMPLETED"
108
+ CHECKLIST_ITEM_INCOMPLETE = "CHECKLIST_ITEM_INCOMPLETE"
109
+ RECORD_RESULT_SET_REMOVED = "RECORD_RESULT_SET_REMOVED"
110
+ FILE_ATTACHED_AND_COMMENTED = "FILE_ATTACHED_AND_COMMENTED"
111
+
112
+ class CaseInputType(StrEnum):
113
+ STRING = "string"
114
+ NUMBER = "number"
115
+ BOOLEAN = "boolean"
116
+ TIMESTAMP = "timestamp"
117
+
118
+ class CaseValidationType(StrEnum):
119
+ REGEX = "regex"
120
+ OPTIONS = "options"
121
+
122
+ class HTTPResponse(TypedDict):
123
+ body: Union[Dict[str, Any], str, bytes]
124
+ headers: Dict[str, Any]
125
+ status_code: int
126
+
127
+ class AgentType(StrEnum):
128
+ IMAP = "Agents::IMAPAgent"
129
+ EMAIL = "Agents::EmailAgent"
130
+ GROUP = "Agents::GroupAgent"
131
+ TRIGGER = "Agents::TriggerAgent"
132
+ WEBHOOK = "Agents::WebhookAgent"
133
+ HTTP_REQUEST = "Agents::HTTPRequestAgent"
134
+ SEND_T0_STORY = "Agents::SendToStoryAgent"
135
+ EVENT_TRANSFORM = "Agents::EventTransformationAgent"
136
+
137
+ class ReactionType(StrEnum):
138
+ PLUS_ONE = "+1"
139
+ MINUS_ONE = "-1"
140
+ EYES = "eyes"
141
+ HEART = "heart"
142
+ WHITE_CHECK_MARK = "white_check_mark"
143
+
144
+ class CaseNoteColor(StrEnum):
145
+ GOLD = "gold"
146
+ BLUE = "blue"
147
+ GREEN = "green"
148
+ WHITE = "white"
149
+ MAGENTA = "magenta"
150
+
151
+ class LogSeverityLevel(IntEnum):
152
+ INFO = 3
153
+ ERROR = 4
154
+ WARNING = 2
155
+
156
+ class AuditLogType(StrEnum):
157
+ LOGIN = "Login"
158
+ USER_EDIT = "UserEdit"
159
+ OPERATION = "operation"
160
+ TEAM_UPDATE = "TeamUpdate"
161
+ FORM_UPDATE = "FormUpdate"
162
+ LINK_CHANGE = "LinkChange"
163
+ STORY_IMPORT = "StoryImport"
164
+ USER_DELETION = "UserDeletion"
165
+ GROUP_FLATTEN = "GroupFlatten"
166
+ FOLDER_UPDATE = "FolderUpdate"
167
+ STORY_ARCHIVE = "StoryArchive"
168
+ STORY_RESTORE = "StoryRestore"
169
+ TEAM_CREATION = "TeamCreation"
170
+ EVENT_DELETION = "EventDeletion"
171
+ STORY_CREATION = "StoryCreation"
172
+ STORY_MOVEMENT = "StoryMovement"
173
+ TEMPLATE_UPDATE = "TemplateUpdate"
174
+ TEAM_CASE_UPDATE = "TeamCaseUpdate"
175
+ STORY_API_CHANGE = "StoryApiChange"
176
+ FOLDER_CREATION = "FolderCreation"
177
+ CREDENTIAL_SAVE = "CredentialSave"
178
+ USERS_INVITATION = "UsersInvitation"
179
+ TEAM_DESTRUCTION = "TeamDestruction"
180
+ FORM_FIELD_UPDATE = "FormFieldUpdate"
181
+ GROUP_EXTRACTION = "GroupExtraction"
182
+ STORY_NAME_CHANGE = "StoryNameChange"
183
+ TEMPLATE_CREATION = "TemplateCreation"
184
+ FORM_FIELD_REORDER = "FormFieldReorder"
185
+ FORM_FIELD_REMOVAL = "FormFieldRemoval"
186
+ TEAM_CASE_CREATION = "TeamCaseCreation"
187
+ ANALYTICS_CAPTURE = "AnalyticsCapture"
188
+ ACTION_SIZE_CHANGE = "ActionSizeChange"
189
+ RECORD_TYPE_UPDATE = "RecordTypeUpdate"
190
+ USER_REINVITATION = "UserReinvitation"
191
+ TEAM_MEMBER_REMOVAL = "TeamMemberRemoval"
192
+ BATCH_STORY_ARCHIVE = "BatchStoryArchive"
193
+ ACTIONS_NAME_CHANGE = "ActionsNameChange"
194
+ FOLDER_DESTRUCTION = "FolderDestruction"
195
+ FORM_FIELD_ADDITION = "FormFieldAddition"
196
+ STORY_LOCKED_CHANGE = "StoryLockedChange"
197
+ TEST_STORY_CREATION = "TestStoryCreation"
198
+ TEST_STORY_DELETION = "TestStoryDeletion"
199
+ TEAM_CASE_TAGS_UPDATE = "TeamCaseTagsUpdate"
200
+ RECORD_REPORT_UPDATE = "RecordReportUpdate"
201
+ JOBS_QUEUED_DELETION = "JobsQueuedDeletion"
202
+ GLOBAL_RESOURCE_EDIT = "GlobalResourceEdit"
203
+ CREDENTIAL_MOVEMENT = "CredentialMovement"
204
+ EXAMPLE_STORY_IMPORT = "ExampleStoryImport"
205
+ RECORD_TYPE_CREATION = "RecordTypeCreation"
206
+ RECORD_WRITER_UPDATE = "RecordWriterUpdate"
207
+ STORY_ITEMS_CREATION = "StoryItemsCreation"
208
+ STORY_ITEMS_MOVEMENT = "StoryItemsMovement"
209
+ STORY_JOBS_CLEARANCE = "StoryJobsClearance"
210
+ STORY_VERSION_CREATE = "StoryVersionCreate"
211
+ STORY_VERSION_IMPORT = "StoryVersionImport"
212
+ TEAM_CASE_FILE_ATTACH = "TeamCaseFileAttach"
213
+ TENANT_CONFIG_CHANGE = "TenantConfigChange"
214
+ TEMPLATE_DESTRUCTION = "TemplateDestruction"
215
+ STORY_PRIORITY_CHANGE = "StoryPriorityChange"
216
+ STORY_EVENTS_DELETION = "StoryEventsDeletion"
217
+ RESOURCE_REPLACEMENT = "ResourceReplacement"
218
+ ACTION_METRICS_CHANGE = "ActionMetricsChange"
219
+ LAST_EVENT_RE_EMISSION = "LastEventReEmission"
220
+ ACTION_LOGS_CLEARANCE = "ActionLogsClearance"
221
+ STORY_DISABLED_CHANGE = "StoryDisabledChange"
222
+ TEAM_MEMBERS_ADDITION = "TeamMembersAddition"
223
+ JOBS_RETRYING_DELETION = "JobsRetryingDeletion"
224
+ ANNOTATION_SIZE_CHANGE = "AnnotationSizeChange"
225
+ ACTIONS_OPTIONS_CHANGE = "ActionsOptionsChange"
226
+ RECORD_REPORT_CREATION = "RecordReportCreation"
227
+ RECORD_REPORT_DELETION = "RecordReportDeletion"
228
+ RECORD_WRITER_CREATION = "RecordWriterCreation"
229
+ STORY_RECIPIENT_UPDATE = "StoryRecipientUpdate"
230
+ STORY_VERSION_DELETION = "StoryVersionDeletion"
231
+ STORY_RECIPIENT_REMOVAL = "StoryRecipientRemoval"
232
+ ACTION_MEMORY_CLEARANCE = "ActionMemoryClearance"
233
+ ACTIONS_DISABLED_CHANGE = "ActionsDisabledChange"
234
+ ACTIONS_EVENTS_DELETION = "ActionsEventsDeletion"
235
+ ARCHIVED_STORY_DELETION = "ArchivedStoryDeletion"
236
+ CREDENTIAL_DESTRUCTION = "CredentialDestruction"
237
+ CREDENTIAL_REPLACEMENT = "CredentialReplacement"
238
+ ACTIONS_SCHEDULE_CHANGE = "ActionsScheduleChange"
239
+ RECORD_RESULT_SET_UPDATE = "RecordResultSetUpdate"
240
+ STORY_ACTIONS_AUTO_ALIGN = "StoryActionsAutoAlign"
241
+ RECORD_TYPE_DESTRUCTION = "RecordTypeDestruction"
242
+ STORY_ITEMS_DESTRUCTION = "StoryItemsDestruction"
243
+ TEAM_CASE_COMMENT_UPDATE = "TeamCaseCommentUpdate"
244
+ TEAM_CASE_WEBHOOK_UPDATE = "TeamCaseWebhookUpdate"
245
+ GLOBAL_RESOURCE_MOVEMENT = "GlobalResourceMovement"
246
+ STORY_ACTIONS_AUTO_LAYOUT = "StoryActionsAutoLayout"
247
+ GLOBAL_RESOURCE_CREATION = "GlobalResourceCreation"
248
+ ARCHIVED_STORY_DELETE_ALL = "ArchivedStoryDeleteAll"
249
+ STORY_DESCRIPTION_CHANGE = "StoryDescriptionChange"
250
+ STORY_SEND_TO_STORY_CHANGE = "StorySendToStoryChange"
251
+ STORY_RECIPIENT_ADDITION = "StoryRecipientAddition"
252
+ STORY_VERSION_NAME_CHANGE = "StoryVersionNameChange"
253
+ TEAM_CASE_BUTTON_CREATION = "TeamCaseButtonCreation"
254
+ ACTIONS_MONITORING_CHANGE = "ActionsMonitoringChange"
255
+ ANNOTATION_CONTENT_CHANGE = "AnnotationContentChange"
256
+ RECORD_WRITER_DESTRUCTION = "RecordWriterDestruction"
257
+ SSO_CONFIGURATION_OIDC_SET = "SsoConfigurationOidcSet"
258
+ SSO_CONFIGURATION_SAML_SET = "SsoConfigurationSamlSet"
259
+ STORY_ACTIONS_POSITIONING = "StoryActionsPositioning"
260
+ TENANT_FEATURE_FLAG_TOGGLE = "TenantFeatureFlagToggle"
261
+ TEAM_CASE_COMMENT_CREATION = "TeamCaseCommentCreation"
262
+ TENANT_PLAN_UPGRADE_REQUEST = "TenantPlanUpgradeRequest"
263
+ STORY_KEEP_EVENTS_FOR_CHANGE = "StoryKeepEventsForChange"
264
+ RECORD_REPORT_ELEMENT_UPDATE = "RecordReportElementUpdate"
265
+ GLOBAL_RESOURCE_DESTRUCTION = "GlobalResourceDestruction"
266
+ SSO_CONFIGURATION_DEFAULT_SET = "SsoConfigurationDefaultSet"
267
+ STORY_REPORTING_STATUS_CHANGE = "StoryReportingStatusChange"
268
+ TEAM_CASE_ADD_COMMENT_REACTION = "TeamCaseAddCommentReaction"
269
+ TEAM_CASE_SUBSCRIBER_CREATION = "TeamCaseSubscriberCreation"
270
+ TEAM_CASE_SUBSCRIBER_DELETION = "TeamCaseSubscriberDeletion"
271
+ TEAM_CASES_SAVED_VIEW_CREATION = "TeamCasesSavedViewCreation"
272
+ AUTHENTICATION_TOKEN_CREATION = "AuthenticationTokenCreation"
273
+ AUTHENTICATION_TOKEN_DELETION = "AuthenticationTokenDeletion"
274
+ CREDENTIAL_OAUTH_TOKEN_REFRESH = "CredentialOauthTokenRefresh"
275
+ RECORD_REPORT_ELEMENT_CREATION = "RecordReportElementCreation"
276
+ CUSTOM_CERTIFICATE_AUTHORITY_SET = "CustomCertificateAuthoritySet"
277
+ TEAM_CASE_REMOVE_COMMENT_REACTION = "TeamCaseRemoveCommentReaction"
278
+ TEAM_CASES_SAVED_VIEW_DESTRUCTION = "TeamCasesSavedViewDestruction"
279
+ RECORD_REPORT_ELEMENT_DESTRUCTION = "RecordReportElementDestruction"
280
+ RECORD_REPORT_ELEMENT_COLUMN_REORDER = "RecordReportElementColumnReorder"
281
+
282
+ class RecordFieldValue(TypedDict):
283
+ field_id: Union[str, int]
284
+ value: Union[Any]
285
+
286
+ class RecordFilter(TypedDict):
287
+ field_id: Union[str, int]
288
+ operator: Union[Literal[
289
+ "EQUAL", "NOT_EQUAL", "GREATER_THAN",
290
+ "GREATER_THAN_OR_EQUAL_TO", "LESS_THAN",
291
+ "LESS_THAN_OR_EQUAL_TO", "IS_EMPTY",
292
+ "IS_NOT_EMPTY", "IS_TRUE", "IS_FALSE"],
293
+ str
294
+ ]
295
+ value: Optional[Union[str, int]]
296
+
297
+ class SCIMUserGroupMapping(TypedDict):
298
+ group_name: str
299
+ team_name: str
300
+ role_name: str