From 1f8c8fac1cd5acb4ad7348e83af11f3812a360eb Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 6 Dec 2022 13:31:35 +0000 Subject: [PATCH 01/77] bump 0.3.1 Signed-off-by: Sergey Chvalyuk --- airbyte-integrations/connectors/source-jira/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/Dockerfile b/airbyte-integrations/connectors/source-jira/Dockerfile index f30726f603a70..b74fa3edf0c46 100644 --- a/airbyte-integrations/connectors/source-jira/Dockerfile +++ b/airbyte-integrations/connectors/source-jira/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.0 +LABEL io.airbyte.version=0.3.1 LABEL io.airbyte.name=airbyte/source-jira From d6868c37817ff3f2678f217a7ddc5a9986e39bcc Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 6 Dec 2022 17:57:43 +0000 Subject: [PATCH 02/77] skip requests.codes.NOT_FOUND Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index cecf825623331..c7e67ff5f3427 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -12,6 +12,7 @@ import requests from airbyte_cdk.models import SyncMode from airbyte_cdk.sources.streams.http import HttpStream +from requests.exceptions import HTTPError API_VERSION = 3 @@ -480,7 +481,13 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) for field in fields_stream.read_records(sync_mode=SyncMode.full_refresh): if field.get("custom", False): - yield from super().read_records(stream_slice={"field_id": field["id"]}, **kwargs) + try: + yield from super().read_records(stream_slice={"field_id": field["id"]}, **kwargs) + except HTTPError as e: + # https://community.developer.atlassian.com/t/get-custom-field-contexts-not-found-returned/48408/2 + # /rest/api/2/field/{fieldId}/context - can return 404 if project style is not "classic" + if e.response.status_code != requests.codes.NOT_FOUND: + raise e class IssueLinkTypes(JiraStream): From 47b0541dcc5f9ab1a464f8904e33eb4651fe204b Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 6 Dec 2022 18:03:19 +0000 Subject: [PATCH 03/77] jira.md updated Signed-off-by: Sergey Chvalyuk --- docs/integrations/sources/jira.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/integrations/sources/jira.md b/docs/integrations/sources/jira.md index 719ef8ee1d8e8..1f2f21618fe83 100644 --- a/docs/integrations/sources/jira.md +++ b/docs/integrations/sources/jira.md @@ -96,10 +96,11 @@ The Jira connector should not run into Jira API limitations under normal usage. | Version | Date | Pull Request | Subject | |:--------|:-----------|:------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------| -| 0.3.0 | 2022-11-03 | [\#18901](hhttps://github.com/airbytehq/airbyte/pull/18901) | Adds UserGroupsDetailed schema, fix Incremental normalization, add Incremental support for IssueComments, IssueWorklogs | -| 0.2.23 | 2022-10-28 | [\#18505](hhttps://github.com/airbytehq/airbyte/pull/18505) | Correcting `max_results` bug introduced in connector stream | -| 0.2.22 | 2022-10-03 | [\#16944](hhttps://github.com/airbytehq/airbyte/pull/16944) | Adds support for `max_results` to `users` stream | -| 0.2.21 | 2022-07-28 | [\#15135](hhttps://github.com/airbytehq/airbyte/pull/15135) | Adds components to `fields` object on `issues` stream | +| 0.3.1 | 2022-12-06 | [\#20128](https://github.com/airbytehq/airbyte/pull/20128) | Skip 404 for IssueCustomFieldContexts | +| 0.3.0 | 2022-11-03 | [\#18901](https://github.com/airbytehq/airbyte/pull/18901) | Adds UserGroupsDetailed schema, fix Incremental normalization, add Incremental support for IssueComments, IssueWorklogs | +| 0.2.23 | 2022-10-28 | [\#18505](https://github.com/airbytehq/airbyte/pull/18505) | Correcting `max_results` bug introduced in connector stream | +| 0.2.22 | 2022-10-03 | [\#16944](https://github.com/airbytehq/airbyte/pull/16944) | Adds support for `max_results` to `users` stream | +| 0.2.21 | 2022-07-28 | [\#15135](https://github.com/airbytehq/airbyte/pull/15135) | Adds components to `fields` object on `issues` stream | | 0.2.20 | 2022-05-25 | [\#13202](https://github.com/airbytehq/airbyte/pull/13202) | Adds resolutiondate to `fields` object on `issues` stream | | 0.2.19 | 2022-05-04 | [\#10835](https://github.com/airbytehq/airbyte/pull/10835) | Change description for array fields | | 0.2.18 | 2021-12-23 | [\#7378](https://github.com/airbytehq/airbyte/pull/7378) | Adds experimental endpoint Pull Request | From e7d72f5dd9630f801d03a6a9ff7d5f0279772108 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 6 Dec 2022 18:03:56 +0000 Subject: [PATCH 04/77] api 2 -> 3 Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index c7e67ff5f3427..69df94e02b0f8 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -485,7 +485,7 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg yield from super().read_records(stream_slice={"field_id": field["id"]}, **kwargs) except HTTPError as e: # https://community.developer.atlassian.com/t/get-custom-field-contexts-not-found-returned/48408/2 - # /rest/api/2/field/{fieldId}/context - can return 404 if project style is not "classic" + # /rest/api/3/field/{fieldId}/context - can return 404 if project style is not "classic" if e.response.status_code != requests.codes.NOT_FOUND: raise e From cb11767e23240e8e8a5d936420617ef0dc553a93 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 7 Dec 2022 08:28:20 +0000 Subject: [PATCH 05/77] api_v1 added Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 69df94e02b0f8..0cedb18fec107 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -24,6 +24,7 @@ class JiraStream(HttpStream, ABC): primary_key: Optional[str] = "id" parse_response_root: Optional[str] = None + api_v1 = False def __init__(self, domain: str, projects: List[str], **kwargs): super(JiraStream, self).__init__(**kwargs) @@ -32,6 +33,8 @@ def __init__(self, domain: str, projects: List[str], **kwargs): @property def url_base(self) -> str: + if self.api_v1: + return f"https://{self._domain}/rest/agile/1.0/" return f"https://{self._domain}/rest/api/{API_VERSION}/" def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: @@ -80,12 +83,6 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, return record -class V1ApiJiraStream(JiraStream, ABC): - @property - def url_base(self) -> str: - return f"https://{self._domain}/rest/agile/1.0/" - - class StartDateJiraStream(JiraStream, ABC): def __init__(self, start_date: str = "", **kwargs): super().__init__(**kwargs) @@ -159,13 +156,14 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg yield from super().read_records(stream_slice={"avatar_type": avatar_type}, **kwargs) -class Boards(V1ApiJiraStream): +class Boards(JiraStream): """ https://developer.atlassian.com/cloud/jira/software/rest/api-group-other-operations/#api-agile-1-0-board-get """ parse_response_root = "values" use_cache = True + api_v1 = True def path(self, **kwargs) -> str: return "board" @@ -191,13 +189,14 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, return record -class BoardIssues(V1ApiJiraStream, IncrementalJiraStream): +class BoardIssues(IncrementalJiraStream): """ https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-issue-get """ cursor_field = "updated" parse_response_root = "issues" + api_v1 = True def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: board_id = stream_slice["board_id"] @@ -1027,13 +1026,14 @@ def path(self, **kwargs) -> str: return "screenscheme" -class Sprints(V1ApiJiraStream): +class Sprints(JiraStream): """ https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-sprint-get """ parse_response_root = "values" use_cache = True + api_v1 = True def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: board_id = stream_slice["board_id"] @@ -1047,13 +1047,14 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg yield from [] -class SprintIssues(V1ApiJiraStream, IncrementalJiraStream): +class SprintIssues(IncrementalJiraStream): """ https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-agile-1-0-sprint-sprintid-issue-get """ cursor_field = "updated" parse_response_root = "issues" + api_v1 = True def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: sprint_id = stream_slice["sprint_id"] From e7aeb6aefe5e03849bc8e6419194bd6655fc888b Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 7 Dec 2022 09:23:12 +0000 Subject: [PATCH 06/77] jql_compare_date moved to IncrementalJiraStream base class Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 0cedb18fec107..668cf77416f8a 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -88,6 +88,23 @@ def __init__(self, start_date: str = "", **kwargs): super().__init__(**kwargs) self._start_date = start_date + +class IncrementalJiraStream(StartDateJiraStream, ABC): + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: + cursor_field = self.cursor_field + if isinstance(cursor_field, str): + latest_record = latest_record.get(self.cursor_field) + elif isinstance(cursor_field, list): + for cursor_part in cursor_field: + latest_record = latest_record.get(cursor_part, {}) + cursor_field = cursor_field[-1] + latest_record_date = pendulum.parse(latest_record) + stream_state = current_stream_state.get(cursor_field) + if stream_state: + return {cursor_field: str(max(latest_record_date, pendulum.parse(stream_state)))} + else: + return {cursor_field: str(latest_record_date)} + def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: issues_state = None cursor_exist_in_state: Any = False @@ -111,23 +128,6 @@ def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: return None -class IncrementalJiraStream(StartDateJiraStream, ABC): - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: - cursor_field = self.cursor_field - if isinstance(cursor_field, str): - latest_record = latest_record.get(self.cursor_field) - elif isinstance(cursor_field, list): - for cursor_part in cursor_field: - latest_record = latest_record.get(cursor_part, {}) - cursor_field = cursor_field[-1] - latest_record_date = pendulum.parse(latest_record) - stream_state = current_stream_state.get(cursor_field) - if stream_state: - return {cursor_field: str(max(latest_record_date, pendulum.parse(stream_state)))} - else: - return {cursor_field: str(latest_record_date)} - - class ApplicationRoles(JiraStream): """ https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-rest-api-3-applicationrole-key-get From 2735b4fb0bf5bd5ba3fa7e9d05599ef72ae2410d Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 7 Dec 2022 10:34:50 +0000 Subject: [PATCH 07/77] create IssueFields, Projects in constructor Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 668cf77416f8a..a62abcd49da63 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -342,6 +342,8 @@ def __init__(self, additional_fields: List[str], expand_changelog: bool = False, self._additional_fields = additional_fields self._expand_changelog = expand_changelog self._render_fields = render_fields + self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, **kwargs) -> str: return "search" @@ -367,8 +369,7 @@ def request_params( return params def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - stream_args = {"authenticator": self.authenticator, "domain": self._domain, "projects": self._projects} - field_ids_by_name = IssueFields(**stream_args).field_ids_by_name() + field_ids_by_name = self.issue_fields_stream.field_ids_by_name() fields = [ "assignee", "attachment", @@ -393,8 +394,7 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg for name in additional_field_names + self._additional_fields: if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) - projects_stream = Projects(**stream_args) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in self.projects_stream.read_records(sync_mode=SyncMode.full_refresh): yield from super().read_records( stream_slice={"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))}, **kwargs ) From d7b8bf6ce232b89bf33d2a8f034144c5563c5423 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 7 Dec 2022 12:34:55 +0000 Subject: [PATCH 08/77] _validate_and_transform added Signed-off-by: Sergey Chvalyuk --- airbyte-integrations/connectors/source-jira/setup.py | 2 +- .../connectors/source-jira/source_jira/source.py | 10 ++++++++++ .../connectors/source-jira/source_jira/streams.py | 5 ++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/setup.py b/airbyte-integrations/connectors/source-jira/setup.py index 709b23f5531c3..7a7ee6925a854 100644 --- a/airbyte-integrations/connectors/source-jira/setup.py +++ b/airbyte-integrations/connectors/source-jira/setup.py @@ -5,7 +5,7 @@ from setuptools import find_packages, setup -MAIN_REQUIREMENTS = ["airbyte-cdk~=0.1", "requests==2.25.1", "pendulum>=1.2.0", "vcrpy==4.1.1"] +MAIN_REQUIREMENTS = ["airbyte-cdk~=0.1", "requests==2.25.1", "pendulum~=2.1.2"] TEST_REQUIREMENTS = [ "pytest==6.1.2", diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index e73b06c3fc178..915dc0bdb94c3 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -6,6 +6,7 @@ from json.decoder import JSONDecodeError from typing import Any, List, Mapping, Optional, Tuple +import pendulum from airbyte_cdk import AirbyteLogger from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource @@ -70,6 +71,12 @@ class SourceJira(AbstractSource): + def _validate_and_transform(self, config: Mapping[str, Any]): + start_date = config.get("start_date") + if start_date: + config["start_date"] = pendulum.parse(start_date) + return config + @staticmethod def get_authenticator(config: Mapping[str, Any]): token = b64encode(bytes(config["email"] + ":" + config["api_token"], "utf-8")).decode("ascii") @@ -77,6 +84,8 @@ def get_authenticator(config: Mapping[str, Any]): return authenticator def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]: + config = self._validate_and_transform(config) + alive = True error_msg = None @@ -100,6 +109,7 @@ def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> return alive, error_msg def streams(self, config: Mapping[str, Any]) -> List[Stream]: + config = self._validate_and_transform(config) authenticator = self.get_authenticator(config) args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} incremental_args = {**args, "start_date": config.get("start_date", "")} diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index a62abcd49da63..58c2ef43fefb0 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -118,10 +118,9 @@ def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: cursor_exist_in_state = stream_state.get(cursor_part) cursor_field = cursor_field[-1] + issues_state = self._start_date if cursor_exist_in_state: - issues_state = pendulum.parse(stream_state.get(cursor_field, self._start_date)) - elif self._start_date: - issues_state = pendulum.parse(self._start_date) + issues_state = pendulum.parse(stream_state[cursor_field]) if issues_state: issues_state_row = issues_state.strftime("%Y/%m/%d %H:%M") return f"{cursor_field} > '{issues_state_row}'" From 8ebad5148438b9408ec7ed4a330d96ac3c9699b0 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 8 Dec 2022 08:47:27 +0000 Subject: [PATCH 09/77] re-implement stream `issues` Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/source.py | 2 +- .../source-jira/source_jira/streams.py | 67 ++++++++++++++++--- .../source-jira/source_jira/utils.py | 11 +++ 3 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 airbyte-integrations/connectors/source-jira/source_jira/utils.py diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index 915dc0bdb94c3..08f953b0c06ef 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -112,7 +112,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: config = self._validate_and_transform(config) authenticator = self.get_authenticator(config) args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} - incremental_args = {**args, "start_date": config.get("start_date", "")} + incremental_args = {**args, "start_date": config.get("start_date")} render_fields = config.get("render_fields", False) issues_stream = Issues( **incremental_args, diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 58c2ef43fefb0..f9acd7fe8b466 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -14,6 +14,8 @@ from airbyte_cdk.sources.streams.http import HttpStream from requests.exceptions import HTTPError +from .utils import safe_max + API_VERSION = 3 @@ -105,7 +107,7 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late else: return {cursor_field: str(latest_record_date)} - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: + def jql_compare_date(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> Optional[str]: issues_state = None cursor_exist_in_state: Any = False cursor_field = self.cursor_field @@ -210,7 +212,7 @@ def request_params( stream_state = stream_state or {} params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = ["key", "updated"] - jql = self.jql_compare_date(stream_state) + jql = self.jql_compare_date(stream_state, stream_slice) if jql: params["jql"] = jql return params @@ -263,7 +265,7 @@ def request_params( project_id = stream_slice["project_id"] params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = ["summary", "description", "status", "updated"] - jql_parts = ["issuetype = 'Epic'", f"project = '{project_id}'", self.jql_compare_date(stream_state)] + jql_parts = ["issuetype = 'Epic'", f"project = '{project_id}'", self.jql_compare_date(stream_state, stream_slice)] params["jql"] = " and ".join([p for p in jql_parts if p]) if self._render_fields: params["expand"] = "renderedFields" @@ -343,6 +345,7 @@ def __init__(self, additional_fields: List[str], expand_changelog: bool = False, self._render_fields = render_fields self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + self._starting_point_cache = {} def path(self, **kwargs) -> str: return "search" @@ -356,7 +359,7 @@ def request_params( project_id = stream_slice["project_id"] params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = stream_slice["fields"] - jql_parts = [f"project = '{project_id}'", self.jql_compare_date(stream_state)] + jql_parts = [f"project = '{project_id}'", self.jql_compare_date(stream_state, stream_slice)] params["jql"] = " and ".join([p for p in jql_parts if p]) expand = [] if self._expand_changelog: @@ -367,7 +370,10 @@ def request_params( params["expand"] = ",".join(expand) return params - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + # For every new sync clear starting_point cache + self._starting_point_cache.clear() + field_ids_by_name = self.issue_fields_stream.field_ids_by_name() fields = [ "assignee", @@ -394,9 +400,52 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) for project in self.projects_stream.read_records(sync_mode=SyncMode.full_refresh): - yield from super().read_records( - stream_slice={"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))}, **kwargs - ) + yield {"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))} + + def read_records( + self, + sync_mode: SyncMode, + cursor_field: List[str] = None, + stream_slice: Mapping[str, Any] = None, + stream_state: Mapping[str, Any] = None, + ) -> Iterable[Mapping[str, Any]]: + start_point = self.get_starting_point(stream_state=stream_state, stream_slice=stream_slice) + for record in super().read_records( + sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state + ): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + slice_value = latest_record["projectId"] + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(slice_value, {}).get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state.setdefault(slice_value, {})[self.cursor_field] = updated_state + return current_stream_state + + def jql_compare_date(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> Optional[str]: + compare_date = self.get_starting_point(stream_state, stream_slice) + if compare_date: + compare_date = compare_date.strftime("%Y/%m/%d %H:%M") + return f"{self.cursor_field} >= '{compare_date}'" + + def _get_starting_point(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> str: + if stream_state: + slice_value = stream_slice["project_id"] + stream_state_value = stream_state.get(slice_value, {}).get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date + + def get_starting_point(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> str: + slice_value = stream_slice["project_id"] + if slice_value not in self._starting_point_cache: + self._starting_point_cache[slice_value] = self._get_starting_point(stream_state, stream_slice) + return self._starting_point_cache[slice_value] def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] @@ -1067,7 +1116,7 @@ def request_params( ) -> MutableMapping[str, Any]: params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = stream_slice["fields"] - jql = self.jql_compare_date(stream_state) + jql = self.jql_compare_date(stream_state, stream_slice) if jql: params["jql"] = jql return params diff --git a/airbyte-integrations/connectors/source-jira/source_jira/utils.py b/airbyte-integrations/connectors/source-jira/source_jira/utils.py new file mode 100644 index 0000000000000..0a9734696c856 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/source_jira/utils.py @@ -0,0 +1,11 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +def safe_max(arg1, arg2): + if arg1 is None: + return arg2 + if arg2 is None: + return arg1 + return max(arg1, arg2) From 7834deaff4cb734e970c44da2db39d25be67c60d Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 8 Dec 2022 11:40:25 +0000 Subject: [PATCH 10/77] fix start_date typing Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index f9acd7fe8b466..5b618032fb28a 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -86,7 +86,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class StartDateJiraStream(JiraStream, ABC): - def __init__(self, start_date: str = "", **kwargs): + def __init__(self, start_date: Optional[pendulum.DateTime] = None, **kwargs): super().__init__(**kwargs) self._start_date = start_date From d888094e6bd4f56d8f0f032e44f87d1566fa2b70 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 8 Dec 2022 12:00:04 +0000 Subject: [PATCH 11/77] Boards improved Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 13 ++++++++----- .../connectors/source-jira/source_jira/utils.py | 11 +++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 5b618032fb28a..452bd56a48445 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -14,7 +14,7 @@ from airbyte_cdk.sources.streams.http import HttpStream from requests.exceptions import HTTPError -from .utils import safe_max +from .utils import read_full_refresh, safe_max API_VERSION = 3 @@ -166,6 +166,10 @@ class Boards(JiraStream): use_cache = True api_v1 = True + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, **kwargs) -> str: return "board" @@ -179,10 +183,9 @@ def request_params( params["projectKeyOrId"] = stream_slice["project_id"] return params - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): - yield from super().read_records(stream_slice={"project_id": project["id"], "project_key": project["key"]}, **kwargs) + def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + for project in read_full_refresh(self.projects_stream): + yield {"project_id": project["id"], "project_key": project["key"]} def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] diff --git a/airbyte-integrations/connectors/source-jira/source_jira/utils.py b/airbyte-integrations/connectors/source-jira/source_jira/utils.py index 0a9734696c856..b3201c5e0a7b1 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/utils.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/utils.py @@ -2,6 +2,9 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams import Stream + def safe_max(arg1, arg2): if arg1 is None: @@ -9,3 +12,11 @@ def safe_max(arg1, arg2): if arg2 is None: return arg1 return max(arg1, arg2) + + +def read_full_refresh(stream_instance: Stream): + slices = stream_instance.stream_slices(sync_mode=SyncMode.full_refresh) + for _slice in slices: + records = stream_instance.read_records(stream_slice=_slice, sync_mode=SyncMode.full_refresh) + for record in records: + yield record From a18eefacafe8921e950a6ee183d6e4703f7729a1 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 8 Dec 2022 18:20:21 +0000 Subject: [PATCH 12/77] revert stream Issues work w/o slices Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 70 ++++++++----------- .../source-jira/source_jira/utils.py | 14 ++++ 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 452bd56a48445..1ed3c3a73943f 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -14,7 +14,7 @@ from airbyte_cdk.sources.streams.http import HttpStream from requests.exceptions import HTTPError -from .utils import read_full_refresh, safe_max +from .utils import call_once, read_full_refresh, safe_max API_VERSION = 3 @@ -107,7 +107,7 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late else: return {cursor_field: str(latest_record_date)} - def jql_compare_date(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> Optional[str]: + def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: issues_state = None cursor_exist_in_state: Any = False cursor_field = self.cursor_field @@ -215,7 +215,7 @@ def request_params( stream_state = stream_state or {} params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = ["key", "updated"] - jql = self.jql_compare_date(stream_state, stream_slice) + jql = self.jql_compare_date(stream_state) if jql: params["jql"] = jql return params @@ -268,7 +268,7 @@ def request_params( project_id = stream_slice["project_id"] params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = ["summary", "description", "status", "updated"] - jql_parts = ["issuetype = 'Epic'", f"project = '{project_id}'", self.jql_compare_date(stream_state, stream_slice)] + jql_parts = ["issuetype = 'Epic'", f"project = '{project_id}'", self.jql_compare_date(stream_state)] params["jql"] = " and ".join([p for p in jql_parts if p]) if self._render_fields: params["expand"] = "renderedFields" @@ -348,7 +348,6 @@ def __init__(self, additional_fields: List[str], expand_changelog: bool = False, self._render_fields = render_fields self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - self._starting_point_cache = {} def path(self, **kwargs) -> str: return "search" @@ -362,7 +361,7 @@ def request_params( project_id = stream_slice["project_id"] params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = stream_slice["fields"] - jql_parts = [f"project = '{project_id}'", self.jql_compare_date(stream_state, stream_slice)] + jql_parts = [f"project = '{project_id}'", self.jql_compare_date(stream_state)] params["jql"] = " and ".join([p for p in jql_parts if p]) expand = [] if self._expand_changelog: @@ -373,10 +372,13 @@ def request_params( params["expand"] = ",".join(expand) return params - def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: - # For every new sync clear starting_point cache - self._starting_point_cache.clear() - + def read_records( + self, + sync_mode: SyncMode, + cursor_field: List[str] = None, + stream_slice: Mapping[str, Any] = None, + stream_state: Mapping[str, Any] = None, + ) -> Iterable[Mapping[str, Any]]: field_ids_by_name = self.issue_fields_stream.field_ids_by_name() fields = [ "assignee", @@ -402,54 +404,40 @@ def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: for name in additional_field_names + self._additional_fields: if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) - for project in self.projects_stream.read_records(sync_mode=SyncMode.full_refresh): - yield {"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))} - def read_records( - self, - sync_mode: SyncMode, - cursor_field: List[str] = None, - stream_slice: Mapping[str, Any] = None, - stream_state: Mapping[str, Any] = None, - ) -> Iterable[Mapping[str, Any]]: - start_point = self.get_starting_point(stream_state=stream_state, stream_slice=stream_slice) - for record in super().read_records( - sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state - ): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + start_point = self.get_starting_point(stream_state=stream_state) + for project in self.projects_stream.read_records(sync_mode=SyncMode.full_refresh): + stream_slice = {"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))} + for record in super().read_records( + sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state + ): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - slice_value = latest_record["projectId"] updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(slice_value, {}).get(self.cursor_field) + stream_state_value = current_stream_state.get(self.cursor_field) if stream_state_value: updated_state = max(updated_state, stream_state_value) - current_stream_state.setdefault(slice_value, {})[self.cursor_field] = updated_state + current_stream_state[self.cursor_field] = updated_state return current_stream_state - def jql_compare_date(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> Optional[str]: - compare_date = self.get_starting_point(stream_state, stream_slice) + def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: + compare_date = self.get_starting_point(stream_state) if compare_date: compare_date = compare_date.strftime("%Y/%m/%d %H:%M") return f"{self.cursor_field} >= '{compare_date}'" - def _get_starting_point(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> str: + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: if stream_state: - slice_value = stream_slice["project_id"] - stream_state_value = stream_state.get(slice_value, {}).get(self.cursor_field) + stream_state_value = stream_state.get(self.cursor_field) if stream_state_value: stream_state_value = pendulum.parse(stream_state_value) return safe_max(stream_state_value, self._start_date) return self._start_date - def get_starting_point(self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, Any]) -> str: - slice_value = stream_slice["project_id"] - if slice_value not in self._starting_point_cache: - self._starting_point_cache[slice_value] = self._get_starting_point(stream_state, stream_slice) - return self._starting_point_cache[slice_value] - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] record["projectKey"] = stream_slice["project_key"] @@ -1119,7 +1107,7 @@ def request_params( ) -> MutableMapping[str, Any]: params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = stream_slice["fields"] - jql = self.jql_compare_date(stream_state, stream_slice) + jql = self.jql_compare_date(stream_state) if jql: params["jql"] = jql return params diff --git a/airbyte-integrations/connectors/source-jira/source_jira/utils.py b/airbyte-integrations/connectors/source-jira/source_jira/utils.py index b3201c5e0a7b1..a44dd3aff3edc 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/utils.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/utils.py @@ -20,3 +20,17 @@ def read_full_refresh(stream_instance: Stream): records = stream_instance.read_records(stream_slice=_slice, sync_mode=SyncMode.full_refresh) for record in records: yield record + + +def call_once(f): + result = None + called = False + + def wrapper(*args, **kwargs): + nonlocal called, result + if not called: + result = f(*args, **kwargs) + called = True + return result + + return wrapper From ea97c7928a627e489338cc2b699ae9a987bd45e5 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 06:40:12 +0000 Subject: [PATCH 13/77] issue_comments improved Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 45 ++++++++++++++----- .../source-jira/source_jira/utils.py | 10 +++++ 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 1ed3c3a73943f..47de7eec70967 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -14,7 +14,7 @@ from airbyte_cdk.sources.streams.http import HttpStream from requests.exceptions import HTTPError -from .utils import call_once, read_full_refresh, safe_max +from .utils import call_once, read_full_refresh, read_incremental, safe_max API_VERSION = 3 @@ -456,6 +456,16 @@ class IssueComments(IncrementalJiraStream): primary_key = "id" cursor_field = "updated" + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_stream = Issues( + additional_fields=[], + authenticator=self.authenticator, + domain=self._domain, + projects=self._projects, + start_date=self._start_date, + ) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: key = stream_slice["key"] return f"issue/{key}/comment" @@ -463,15 +473,30 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records( self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs ) -> Iterable[Mapping[str, Any]]: - issues_stream = Issues( - additional_fields=[], - authenticator=self.authenticator, - domain=self._domain, - projects=self._projects, - start_date=self._start_date, - ) - for issue in issues_stream.read_records(sync_mode=SyncMode.full_refresh, stream_state=stream_state): - yield from super().read_records(stream_slice={"key": issue["key"]}, stream_state=stream_state, **kwargs) + start_point = self.get_starting_point(stream_state=stream_state) + for issue in read_incremental(self.issues_stream, stream_state=stream_state): + stream_slice = {"key": issue["key"]} + for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state[self.cursor_field] = updated_state + return current_stream_state + + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if stream_state: + stream_state_value = stream_state.get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date class IssueFields(JiraStream): diff --git a/airbyte-integrations/connectors/source-jira/source_jira/utils.py b/airbyte-integrations/connectors/source-jira/source_jira/utils.py index a44dd3aff3edc..892317ab278b7 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/utils.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/utils.py @@ -2,6 +2,8 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +from typing import Any, MutableMapping + from airbyte_cdk.models import SyncMode from airbyte_cdk.sources.streams import Stream @@ -22,6 +24,14 @@ def read_full_refresh(stream_instance: Stream): yield record +def read_incremental(stream_instance: Stream, stream_state: MutableMapping[str, Any]): + slices = stream_instance.stream_slices(sync_mode=SyncMode.incremental, stream_state=stream_state) + for _slice in slices: + records = stream_instance.read_records(sync_mode=SyncMode.incremental, stream_slice=_slice, stream_state=stream_state) + for record in records: + yield record + + def call_once(f): result = None called = False From 3b06328099d8351a67a18893611d4e51cf4b0b8f Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 07:02:15 +0000 Subject: [PATCH 14/77] remove redundant primary_key Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 1 - 1 file changed, 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 47de7eec70967..f51a1ce1324f4 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -453,7 +453,6 @@ class IssueComments(IncrementalJiraStream): """ parse_response_root = "comments" - primary_key = "id" cursor_field = "updated" def __init__(self, **kwargs): From c839fce63f33b391424885200c2725c3d5285137 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 07:40:21 +0000 Subject: [PATCH 15/77] improved BoardIssues Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index f51a1ce1324f4..315262c895381 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -202,6 +202,10 @@ class BoardIssues(IncrementalJiraStream): parse_response_root = "issues" api_v1 = True + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.boards_stream = Boards(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: board_id = stream_slice["board_id"] return f"board/{board_id}/issue" @@ -212,7 +216,6 @@ def request_params( stream_slice: Mapping[str, Any], next_page_token: Optional[Mapping[str, Any]] = None, ) -> MutableMapping[str, Any]: - stream_state = stream_state or {} params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) params["fields"] = ["key", "updated"] jql = self.jql_compare_date(stream_state) @@ -220,10 +223,39 @@ def request_params( params["jql"] = jql return params - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - boards_stream = Boards(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for board in boards_stream.read_records(sync_mode=SyncMode.full_refresh): - yield from super().read_records(stream_slice={"board_id": board["id"]}, **kwargs) + def read_records( + self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs + ) -> Iterable[Mapping[str, Any]]: + start_point = self.get_starting_point(stream_state=stream_state) + for board in read_full_refresh(self.boards_stream): + stream_slice = {"board_id": board["id"]} + for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state[self.cursor_field] = updated_state + return current_stream_state + + def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: + compare_date = self.get_starting_point(stream_state) + if compare_date: + compare_date = compare_date.strftime("%Y/%m/%d %H:%M") + return f"{self.cursor_field} >= '{compare_date}'" + + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if stream_state: + stream_state_value = stream_state.get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["boardId"] = stream_slice["board_id"] From ce152fa5aa086770d5572c3a69ec873a45c8b7af Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 08:14:04 +0000 Subject: [PATCH 16/77] Epics added Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 315262c895381..611de4cd88ec4 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -281,12 +281,13 @@ class Epics(IncrementalJiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-get """ + cursor_field = "updated" + parse_response_root = "issues" + def __init__(self, render_fields: bool = False, **kwargs): super().__init__(**kwargs) self._render_fields = render_fields - - cursor_field = "updated" - parse_response_root = "issues" + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, **kwargs) -> str: return "search" @@ -306,10 +307,45 @@ def request_params( params["expand"] = "renderedFields" return params - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): - yield from super().read_records(stream_slice={"project_id": project["id"], "project_key": project["key"]}, **kwargs) + def read_records( + self, + sync_mode: SyncMode, + cursor_field: List[str] = None, + stream_slice: Mapping[str, Any] = None, + stream_state: Mapping[str, Any] = None, + ) -> Iterable[Mapping[str, Any]]: + start_point = self.get_starting_point(stream_state=stream_state) + for project in read_full_refresh(self.projects_stream): + stream_slice = {"project_id": project["id"], "project_key": project["key"]} + for record in super().read_records( + sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state + ): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state[self.cursor_field] = updated_state + return current_stream_state + + def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: + compare_date = self.get_starting_point(stream_state) + if compare_date: + compare_date = compare_date.strftime("%Y/%m/%d %H:%M") + return f"{self.cursor_field} >= '{compare_date}'" + + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if stream_state: + stream_state_value = stream_state.get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] From e60cc01da2c4de8df21e1fbec1e6dc5294117c8b Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 08:49:49 +0000 Subject: [PATCH 17/77] IssueWorklogs refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 44 ++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 611de4cd88ec4..801ceed443754 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -829,9 +829,18 @@ class IssueWorklogs(IncrementalJiraStream): """ parse_response_root = "worklogs" - primary_key = "id" cursor_field = "updated" + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_stream = Issues( + additional_fields=[], + authenticator=self.authenticator, + domain=self._domain, + projects=self._projects, + start_date=self._start_date, + ) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: key = stream_slice["key"] return f"issue/{key}/worklog" @@ -839,15 +848,30 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records( self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs ) -> Iterable[Mapping[str, Any]]: - issues_stream = Issues( - additional_fields=[], - authenticator=self.authenticator, - domain=self._domain, - projects=self._projects, - start_date=self._start_date, - ) - for issue in issues_stream.read_records(sync_mode=SyncMode.full_refresh, stream_state=stream_state): - yield from super().read_records(stream_slice={"key": issue["key"]}, stream_state=stream_state, **kwargs) + start_point = self.get_starting_point(stream_state=stream_state) + for issue in read_incremental(self.issues_stream, stream_state=stream_state): + stream_slice = {"key": issue["key"]} + for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state[self.cursor_field] = updated_state + return current_stream_state + + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if stream_state: + stream_state_value = stream_state.get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date class JiraSettings(JiraStream): From 073ef0235759cc928461ce97d847a1a66604862d Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 09:56:33 +0000 Subject: [PATCH 18/77] Sprints refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 801ceed443754..8cf32f959b1cc 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -1190,16 +1190,18 @@ class Sprints(JiraStream): use_cache = True api_v1 = True + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.boards_stream = Boards(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: board_id = stream_slice["board_id"] return f"board/{board_id}/sprint" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - boards_stream = Boards(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for board in boards_stream.read_records(sync_mode=SyncMode.full_refresh): + for board in read_full_refresh(self.boards_stream): if board["type"] == "scrum": yield from super().read_records(stream_slice={"board_id": board["id"]}, **kwargs) - yield from [] class SprintIssues(IncrementalJiraStream): From 9ee74d758bfcddd11f3c11df2d466ea0b9bfb395 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 10:36:38 +0000 Subject: [PATCH 19/77] SprintIssues refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 8cf32f959b1cc..c9cc1e2716c17 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -1183,7 +1183,7 @@ def path(self, **kwargs) -> str: class Sprints(JiraStream): """ - https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-sprint-get + https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-sprint-get """ parse_response_root = "values" @@ -1206,13 +1206,18 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg class SprintIssues(IncrementalJiraStream): """ - https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-agile-1-0-sprint-sprintid-issue-get + https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-rest-agile-1-0-sprint-sprintid-issue-get """ cursor_field = "updated" parse_response_root = "issues" api_v1 = True + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + self.sprints_stream = Sprints(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: sprint_id = stream_slice["sprint_id"] return f"sprint/{sprint_id}/issue" @@ -1230,16 +1235,44 @@ def request_params( params["jql"] = jql return params - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - stream_args = {"authenticator": self.authenticator, "domain": self._domain, "projects": self._projects} - field_ids_by_name = IssueFields(**stream_args).field_ids_by_name() + def read_records( + self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs + ) -> Iterable[Mapping[str, Any]]: + field_ids_by_name = self.issue_fields_stream.field_ids_by_name() fields = ["key", "status", "updated"] for name in ["Story Points", "Story point estimate"]: if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) - sprints_stream = Sprints(**stream_args) - for sprints in sprints_stream.read_records(sync_mode=SyncMode.full_refresh): - yield from super().read_records(stream_slice={"sprint_id": sprints["id"], "fields": fields}, **kwargs) + start_point = self.get_starting_point(stream_state=stream_state) + for sprints in read_full_refresh(self.sprints_stream): + stream_slice = {"sprint_id": sprints["id"], "fields": fields} + for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state[self.cursor_field] = updated_state + return current_stream_state + + def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: + compare_date = self.get_starting_point(stream_state) + if compare_date: + compare_date = compare_date.strftime("%Y/%m/%d %H:%M") + return f"{self.cursor_field} >= '{compare_date}'" + + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if stream_state: + stream_state_value = stream_state.get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["issueId"] = record["id"] From cf1ab2c22dc3d7cb465ce75bbf2c55cc44951a08 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 16:25:27 +0000 Subject: [PATCH 20/77] move get_updated_state to incremental base class Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 71 +++---------------- 1 file changed, 8 insertions(+), 63 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index c9cc1e2716c17..eb01c37818391 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -92,20 +92,13 @@ def __init__(self, start_date: Optional[pendulum.DateTime] = None, **kwargs): class IncrementalJiraStream(StartDateJiraStream, ABC): - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: - cursor_field = self.cursor_field - if isinstance(cursor_field, str): - latest_record = latest_record.get(self.cursor_field) - elif isinstance(cursor_field, list): - for cursor_part in cursor_field: - latest_record = latest_record.get(cursor_part, {}) - cursor_field = cursor_field[-1] - latest_record_date = pendulum.parse(latest_record) - stream_state = current_stream_state.get(cursor_field) - if stream_state: - return {cursor_field: str(max(latest_record_date, pendulum.parse(stream_state)))} - else: - return {cursor_field: str(latest_record_date)} + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): + updated_state = latest_record[self.cursor_field] + stream_state_value = current_stream_state.get(self.cursor_field) + if stream_state_value: + updated_state = max(updated_state, stream_state_value) + current_stream_state[self.cursor_field] = updated_state + return current_stream_state def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: issues_state = None @@ -234,14 +227,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(self.cursor_field) - if stream_state_value: - updated_state = max(updated_state, stream_state_value) - current_stream_state[self.cursor_field] = updated_state - return current_stream_state - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: compare_date = self.get_starting_point(stream_state) if compare_date: @@ -324,14 +309,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(self.cursor_field) - if stream_state_value: - updated_state = max(updated_state, stream_state_value) - current_stream_state[self.cursor_field] = updated_state - return current_stream_state - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: compare_date = self.get_starting_point(stream_state) if compare_date: @@ -483,14 +460,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(self.cursor_field) - if stream_state_value: - updated_state = max(updated_state, stream_state_value) - current_stream_state[self.cursor_field] = updated_state - return current_stream_state - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: compare_date = self.get_starting_point(stream_state) if compare_date: @@ -548,14 +517,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(self.cursor_field) - if stream_state_value: - updated_state = max(updated_state, stream_state_value) - current_stream_state[self.cursor_field] = updated_state - return current_stream_state - @call_once def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: if stream_state: @@ -856,14 +817,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(self.cursor_field) - if stream_state_value: - updated_state = max(updated_state, stream_state_value) - current_stream_state[self.cursor_field] = updated_state - return current_stream_state - @call_once def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: if stream_state: @@ -1103,7 +1056,7 @@ def read_records( ) -> Iterable[Mapping[str, Any]]: field_ids_by_name = self.issue_fields_stream.field_ids_by_name() dev_field_ids = field_ids_by_name.get("Development", []) - for issue in self.issues_stream.read_records(sync_mode=SyncMode.full_refresh, stream_state=stream_state): + for issue in read_incremental(self.issues_stream, stream_state=stream_state): for dev_field_id in dev_field_ids: if self.has_pull_requests(issue["fields"][dev_field_id]): yield from super().read_records( @@ -1251,14 +1204,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): - updated_state = latest_record[self.cursor_field] - stream_state_value = current_stream_state.get(self.cursor_field) - if stream_state_value: - updated_state = max(updated_state, stream_state_value) - current_stream_state[self.cursor_field] = updated_state - return current_stream_state - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: compare_date = self.get_starting_point(stream_state) if compare_date: From 5f267f3475bb1a55a5a112599668592e19ad9cd6 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 9 Dec 2022 18:02:22 +0000 Subject: [PATCH 21/77] move jql_compare_date to incremental base class Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 110 +++--------------- 1 file changed, 13 insertions(+), 97 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index eb01c37818391..413df120a08c7 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -101,25 +101,19 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late return current_stream_state def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: - issues_state = None - cursor_exist_in_state: Any = False - cursor_field = self.cursor_field - - if isinstance(self.cursor_field, str): - cursor_exist_in_state = stream_state.get(self.cursor_field) - elif isinstance(self.cursor_field, list) and self.cursor_field: - cursor_exist_in_state = stream_state - for cursor_part in self.cursor_field: - cursor_exist_in_state = stream_state.get(cursor_part) - cursor_field = cursor_field[-1] - - issues_state = self._start_date - if cursor_exist_in_state: - issues_state = pendulum.parse(stream_state[cursor_field]) - if issues_state: - issues_state_row = issues_state.strftime("%Y/%m/%d %H:%M") - return f"{cursor_field} > '{issues_state_row}'" - return None + compare_date = self.get_starting_point(stream_state) + if compare_date: + compare_date = compare_date.strftime("%Y/%m/%d %H:%M") + return f"{self.cursor_field} >= '{compare_date}'" + + @call_once + def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if stream_state: + stream_state_value = stream_state.get(self.cursor_field) + if stream_state_value: + stream_state_value = pendulum.parse(stream_state_value) + return safe_max(stream_state_value, self._start_date) + return self._start_date class ApplicationRoles(JiraStream): @@ -227,21 +221,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: - compare_date = self.get_starting_point(stream_state) - if compare_date: - compare_date = compare_date.strftime("%Y/%m/%d %H:%M") - return f"{self.cursor_field} >= '{compare_date}'" - - @call_once - def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: - if stream_state: - stream_state_value = stream_state.get(self.cursor_field) - if stream_state_value: - stream_state_value = pendulum.parse(stream_state_value) - return safe_max(stream_state_value, self._start_date) - return self._start_date - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["boardId"] = stream_slice["board_id"] issue_fields = record["fields"] @@ -309,21 +288,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: - compare_date = self.get_starting_point(stream_state) - if compare_date: - compare_date = compare_date.strftime("%Y/%m/%d %H:%M") - return f"{self.cursor_field} >= '{compare_date}'" - - @call_once - def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: - if stream_state: - stream_state_value = stream_state.get(self.cursor_field) - if stream_state_value: - stream_state_value = pendulum.parse(stream_state_value) - return safe_max(stream_state_value, self._start_date) - return self._start_date - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] record["projectKey"] = stream_slice["project_key"] @@ -460,21 +424,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: - compare_date = self.get_starting_point(stream_state) - if compare_date: - compare_date = compare_date.strftime("%Y/%m/%d %H:%M") - return f"{self.cursor_field} >= '{compare_date}'" - - @call_once - def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: - if stream_state: - stream_state_value = stream_state.get(self.cursor_field) - if stream_state_value: - stream_state_value = pendulum.parse(stream_state_value) - return safe_max(stream_state_value, self._start_date) - return self._start_date - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] record["projectKey"] = stream_slice["project_key"] @@ -517,15 +466,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - @call_once - def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: - if stream_state: - stream_state_value = stream_state.get(self.cursor_field) - if stream_state_value: - stream_state_value = pendulum.parse(stream_state_value) - return safe_max(stream_state_value, self._start_date) - return self._start_date - class IssueFields(JiraStream): """ @@ -817,15 +757,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - @call_once - def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: - if stream_state: - stream_state_value = stream_state.get(self.cursor_field) - if stream_state_value: - stream_state_value = pendulum.parse(stream_state_value) - return safe_max(stream_state_value, self._start_date) - return self._start_date - class JiraSettings(JiraStream): """ @@ -1204,21 +1135,6 @@ def read_records( if not start_point or cursor_value >= start_point: yield record - def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: - compare_date = self.get_starting_point(stream_state) - if compare_date: - compare_date = compare_date.strftime("%Y/%m/%d %H:%M") - return f"{self.cursor_field} >= '{compare_date}'" - - @call_once - def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: - if stream_state: - stream_state_value = stream_state.get(self.cursor_field) - if stream_state_value: - stream_state_value = pendulum.parse(stream_state_value) - return safe_max(stream_state_value, self._start_date) - return self._start_date - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["issueId"] = record["id"] record["id"] = "-".join([str(stream_slice["sprint_id"]), record["id"]]) From 85f9df1e07a961a80f17846215bb8829fe401097 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sat, 10 Dec 2022 07:06:31 +0000 Subject: [PATCH 22/77] extract read_records to base incremental class Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 79 ++++++------------- 1 file changed, 22 insertions(+), 57 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 413df120a08c7..2382b6883291c 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -115,6 +115,15 @@ def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendul return safe_max(stream_state_value, self._start_date) return self._start_date + def read_records( + self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs + ) -> Iterable[Mapping[str, Any]]: + start_point = self.get_starting_point(stream_state=stream_state) + for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): + cursor_value = pendulum.parse(record[self.cursor_field]) + if not start_point or cursor_value >= start_point: + yield record + class ApplicationRoles(JiraStream): """ @@ -210,16 +219,10 @@ def request_params( params["jql"] = jql return params - def read_records( - self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs - ) -> Iterable[Mapping[str, Any]]: - start_point = self.get_starting_point(stream_state=stream_state) + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: for board in read_full_refresh(self.boards_stream): stream_slice = {"board_id": board["id"]} - for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + yield from super().read_records(stream_slice=stream_slice, **kwargs) def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["boardId"] = stream_slice["board_id"] @@ -271,22 +274,10 @@ def request_params( params["expand"] = "renderedFields" return params - def read_records( - self, - sync_mode: SyncMode, - cursor_field: List[str] = None, - stream_slice: Mapping[str, Any] = None, - stream_state: Mapping[str, Any] = None, - ) -> Iterable[Mapping[str, Any]]: - start_point = self.get_starting_point(stream_state=stream_state) + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: for project in read_full_refresh(self.projects_stream): stream_slice = {"project_id": project["id"], "project_key": project["key"]} - for record in super().read_records( - sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state - ): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + yield from super().read_records(stream_slice=stream_slice, **kwargs) def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] @@ -381,13 +372,7 @@ def request_params( params["expand"] = ",".join(expand) return params - def read_records( - self, - sync_mode: SyncMode, - cursor_field: List[str] = None, - stream_slice: Mapping[str, Any] = None, - stream_state: Mapping[str, Any] = None, - ) -> Iterable[Mapping[str, Any]]: + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: field_ids_by_name = self.issue_fields_stream.field_ids_by_name() fields = [ "assignee", @@ -414,15 +399,9 @@ def read_records( if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) - start_point = self.get_starting_point(stream_state=stream_state) - for project in self.projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in read_full_refresh(self.projects_stream): stream_slice = {"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))} - for record in super().read_records( - sync_mode=sync_mode, cursor_field=cursor_field, stream_slice=stream_slice, stream_state=stream_state - ): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + yield from super().read_records(stream_slice=stream_slice, **kwargs) def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["projectId"] = stream_slice["project_id"] @@ -458,13 +437,9 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records( self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs ) -> Iterable[Mapping[str, Any]]: - start_point = self.get_starting_point(stream_state=stream_state) for issue in read_incremental(self.issues_stream, stream_state=stream_state): stream_slice = {"key": issue["key"]} - for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + yield from super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs) class IssueFields(JiraStream): @@ -749,13 +724,9 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records( self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs ) -> Iterable[Mapping[str, Any]]: - start_point = self.get_starting_point(stream_state=stream_state) for issue in read_incremental(self.issues_stream, stream_state=stream_state): stream_slice = {"key": issue["key"]} - for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + yield from super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs) class JiraSettings(JiraStream): @@ -1119,21 +1090,15 @@ def request_params( params["jql"] = jql return params - def read_records( - self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs - ) -> Iterable[Mapping[str, Any]]: + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: field_ids_by_name = self.issue_fields_stream.field_ids_by_name() fields = ["key", "status", "updated"] for name in ["Story Points", "Story point estimate"]: if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) - start_point = self.get_starting_point(stream_state=stream_state) - for sprints in read_full_refresh(self.sprints_stream): - stream_slice = {"sprint_id": sprints["id"], "fields": fields} - for record in super().read_records(stream_slice=stream_slice, stream_state=stream_state, **kwargs): - cursor_value = pendulum.parse(record[self.cursor_field]) - if not start_point or cursor_value >= start_point: - yield record + for sprint in read_full_refresh(self.sprints_stream): + stream_slice = {"sprint_id": sprint["id"], "fields": fields} + yield from super().read_records(stream_slice=stream_slice, **kwargs) def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["issueId"] = record["id"] From a5e4521b90f29f94551b175f72f46fb2049b4c9c Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sat, 10 Dec 2022 08:08:41 +0000 Subject: [PATCH 23/77] rename parse_response_root -> extract_field Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 2382b6883291c..538d36ec99060 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -25,7 +25,7 @@ class JiraStream(HttpStream, ABC): """ primary_key: Optional[str] = "id" - parse_response_root: Optional[str] = None + extract_field: Optional[str] = None api_v1 = False def __init__(self, domain: str, projects: List[str], **kwargs): @@ -74,7 +74,7 @@ def request_headers(self, **kwargs) -> Mapping[str, Any]: def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: response_json = response.json() - records = response_json if not self.parse_response_root else response_json.get(self.parse_response_root, []) + records = response_json if not self.extract_field else response_json.get(self.extract_field, []) if isinstance(records, list): for record in records: yield self.transform(record=record, **kwargs) @@ -141,7 +141,7 @@ class Avatars(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-avatars/#api-rest-api-3-avatar-type-system-get """ - parse_response_root = "system" + extract_field = "system" def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: avatar_type = stream_slice["avatar_type"] @@ -158,7 +158,7 @@ class Boards(JiraStream): https://developer.atlassian.com/cloud/jira/software/rest/api-group-other-operations/#api-agile-1-0-board-get """ - parse_response_root = "values" + extract_field = "values" use_cache = True api_v1 = True @@ -195,7 +195,7 @@ class BoardIssues(IncrementalJiraStream): """ cursor_field = "updated" - parse_response_root = "issues" + extract_field = "issues" api_v1 = True def __init__(self, **kwargs): @@ -237,7 +237,7 @@ class Dashboards(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dashboards/#api-rest-api-3-dashboard-get """ - parse_response_root = "dashboards" + extract_field = "dashboards" def path(self, **kwargs) -> str: return "dashboard" @@ -249,7 +249,7 @@ class Epics(IncrementalJiraStream): """ cursor_field = "updated" - parse_response_root = "issues" + extract_field = "issues" def __init__(self, render_fields: bool = False, **kwargs): super().__init__(**kwargs) @@ -293,7 +293,7 @@ class Filters(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filters/#api-rest-api-3-filter-search-get """ - parse_response_root = "values" + extract_field = "values" use_cache = True def path(self, **kwargs) -> str: @@ -325,7 +325,7 @@ class Groups(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-groups/#api-rest-api-3-group-bulk-get """ - parse_response_root = "values" + extract_field = "values" primary_key = "groupId" def path(self, **kwargs) -> str: @@ -338,7 +338,7 @@ class Issues(IncrementalJiraStream): """ cursor_field = "updated" - parse_response_root = "issues" + extract_field = "issues" use_cache = True def __init__(self, additional_fields: List[str], expand_changelog: bool = False, render_fields: bool = False, **kwargs): @@ -417,7 +417,7 @@ class IssueComments(IncrementalJiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-rest-api-3-issue-issueidorkey-comment-get """ - parse_response_root = "comments" + extract_field = "comments" cursor_field = "updated" def __init__(self, **kwargs): @@ -466,7 +466,7 @@ class IssueFieldConfigurations(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-field-configurations/#api-rest-api-3-fieldconfiguration-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "fieldconfiguration" @@ -477,7 +477,7 @@ class IssueCustomFieldContexts(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-contexts/#api-rest-api-3-field-fieldid-context-get """ - parse_response_root = "values" + extract_field = "values" def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: field_id = stream_slice["field_id"] @@ -501,7 +501,7 @@ class IssueLinkTypes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-link-types/#api-rest-api-3-issuelinktype-get """ - parse_response_root = "issueLinkTypes" + extract_field = "issueLinkTypes" def path(self, **kwargs) -> str: return "issueLinkType" @@ -523,7 +523,7 @@ class IssueNotificationSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-notification-schemes/#api-rest-api-3-notificationscheme-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "notificationscheme" @@ -543,7 +543,7 @@ class IssuePropertyKeys(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-properties/#api-rest-api-3-issue-issueidorkey-properties-get """ - parse_response_root = "key" + extract_field = "key" use_cache = True def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: @@ -616,7 +616,7 @@ class IssueSecuritySchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-security-schemes/#api-rest-api-3-issuesecurityschemes-get """ - parse_response_root = "issueSecuritySchemes" + extract_field = "issueSecuritySchemes" def path(self, **kwargs) -> str: return "issuesecurityschemes" @@ -627,7 +627,7 @@ class IssueTypeSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-schemes/#api-rest-api-3-issuetypescheme-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "issuetypescheme" @@ -638,7 +638,7 @@ class IssueTypeScreenSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-screen-schemes/#api-rest-api-3-issuetypescreenscheme-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "issuetypescreenscheme" @@ -648,13 +648,13 @@ class IssueVotes(StartDateJiraStream): """ https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-votes/#api-rest-api-3-issue-issueidorkey-votes-get - parse_response_root voters is commented, since it contains the + extract_field voters is commented, since it contains the objects but does not contain information about exactly votes. The original schema self, votes (number), hasVoted (bool) and list of voters. - The schema is correct but parse_response_root should not be applied. + The schema is correct but extract_field should not be applied. """ - # parse_response_root = "voters" + # extract_field = "voters" primary_key = None def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: @@ -677,10 +677,10 @@ class IssueWatchers(StartDateJiraStream): """ https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-watchers/#api-rest-api-3-issue-issueidorkey-watchers-get - parse_response_root is commented for the same reason as issue_voters. + extract_field is commented for the same reason as issue_voters. """ - # parse_response_root = "watchers" + # extract_field = "watchers" primary_key = None def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: @@ -704,7 +704,7 @@ class IssueWorklogs(IncrementalJiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-worklogs/#api-rest-api-3-issue-issueidorkey-worklog-get """ - parse_response_root = "worklogs" + extract_field = "worklogs" cursor_field = "updated" def __init__(self, **kwargs): @@ -752,7 +752,7 @@ class Permissions(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permissions/#api-rest-api-3-permissions-get """ - parse_response_root = "permissions" + extract_field = "permissions" primary_key = None def path(self, **kwargs) -> str: @@ -760,7 +760,7 @@ def path(self, **kwargs) -> str: def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: response_json = response.json() - records = response_json.get(self.parse_response_root, {}).values() + records = response_json.get(self.extract_field, {}).values() yield from records @@ -769,7 +769,7 @@ class PermissionSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permission-schemes/#api-rest-api-3-permissionscheme-get """ - parse_response_root = "permissionSchemes" + extract_field = "permissionSchemes" def path(self, **kwargs) -> str: return "permissionscheme" @@ -780,7 +780,7 @@ class Projects(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-search-get """ - parse_response_root = "values" + extract_field = "values" use_cache = True def path(self, **kwargs) -> str: @@ -832,7 +832,7 @@ class ProjectComponents(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-components/#api-rest-api-3-project-projectidorkey-component-get """ - parse_response_root = "values" + extract_field = "values" def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: key = stream_slice["key"] @@ -866,7 +866,7 @@ class ProjectPermissionSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-permission-schemes/#api-rest-api-3-project-projectkeyorid-securitylevel-get """ - parse_response_root = "levels" + extract_field = "levels" def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: key = stream_slice["key"] @@ -894,7 +894,7 @@ class ProjectVersions(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-versions/#api-rest-api-3-project-projectidorkey-version-get """ - parse_response_root = "values" + extract_field = "values" def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: key = stream_slice["key"] @@ -916,7 +916,7 @@ class PullRequests(IncrementalJiraStream): """ cursor_field = "updated" - parse_response_root = "detail" + extract_field = "detail" raise_on_http_errors = False pr_regex = r"(?PPullRequestOverallDetails{openCount=(?P[0-9]+), mergedCount=(?P[0-9]+), declinedCount=(?P[0-9]+)})|(?Ppullrequest={dataType=pullrequest, state=(?P[a-zA-Z]+), stateCount=(?P[0-9]+)})" @@ -977,7 +977,7 @@ class Screens(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screens/#api-rest-api-3-screens-get """ - parse_response_root = "values" + extract_field = "values" use_cache = True def path(self, **kwargs) -> str: @@ -1030,7 +1030,7 @@ class ScreenSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-schemes/#api-rest-api-3-screenscheme-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "screenscheme" @@ -1041,7 +1041,7 @@ class Sprints(JiraStream): https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-sprint-get """ - parse_response_root = "values" + extract_field = "values" use_cache = True api_v1 = True @@ -1065,7 +1065,7 @@ class SprintIssues(IncrementalJiraStream): """ cursor_field = "updated" - parse_response_root = "issues" + extract_field = "issues" api_v1 = True def __init__(self, **kwargs): @@ -1175,7 +1175,7 @@ class Workflows(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflows/#api-rest-api-3-workflow-search-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "workflow/search" @@ -1186,7 +1186,7 @@ class WorkflowSchemes(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-schemes/#api-rest-api-3-workflowscheme-get """ - parse_response_root = "values" + extract_field = "values" def path(self, **kwargs) -> str: return "workflowscheme" From 343dde7c8664aa94e2268e9ad9481bfea6b1fa75 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sat, 10 Dec 2022 08:31:33 +0000 Subject: [PATCH 24/77] ApplicationRoles, Avatars - refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 538d36ec99060..89b2abc6b4902 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -127,14 +127,22 @@ def read_records( class ApplicationRoles(JiraStream): """ - https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-rest-api-3-applicationrole-key-get + https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-rest-api-3-applicationrole-get """ - primary_key = None + primary_key = "key" def path(self, **kwargs) -> str: return "applicationrole" + def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: + try: + yield from super().read_records(**kwargs) + except HTTPError as e: + # Application access permissions can only be edited or viewed by administrators. + if e.response.status_code != requests.codes.FORBIDDEN: + raise e + class Avatars(JiraStream): """ @@ -142,15 +150,14 @@ class Avatars(JiraStream): """ extract_field = "system" + avatar_types = ("issuetype", "project", "user") def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - avatar_type = stream_slice["avatar_type"] - return f"avatar/{avatar_type}/system" + return f"avatar/{stream_slice['avatar_type']}/system" - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - avatar_types = ("issuetype", "project", "user") - for avatar_type in avatar_types: - yield from super().read_records(stream_slice={"avatar_type": avatar_type}, **kwargs) + def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + for avatar_type in self.avatar_types: + yield {"avatar_type": avatar_type} class Boards(JiraStream): From bb76891ad52519941dac92548749291ddd1e3cb2 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sat, 10 Dec 2022 08:44:20 +0000 Subject: [PATCH 25/77] Projects refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 1 - 1 file changed, 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 89b2abc6b4902..b46bc6b211deb 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -802,7 +802,6 @@ def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: for project in super().read_records(**kwargs): if not self._projects or project["key"] in self._projects: yield project - yield from [] class ProjectAvatars(JiraStream): From 442c722996ae3a6d828bb71cb082d0cc9da39f27 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 06:21:46 +0000 Subject: [PATCH 26/77] Boards added Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index b46bc6b211deb..21054df4f420e 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -169,30 +169,17 @@ class Boards(JiraStream): use_cache = True api_v1 = True - def __init__(self, **kwargs): - super().__init__(**kwargs) - self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - def path(self, **kwargs) -> str: return "board" - def request_params( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any], - next_page_token: Optional[Mapping[str, Any]] = None, - ) -> MutableMapping[str, Any]: - params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) - params["projectKeyOrId"] = stream_slice["project_id"] - return params - - def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: - for project in read_full_refresh(self.projects_stream): - yield {"project_id": project["id"], "project_key": project["key"]} + def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: + for board in super().read_records(**kwargs): + if not self._projects or board["location"]["projectKey"] in self._projects: + yield board def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: - record["projectId"] = stream_slice["project_id"] - record["projectKey"] = stream_slice["project_key"] + record["projectId"] = str(record["location"]["projectId"]) + record["projectKey"] = record["location"]["projectKey"] return record From 1c99ad89de092e83494e950a69a53d1b15dcb61f Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 07:59:09 +0000 Subject: [PATCH 27/77] BoardIssues fixed Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 21054df4f420e..a41e93087baaf 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -185,7 +185,7 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, class BoardIssues(IncrementalJiraStream): """ - https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-agile-1-0-board-boardid-issue-get + https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-issue-get """ cursor_field = "updated" @@ -197,8 +197,7 @@ def __init__(self, **kwargs): self.boards_stream = Boards(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - board_id = stream_slice["board_id"] - return f"board/{board_id}/issue" + return f"board/{stream_slice['board_id']}/issue" def request_params( self, @@ -207,7 +206,7 @@ def request_params( next_page_token: Optional[Mapping[str, Any]] = None, ) -> MutableMapping[str, Any]: params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) - params["fields"] = ["key", "updated"] + params["fields"] = ["key", "created", "updated"] jql = self.jql_compare_date(stream_state) if jql: params["jql"] = jql @@ -215,14 +214,12 @@ def request_params( def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: for board in read_full_refresh(self.boards_stream): - stream_slice = {"board_id": board["id"]} - yield from super().read_records(stream_slice=stream_slice, **kwargs) + yield from super().read_records(stream_slice={"board_id": board["id"]}, **kwargs) def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: record["boardId"] = stream_slice["board_id"] - issue_fields = record["fields"] - record["created"] = issue_fields.get("created") - record["updated"] = issue_fields.get("updated") or issue_fields.get("created") + record["created"] = record["fields"]["created"] + record["updated"] = record["fields"]["updated"] return record From 28acd0e7c5c76aebe43e8d7624a728e6f550b194 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 10:26:52 +0000 Subject: [PATCH 28/77] re-implement Issues stream to support JQL project in ('10001', '100002') Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 46 ++++++++++++------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index a41e93087baaf..2ccfe3bda01ba 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -337,6 +337,8 @@ def __init__(self, additional_fields: List[str], expand_changelog: bool = False, self._additional_fields = additional_fields self._expand_changelog = expand_changelog self._render_fields = render_fields + self._fields = [] + self._project_ids = [] self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) @@ -349,10 +351,12 @@ def request_params( stream_slice: Mapping[str, Any], next_page_token: Optional[Mapping[str, Any]] = None, ) -> MutableMapping[str, Any]: - project_id = stream_slice["project_id"] params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) - params["fields"] = stream_slice["fields"] - jql_parts = [f"project = '{project_id}'", self.jql_compare_date(stream_state)] + params["fields"] = self._fields + jql_parts = [self.jql_compare_date(stream_state)] + if self._project_ids: + project_ids = ", ".join([f"'{project_id}'" for project_id in self._project_ids]) + jql_parts.append(f"project in ({project_ids})") params["jql"] = " and ".join([p for p in jql_parts if p]) expand = [] if self._expand_changelog: @@ -363,8 +367,26 @@ def request_params( params["expand"] = ",".join(expand) return params - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - field_ids_by_name = self.issue_fields_stream.field_ids_by_name() + def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: + self._fields = self.get_fields() + self._project_ids = [] + if self._projects: + self._project_ids = self.get_project_ids() + if not self._project_ids: + return + yield from super().read_records(**kwargs) + + def transform(self, record: MutableMapping[str, Any], **kwargs) -> MutableMapping[str, Any]: + record["projectId"] = record["fields"]["project"]["id"] + record["projectKey"] = record["fields"]["project"]["key"] + record["created"] = record["fields"]["created"] + record["updated"] = record["fields"]["updated"] + return record + + def get_project_ids(self): + return [project["id"] for project in read_full_refresh(self.projects_stream)] + + def get_fields(self): fields = [ "assignee", "attachment", @@ -385,22 +407,12 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg "summary", "updated", ] + field_ids_by_name = self.issue_fields_stream.field_ids_by_name() additional_field_names = ["Development", "Story Points", "Story point estimate", "Epic Link", "Sprint"] for name in additional_field_names + self._additional_fields: if name in field_ids_by_name: fields.extend(field_ids_by_name[name]) - - for project in read_full_refresh(self.projects_stream): - stream_slice = {"project_id": project["id"], "project_key": project["key"], "fields": list(set(fields))} - yield from super().read_records(stream_slice=stream_slice, **kwargs) - - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: - record["projectId"] = stream_slice["project_id"] - record["projectKey"] = stream_slice["project_key"] - issue_fields = record["fields"] - record["created"] = issue_fields.get("created") - record["updated"] = issue_fields.get("updated") or issue_fields.get("created") - return record + return fields class IssueComments(IncrementalJiraStream): From 2493df0c9e0f70d11b7b0ab42b2935e73a7df57d Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 15:35:42 +0000 Subject: [PATCH 29/77] IssueComments refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 2ccfe3bda01ba..07f79b2f96791 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -434,8 +434,7 @@ def __init__(self, **kwargs): ) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"issue/{key}/comment" + return f"issue/{stream_slice['key']}/comment" def read_records( self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs From 762192c45c878ceb173dd9dc52e7481646b7781f Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 16:28:18 +0000 Subject: [PATCH 30/77] refactored FilterSharing Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 07f79b2f96791..4225c73e499c5 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -301,13 +301,15 @@ class FilterSharing(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filter-sharing/#api-rest-api-3-filter-id-permission-get """ + def __init__(self, render_fields: bool = False, **kwargs): + super().__init__(**kwargs) + self.filters_stream = Filters(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - filter_id = stream_slice["filter_id"] - return f"filter/{filter_id}/permission" + return f"filter/{stream_slice['filter_id']}/permission" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - filters_stream = Filters(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for filters in filters_stream.read_records(sync_mode=SyncMode.full_refresh): + for filters in read_full_refresh(self.filters_stream): yield from super().read_records(stream_slice={"filter_id": filters["id"]}, **kwargs) From 60727239846c4e4e22c08bf623ecd1017bf602a7 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 17:52:43 +0000 Subject: [PATCH 31/77] field_ids_by_name - improved Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 4225c73e499c5..212f744f96b0f 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -458,10 +458,8 @@ def path(self, **kwargs) -> str: def field_ids_by_name(self) -> Mapping[str, List[str]]: results = {} - for f in self.read_records(sync_mode=SyncMode.full_refresh): - if f["name"] not in results: - results[f["name"]] = [] - results[f["name"]].append(f["id"]) + for f in read_full_refresh(self): + results.setdefault(f["name"], []).append(f["id"]) return results From bb93758d1bcb4c7173bd428c327cfbb96321243c Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 18:07:42 +0000 Subject: [PATCH 32/77] IssueCustomFieldContexts - refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 212f744f96b0f..d8c47319fbb21 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -480,21 +480,28 @@ class IssueCustomFieldContexts(JiraStream): """ extract_field = "values" + SKIP_STATUS_CODES = [ + # https://community.developer.atlassian.com/t/get-custom-field-contexts-not-found-returned/48408/2 + # /rest/api/3/field/{fieldId}/context - can return 404 if project style is not "classic" + requests.codes.NOT_FOUND, + # Only Jira administrators can access custom field contexts. + requests.codes.FORBIDDEN, + ] + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - field_id = stream_slice["field_id"] - return f"field/{field_id}/context" + return f"field/{stream_slice['field_id']}/context" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for field in fields_stream.read_records(sync_mode=SyncMode.full_refresh): + for field in read_full_refresh(self.issue_fields_stream): if field.get("custom", False): try: yield from super().read_records(stream_slice={"field_id": field["id"]}, **kwargs) except HTTPError as e: - # https://community.developer.atlassian.com/t/get-custom-field-contexts-not-found-returned/48408/2 - # /rest/api/3/field/{fieldId}/context - can return 404 if project style is not "classic" - if e.response.status_code != requests.codes.NOT_FOUND: + if e.response.status_code not in self.SKIP_STATUS_CODES: raise e From 0413545e6d8f2e4199c566ebd5ddb772f7cab83f Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Sun, 11 Dec 2022 20:41:00 +0000 Subject: [PATCH 33/77] IssuePriorities refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index d8c47319fbb21..80807dafa8f2a 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -543,8 +543,10 @@ class IssuePriorities(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-priorities/#api-rest-api-3-priority-get """ + extract_field = "values" + def path(self, **kwargs) -> str: - return "priority" + return "priority/search" class IssuePropertyKeys(JiraStream): From ad66abdb118363a911c13234bc33fef819358c8c Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Mon, 12 Dec 2022 09:16:35 +0000 Subject: [PATCH 34/77] additional_fields removed, use fields='*all' Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/source.py | 1 - .../source-jira/source_jira/spec.json | 9 ---- .../source-jira/source_jira/streams.py | 41 +------------------ 3 files changed, 2 insertions(+), 49 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index 08f953b0c06ef..e8baed63c4ba2 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -116,7 +116,6 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: render_fields = config.get("render_fields", False) issues_stream = Issues( **incremental_args, - additional_fields=config.get("additional_fields", []), expand_changelog=config.get("expand_issue_changelog", False), render_fields=render_fields, ) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/spec.json b/airbyte-integrations/connectors/source-jira/source_jira/spec.json index 1f21bc250d876..184df5b054f4e 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/spec.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/spec.json @@ -41,15 +41,6 @@ "examples": ["2021-03-01T00:00:00Z"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" }, - "additional_fields": { - "type": "array", - "title": "Additional Fields", - "items": { - "type": "string" - }, - "description": "List of additional fields to include in replicating issues.", - "examples": ["customfield_10096", "customfield_10071"] - }, "expand_issue_changelog": { "type": "boolean", "title": "Expand Issue Changelog", diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 80807dafa8f2a..5e42128d132bf 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -334,12 +334,10 @@ class Issues(IncrementalJiraStream): extract_field = "issues" use_cache = True - def __init__(self, additional_fields: List[str], expand_changelog: bool = False, render_fields: bool = False, **kwargs): + def __init__(self, expand_changelog: bool = False, render_fields: bool = False, **kwargs): super().__init__(**kwargs) - self._additional_fields = additional_fields self._expand_changelog = expand_changelog self._render_fields = render_fields - self._fields = [] self._project_ids = [] self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) @@ -354,7 +352,7 @@ def request_params( next_page_token: Optional[Mapping[str, Any]] = None, ) -> MutableMapping[str, Any]: params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) - params["fields"] = self._fields + params["fields"] = "*all" jql_parts = [self.jql_compare_date(stream_state)] if self._project_ids: project_ids = ", ".join([f"'{project_id}'" for project_id in self._project_ids]) @@ -370,7 +368,6 @@ def request_params( return params def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: - self._fields = self.get_fields() self._project_ids = [] if self._projects: self._project_ids = self.get_project_ids() @@ -388,34 +385,6 @@ def transform(self, record: MutableMapping[str, Any], **kwargs) -> MutableMappin def get_project_ids(self): return [project["id"] for project in read_full_refresh(self.projects_stream)] - def get_fields(self): - fields = [ - "assignee", - "attachment", - "components", - "created", - "creator", - "description", - "issuelinks", - "issuetype", - "labels", - "parent", - "priority", - "project", - "resolutiondate", - "security", - "status", - "subtasks", - "summary", - "updated", - ] - field_ids_by_name = self.issue_fields_stream.field_ids_by_name() - additional_field_names = ["Development", "Story Points", "Story point estimate", "Epic Link", "Sprint"] - for name in additional_field_names + self._additional_fields: - if name in field_ids_by_name: - fields.extend(field_ids_by_name[name]) - return fields - class IssueComments(IncrementalJiraStream): """ @@ -428,7 +397,6 @@ class IssueComments(IncrementalJiraStream): def __init__(self, **kwargs): super().__init__(**kwargs) self.issues_stream = Issues( - additional_fields=[], authenticator=self.authenticator, domain=self._domain, projects=self._projects, @@ -580,7 +548,6 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: issues_stream = Issues( - additional_fields=[], authenticator=self.authenticator, domain=self._domain, projects=self._projects, @@ -603,7 +570,6 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: issues_stream = Issues( - additional_fields=[], authenticator=self.authenticator, domain=self._domain, projects=self._projects, @@ -674,7 +640,6 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: issues_stream = Issues( - additional_fields=[], authenticator=self.authenticator, domain=self._domain, projects=self._projects, @@ -700,7 +665,6 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: issues_stream = Issues( - additional_fields=[], authenticator=self.authenticator, domain=self._domain, projects=self._projects, @@ -721,7 +685,6 @@ class IssueWorklogs(IncrementalJiraStream): def __init__(self, **kwargs): super().__init__(**kwargs) self.issues_stream = Issues( - additional_fields=[], authenticator=self.authenticator, domain=self._domain, projects=self._projects, From 9ea9f9db55e5cd93cef9fd76a10db89f34b95543 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Mon, 12 Dec 2022 10:27:24 +0000 Subject: [PATCH 35/77] make PullRequests more robust Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 5e42128d132bf..39d84432d46d1 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -933,7 +933,7 @@ def read_records( dev_field_ids = field_ids_by_name.get("Development", []) for issue in read_incremental(self.issues_stream, stream_state=stream_state): for dev_field_id in dev_field_ids: - if self.has_pull_requests(issue["fields"][dev_field_id]): + if self.has_pull_requests(issue["fields"].get(dev_field_id)): yield from super().read_records( stream_slice={"id": issue["id"], self.cursor_field: issue["fields"][self.cursor_field]}, **kwargs ) From ff7b809aefabae0275c16ff84c52fa0cf4f02745 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Mon, 12 Dec 2022 14:56:53 +0000 Subject: [PATCH 36/77] Epics removed - all data in this stream exists in Issues stream Signed-off-by: Sergey Chvalyuk --- .../source-jira/acceptance-test-config.yml | 2 +- .../integration_tests/configured_catalog.json | 10 --- .../source_jira/schemas/epics.json | 76 ------------------- .../source-jira/source_jira/source.py | 2 - .../source-jira/source_jira/streams.py | 45 ----------- 5 files changed, 1 insertion(+), 134 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-jira/source_jira/schemas/epics.json diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index 06261ed152ef6..93a2000269116 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -32,7 +32,7 @@ tests: configured_catalog_path: "integration_tests/workflows_configured_catalog.json" - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: ["epics", "screen_tab_fields", "sprint_issues", "sprints"] + empty_streams: ["screen_tab_fields", "sprint_issues", "sprints"] timeout_seconds: 1800 # incremental: # - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json index 1d4c9335f8e55..55f9d9b568323 100644 --- a/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json @@ -50,16 +50,6 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, - { - "stream": { - "name": "epics", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "filters", diff --git a/airbyte-integrations/connectors/source-jira/source_jira/schemas/epics.json b/airbyte-integrations/connectors/source-jira/source_jira/schemas/epics.json deleted file mode 100644 index 02a72bc54d694..0000000000000 --- a/airbyte-integrations/connectors/source-jira/source_jira/schemas/epics.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional issue details in the response.", - "readOnly": true, - "xml": { - "attribute": true - } - }, - "id": { - "type": "string", - "description": "The ID of the epic.", - "readOnly": true - }, - "self": { - "type": "string", - "description": "The URL of the epic details.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "The key of the epic.", - "readOnly": true - }, - "fields": { - "type": "object", - "properties": { - "summary": { - "type": ["string", "null"], - "description": "Epic summary" - }, - "description": { - "type": ["string", "null", "object"], - "description": "Epic description" - }, - "status": { - "type": ["string", "object"], - "description": "Epic status" - }, - "updated": { - "type": ["string", "null"], - "format": "date-time", - "description": "This field is not shown in schema / swagger, but exists in records and we use it as cursor fiekd." - } - }, - "additionalProperties": true - }, - "projectId": { - "type": "string", - "description": "The ID of the project containing the epic.", - "readOnly": true - }, - "projectKey": { - "type": "string", - "description": "The key of the project containing the epic.", - "readOnly": true - }, - "created": { - "type": ["string", "null"], - "format": "date-time", - "description": "This field transformed from fields attr", - "readOnly": true - }, - "updated": { - "type": ["string", "null"], - "format": "date-time", - "description": "This field transformed from fields attr", - "readOnly": true - } - }, - "additionalProperties": true -} diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index e8baed63c4ba2..b9cb2bc0dd86b 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -19,7 +19,6 @@ BoardIssues, Boards, Dashboards, - Epics, Filters, FilterSharing, Groups, @@ -131,7 +130,6 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: Boards(**args), BoardIssues(**incremental_args), Dashboards(**args), - Epics(render_fields=render_fields, **incremental_args), Filters(**args), FilterSharing(**args), Groups(**args), diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 39d84432d46d1..8341a7ad7352b 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -234,51 +234,6 @@ def path(self, **kwargs) -> str: return "dashboard" -class Epics(IncrementalJiraStream): - """ - https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-get - """ - - cursor_field = "updated" - extract_field = "issues" - - def __init__(self, render_fields: bool = False, **kwargs): - super().__init__(**kwargs) - self._render_fields = render_fields - self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - - def path(self, **kwargs) -> str: - return "search" - - def request_params( - self, - stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any], - next_page_token: Optional[Mapping[str, Any]] = None, - ) -> MutableMapping[str, Any]: - project_id = stream_slice["project_id"] - params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) - params["fields"] = ["summary", "description", "status", "updated"] - jql_parts = ["issuetype = 'Epic'", f"project = '{project_id}'", self.jql_compare_date(stream_state)] - params["jql"] = " and ".join([p for p in jql_parts if p]) - if self._render_fields: - params["expand"] = "renderedFields" - return params - - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - for project in read_full_refresh(self.projects_stream): - stream_slice = {"project_id": project["id"], "project_key": project["key"]} - yield from super().read_records(stream_slice=stream_slice, **kwargs) - - def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: - record["projectId"] = stream_slice["project_id"] - record["projectKey"] = stream_slice["project_key"] - issue_fields = record["fields"] - record["created"] = issue_fields.get("created") - record["updated"] = issue_fields.get("updated") or issue_fields.get("created") - return record - - class Filters(JiraStream): """ https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filters/#api-rest-api-3-filter-search-get From 3e8e2bb5d4bc3c53e13d70d1aa9c2c7016858082 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Mon, 12 Dec 2022 15:35:55 +0000 Subject: [PATCH 37/77] SprintIssues refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 8341a7ad7352b..5e69661127080 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -978,8 +978,7 @@ def __init__(self, **kwargs): self.boards_stream = Boards(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - board_id = stream_slice["board_id"] - return f"board/{board_id}/sprint" + return f"board/{stream_slice['board_id']}/sprint" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: for board in read_full_refresh(self.boards_stream): @@ -998,12 +997,11 @@ class SprintIssues(IncrementalJiraStream): def __init__(self, **kwargs): super().__init__(**kwargs) - self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) self.sprints_stream = Sprints(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + self.issue_fields_stream = IssueFields(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - sprint_id = stream_slice["sprint_id"] - return f"sprint/{sprint_id}/issue" + return f"sprint/{stream_slice['sprint_id']}/issue" def request_params( self, @@ -1019,11 +1017,7 @@ def request_params( return params def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - field_ids_by_name = self.issue_fields_stream.field_ids_by_name() - fields = ["key", "status", "updated"] - for name in ["Story Points", "Story point estimate"]: - if name in field_ids_by_name: - fields.extend(field_ids_by_name[name]) + fields = self.get_fields() for sprint in read_full_refresh(self.sprints_stream): stream_slice = {"sprint_id": sprint["id"], "fields": fields} yield from super().read_records(stream_slice=stream_slice, **kwargs) @@ -1032,11 +1026,18 @@ def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, record["issueId"] = record["id"] record["id"] = "-".join([str(stream_slice["sprint_id"]), record["id"]]) record["sprintId"] = stream_slice["sprint_id"] - issue_fields = record["fields"] - record["created"] = issue_fields.get("created") - record["updated"] = issue_fields.get("updated") or issue_fields.get("created") + record["created"] = record["fields"]["created"] + record["updated"] = record["fields"]["updated"] return record + def get_fields(self): + fields = ["key", "status", "created", "updated"] + field_ids_by_name = self.issue_fields_stream.field_ids_by_name() + for name in ["Story Points", "Story point estimate"]: + if name in field_ids_by_name: + fields.extend(field_ids_by_name[name]) + return fields + class TimeTracking(JiraStream): """ From 4d35d35fc909333499268cb8f3456369ca05b2ec Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Mon, 12 Dec 2022 16:34:33 +0000 Subject: [PATCH 38/77] IssueRemoteLinks - refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 5e69661127080..3eb0bc9365329 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -519,18 +519,20 @@ class IssueRemoteLinks(StartDateJiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-remote-links/#api-rest-api-3-issue-issueidorkey-remotelink-get """ - def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"issue/{key}/remotelink" - - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - issues_stream = Issues( + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_stream = Issues( authenticator=self.authenticator, domain=self._domain, projects=self._projects, start_date=self._start_date, ) - for issue in issues_stream.read_records(sync_mode=SyncMode.full_refresh): + + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: + return f"issue/{stream_slice['key']}/remotelink" + + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + for issue in read_full_refresh(self.issues_stream): yield from super().read_records(stream_slice={"key": issue["key"]}, **kwargs) From 9cc7ef7ec1e3fb55873654391dd372f1dcacfdd5 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Mon, 12 Dec 2022 17:44:14 +0000 Subject: [PATCH 39/77] IssueResolutions refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 3eb0bc9365329..50c3f1f174054 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -538,11 +538,13 @@ def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwarg class IssueResolutions(JiraStream): """ - https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-resolutions/#api-rest-api-3-resolution-get + https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-resolutions/#api-rest-api-3-resolution-search-get """ + extract_field = "values" + def path(self, **kwargs) -> str: - return "resolution" + return "resolution/search" class IssueSecuritySchemes(JiraStream): From 43d35ba5c0df4a9b6c707f6bf4c6a67b143f3a56 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 06:05:35 +0000 Subject: [PATCH 40/77] IssueVotes refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 50c3f1f174054..6ebcb3c7ad451 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -593,18 +593,20 @@ class IssueVotes(StartDateJiraStream): # extract_field = "voters" primary_key = None - def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"issue/{key}/votes" - - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - issues_stream = Issues( + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_stream = Issues( authenticator=self.authenticator, domain=self._domain, projects=self._projects, start_date=self._start_date, ) - for issue in issues_stream.read_records(sync_mode=SyncMode.full_refresh): + + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: + return f"issue/{stream_slice['key']}/votes" + + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + for issue in read_full_refresh(self.issues_stream): yield from super().read_records(stream_slice={"key": issue["key"]}, **kwargs) From 0e392353dba87b683e2139533e9df8051e9ec76b Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 06:10:44 +0000 Subject: [PATCH 41/77] IssueWatchers refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 6ebcb3c7ad451..526bf76a5c9f2 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -620,18 +620,20 @@ class IssueWatchers(StartDateJiraStream): # extract_field = "watchers" primary_key = None - def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"issue/{key}/watchers" - - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - issues_stream = Issues( + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_stream = Issues( authenticator=self.authenticator, domain=self._domain, projects=self._projects, start_date=self._start_date, ) - for issue in issues_stream.read_records(sync_mode=SyncMode.full_refresh): + + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: + return f"issue/{stream_slice['key']}/watchers" + + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + for issue in read_full_refresh(self.issues_stream): yield from super().read_records(stream_slice={"key": issue["key"]}, **kwargs) From 28518585f10cddbfd00af2693b25d42204a19e0f Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 06:24:10 +0000 Subject: [PATCH 42/77] Labels refactored Signed-off-by: Sergey Chvalyuk --- .../source_jira/schemas/labels.json | 20 ++----------------- .../source-jira/source_jira/streams.py | 11 +++++++--- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/schemas/labels.json b/airbyte-integrations/connectors/source-jira/source_jira/schemas/labels.json index 5430832a7379e..f84642e8df5c7 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/schemas/labels.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/schemas/labels.json @@ -1,24 +1,8 @@ { "type": ["object", "null"], "properties": { - "id": { - "type": ["string", "null"] - }, - "key": { - "type": ["string", "null"] - }, - "value": { - "type": ["string", "null"] - }, - "name": { - "type": ["string", "null"] - }, - "desc": { - "type": ["string", "null"] - }, - "type": { + "label": { "type": ["string", "null"] } - }, - "additionalProperties": true + } } diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 526bf76a5c9f2..40fe81bef8f72 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -655,8 +655,7 @@ def __init__(self, **kwargs): ) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"issue/{key}/worklog" + return f"issue/{stream_slice['key']}/worklog" def read_records( self, stream_slice: Optional[Mapping[str, Any]] = None, stream_state: Mapping[str, Any] = None, **kwargs @@ -680,8 +679,14 @@ class Labels(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-labels/#api-rest-api-3-label-get """ + extract_field = "values" + primary_key = "label" + def path(self, **kwargs) -> str: - return "application-properties" + return "label" + + def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: + return {"label": record} class Permissions(JiraStream): From a23b58f2089b4b575d0545c46c21a5b6e5fb3afc Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 06:30:02 +0000 Subject: [PATCH 43/77] Permissions refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 40fe81bef8f72..f74f709e39ee3 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -695,7 +695,7 @@ class Permissions(JiraStream): """ extract_field = "permissions" - primary_key = None + primary_key = "key" def path(self, **kwargs) -> str: return "permissions" From 7494dc94903f0bc7fe8dc792fe513554cf74d0d4 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 06:37:28 +0000 Subject: [PATCH 44/77] ProjectAvatars refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index f74f709e39ee3..0dba2a0316337 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -744,18 +744,20 @@ class ProjectAvatars(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-avatars/#api-rest-api-3-project-projectidorkey-avatars-get """ + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"project/{key}/avatars" + return f"project/{stream_slice['key']}/avatars" def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: response_json = response.json() - for type_key, records in response_json.items(): + for records in response_json.values(): yield from records def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in read_full_refresh(self.projects_stream): yield from super().read_records(stream_slice={"key": project["key"]}, **kwargs) From 9cb7fc57eac453dbf093c27579d061b6d13a3d2d Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 07:20:11 +0000 Subject: [PATCH 45/77] ProjectComponents refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 0dba2a0316337..45ac3ae2c6fba 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -777,13 +777,15 @@ class ProjectComponents(JiraStream): extract_field = "values" + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"project/{key}/component" + return f"project/{stream_slice['key']}/component" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in read_full_refresh(self.projects_stream): yield from super().read_records(stream_slice={"key": project["key"]}, **kwargs) From d25d6e21d9d3b245ec6c59d89853d82b9b6f50f3 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 07:28:28 +0000 Subject: [PATCH 46/77] ProjectEmail refactored Signed-off-by: Sergey Chvalyuk --- .../source_jira/schemas/project_email.json | 3 +++ .../source-jira/source_jira/streams.py | 16 +++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/schemas/project_email.json b/airbyte-integrations/connectors/source-jira/source_jira/schemas/project_email.json index 04238afd029ad..e7e7041c8631c 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/schemas/project_email.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/schemas/project_email.json @@ -2,6 +2,9 @@ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { + "projectId": { + "type": "string" + }, "emailAddress": { "type": "string", "description": "The email address." diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 45ac3ae2c6fba..00c6e0acc240f 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -794,17 +794,23 @@ class ProjectEmail(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-email/#api-rest-api-3-project-projectid-email-get """ - primary_key = None + primary_key = "projectId" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - project_id = stream_slice["project_id"] - return f"project/{project_id}/email" + return f"project/{stream_slice['project_id']}/email" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in read_full_refresh(self.projects_stream): yield from super().read_records(stream_slice={"project_id": project["id"]}, **kwargs) + def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: + record["projectId"] = stream_slice["project_id"] + return record + class ProjectPermissionSchemes(JiraStream): """ From d954a6591edcd71d8d04ecd2da075e7d43a459dc Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 07:33:59 +0000 Subject: [PATCH 47/77] ProjectPermissionSchemes refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 00c6e0acc240f..e5a96ca1cf3e9 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -819,13 +819,15 @@ class ProjectPermissionSchemes(JiraStream): extract_field = "levels" + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"project/{key}/securitylevel" + return f"project/{stream_slice['key']}/securitylevel" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in read_full_refresh(self.projects_stream): yield from super().read_records(stream_slice={"key": project["key"]}, **kwargs) From aa79f611ccb690b05c46decac5d6ce8ec946f6ad Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 07:40:24 +0000 Subject: [PATCH 48/77] ProjectVersions refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index e5a96ca1cf3e9..cf40046e9bdea 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -849,13 +849,15 @@ class ProjectVersions(JiraStream): extract_field = "values" + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - return f"project/{key}/version" + return f"project/{stream_slice['key']}/version" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - projects_stream = Projects(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for project in projects_stream.read_records(sync_mode=SyncMode.full_refresh): + for project in read_full_refresh(self.projects_stream): yield from super().read_records(stream_slice={"key": project["key"]}, **kwargs) From 01e5ab04714ed1b42b0607154514f7491ebe64a7 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 08:15:42 +0000 Subject: [PATCH 49/77] ScreenTabs refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index cf40046e9bdea..4a7276c088df0 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -947,13 +947,16 @@ class ScreenTabs(JiraStream): raise_on_http_errors = False use_cache = True + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.screens_stream = Screens(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: screen_id = stream_slice["screen_id"] return f"screens/{screen_id}/tabs" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - screens_stream = Screens(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for screen in screens_stream.read_records(sync_mode=SyncMode.full_refresh): + for screen in read_full_refresh(self.screens_stream): yield from self.read_tab_records(stream_slice={"screen_id": screen["id"]}, **kwargs) def read_tab_records(self, stream_slice: Mapping[str, Any], **kwargs) -> Iterable[Mapping[str, Any]]: From 29d145ad4864ab580976eb52860240110061f009 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 09:23:06 +0000 Subject: [PATCH 50/77] Screens handle forbidden Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 4a7276c088df0..f20478349f3c0 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -938,6 +938,14 @@ class Screens(JiraStream): def path(self, **kwargs) -> str: return "screens" + def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: + try: + yield from super().read_records(**kwargs) + except HTTPError as e: + # Only Jira administrators can manage screens. + if e.response.status_code != requests.codes.FORBIDDEN: + raise e + class ScreenTabs(JiraStream): """ From 8022b4737e916f2c9cba827481096041507b4515 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 09:34:03 +0000 Subject: [PATCH 51/77] ScreenTabFields refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index f20478349f3c0..54a923effba8e 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -960,8 +960,7 @@ def __init__(self, **kwargs): self.screens_stream = Screens(authenticator=self.authenticator, domain=self._domain, projects=self._projects) def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - screen_id = stream_slice["screen_id"] - return f"screens/{screen_id}/tabs" + return f"screens/{stream_slice['screen_id']}/tabs" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: for screen in read_full_refresh(self.screens_stream): @@ -977,16 +976,17 @@ class ScreenTabFields(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tab-fields/#api-rest-api-3-screens-screenid-tabs-tabid-fields-get """ + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.screens_stream = Screens(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + self.screen_tabs_stream = ScreenTabs(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - screen_id = stream_slice["screen_id"] - tab_id = stream_slice["tab_id"] - return f"screens/{screen_id}/tabs/{tab_id}/fields" + return f"screens/{stream_slice['screen_id']}/tabs/{stream_slice['tab_id']}/fields" def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - screens_stream = Screens(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - screen_tabs_stream = ScreenTabs(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for screen in screens_stream.read_records(sync_mode=SyncMode.full_refresh): - for tab in screen_tabs_stream.read_tab_records(stream_slice={"screen_id": screen["id"]}, **kwargs): + for screen in read_full_refresh(self.screens_stream): + for tab in self.screen_tabs_stream.read_tab_records(stream_slice={"screen_id": screen["id"]}, **kwargs): if id in tab: # Check for proper tab record since the ScreenTabs stream doesn't throw http errors yield from super().read_records(stream_slice={"screen_id": screen["id"], "tab_id": tab["id"]}, **kwargs) From a9398075b48c14f89d1e0213162754ff8b8f9b94 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 09:39:43 +0000 Subject: [PATCH 52/77] TimeTracking refactored Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/streams.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 54a923effba8e..8854952c2c49f 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -1082,7 +1082,7 @@ class TimeTracking(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-time-tracking/#api-rest-api-3-configuration-timetracking-list-get """ - primary_key = None + primary_key = "key" def path(self, **kwargs) -> str: return "configuration/timetracking/list" From 0a4e9199fffce1eeec3cbe6cf670ceeb0692ca97 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 12:11:43 +0000 Subject: [PATCH 53/77] paging improved Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 62 ++++++------------- 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 8854952c2c49f..3f18b1d9e0aa5 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -5,8 +5,8 @@ import re import urllib.parse as urlparse from abc import ABC -from typing import Any, Dict, Iterable, List, Mapping, MutableMapping, Optional -from urllib.parse import parse_qs +from typing import Any, Iterable, List, Mapping, MutableMapping, Optional +from urllib.parse import parse_qsl import pendulum import requests @@ -24,6 +24,7 @@ class JiraStream(HttpStream, ABC): Jira API Reference: https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/ """ + page_size = 50 primary_key: Optional[str] = "id" extract_field: Optional[str] = None api_v1 = False @@ -40,33 +41,30 @@ def url_base(self) -> str: return f"https://{self._domain}/rest/api/{API_VERSION}/" def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - params = {} - response_data = response.json() - if "nextPage" in response_data: - next_page = response_data["nextPage"] - params = parse_qs(urlparse.urlparse(next_page).query) - else: - if all(paging_metadata in response_data for paging_metadata in ("startAt", "maxResults", "total")): - start_at = response_data["startAt"] - max_results = int(response_data["maxResults"]) - total = response_data["total"] - end_at = start_at + max_results - if not end_at > total: - params["startAt"] = end_at - params["maxResults"] = max_results - return params + response_json = response.json() + if isinstance(response_json, dict): + if response_json.get("isLast"): + return + startAt = response_json.get("startAt") + if startAt is not None: + startAt += response_json["maxResults"] + if startAt < response_json["total"]: + return {"startAt": startAt} + elif isinstance(response_json, list): + if len(response_json) == self.page_size: + query_params = dict(parse_qsl(urlparse.urlparse(response.url).query)) + startAt = int(query_params.get("startAt", 0)) + self.page_size + return {"startAt": startAt} def request_params( self, stream_state: Mapping[str, Any], - stream_slice: Mapping[str, Any], - next_page_token: Optional[Mapping[str, Any]] = None, + stream_slice: Mapping[str, Any] = None, + next_page_token: Mapping[str, Any] = None, ) -> MutableMapping[str, Any]: - params: Dict[str, str] = {} - + params = {"maxResults": self.page_size} if next_page_token: params.update(next_page_token) - return params def request_headers(self, **kwargs) -> Mapping[str, Any]: @@ -1096,26 +1094,6 @@ class Users(JiraStream): primary_key = "accountId" use_cache = True - def __init__(self, domain: str, projects: List[str], **kwargs): - super(JiraStream, self).__init__(**kwargs) - self._domain = domain - self._projects = projects - self._max_results = 100 - self._total = self._max_results - self._startAt = 0 - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - params = {} - response_data = response.json() - - if users_returned := len(response_data): - self._total = self._total + users_returned - self._startAt = self._startAt + users_returned - params["startAt"] = self._startAt - params["maxResults"] = self._max_results - - return params - def path(self, **kwargs) -> str: return "users/search" From 3bba821b00bbfac458dd8c073a4109410788b861 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 14:23:50 +0000 Subject: [PATCH 54/77] UsersGroupsDetailed refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 3f18b1d9e0aa5..89db79559b5e0 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -30,7 +30,7 @@ class JiraStream(HttpStream, ABC): api_v1 = False def __init__(self, domain: str, projects: List[str], **kwargs): - super(JiraStream, self).__init__(**kwargs) + super().__init__(**kwargs) self._domain = domain self._projects = projects @@ -1100,18 +1100,31 @@ def path(self, **kwargs) -> str: class UsersGroupsDetailed(JiraStream): """ - https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-rest-api-3-issue-issueidorkey-comment-get + https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-users/#api-rest-api-3-user-get """ primary_key = "accountId" + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.users_stream = Users(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["accountId"] - return f"user?accountId={key}&expand=groups,applicationRoles" + return "user" + + def request_params( + self, + stream_state: Mapping[str, Any], + stream_slice: Mapping[str, Any], + next_page_token: Optional[Mapping[str, Any]] = None, + ) -> MutableMapping[str, Any]: + params = super().request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) + params["accountId"] = stream_slice["accountId"] + params["expand"] = "groups,applicationRoles" + return params def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - users_stream = Users(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for user in users_stream.read_records(sync_mode=SyncMode.full_refresh): + for user in read_full_refresh(self.users_stream): yield from super().read_records(stream_slice={"accountId": user["accountId"]}, **kwargs) From ce340f176fca1622e6597beb0404e1de060d8c1f Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 14:36:48 +0000 Subject: [PATCH 55/77] IssueProperties refactored Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 89db79559b5e0..f25e73904f685 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -10,7 +10,6 @@ import pendulum import requests -from airbyte_cdk.models import SyncMode from airbyte_cdk.sources.streams.http import HttpStream from requests.exceptions import HTTPError @@ -494,21 +493,22 @@ class IssueProperties(StartDateJiraStream): primary_key = "key" - def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: - key = stream_slice["key"] - issue_key = stream_slice["issue_key"] - return f"issue/{issue_key}/properties/{key}" - - def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - issues_stream = Issues( + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_stream = Issues( authenticator=self.authenticator, domain=self._domain, projects=self._projects, start_date=self._start_date, ) - issue_property_keys_stream = IssuePropertyKeys(authenticator=self.authenticator, domain=self._domain, projects=self._projects) - for issue in issues_stream.read_records(sync_mode=SyncMode.full_refresh): - for property_key in issue_property_keys_stream.read_records(stream_slice={"key": issue["key"]}, **kwargs): + self.issue_property_keys_stream = IssuePropertyKeys(authenticator=self.authenticator, domain=self._domain, projects=self._projects) + + def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: + return f"issue/{stream_slice['issue_key']}/properties/{stream_slice['key']}" + + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + for issue in read_full_refresh(self.issues_stream): + for property_key in self.issue_property_keys_stream.read_records(stream_slice={"key": issue["key"]}, **kwargs): yield from super().read_records(stream_slice={"key": property_key["key"], "issue_key": issue["key"]}, **kwargs) From 42e7b17eb7f203a6857aa9c57e39b3b20d740458 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 18:58:32 +0000 Subject: [PATCH 56/77] skip_http_status_codes added Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/streams.py | 89 ++++++++++++++----- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index f25e73904f685..9ab72fab84e80 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -27,6 +27,7 @@ class JiraStream(HttpStream, ABC): primary_key: Optional[str] = "id" extract_field: Optional[str] = None api_v1 = False + skip_http_status_codes = [] def __init__(self, domain: str, projects: List[str], **kwargs): super().__init__(**kwargs) @@ -81,6 +82,13 @@ def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapp def transform(self, record: MutableMapping[str, Any], stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: return record + def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: + try: + yield from super().read_records(**kwargs) + except HTTPError as e: + if not (self.skip_http_status_codes and e.response.status_code in self.skip_http_status_codes): + raise e + class StartDateJiraStream(JiraStream, ABC): def __init__(self, start_date: Optional[pendulum.DateTime] = None, **kwargs): @@ -128,18 +136,14 @@ class ApplicationRoles(JiraStream): """ primary_key = "key" + skip_http_status_codes = [ + # Application access permissions can only be edited or viewed by administrators. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "applicationrole" - def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: - try: - yield from super().read_records(**kwargs) - except HTTPError as e: - # Application access permissions can only be edited or viewed by administrators. - if e.response.status_code != requests.codes.FORBIDDEN: - raise e - class Avatars(JiraStream): """ @@ -389,6 +393,10 @@ class IssueFieldConfigurations(JiraStream): """ extract_field = "values" + skip_http_status_codes = [ + # Only Jira administrators can access field configurations + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "fieldconfiguration" @@ -400,7 +408,7 @@ class IssueCustomFieldContexts(JiraStream): """ extract_field = "values" - SKIP_STATUS_CODES = [ + skip_http_status_codes = [ # https://community.developer.atlassian.com/t/get-custom-field-contexts-not-found-returned/48408/2 # /rest/api/3/field/{fieldId}/context - can return 404 if project style is not "classic" requests.codes.NOT_FOUND, @@ -418,11 +426,7 @@ def path(self, stream_slice: Mapping[str, Any], **kwargs) -> str: def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: for field in read_full_refresh(self.issue_fields_stream): if field.get("custom", False): - try: - yield from super().read_records(stream_slice={"field_id": field["id"]}, **kwargs) - except HTTPError as e: - if e.response.status_code not in self.SKIP_STATUS_CODES: - raise e + yield from super().read_records(stream_slice={"field_id": field["id"]}, **kwargs) class IssueLinkTypes(JiraStream): @@ -442,6 +446,10 @@ class IssueNavigatorSettings(JiraStream): """ primary_key = None + skip_http_status_codes = [ + # You need Administrator permission to perform this operation. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "settings/columns" @@ -551,6 +559,10 @@ class IssueSecuritySchemes(JiraStream): """ extract_field = "issueSecuritySchemes" + skip_http_status_codes = [ + # You need to be a Jira administrator to perform this operation + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "issuesecurityschemes" @@ -562,6 +574,10 @@ class IssueTypeSchemes(JiraStream): """ extract_field = "values" + skip_http_status_codes = [ + # Only Jira administrators can access issue type schemes. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "issuetypescheme" @@ -573,6 +589,10 @@ class IssueTypeScreenSchemes(JiraStream): """ extract_field = "values" + skip_http_status_codes = [ + # Only Jira administrators can access issue type screen schemes. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "issuetypescreenscheme" @@ -668,6 +688,11 @@ class JiraSettings(JiraStream): https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jira-settings/#api-rest-api-3-application-properties-get """ + skip_http_status_codes = [ + # No permission + requests.codes.FORBIDDEN + ] + def path(self, **kwargs) -> str: return "application-properties" @@ -694,6 +719,10 @@ class Permissions(JiraStream): extract_field = "permissions" primary_key = "key" + skip_http_status_codes = [ + # You need to have Administer permissions to view this resource + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "permissions" @@ -793,6 +822,10 @@ class ProjectEmail(JiraStream): """ primary_key = "projectId" + skip_http_status_codes = [ + # You cannot edit the configuration of this project. + requests.codes.FORBIDDEN + ] def __init__(self, **kwargs): super().__init__(**kwargs) @@ -932,18 +965,14 @@ class Screens(JiraStream): extract_field = "values" use_cache = True + skip_http_status_codes = [ + # Only Jira administrators can manage screens. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "screens" - def read_records(self, **kwargs) -> Iterable[Mapping[str, Any]]: - try: - yield from super().read_records(**kwargs) - except HTTPError as e: - # Only Jira administrators can manage screens. - if e.response.status_code != requests.codes.FORBIDDEN: - raise e - class ScreenTabs(JiraStream): """ @@ -995,6 +1024,10 @@ class ScreenSchemes(JiraStream): """ extract_field = "values" + skip_http_status_codes = [ + # Only Jira administrators can access screen schemes. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "screenscheme" @@ -1081,6 +1114,10 @@ class TimeTracking(JiraStream): """ primary_key = "key" + skip_http_status_codes = [ + # This resource is only available to administrators + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "configuration/timetracking/list" @@ -1134,6 +1171,10 @@ class Workflows(JiraStream): """ extract_field = "values" + skip_http_status_codes = [ + # Only Jira administrators can access workflows. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "workflow/search" @@ -1145,6 +1186,10 @@ class WorkflowSchemes(JiraStream): """ extract_field = "values" + skip_http_status_codes = [ + # Only Jira administrators can access workflow scheme associations. + requests.codes.FORBIDDEN + ] def path(self, **kwargs) -> str: return "workflowscheme" From f0d65bb6bee96950396aac13a8ef19d67e41a2cf Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Tue, 13 Dec 2022 20:48:39 +0000 Subject: [PATCH 57/77] fix SAT Signed-off-by: Sergey Chvalyuk --- .../source-jira/acceptance-test-config.yml | 2 ++ .../integration_tests/expected_label_records.txt | 14 ++------------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index 93a2000269116..6f10c252545bb 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -15,6 +15,8 @@ tests: - config_path: "secrets/config.json" backward_compatibility_tests_config: disable_for_version: "0.2.23" + backward_compatibility_tests_config: + disable_for_version: "0.3.0" basic_read: # TEST for the Labels stream - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt b/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt index 5fcd2b7734be6..2b1820399c8e1 100644 --- a/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt +++ b/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt @@ -1,12 +1,2 @@ -{"stream": "labels", "data": {"id": "jira.issuenav.criteria.autoupdate", "key": "jira.issuenav.criteria.autoupdate", "value": "true", "name": "Auto Update Criteria", "desc": "Turn on to update search results automatically", "type": "boolean"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.clone.prefix", "key": "jira.clone.prefix", "value": "CLONE -", "name": "The prefix added to the Summary field of cloned issues", "type": "string"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.date.picker.java.format", "key": "jira.date.picker.java.format", "value": "d/MMM/yy", "name": "Date Picker Format (Java)", "desc": "This part is only for the Java (server side) generated dates. Note that this should correspond to the javascript date picker format (jira.date.picker.javascript.format) setting.", "type": "string"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.date.picker.javascript.format", "key": "jira.date.picker.javascript.format", "value": "%e/%b/%y", "name": "Date Picker Format (JavaScript)", "desc": "This part is only for the JavaScript (client side) generated dates. Note that this should correspond to the java date picker format (jira.date.picker.java.format) setting.", "type": "string"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.date.time.picker.java.format", "key": "jira.date.time.picker.java.format", "value": "dd/MMM/yy h:mm a", "name": "DateTime Picker Format (Java)", "desc": "This part is only for the Java (server side) generated datetimes. Note that this should correspond to the javascript datetime picker format (jira.date.time.picker.javascript.format) setting.", "type": "string"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.date.time.picker.javascript.format", "key": "jira.date.time.picker.javascript.format", "value": "%e/%b/%y %I:%M %p", "name": "DateTime Picker Format (JavaScript)", "desc": "This part is only for the JavaScript (client side) generated date times. Note that this should correspond to the java datetime picker format (jira.date.time.picker.java.format) setting.", "type": "string"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.issue.actions.order", "key": "jira.issue.actions.order", "value": "asc", "name": "JIRA issue actions order", "desc": "The default order of actions (tab items like 'Comments', 'Change History' etc) on the 'View Issue' screen, by date, from top to bottom.", "type": "enum", "allowedValues": ["asc", "desc"]}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.lf.date.time", "key": "jira.lf.date.time", "value": "h:mm a", "name": "Time Format", "type": "string", "example": "3:55 AM"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.lf.date.day", "key": "jira.lf.date.day", "value": "EEEE h:mm a", "name": "Day Format", "type": "string", "example": "Wednesday 3:55 AM"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.lf.date.complete", "key": "jira.lf.date.complete", "value": "dd/MMM/yy h:mm a", "name": "Complete Date/Time Format", "type": "string", "example": "23/May/07 3:55 AM"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.lf.date.dmy", "key": "jira.lf.date.dmy", "value": "dd/MMM/yy", "name": "Day/Month/Year Format", "type": "string", "example": "23/May/07"}, "emitted_at": 1626682849000} -{"stream": "labels", "data": {"id": "jira.date.time.picker.use.iso8061", "key": "jira.date.time.picker.use.iso8061", "value": "false", "name": "Use ISO8601 standard in Date Picker", "desc": "Turning it on will cause Monday to be the first day of week in the Date Picker, as specified by the ISO8601 standard", "type": "boolean"}, "emitted_at": 1626682849000} +{"stream":"labels","data":{"label":"test"},"emitted_at":1670963992553} +{"stream":"labels","data":{"label":"zZ"},"emitted_at":1670963992553} From d2609f630ad4ac82f83b6cf5635e53bb2484726c Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 05:54:35 +0000 Subject: [PATCH 58/77] convert to new format Signed-off-by: Sergey Chvalyuk --- .../source-jira/acceptance-test-config.yml | 70 +++++++++++-------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index 6f10c252545bb..82ba669ea4273 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -1,41 +1,49 @@ # See [Source Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/source-acceptance-tests-reference) # for more information about how to configure these tests connector_image: airbyte/source-jira:dev -tests: +acceptance_tests: spec: - - spec_path: "source_jira/spec.json" - backward_compatibility_tests_config: - disable_for_version: "0.2.23" + tests: + - spec_path: "source_jira/spec.json" + backward_compatibility_tests_config: + disable_for_version: "0.2.23" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" - backward_compatibility_tests_config: - disable_for_version: "0.2.23" - backward_compatibility_tests_config: - disable_for_version: "0.3.0" + tests: + - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: "0.2.23" + backward_compatibility_tests_config: + disable_for_version: "0.3.0" basic_read: - # TEST for the Labels stream - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/labels_catalog.json" - expect_records: - path: "integration_tests/expected_label_records.txt" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/issues_configured_catalog.json" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/issue_worklogs_configured_catalog.json" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/projects_configured_catalog.json" - empty_streams: ["project_permission_schemes"] - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/workflows_configured_catalog.json" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: ["screen_tab_fields", "sprint_issues", "sprints"] - timeout_seconds: 1800 + tests: + # TEST for the Labels stream + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/labels_catalog.json" + expect_records: + path: "integration_tests/expected_label_records.txt" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/issues_configured_catalog.json" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/issue_worklogs_configured_catalog.json" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/projects_configured_catalog.json" + empty_streams: + - name: "project_permission_schemes" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/workflows_configured_catalog.json" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: + - name: "screen_tab_fields" + - name: "sprint_issues" + - name: "sprints" + timeout_seconds: 1800 # incremental: # - config_path: "secrets/config.json" # configured_catalog_path: "integration_tests/inc_configured_catalog.json" From a75211829992dc2c105160441f7c00fa3543bb1b Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 08:27:11 +0000 Subject: [PATCH 59/77] continue to improve SAT Signed-off-by: Sergey Chvalyuk --- .../source-jira/acceptance-test-config.yml | 28 +- .../integration_tests/configured_catalog.json | 556 +- .../full_configured_catalog.json | 12085 ---------------- .../inc_configured_catalog.json | 52 - .../issue_worklogs_configured_catalog.json | 16 - .../issues_configured_catalog.json | 166 - .../integration_tests/labels_catalog.json | 14 - .../projects_configured_catalog.json | 83 - .../integration_tests/users_catalog.json | 22 - .../workflows_configured_catalog.json | 44 - 10 files changed, 497 insertions(+), 12569 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/full_configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/inc_configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/issue_worklogs_configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/issues_configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/labels_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/projects_configured_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/users_catalog.json delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/workflows_configured_catalog.json diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index 82ba669ea4273..2e1ada3fa3ddb 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -22,33 +22,9 @@ acceptance_tests: disable_for_version: "0.3.0" basic_read: tests: - # TEST for the Labels stream - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/labels_catalog.json" - expect_records: - path: "integration_tests/expected_label_records.txt" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/issues_configured_catalog.json" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/issue_worklogs_configured_catalog.json" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/projects_configured_catalog.json" - empty_streams: - - name: "project_permission_schemes" - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/workflows_configured_catalog.json" - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" empty_streams: + - name: "issue_properties" + - name: "project_permission_schemes" - name: "screen_tab_fields" - - name: "sprint_issues" - - name: "sprints" - timeout_seconds: 1800 -# incremental: -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/inc_configured_catalog.json" -# future_state_path: "integration_tests/abnormal_state.json" -# Jira Source has a lot streams. It takes to long to sync them, which caused timeout error -# full_refresh: -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/full_configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json index 55f9d9b568323..2c71bed4f0a51 100644 --- a/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-jira/integration_tests/configured_catalog.json @@ -4,200 +4,634 @@ "stream": { "name": "application_roles", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["key"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "avatars", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "boards", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "board_issues", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh", + "incremental" + ], + "source_defined_cursor": true, + "default_cursor_field": [ + "updated" + ], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "sync_mode": "incremental", + "destination_sync_mode": "append" }, { "stream": { "name": "dashboards", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "filters", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "filter_sharing", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "groups", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["groupId"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issues", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh", + "incremental" + ], + "source_defined_cursor": true, + "default_cursor_field": [ + "updated" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_comments", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh", + "incremental" + ], + "source_defined_cursor": true, + "default_cursor_field": [ + "updated" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_fields", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_field_configurations", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_custom_field_contexts", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_link_types", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_navigator_settings", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_notification_schemes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_priorities", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_properties", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["key"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_remote_links", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_resolutions", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_security_schemes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_type_schemes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_type_screen_schemes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_votes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_watchers", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "issue_worklogs", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh", + "incremental" + ], + "source_defined_cursor": true, + "default_cursor_field": [ + "updated" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" }, { "stream": { "name": "jira_settings", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "labels", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["label"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "permissions", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["key"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "permission_schemes", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "projects", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_avatars", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_categories", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_components", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_email", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["projectId"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_permission_schemes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_types", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "project_versions", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" }, { "stream": { "name": "screens", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "screen_tabs", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "screen_tab_fields", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "screen_schemes", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "sprints", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "sprint_issues", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh", + "incremental" + ], + "source_defined_cursor": true, + "default_cursor_field": [ + "updated" + ], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "sync_mode": "incremental", + "destination_sync_mode": "append" }, { "stream": { "name": "time_tracking", "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["key"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" }, { "stream": { "name": "users", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["accountId"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "users_groups_detailed", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["accountId"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "workflows", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "workflow_schemes", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "workflow_statuses", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "workflow_status_categories", + "json_schema": {}, + "supported_sync_modes": [ + "full_refresh" + ], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" + "destination_sync_mode": "append" } ] } diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/full_configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/full_configured_catalog.json deleted file mode 100644 index 09a34e3041242..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/full_configured_catalog.json +++ /dev/null @@ -1,12085 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "application_roles", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { "type": "boolean", "description": "Deprecated." }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - }, - "additionalProperties": false, - "description": "Details of an application role." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "avatars", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "system": { - "type": "array", - "description": "A list of avatar details.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the avatar." - }, - "owner": { - "type": "string", - "description": "The owner of the avatar. For a system avatar the owner is null (and nothing is returned). For non-system avatars this is the appropriate identifier, such as the ID for a project or the account ID for a user.", - "readOnly": true - }, - "isSystemAvatar": { - "type": "boolean", - "description": "Whether the avatar is a system avatar.", - "readOnly": true - }, - "isSelected": { - "type": "boolean", - "description": "Whether the avatar is used in Jira. For example, shown as a project's avatar.", - "readOnly": true - }, - "isDeletable": { - "type": "boolean", - "description": "Whether the avatar can be deleted.", - "readOnly": true - }, - "fileName": { - "type": "string", - "description": "The file name of the avatar icon. Returned for system avatars.", - "readOnly": true - }, - "urls": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The list of avatar icon URLs.", - "readOnly": true - } - } - } - } - }, - "additionalProperties": false, - "description": "List of system avatars." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "dashboards", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "description": { "type": "string" }, - "id": { - "type": "string", - "description": "The ID of the dashboard.", - "readOnly": true - }, - "isFavourite": { - "type": "boolean", - "description": "Whether the dashboard is selected as a favorite by the user.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the dashboard.", - "readOnly": true - }, - "owner": { - "description": "The owner of the dashboard.", - "readOnly": true, - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "This property is deprecated in favor of `accountId` because of privacy changes. See the [migration guide](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details. \nThe key of the user." - }, - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri" - }, - "name": { - "type": "string", - "description": "This property is deprecated in favor of `accountId` because of privacy changes. See the [migration guide](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details. \nThe username of the user." - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value." - }, - "active": { - "type": "boolean", - "description": "Whether the user is active." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*." - }, - "avatarUrls": { - "description": "The avatars of the user.", - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the user's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the user's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the user's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the user's 48x48 pixel avatar.", - "format": "uri" - } - } - } - } - }, - "popularity": { - "type": "integer", - "description": "The number of users who have this dashboard as a favorite.", - "format": "int64", - "readOnly": true - }, - "rank": { - "type": "integer", - "description": "The rank of this dashboard.", - "format": "int32", - "readOnly": true - }, - "self": { - "type": "string", - "description": "The URL of these dashboard details.", - "format": "uri", - "readOnly": true - }, - "sharePermissions": { - "type": "array", - "description": "The details of any share permissions for the dashboard.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The unique identifier of the share permission.", - "format": "int64", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of share permission:\n\n * `group` Shared with a group. If set in a request, then specify `sharePermission.group` as well.\n * `project` Shared with a project. If set in a request, then specify `sharePermission.project` as well.\n * `projectRole` Share with a project role in a project. This value is not returned in responses. It is used in requests, where it needs to be specify with `projectId` and `projectRoleId`.\n * `global` Shared globally. If set in a request, no other `sharePermission` properties need to be specified.\n * `loggedin` Shared with all logged-in users. Note: This value is set in a request by specifying `authenticated` as the `type`.\n * `project-unknown` Shared with a project that the user does not have access to. Cannot be set in a request.", - "enum": [ - "group", - "project", - "projectRole", - "global", - "loggedin", - "authenticated", - "project-unknown" - ] - }, - "project": { - "description": "The project that the filter is shared with. This is similar to the project object returned by [Get project](#api-rest-api-3-project-projectIdOrKey-get) but it contains a subset of the properties, which are: `self`, `id`, `key`, `assigneeType`, `name`, `roles`, `avatarUrls`, `projectType`, `simplified`. \nFor a request, specify the `id` for the project.", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional project details in the response.", - "readOnly": true, - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the project details.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "A brief description of the project.", - "readOnly": true - }, - "lead": { - "description": "The username of the project lead.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "components": { - "type": "array", - "description": "List of the components contained in the project.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the component.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The unique identifier for the component.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The unique name for the component in the project. Required when creating a component. Optional when updating a component. The maximum length is 255 characters." - }, - "description": { - "type": "string", - "description": "The description for the component. Optional when creating or updating a component." - }, - "lead": { - "description": "The user details for the component's lead user.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": [ - "atlassian", - "app", - "customer", - "unknown" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { - "type": "boolean" - }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "leadUserName": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "leadAccountId": { - "maxLength": 128, - "type": "string", - "description": "The accountId of the component's lead user. The accountId uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*.", - "writeOnly": true - }, - "assigneeType": { - "type": "string", - "description": "The nominal user type used to determine the assignee for issues created with this component. See `realAssigneeType` for details on how the type of the user, and hence the user, assigned to issues is determined. Can take the following values:\n\n * `PROJECT_LEAD` the assignee to any issues created with this component is nominally the lead for the project the component is in.\n * `COMPONENT_LEAD` the assignee to any issues created with this component is nominally the lead for the component.\n * `UNASSIGNED` an assignee is not set for issues created with this component.\n * `PROJECT_DEFAULT` the assignee to any issues created with this component is nominally the default assignee for the project that the component is in.\n\nDefault value: `PROJECT_DEFAULT`. \nOptional when creating or updating a component.", - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "assignee": { - "description": "The details of the user associated with `assigneeType`, if any. See `realAssignee` for details of the user assigned to issues created with this component.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": [ - "atlassian", - "app", - "customer", - "unknown" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { - "type": "boolean" - }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "realAssigneeType": { - "type": "string", - "description": "The type of the assignee that is assigned to issues created with this component, when an assignee cannot be set from the `assigneeType`. For example, `assigneeType` is set to `COMPONENT_LEAD` but no component lead is set. This property is set to one of the following values:\n\n * `PROJECT_LEAD` when `assigneeType` is `PROJECT_LEAD` and the project lead has permission to be assigned issues in the project that the component is in.\n * `COMPONENT_LEAD` when `assignee`Type is `COMPONENT_LEAD` and the component lead has permission to be assigned issues in the project that the component is in.\n * `UNASSIGNED` when `assigneeType` is `UNASSIGNED` and Jira is configured to allow unassigned issues.\n * `PROJECT_DEFAULT` when none of the preceding cases are true.", - "readOnly": true, - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "realAssignee": { - "description": "The user assigned to issues created with this component, when `assigneeType` does not identify a valid assignee.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": [ - "atlassian", - "app", - "customer", - "unknown" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { - "type": "boolean" - }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "isAssigneeTypeValid": { - "type": "boolean", - "description": "Whether a user is associated with `assigneeType`. For example, if the `assigneeType` is set to `COMPONENT_LEAD` but the component lead is not set, then `false` is returned.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "The key of the project the component is assigned to. Required when creating a component. Can't be updated." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project the component is assigned to.", - "format": "int64", - "readOnly": true - } - } - } - }, - "issueTypes": { - "type": "array", - "description": "List of the issue types available in the project.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of these issue type details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the issue type.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue type.", - "readOnly": true - }, - "iconUrl": { - "type": "string", - "description": "The URL of the issue type's avatar.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue type.", - "readOnly": true - }, - "subtask": { - "type": "boolean", - "description": "Whether this issue type is used to create subtasks.", - "readOnly": true - }, - "avatarId": { - "type": "integer", - "description": "The ID of the issue type's avatar.", - "format": "int64", - "readOnly": true - }, - "entityId": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "hierarchyLevel": { - "type": "integer", - "description": "Hierarchy level of the issue type.", - "format": "int32", - "readOnly": true - }, - "scope": { - "description": "Details of the next-gen projects the issue type is available in.", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": [ - "software", - "service_desk", - "business" - ] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - } - } - } - }, - "url": { - "type": "string", - "description": "A link to information about this project, such as project documentation.", - "readOnly": true - }, - "email": { - "type": "string", - "description": "An email address associated with the project." - }, - "assigneeType": { - "type": "string", - "description": "The default assignee when creating issues for this project.", - "readOnly": true, - "enum": ["PROJECT_LEAD", "UNASSIGNED"] - }, - "versions": { - "type": "array", - "description": "The versions defined in the project. For more information, see [Create version](#api-rest-api-3-version-post).", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Use [expand](em>#expansion) to include additional information about version in the response. This parameter accepts a comma-separated list. Expand options include:\n\n * `operations` Returns the list of operations available for this version.\n * `issuesstatus` Returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.\n\nOptional for create and update.", - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the version.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the version.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the version. Optional when creating or updating a version." - }, - "name": { - "type": "string", - "description": "The unique name of the version. Required when creating a version. Optional when updating a version. The maximum length is 255 characters." - }, - "archived": { - "type": "boolean", - "description": "Indicates that the version is archived. Optional when creating or updating a version." - }, - "released": { - "type": "boolean", - "description": "Indicates that the version is released. If the version is released a request to release again is ignored. Not applicable when creating a version. Optional when updating a version." - }, - "startDate": { - "type": "string", - "description": "The start date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "releaseDate": { - "type": "string", - "description": "The release date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "overdue": { - "type": "boolean", - "description": "Indicates that the version is overdue.", - "readOnly": true - }, - "userStartDate": { - "type": "string", - "description": "The date on which work on this version is expected to start, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "userReleaseDate": { - "type": "string", - "description": "The date on which work on this version is expected to finish, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "Deprecated. Use `projectId`." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project to which this version is attached. Required when creating a version. Not applicable when updating a version.", - "format": "int64" - }, - "moveUnfixedIssuesTo": { - "type": "string", - "description": "The URL of the self link to the version to which all unfixed issues are moved when a version is released. Not applicable when creating a version. Optional when updating a version.", - "format": "uri" - }, - "operations": { - "type": "array", - "description": "If the expand option `operations` is used, returns the list of operations available for this version.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "styleClass": { "type": "string" }, - "iconClass": { "type": "string" }, - "label": { "type": "string" }, - "title": { "type": "string" }, - "href": { "type": "string" }, - "weight": { - "type": "integer", - "format": "int32" - } - } - } - }, - "issuesStatusForFixVersion": { - "description": "If the expand option `issuesstatus` is used, returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.", - "readOnly": true, - "type": "object", - "properties": { - "unmapped": { - "type": "integer", - "description": "Count of issues with a status other than *to do*, *in progress*, and *done*.", - "format": "int64", - "readOnly": true - }, - "toDo": { - "type": "integer", - "description": "Count of issues with status *to do*.", - "format": "int64", - "readOnly": true - }, - "inProgress": { - "type": "integer", - "description": "Count of issues with status *in progress*.", - "format": "int64", - "readOnly": true - }, - "done": { - "type": "integer", - "description": "Count of issues with status *done*.", - "format": "int64", - "readOnly": true - } - } - } - } - } - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "roles": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The name and self URL for each role defined in the project. For more information, see [Create project role](#api-rest-api-3-role-post).", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project category. Required on create, optional on update." - }, - "description": { - "type": "string", - "description": "The description of the project category. Required on create, optional on update." - } - } - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether the project is simplified.", - "readOnly": true - }, - "style": { - "type": "string", - "description": "The type of the project.", - "readOnly": true, - "enum": ["classic", "next-gen"] - }, - "favourite": { - "type": "boolean", - "description": "Whether the project is selected as a favorite." - }, - "isPrivate": { - "type": "boolean", - "description": "Whether the project is private.", - "readOnly": true - }, - "issueTypeHierarchy": { - "description": "The issue type hierarchy for the project", - "readOnly": true, - "type": "object", - "properties": { - "level": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "name": { "type": "string" }, - "aboveLevelId": { - "type": "integer", - "format": "int64" - }, - "belowLevelId": { - "type": "integer", - "format": "int64" - }, - "projectConfigurationId": { - "type": "integer", - "format": "int64" - }, - "level": { - "type": "integer", - "format": "int32" - }, - "issueTypeIds": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - }, - "externalUuid": { - "type": "string", - "format": "uuid" - }, - "globalHierarchyLevel": { - "type": "string", - "enum": ["SUBTASK", "BASE", "EPIC"] - } - } - } - } - } - }, - "permissions": { - "description": "User permissions on the project", - "readOnly": true, - "type": "object", - "properties": { - "canEdit": { - "type": "boolean", - "description": "Whether the logged user can edit the project.", - "readOnly": true - } - } - }, - "properties": { - "type": "object", - "additionalProperties": { "readOnly": true }, - "description": "Map of project properties", - "readOnly": true - }, - "uuid": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "insight": { - "description": "Insights about the project.", - "readOnly": true, - "type": "object", - "properties": { - "totalIssueCount": { - "type": "integer", - "description": "Total issue count.", - "format": "int64", - "readOnly": true - }, - "lastIssueUpdateTime": { - "type": "string", - "description": "The last issue update time.", - "format": "date-time", - "readOnly": true - } - } - }, - "deleted": { - "type": "boolean", - "description": "Whether the project is marked as deleted.", - "readOnly": true - }, - "retentionTillDate": { - "type": "string", - "description": "The date when the project is deleted permanently.", - "format": "date-time", - "readOnly": true - }, - "deletedDate": { - "type": "string", - "description": "The date when the project was marked as deleted.", - "format": "date-time", - "readOnly": true - }, - "deletedBy": { - "description": "The user who marked the project as deleted.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "archived": { - "type": "boolean", - "description": "Whether the project is archived.", - "readOnly": true - }, - "archivedDate": { - "type": "string", - "description": "The date when the project was archived.", - "format": "date-time", - "readOnly": true - }, - "archivedBy": { - "description": "The user who archived the project.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - } - } - }, - "role": { - "description": "The project role that the filter is shared with. \nFor a request, specify the `id` for the role. You must also specify the `project` object and `id` for the project that the role is in.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL the project role details.", - "format": "uri", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project role." - }, - "id": { - "type": "integer", - "description": "The ID of the project role.", - "format": "int64", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the project role.", - "readOnly": true - }, - "actors": { - "type": "array", - "description": "The list of users who act in this role.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the role actor.", - "format": "int64", - "readOnly": true - }, - "displayName": { - "type": "string", - "description": "The display name of the role actor. For users, depending on the user\u2019s privacy setting, this may return an alternative value for the user's name.", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of role actor.", - "readOnly": true, - "enum": [ - "atlassian-group-role-actor", - "atlassian-user-role-actor" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "avatarUrl": { - "type": "string", - "description": "The avatar of the role actor.", - "format": "uri", - "readOnly": true - }, - "actorUser": { - "readOnly": true, - "type": "object", - "properties": { - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Returns *unknown* if the record is deleted and corrupted, for example, as the result of a server import.", - "readOnly": true - } - } - }, - "actorGroup": { - "readOnly": true, - "type": "object", - "properties": { - "displayName": { - "type": "string", - "description": "The display name of the group." - }, - "name": { - "type": "string", - "description": "The name of the group" - } - } - } - } - } - }, - "scope": { - "description": "The scope of the role. Indicated for roles associated with [next-gen projects](https://confluence.atlassian.com/x/loMyO).", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "translatedName": { - "type": "string", - "description": "The translated name of the project role." - }, - "currentUserRole": { - "type": "boolean", - "description": "Whether the calling user is part of this role." - }, - "admin": { - "type": "boolean", - "description": "Whether this role is the admin role for the project.", - "readOnly": true - }, - "roleConfigurable": { - "type": "boolean", - "description": "Whether the roles are configurable for this project.", - "readOnly": true - }, - "default": { - "type": "boolean", - "description": "Whether this role is the default role for the project", - "readOnly": true - } - } - }, - "group": { - "description": "The group that the filter is shared with. For a request, specify the `name` property for the group.", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - } - } - }, - "view": { - "type": "string", - "description": "The URL of the dashboard.", - "readOnly": true - } - }, - "additionalProperties": false, - "description": "Details of a dashboard." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "filters", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the filter.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The unique identifier for the filter.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the filter. Must be unique." - }, - "description": { - "type": "string", - "description": "A description of the filter." - }, - "owner": { - "description": "The user who owns the filter. This is defaulted to the creator of the filter, however Jira administrators can change the owner of a shared filter in the admin settings.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "jql": { - "type": "string", - "description": "The JQL query for the filter. For example, *project = SSP AND issuetype = Bug*.", - "readOnly": true - }, - "viewUrl": { - "type": "string", - "description": "A URL to view the filter results in Jira, using the ID of the filter. For example, *https://your-domain.atlassian.net/issues/?filter=10100*.", - "format": "uri", - "readOnly": true - }, - "searchUrl": { - "type": "string", - "description": "A URL to view the filter results in Jira, using the [Search for issues using JQL](#api-rest-api-3-filter-search-get) operation with the filter's JQL string to return the filter results. For example, *https://your-domain.atlassian.net/rest/api/3/search?jql=project+%3D+SSP+AND+issuetype+%3D+Bug*.", - "format": "uri", - "readOnly": true - }, - "favourite": { - "type": "boolean", - "description": "Whether the filter is selected as a favorite by any users, not including the filter owner.", - "readOnly": true - }, - "favouritedCount": { - "type": "integer", - "description": "The count of how many users have selected this filter as a favorite, including the filter owner.", - "format": "int64", - "readOnly": true - }, - "sharePermissions": { - "type": "array", - "description": "The groups and projects that the filter is shared with. This can be specified when updating a filter, but not when creating a filter.", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The unique identifier of the share permission.", - "format": "int64", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of share permission:\n\n * `group` Shared with a group. If set in a request, then specify `sharePermission.group` as well.\n * `project` Shared with a project. If set in a request, then specify `sharePermission.project` as well.\n * `projectRole` Share with a project role in a project. This value is not returned in responses. It is used in requests, where it needs to be specify with `projectId` and `projectRoleId`.\n * `global` Shared globally. If set in a request, no other `sharePermission` properties need to be specified.\n * `loggedin` Shared with all logged-in users. Note: This value is set in a request by specifying `authenticated` as the `type`.\n * `project-unknown` Shared with a project that the user does not have access to. Cannot be set in a request.", - "enum": [ - "group", - "project", - "projectRole", - "global", - "loggedin", - "authenticated", - "project-unknown" - ] - }, - "project": { - "description": "The project that the filter is shared with. This is similar to the project object returned by [Get project](#api-rest-api-3-project-projectIdOrKey-get) but it contains a subset of the properties, which are: `self`, `id`, `key`, `assigneeType`, `name`, `roles`, `avatarUrls`, `projectType`, `simplified`. \nFor a request, specify the `id` for the project.", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional project details in the response.", - "readOnly": true, - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the project details.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "A brief description of the project.", - "readOnly": true - }, - "lead": { - "description": "The username of the project lead.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "components": { - "type": "array", - "description": "List of the components contained in the project.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the component.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The unique identifier for the component.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The unique name for the component in the project. Required when creating a component. Optional when updating a component. The maximum length is 255 characters." - }, - "description": { - "type": "string", - "description": "The description for the component. Optional when creating or updating a component." - }, - "lead": { - "description": "The user details for the component's lead user.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": [ - "atlassian", - "app", - "customer", - "unknown" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { - "type": "boolean" - }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "leadUserName": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "leadAccountId": { - "maxLength": 128, - "type": "string", - "description": "The accountId of the component's lead user. The accountId uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*.", - "writeOnly": true - }, - "assigneeType": { - "type": "string", - "description": "The nominal user type used to determine the assignee for issues created with this component. See `realAssigneeType` for details on how the type of the user, and hence the user, assigned to issues is determined. Can take the following values:\n\n * `PROJECT_LEAD` the assignee to any issues created with this component is nominally the lead for the project the component is in.\n * `COMPONENT_LEAD` the assignee to any issues created with this component is nominally the lead for the component.\n * `UNASSIGNED` an assignee is not set for issues created with this component.\n * `PROJECT_DEFAULT` the assignee to any issues created with this component is nominally the default assignee for the project that the component is in.\n\nDefault value: `PROJECT_DEFAULT`. \nOptional when creating or updating a component.", - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "assignee": { - "description": "The details of the user associated with `assigneeType`, if any. See `realAssignee` for details of the user assigned to issues created with this component.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": [ - "atlassian", - "app", - "customer", - "unknown" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { - "type": "boolean" - }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "realAssigneeType": { - "type": "string", - "description": "The type of the assignee that is assigned to issues created with this component, when an assignee cannot be set from the `assigneeType`. For example, `assigneeType` is set to `COMPONENT_LEAD` but no component lead is set. This property is set to one of the following values:\n\n * `PROJECT_LEAD` when `assigneeType` is `PROJECT_LEAD` and the project lead has permission to be assigned issues in the project that the component is in.\n * `COMPONENT_LEAD` when `assignee`Type is `COMPONENT_LEAD` and the component lead has permission to be assigned issues in the project that the component is in.\n * `UNASSIGNED` when `assigneeType` is `UNASSIGNED` and Jira is configured to allow unassigned issues.\n * `PROJECT_DEFAULT` when none of the preceding cases are true.", - "readOnly": true, - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "realAssignee": { - "description": "The user assigned to issues created with this component, when `assigneeType` does not identify a valid assignee.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": [ - "atlassian", - "app", - "customer", - "unknown" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { - "type": "boolean" - }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "isAssigneeTypeValid": { - "type": "boolean", - "description": "Whether a user is associated with `assigneeType`. For example, if the `assigneeType` is set to `COMPONENT_LEAD` but the component lead is not set, then `false` is returned.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "The key of the project the component is assigned to. Required when creating a component. Can't be updated." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project the component is assigned to.", - "format": "int64", - "readOnly": true - } - } - } - }, - "issueTypes": { - "type": "array", - "description": "List of the issue types available in the project.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of these issue type details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the issue type.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue type.", - "readOnly": true - }, - "iconUrl": { - "type": "string", - "description": "The URL of the issue type's avatar.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue type.", - "readOnly": true - }, - "subtask": { - "type": "boolean", - "description": "Whether this issue type is used to create subtasks.", - "readOnly": true - }, - "avatarId": { - "type": "integer", - "description": "The ID of the issue type's avatar.", - "format": "int64", - "readOnly": true - }, - "entityId": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "hierarchyLevel": { - "type": "integer", - "description": "Hierarchy level of the issue type.", - "format": "int32", - "readOnly": true - }, - "scope": { - "description": "Details of the next-gen projects the issue type is available in.", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": [ - "software", - "service_desk", - "business" - ] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - } - } - } - }, - "url": { - "type": "string", - "description": "A link to information about this project, such as project documentation.", - "readOnly": true - }, - "email": { - "type": "string", - "description": "An email address associated with the project." - }, - "assigneeType": { - "type": "string", - "description": "The default assignee when creating issues for this project.", - "readOnly": true, - "enum": ["PROJECT_LEAD", "UNASSIGNED"] - }, - "versions": { - "type": "array", - "description": "The versions defined in the project. For more information, see [Create version](#api-rest-api-3-version-post).", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Use [expand](em>#expansion) to include additional information about version in the response. This parameter accepts a comma-separated list. Expand options include:\n\n * `operations` Returns the list of operations available for this version.\n * `issuesstatus` Returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.\n\nOptional for create and update.", - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the version.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the version.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the version. Optional when creating or updating a version." - }, - "name": { - "type": "string", - "description": "The unique name of the version. Required when creating a version. Optional when updating a version. The maximum length is 255 characters." - }, - "archived": { - "type": "boolean", - "description": "Indicates that the version is archived. Optional when creating or updating a version." - }, - "released": { - "type": "boolean", - "description": "Indicates that the version is released. If the version is released a request to release again is ignored. Not applicable when creating a version. Optional when updating a version." - }, - "startDate": { - "type": "string", - "description": "The start date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "releaseDate": { - "type": "string", - "description": "The release date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "overdue": { - "type": "boolean", - "description": "Indicates that the version is overdue.", - "readOnly": true - }, - "userStartDate": { - "type": "string", - "description": "The date on which work on this version is expected to start, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "userReleaseDate": { - "type": "string", - "description": "The date on which work on this version is expected to finish, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "Deprecated. Use `projectId`." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project to which this version is attached. Required when creating a version. Not applicable when updating a version.", - "format": "int64" - }, - "moveUnfixedIssuesTo": { - "type": "string", - "description": "The URL of the self link to the version to which all unfixed issues are moved when a version is released. Not applicable when creating a version. Optional when updating a version.", - "format": "uri" - }, - "operations": { - "type": "array", - "description": "If the expand option `operations` is used, returns the list of operations available for this version.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "styleClass": { "type": "string" }, - "iconClass": { "type": "string" }, - "label": { "type": "string" }, - "title": { "type": "string" }, - "href": { "type": "string" }, - "weight": { - "type": "integer", - "format": "int32" - } - } - } - }, - "issuesStatusForFixVersion": { - "description": "If the expand option `issuesstatus` is used, returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.", - "readOnly": true, - "type": "object", - "properties": { - "unmapped": { - "type": "integer", - "description": "Count of issues with a status other than *to do*, *in progress*, and *done*.", - "format": "int64", - "readOnly": true - }, - "toDo": { - "type": "integer", - "description": "Count of issues with status *to do*.", - "format": "int64", - "readOnly": true - }, - "inProgress": { - "type": "integer", - "description": "Count of issues with status *in progress*.", - "format": "int64", - "readOnly": true - }, - "done": { - "type": "integer", - "description": "Count of issues with status *done*.", - "format": "int64", - "readOnly": true - } - } - } - } - } - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "roles": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The name and self URL for each role defined in the project. For more information, see [Create project role](#api-rest-api-3-role-post).", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project category. Required on create, optional on update." - }, - "description": { - "type": "string", - "description": "The description of the project category. Required on create, optional on update." - } - } - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether the project is simplified.", - "readOnly": true - }, - "style": { - "type": "string", - "description": "The type of the project.", - "readOnly": true, - "enum": ["classic", "next-gen"] - }, - "favourite": { - "type": "boolean", - "description": "Whether the project is selected as a favorite." - }, - "isPrivate": { - "type": "boolean", - "description": "Whether the project is private.", - "readOnly": true - }, - "issueTypeHierarchy": { - "description": "The issue type hierarchy for the project", - "readOnly": true, - "type": "object", - "properties": { - "level": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "name": { "type": "string" }, - "aboveLevelId": { - "type": "integer", - "format": "int64" - }, - "belowLevelId": { - "type": "integer", - "format": "int64" - }, - "projectConfigurationId": { - "type": "integer", - "format": "int64" - }, - "level": { - "type": "integer", - "format": "int32" - }, - "issueTypeIds": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - }, - "externalUuid": { - "type": "string", - "format": "uuid" - }, - "globalHierarchyLevel": { - "type": "string", - "enum": ["SUBTASK", "BASE", "EPIC"] - } - } - } - } - } - }, - "permissions": { - "description": "User permissions on the project", - "readOnly": true, - "type": "object", - "properties": { - "canEdit": { - "type": "boolean", - "description": "Whether the logged user can edit the project.", - "readOnly": true - } - } - }, - "properties": { - "type": "object", - "additionalProperties": { "readOnly": true }, - "description": "Map of project properties", - "readOnly": true - }, - "uuid": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "insight": { - "description": "Insights about the project.", - "readOnly": true, - "type": "object", - "properties": { - "totalIssueCount": { - "type": "integer", - "description": "Total issue count.", - "format": "int64", - "readOnly": true - }, - "lastIssueUpdateTime": { - "type": "string", - "description": "The last issue update time.", - "format": "date-time", - "readOnly": true - } - } - }, - "deleted": { - "type": "boolean", - "description": "Whether the project is marked as deleted.", - "readOnly": true - }, - "retentionTillDate": { - "type": "string", - "description": "The date when the project is deleted permanently.", - "format": "date-time", - "readOnly": true - }, - "deletedDate": { - "type": "string", - "description": "The date when the project was marked as deleted.", - "format": "date-time", - "readOnly": true - }, - "deletedBy": { - "description": "The user who marked the project as deleted.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "archived": { - "type": "boolean", - "description": "Whether the project is archived.", - "readOnly": true - }, - "archivedDate": { - "type": "string", - "description": "The date when the project was archived.", - "format": "date-time", - "readOnly": true - }, - "archivedBy": { - "description": "The user who archived the project.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - } - } - }, - "role": { - "description": "The project role that the filter is shared with. \nFor a request, specify the `id` for the role. You must also specify the `project` object and `id` for the project that the role is in.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL the project role details.", - "format": "uri", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project role." - }, - "id": { - "type": "integer", - "description": "The ID of the project role.", - "format": "int64", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the project role.", - "readOnly": true - }, - "actors": { - "type": "array", - "description": "The list of users who act in this role.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the role actor.", - "format": "int64", - "readOnly": true - }, - "displayName": { - "type": "string", - "description": "The display name of the role actor. For users, depending on the user\u2019s privacy setting, this may return an alternative value for the user's name.", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of role actor.", - "readOnly": true, - "enum": [ - "atlassian-group-role-actor", - "atlassian-user-role-actor" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "avatarUrl": { - "type": "string", - "description": "The avatar of the role actor.", - "format": "uri", - "readOnly": true - }, - "actorUser": { - "readOnly": true, - "type": "object", - "properties": { - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Returns *unknown* if the record is deleted and corrupted, for example, as the result of a server import.", - "readOnly": true - } - } - }, - "actorGroup": { - "readOnly": true, - "type": "object", - "properties": { - "displayName": { - "type": "string", - "description": "The display name of the group." - }, - "name": { - "type": "string", - "description": "The name of the group" - } - } - } - } - } - }, - "scope": { - "description": "The scope of the role. Indicated for roles associated with [next-gen projects](https://confluence.atlassian.com/x/loMyO).", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "translatedName": { - "type": "string", - "description": "The translated name of the project role." - }, - "currentUserRole": { - "type": "boolean", - "description": "Whether the calling user is part of this role." - }, - "admin": { - "type": "boolean", - "description": "Whether this role is the admin role for the project.", - "readOnly": true - }, - "roleConfigurable": { - "type": "boolean", - "description": "Whether the roles are configurable for this project.", - "readOnly": true - }, - "default": { - "type": "boolean", - "description": "Whether this role is the default role for the project", - "readOnly": true - } - } - }, - "group": { - "description": "The group that the filter is shared with. For a request, specify the `name` property for the group.", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - } - } - }, - "subscriptions": { - "type": "array", - "description": "The users that are subscribed to the filter.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the filter subscription.", - "format": "int64", - "readOnly": true - }, - "user": { - "description": "The user subscribing to filter.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "group": { - "description": "The group subscribing to filter.", - "readOnly": true, - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - } - } - } - }, - "additionalProperties": false, - "description": "Details of a filter." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "filter_sharing", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The unique identifier of the share permission.", - "format": "int64", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of share permission:\n\n * `group` Shared with a group. If set in a request, then specify `sharePermission.group` as well.\n * `project` Shared with a project. If set in a request, then specify `sharePermission.project` as well.\n * `projectRole` Share with a project role in a project. This value is not returned in responses. It is used in requests, where it needs to be specify with `projectId` and `projectRoleId`.\n * `global` Shared globally. If set in a request, no other `sharePermission` properties need to be specified.\n * `loggedin` Shared with all logged-in users. Note: This value is set in a request by specifying `authenticated` as the `type`.\n * `project-unknown` Shared with a project that the user does not have access to. Cannot be set in a request.", - "enum": [ - "group", - "project", - "projectRole", - "global", - "loggedin", - "authenticated", - "project-unknown" - ] - }, - "project": { - "description": "The project that the filter is shared with. This is similar to the project object returned by [Get project](#api-rest-api-3-project-projectIdOrKey-get) but it contains a subset of the properties, which are: `self`, `id`, `key`, `assigneeType`, `name`, `roles`, `avatarUrls`, `projectType`, `simplified`. \nFor a request, specify the `id` for the project.", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional project details in the response.", - "readOnly": true, - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the project details.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "A brief description of the project.", - "readOnly": true - }, - "lead": { - "description": "The username of the project lead.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "components": { - "type": "array", - "description": "List of the components contained in the project.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the component.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The unique identifier for the component.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The unique name for the component in the project. Required when creating a component. Optional when updating a component. The maximum length is 255 characters." - }, - "description": { - "type": "string", - "description": "The description for the component. Optional when creating or updating a component." - }, - "lead": { - "description": "The user details for the component's lead user.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "leadUserName": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "leadAccountId": { - "maxLength": 128, - "type": "string", - "description": "The accountId of the component's lead user. The accountId uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*.", - "writeOnly": true - }, - "assigneeType": { - "type": "string", - "description": "The nominal user type used to determine the assignee for issues created with this component. See `realAssigneeType` for details on how the type of the user, and hence the user, assigned to issues is determined. Can take the following values:\n\n * `PROJECT_LEAD` the assignee to any issues created with this component is nominally the lead for the project the component is in.\n * `COMPONENT_LEAD` the assignee to any issues created with this component is nominally the lead for the component.\n * `UNASSIGNED` an assignee is not set for issues created with this component.\n * `PROJECT_DEFAULT` the assignee to any issues created with this component is nominally the default assignee for the project that the component is in.\n\nDefault value: `PROJECT_DEFAULT`. \nOptional when creating or updating a component.", - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "assignee": { - "description": "The details of the user associated with `assigneeType`, if any. See `realAssignee` for details of the user assigned to issues created with this component.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "realAssigneeType": { - "type": "string", - "description": "The type of the assignee that is assigned to issues created with this component, when an assignee cannot be set from the `assigneeType`. For example, `assigneeType` is set to `COMPONENT_LEAD` but no component lead is set. This property is set to one of the following values:\n\n * `PROJECT_LEAD` when `assigneeType` is `PROJECT_LEAD` and the project lead has permission to be assigned issues in the project that the component is in.\n * `COMPONENT_LEAD` when `assignee`Type is `COMPONENT_LEAD` and the component lead has permission to be assigned issues in the project that the component is in.\n * `UNASSIGNED` when `assigneeType` is `UNASSIGNED` and Jira is configured to allow unassigned issues.\n * `PROJECT_DEFAULT` when none of the preceding cases are true.", - "readOnly": true, - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "realAssignee": { - "description": "The user assigned to issues created with this component, when `assigneeType` does not identify a valid assignee.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { - "name": "max-results", - "attribute": true - } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "isAssigneeTypeValid": { - "type": "boolean", - "description": "Whether a user is associated with `assigneeType`. For example, if the `assigneeType` is set to `COMPONENT_LEAD` but the component lead is not set, then `false` is returned.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "The key of the project the component is assigned to. Required when creating a component. Can't be updated." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project the component is assigned to.", - "format": "int64", - "readOnly": true - } - } - } - }, - "issueTypes": { - "type": "array", - "description": "List of the issue types available in the project.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of these issue type details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the issue type.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue type.", - "readOnly": true - }, - "iconUrl": { - "type": "string", - "description": "The URL of the issue type's avatar.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue type.", - "readOnly": true - }, - "subtask": { - "type": "boolean", - "description": "Whether this issue type is used to create subtasks.", - "readOnly": true - }, - "avatarId": { - "type": "integer", - "description": "The ID of the issue type's avatar.", - "format": "int64", - "readOnly": true - }, - "entityId": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "hierarchyLevel": { - "type": "integer", - "description": "Hierarchy level of the issue type.", - "format": "int32", - "readOnly": true - }, - "scope": { - "description": "Details of the next-gen projects the issue type is available in.", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - } - } - } - }, - "url": { - "type": "string", - "description": "A link to information about this project, such as project documentation.", - "readOnly": true - }, - "email": { - "type": "string", - "description": "An email address associated with the project." - }, - "assigneeType": { - "type": "string", - "description": "The default assignee when creating issues for this project.", - "readOnly": true, - "enum": ["PROJECT_LEAD", "UNASSIGNED"] - }, - "versions": { - "type": "array", - "description": "The versions defined in the project. For more information, see [Create version](#api-rest-api-3-version-post).", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Use [expand](em>#expansion) to include additional information about version in the response. This parameter accepts a comma-separated list. Expand options include:\n\n * `operations` Returns the list of operations available for this version.\n * `issuesstatus` Returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.\n\nOptional for create and update.", - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the version.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the version.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the version. Optional when creating or updating a version." - }, - "name": { - "type": "string", - "description": "The unique name of the version. Required when creating a version. Optional when updating a version. The maximum length is 255 characters." - }, - "archived": { - "type": "boolean", - "description": "Indicates that the version is archived. Optional when creating or updating a version." - }, - "released": { - "type": "boolean", - "description": "Indicates that the version is released. If the version is released a request to release again is ignored. Not applicable when creating a version. Optional when updating a version." - }, - "startDate": { - "type": "string", - "description": "The start date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "releaseDate": { - "type": "string", - "description": "The release date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "overdue": { - "type": "boolean", - "description": "Indicates that the version is overdue.", - "readOnly": true - }, - "userStartDate": { - "type": "string", - "description": "The date on which work on this version is expected to start, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "userReleaseDate": { - "type": "string", - "description": "The date on which work on this version is expected to finish, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "Deprecated. Use `projectId`." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project to which this version is attached. Required when creating a version. Not applicable when updating a version.", - "format": "int64" - }, - "moveUnfixedIssuesTo": { - "type": "string", - "description": "The URL of the self link to the version to which all unfixed issues are moved when a version is released. Not applicable when creating a version. Optional when updating a version.", - "format": "uri" - }, - "operations": { - "type": "array", - "description": "If the expand option `operations` is used, returns the list of operations available for this version.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "styleClass": { "type": "string" }, - "iconClass": { "type": "string" }, - "label": { "type": "string" }, - "title": { "type": "string" }, - "href": { "type": "string" }, - "weight": { "type": "integer", "format": "int32" } - } - } - }, - "issuesStatusForFixVersion": { - "description": "If the expand option `issuesstatus` is used, returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.", - "readOnly": true, - "type": "object", - "properties": { - "unmapped": { - "type": "integer", - "description": "Count of issues with a status other than *to do*, *in progress*, and *done*.", - "format": "int64", - "readOnly": true - }, - "toDo": { - "type": "integer", - "description": "Count of issues with status *to do*.", - "format": "int64", - "readOnly": true - }, - "inProgress": { - "type": "integer", - "description": "Count of issues with status *in progress*.", - "format": "int64", - "readOnly": true - }, - "done": { - "type": "integer", - "description": "Count of issues with status *done*.", - "format": "int64", - "readOnly": true - } - } - } - } - } - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "roles": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The name and self URL for each role defined in the project. For more information, see [Create project role](#api-rest-api-3-role-post).", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project category. Required on create, optional on update." - }, - "description": { - "type": "string", - "description": "The description of the project category. Required on create, optional on update." - } - } - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether the project is simplified.", - "readOnly": true - }, - "style": { - "type": "string", - "description": "The type of the project.", - "readOnly": true, - "enum": ["classic", "next-gen"] - }, - "favourite": { - "type": "boolean", - "description": "Whether the project is selected as a favorite." - }, - "isPrivate": { - "type": "boolean", - "description": "Whether the project is private.", - "readOnly": true - }, - "issueTypeHierarchy": { - "description": "The issue type hierarchy for the project", - "readOnly": true, - "type": "object", - "properties": { - "level": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "name": { "type": "string" }, - "aboveLevelId": { - "type": "integer", - "format": "int64" - }, - "belowLevelId": { - "type": "integer", - "format": "int64" - }, - "projectConfigurationId": { - "type": "integer", - "format": "int64" - }, - "level": { "type": "integer", "format": "int32" }, - "issueTypeIds": { - "type": "array", - "items": { "type": "integer", "format": "int64" } - }, - "externalUuid": { - "type": "string", - "format": "uuid" - }, - "globalHierarchyLevel": { - "type": "string", - "enum": ["SUBTASK", "BASE", "EPIC"] - } - } - } - } - } - }, - "permissions": { - "description": "User permissions on the project", - "readOnly": true, - "type": "object", - "properties": { - "canEdit": { - "type": "boolean", - "description": "Whether the logged user can edit the project.", - "readOnly": true - } - } - }, - "properties": { - "type": "object", - "additionalProperties": { "readOnly": true }, - "description": "Map of project properties", - "readOnly": true - }, - "uuid": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "insight": { - "description": "Insights about the project.", - "readOnly": true, - "type": "object", - "properties": { - "totalIssueCount": { - "type": "integer", - "description": "Total issue count.", - "format": "int64", - "readOnly": true - }, - "lastIssueUpdateTime": { - "type": "string", - "description": "The last issue update time.", - "format": "date-time", - "readOnly": true - } - } - }, - "deleted": { - "type": "boolean", - "description": "Whether the project is marked as deleted.", - "readOnly": true - }, - "retentionTillDate": { - "type": "string", - "description": "The date when the project is deleted permanently.", - "format": "date-time", - "readOnly": true - }, - "deletedDate": { - "type": "string", - "description": "The date when the project was marked as deleted.", - "format": "date-time", - "readOnly": true - }, - "deletedBy": { - "description": "The user who marked the project as deleted.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "archived": { - "type": "boolean", - "description": "Whether the project is archived.", - "readOnly": true - }, - "archivedDate": { - "type": "string", - "description": "The date when the project was archived.", - "format": "date-time", - "readOnly": true - }, - "archivedBy": { - "description": "The user who archived the project.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - } - } - }, - "role": { - "description": "The project role that the filter is shared with. \nFor a request, specify the `id` for the role. You must also specify the `project` object and `id` for the project that the role is in.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL the project role details.", - "format": "uri", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project role." - }, - "id": { - "type": "integer", - "description": "The ID of the project role.", - "format": "int64", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the project role.", - "readOnly": true - }, - "actors": { - "type": "array", - "description": "The list of users who act in this role.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the role actor.", - "format": "int64", - "readOnly": true - }, - "displayName": { - "type": "string", - "description": "The display name of the role actor. For users, depending on the user\u2019s privacy setting, this may return an alternative value for the user's name.", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of role actor.", - "readOnly": true, - "enum": [ - "atlassian-group-role-actor", - "atlassian-user-role-actor" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "avatarUrl": { - "type": "string", - "description": "The avatar of the role actor.", - "format": "uri", - "readOnly": true - }, - "actorUser": { - "readOnly": true, - "type": "object", - "properties": { - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Returns *unknown* if the record is deleted and corrupted, for example, as the result of a server import.", - "readOnly": true - } - } - }, - "actorGroup": { - "readOnly": true, - "type": "object", - "properties": { - "displayName": { - "type": "string", - "description": "The display name of the group." - }, - "name": { - "type": "string", - "description": "The name of the group" - } - } - } - } - } - }, - "scope": { - "description": "The scope of the role. Indicated for roles associated with [next-gen projects](https://confluence.atlassian.com/x/loMyO).", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "translatedName": { - "type": "string", - "description": "The translated name of the project role." - }, - "currentUserRole": { - "type": "boolean", - "description": "Whether the calling user is part of this role." - }, - "admin": { - "type": "boolean", - "description": "Whether this role is the admin role for the project.", - "readOnly": true - }, - "roleConfigurable": { - "type": "boolean", - "description": "Whether the roles are configurable for this project.", - "readOnly": true - }, - "default": { - "type": "boolean", - "description": "Whether this role is the default role for the project", - "readOnly": true - } - } - }, - "group": { - "description": "The group that the filter is shared with. For a request, specify the `name` property for the group.", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "additionalProperties": false, - "description": "Details of a share permission for the filter." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "groups", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "header": { - "type": "string", - "description": "Header text indicating the number of groups in the response and the total number of groups found in the search." - }, - "total": { - "type": "integer", - "description": "The total number of groups found in the search.", - "format": "int32" - }, - "groups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the group." - }, - "html": { - "type": "string", - "description": "The group name with the matched query string highlighted with the HTML bold tag." - }, - "labels": { - "type": "array", - "items": { - "type": "object", - "properties": { - "text": { - "type": "string", - "description": "The group label name." - }, - "title": { - "type": "string", - "description": "The title of the group label." - }, - "type": { - "type": "string", - "description": "The type of the group label.", - "enum": ["ADMIN", "SINGLE", "MULTIPLE"] - } - } - } - }, - "groupId": { - "type": "string", - "description": "The ID of the group, if available, which uniquely identifies the group across all Atlassian products. For example, *952d12c3-5b5b-4d04-bb32-44d383afc4b2*." - } - } - } - } - }, - "additionalProperties": false, - "description": "The list of groups found in a search, including header text (Showing X of Y matching groups) and total of matched groups." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issues", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional issue details in the response.", - "readOnly": true, - "xml": { - "attribute": true - } - }, - "id": { - "type": "string", - "description": "The ID of the issue.", - "readOnly": true - }, - "self": { - "type": "string", - "description": "The URL of the issue details.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "The key of the issue.", - "readOnly": true - }, - "renderedFields": { - "type": "object", - "additionalProperties": { - "readOnly": true - }, - "description": "The rendered value of each field present on the issue.", - "readOnly": true - }, - "properties": { - "type": "object", - "additionalProperties": { - "readOnly": true - }, - "description": "Details of the issue properties identified in the request.", - "readOnly": true - }, - "names": { - "type": "object", - "additionalProperties": { - "type": "string", - "readOnly": true - }, - "description": "The ID and name of each field present on the issue.", - "readOnly": true - }, - "schema": { - "type": "object", - "description": "The schema describing each field present on the issue.", - "readOnly": true - }, - "transitions": { - "type": "array", - "description": "The transitions that can be performed on the issue.", - "readOnly": true - }, - "operations": { - "description": "The operations that can be performed on the issue.", - "readOnly": true - }, - "editmeta": { - "description": "The metadata for the fields on the issue that can be amended.", - "readOnly": true - }, - "changelog": { - "description": "Details of changelogs associated with the issue.", - "readOnly": true - }, - "versionedRepresentations": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "readOnly": true - }, - "readOnly": true - }, - "description": "The versions of each field on the issue.", - "readOnly": true - }, - "fieldsToInclude": { - "type": "object" - }, - "fields": { - "type": "object", - "additionalProperties": {} - } - }, - "additionalProperties": false - }, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["updated"] - }, - "sync_mode": "incremental", - "cursor_field": ["updated"], - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "issue_comments", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the comment.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the comment.", - "readOnly": true - }, - "author": { - "description": "The ID of the user who created the comment.", - "readOnly": true - }, - "body": { - "description": "The comment text in [Atlassian Document Format](https://developer.atlassian.com/cloud/jira/platform/apis/document/structure/)." - }, - "renderedBody": { - "type": "string", - "description": "The rendered version of the comment.", - "readOnly": true - }, - "updateAuthor": { - "description": "The ID of the user who updated the comment last.", - "readOnly": true - }, - "created": { - "type": "string", - "description": "The date and time at which the comment was created.", - "format": "date-time", - "readOnly": true - }, - "updated": { - "type": "string", - "description": "The date and time at which the comment was updated last.", - "format": "date-time", - "readOnly": true - }, - "visibility": { - "description": "The group or role to which this comment is visible. Optional on create and update." - }, - "jsdPublic": { - "type": "boolean", - "description": "Whether the comment is visible in Jira Service Desk. Defaults to true when comments are created in the Jira Cloud Platform. This includes when the site doesn't use Jira Service Desk or the project isn't a Jira Service Desk project and, therefore, there is no Jira Service Desk for the issue to be visible on. To create a comment with its visibility in Jira Service Desk set to false, use the Jira Service Desk REST API [Create request comment](https://developer.atlassian.com/cloud/jira/service-desk/rest/#api-rest-servicedeskapi-request-issueIdOrKey-comment-post) operation.", - "readOnly": true - }, - "properties": { - "type": "array", - "description": "A list of comment properties. Optional on create and update." - } - }, - "additionalProperties": true, - "description": "A comment." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_fields", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { "type": "string", "description": "The ID of the field." }, - "key": { "type": "string", "description": "The key of the field." }, - "name": { - "type": "string", - "description": "The name of the field." - }, - "custom": { - "type": "boolean", - "description": "Whether the field is a custom field." - }, - "orderable": { - "type": "boolean", - "description": "Whether the content of the field can be used to order lists." - }, - "navigable": { - "type": "boolean", - "description": "Whether the field can be used as a column on the issue navigator." - }, - "searchable": { - "type": "boolean", - "description": "Whether the content of the field can be searched." - }, - "clauseNames": { - "uniqueItems": true, - "type": "array", - "description": "The names that can be used to reference the field in an advanced search. For more information, see [Advanced searching - fields reference](https://confluence.atlassian.com/x/gwORLQ).", - "items": { "type": "string" } - }, - "scope": { - "description": "The scope of the field.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "schema": { - "description": "The data schema for the field.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The data type of the field.", - "readOnly": true - }, - "items": { - "type": "string", - "description": "When the data type is an array, the name of the field items within the array.", - "readOnly": true - }, - "system": { - "type": "string", - "description": "If the field is a system field, the name of the field.", - "readOnly": true - }, - "custom": { - "type": "string", - "description": "If the field is a custom field, the URI of the field.", - "readOnly": true - }, - "customId": { - "type": "integer", - "description": "If the field is a custom field, the custom ID of the field.", - "format": "int64", - "readOnly": true - }, - "configuration": { - "type": "object", - "additionalProperties": { "readOnly": true }, - "description": "If the field is a custom field, the configuration of the field.", - "readOnly": true - } - } - } - }, - "additionalProperties": false, - "description": "Details about a field." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_field_configurations", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the field configuration.", - "format": "int64" - }, - "name": { - "type": "string", - "description": "The name of the field configuration." - }, - "description": { - "type": "string", - "description": "The description of the field configuration." - }, - "isDefault": { - "type": "boolean", - "description": "Whether the field configuration is the default." - } - }, - "additionalProperties": false, - "description": "Details of a field configuration." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_custom_field_contexts", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { "type": "string", "description": "The ID of the context." }, - "name": { - "type": "string", - "description": "The name of the context." - }, - "description": { - "type": "string", - "description": "The description of the context." - }, - "isGlobalContext": { - "type": "boolean", - "description": "Whether the context is global." - }, - "isAnyIssueType": { - "type": "boolean", - "description": "Whether the context apply to all issue types." - } - }, - "additionalProperties": false, - "description": "The details of a custom field context." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_link_types", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "issueLinkTypes": { - "type": "array", - "description": "The issue link type bean.", - "readOnly": true, - "xml": { "name": "issueLinkTypes" }, - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the issue link type and is used as follows:\n\n * In the [ issueLink](#api-rest-api-3-issueLink-post) resource it is the type of issue link. Required on create when `name` isn't provided. Otherwise, read only.\n * In the [ issueLinkType](#api-rest-api-3-issueLinkType-post) resource it is read only." - }, - "name": { - "type": "string", - "description": "The name of the issue link type and is used as follows:\n\n * In the [ issueLink](#api-rest-api-3-issueLink-post) resource it is the type of issue link. Required on create when `id` isn't provided. Otherwise, read only.\n * In the [ issueLinkType](#api-rest-api-3-issueLinkType-post) resource it is required on create and optional on update. Otherwise, read only." - }, - "inward": { - "type": "string", - "description": "The description of the issue link type inward link and is used as follows:\n\n * In the [ issueLink](#api-rest-api-3-issueLink-post) resource it is read only.\n * In the [ issueLinkType](#api-rest-api-3-issueLinkType-post) resource it is required on create and optional on update. Otherwise, read only." - }, - "outward": { - "type": "string", - "description": "The description of the issue link type outward link and is used as follows:\n\n * In the [ issueLink](#api-rest-api-3-issueLink-post) resource it is read only.\n * In the [ issueLinkType](#api-rest-api-3-issueLinkType-post) resource it is required on create and optional on update. Otherwise, read only." - }, - "self": { - "type": "string", - "description": "The URL of the issue link type. Read only.", - "format": "uri", - "readOnly": true - } - } - } - } - }, - "additionalProperties": false, - "description": "A list of issue link type beans." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_navigator_settings", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "label": { - "type": "string", - "description": "The issue navigator column label." - }, - "value": { - "type": "string", - "description": "The issue navigator column value." - } - }, - "additionalProperties": false, - "description": "Details of an issue navigator column item." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_notification_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional notification scheme details in the response." - }, - "id": { - "type": "integer", - "description": "The ID of the notification scheme.", - "format": "int64" - }, - "self": { "type": "string" }, - "name": { - "type": "string", - "description": "The name of the notification scheme." - }, - "description": { - "type": "string", - "description": "The description of the notification scheme." - }, - "notificationSchemeEvents": { - "type": "array", - "description": "The notification events and associated recipients.", - "items": { - "type": "object", - "properties": { - "event": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the event. The event can be a [Jira system event](https://confluence.atlassian.com/x/8YdKLg#Creatinganotificationscheme-eventsEvents) or a [custom event](https://confluence.atlassian.com/x/AIlKLg).", - "format": "int64" - }, - "name": { - "type": "string", - "description": "The name of the event." - }, - "description": { - "type": "string", - "description": "The description of the event." - } - } - }, - "notifications": { - "type": "array", - "items": { - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional event notification details in the response." - }, - "id": { - "type": "integer", - "description": "The ID of the notification.", - "format": "int64" - }, - "notificationType": { - "type": "string", - "description": "Identifies the recipients of the notification.", - "enum": [ - "CurrentAssignee", - "Reporter", - "CurrentUser", - "ProjectLead", - "ComponentLead", - "User", - "Group", - "ProjectRole", - "EmailAddress", - "AllWatchers", - "UserCustomField", - "GroupCustomField" - ] - }, - "parameter": { - "type": "string", - "description": "The value of the `notificationType`:\n\n * `User` The `parameter` is the user account ID.\n * `Group` The `parameter` is the group name.\n * `ProjectRole` The `parameter` is the project role ID.\n * `UserCustomField` The `parameter` is the ID of the custom field.\n * `GroupCustomField` The `parameter` is the ID of the custom field." - }, - "group": { - "description": "The specified group.", - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - }, - "field": { - "description": "The custom user or group field.", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the field." - }, - "key": { - "type": "string", - "description": "The key of the field." - }, - "name": { - "type": "string", - "description": "The name of the field." - }, - "custom": { - "type": "boolean", - "description": "Whether the field is a custom field." - }, - "orderable": { - "type": "boolean", - "description": "Whether the content of the field can be used to order lists." - }, - "navigable": { - "type": "boolean", - "description": "Whether the field can be used as a column on the issue navigator." - }, - "searchable": { - "type": "boolean", - "description": "Whether the content of the field can be searched." - }, - "clauseNames": { - "uniqueItems": true, - "type": "array", - "description": "The names that can be used to reference the field in an advanced search. For more information, see [Advanced searching - fields reference](https://confluence.atlassian.com/x/gwORLQ).", - "items": { "type": "string" } - }, - "scope": { - "description": "The scope of the field.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": [ - "software", - "service_desk", - "business" - ] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "schema": { - "description": "The data schema for the field.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The data type of the field.", - "readOnly": true - }, - "items": { - "type": "string", - "description": "When the data type is an array, the name of the field items within the array.", - "readOnly": true - }, - "system": { - "type": "string", - "description": "If the field is a system field, the name of the field.", - "readOnly": true - }, - "custom": { - "type": "string", - "description": "If the field is a custom field, the URI of the field.", - "readOnly": true - }, - "customId": { - "type": "integer", - "description": "If the field is a custom field, the custom ID of the field.", - "format": "int64", - "readOnly": true - }, - "configuration": { - "type": "object", - "additionalProperties": { "readOnly": true }, - "description": "If the field is a custom field, the configuration of the field.", - "readOnly": true - } - } - } - } - }, - "emailAddress": { - "type": "string", - "description": "The email address." - }, - "projectRole": { - "description": "The specified project role.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL the project role details.", - "format": "uri", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project role." - }, - "id": { - "type": "integer", - "description": "The ID of the project role.", - "format": "int64", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the project role.", - "readOnly": true - }, - "actors": { - "type": "array", - "description": "The list of users who act in this role.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the role actor.", - "format": "int64", - "readOnly": true - }, - "displayName": { - "type": "string", - "description": "The display name of the role actor. For users, depending on the user\u2019s privacy setting, this may return an alternative value for the user's name.", - "readOnly": true - }, - "type": { - "type": "string", - "description": "The type of role actor.", - "readOnly": true, - "enum": [ - "atlassian-group-role-actor", - "atlassian-user-role-actor" - ] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "avatarUrl": { - "type": "string", - "description": "The avatar of the role actor.", - "format": "uri", - "readOnly": true - }, - "actorUser": { - "readOnly": true, - "type": "object", - "properties": { - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Returns *unknown* if the record is deleted and corrupted, for example, as the result of a server import.", - "readOnly": true - } - } - }, - "actorGroup": { - "readOnly": true, - "type": "object", - "properties": { - "displayName": { - "type": "string", - "description": "The display name of the group." - }, - "name": { - "type": "string", - "description": "The name of the group" - } - } - } - } - } - }, - "scope": { - "description": "The scope of the role. Indicated for roles associated with [next-gen projects](https://confluence.atlassian.com/x/loMyO).", - "readOnly": true, - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": [ - "software", - "service_desk", - "business" - ] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "translatedName": { - "type": "string", - "description": "The translated name of the project role." - }, - "currentUserRole": { - "type": "boolean", - "description": "Whether the calling user is part of this role." - }, - "admin": { - "type": "boolean", - "description": "Whether this role is the admin role for the project.", - "readOnly": true - }, - "roleConfigurable": { - "type": "boolean", - "description": "Whether the roles are configurable for this project.", - "readOnly": true - }, - "default": { - "type": "boolean", - "description": "Whether this role is the default role for the project", - "readOnly": true - } - } - }, - "user": { - "description": "The specified user.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy settings, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "accountType": { - "type": "string", - "description": "The type of account represented by this user. This will be one of 'atlassian' (normal users), 'app' (application user) or 'customer' (Jira Service Desk customer user)", - "readOnly": true - } - } - } - } - } - } - } - } - }, - "scope": { - "description": "The scope of the notification scheme.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - } - }, - "additionalProperties": false, - "description": "Details about a notification scheme." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_priorities", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the issue priority." - }, - "statusColor": { - "type": "string", - "description": "The color used to indicate the issue priority." - }, - "description": { - "type": "string", - "description": "The description of the issue priority." - }, - "iconUrl": { - "type": "string", - "description": "The URL of the icon for the issue priority." - }, - "name": { - "type": "string", - "description": "The name of the issue priority." - }, - "id": { - "type": "string", - "description": "The ID of the issue priority." - } - }, - "additionalProperties": true, - "description": "An issue priority." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_properties", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the property. Required on create and update." - }, - "value": { - "description": "The value of the property. Required on create and update." - } - }, - "additionalProperties": false, - "description": "An entity property, for more information see [Entity properties](https://developer.atlassian.com/cloud/jira/platform/jira-entity-properties/)." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_remote_links", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the link.", - "format": "int64" - }, - "self": { - "type": "string", - "description": "The URL of the link.", - "format": "uri" - }, - "globalId": { - "type": "string", - "description": "The global ID of the link, such as the ID of the item on the remote system." - }, - "application": { - "description": "Details of the remote application the linked item is in.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The name-spaced type of the application, used by registered rendering apps." - }, - "name": { - "type": "string", - "description": "The name of the application. Used in conjunction with the (remote) object icon title to display a tooltip for the link's icon. The tooltip takes the format \"\\[application name\\] icon title\". Blank items are excluded from the tooltip title. If both items are blank, the icon tooltop displays as \"Web Link\". Grouping and sorting of links may place links without an application name last." - } - } - }, - "relationship": { - "type": "string", - "description": "Description of the relationship between the issue and the linked item." - }, - "object": { - "description": "Details of the item linked to.", - "type": "object", - "properties": { - "url": { - "type": "string", - "description": "The URL of the item." - }, - "title": { - "type": "string", - "description": "The title of the item." - }, - "summary": { - "type": "string", - "description": "The summary details of the item." - }, - "icon": { - "description": "Details of the icon for the item. If no icon is defined, the default link icon is used in Jira.", - "type": "object", - "properties": { - "url16x16": { - "type": "string", - "description": "The URL of an icon that displays at 16x16 pixel in Jira." - }, - "title": { - "type": "string", - "description": "The title of the icon. This is used as follows:\n\n * For a status icon it is used as a tooltip on the icon. If not set, the status icon doesn't display a tooltip in Jira.\n * For the remote object icon it is used in conjunction with the application name to display a tooltip for the link's icon. The tooltip takes the format \"\\[application name\\] icon title\". Blank itemsare excluded from the tooltip title. If both items are blank, the icon tooltop displays as \"Web Link\"." - }, - "link": { - "type": "string", - "description": "The URL of the tooltip, used only for a status icon. If not set, the status icon in Jira is not clickable." - } - } - }, - "status": { - "description": "The status of the item.", - "type": "object", - "properties": { - "resolved": { - "type": "boolean", - "description": "Whether the item is resolved. If set to \"true\", the link to the issue is displayed in a strikethrough font, otherwise the link displays in normal font." - }, - "icon": { - "description": "Details of the icon representing the status. If not provided, no status icon displays in Jira.", - "type": "object", - "properties": { - "url16x16": { - "type": "string", - "description": "The URL of an icon that displays at 16x16 pixel in Jira." - }, - "title": { - "type": "string", - "description": "The title of the icon. This is used as follows:\n\n * For a status icon it is used as a tooltip on the icon. If not set, the status icon doesn't display a tooltip in Jira.\n * For the remote object icon it is used in conjunction with the application name to display a tooltip for the link's icon. The tooltip takes the format \"\\[application name\\] icon title\". Blank itemsare excluded from the tooltip title. If both items are blank, the icon tooltop displays as \"Web Link\"." - }, - "link": { - "type": "string", - "description": "The URL of the tooltip, used only for a status icon. If not set, the status icon in Jira is not clickable." - } - } - } - } - } - } - } - }, - "additionalProperties": false, - "description": "Details of an issue remote link." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_resolutions", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the issue resolution.", - "format": "uri" - }, - "id": { - "type": "string", - "description": "The ID of the issue resolution." - }, - "description": { - "type": "string", - "description": "The description of the issue resolution." - }, - "name": { - "type": "string", - "description": "The name of the issue resolution." - } - }, - "additionalProperties": false, - "description": "Details of an issue resolution." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_security_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "issueSecuritySchemes": { - "type": "array", - "description": "List of security schemes.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the issue security scheme.", - "readOnly": true - }, - "id": { - "type": "integer", - "description": "The ID of the issue security scheme.", - "format": "int64", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue security scheme.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue security scheme.", - "readOnly": true - }, - "defaultSecurityLevelId": { - "type": "integer", - "description": "The ID of the default security level.", - "format": "int64", - "readOnly": true - }, - "levels": { - "type": "array", - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the issue level security item.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the issue level security item.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue level security item.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue level security item.", - "readOnly": true - } - } - } - } - } - } - } - }, - "additionalProperties": false, - "description": "List of security schemes." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_type_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the issue type scheme." - }, - "name": { - "type": "string", - "description": "The name of the issue type scheme." - }, - "description": { - "type": "string", - "description": "The description of the issue type scheme." - }, - "defaultIssueTypeId": { - "type": "string", - "description": "The ID of the default issue type of the issue type scheme." - }, - "isDefault": { - "type": "boolean", - "description": "Whether the issue type scheme is the default." - } - }, - "additionalProperties": false, - "description": "Details of an issue type scheme." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_type_screen_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the issue type screen scheme." - }, - "name": { - "type": "string", - "description": "The name of the issue type screen scheme." - }, - "description": { - "type": "string", - "description": "The description of the issue type screen scheme." - } - }, - "additionalProperties": false, - "description": "Details of an issue type screen scheme." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_votes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of these issue vote details.", - "format": "uri", - "readOnly": true - }, - "votes": { - "type": "integer", - "description": "The number of votes on the issue.", - "format": "int64", - "readOnly": true - }, - "hasVoted": { - "type": "boolean", - "description": "Whether the user making this request has voted on the issue.", - "readOnly": true - }, - "voters": { - "type": "array", - "description": "List of the users who have voted on this issue. An empty list is returned when the calling user doesn't have the *View voters and watchers* project permission.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - } - } - }, - "additionalProperties": false, - "description": "The details of votes on an issue." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_watchers", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of these issue watcher details.", - "readOnly": true - }, - "isWatching": { - "type": "boolean", - "description": "Whether the calling user is watching this issue.", - "readOnly": true - }, - "watchCount": { - "type": "integer", - "description": "The number of users watching this issue.", - "format": "int32", - "readOnly": true - }, - "watchers": { - "type": "array", - "description": "Details of the users watching this issue.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy settings, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "accountType": { - "type": "string", - "description": "The type of account represented by this user. This will be one of 'atlassian' (normal users), 'app' (application user) or 'customer' (Jira Service Desk customer user)", - "readOnly": true - } - } - } - } - }, - "additionalProperties": false, - "description": "The details of watchers on an issue." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_worklogs", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the worklog item.", - "format": "uri", - "readOnly": true - }, - "author": { - "description": "Details of the user who created the worklog.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy settings, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "accountType": { - "type": "string", - "description": "The type of account represented by this user. This will be one of 'atlassian' (normal users), 'app' (application user) or 'customer' (Jira Service Desk customer user)", - "readOnly": true - } - } - }, - "updateAuthor": { - "description": "Details of the user who last updated the worklog.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details.", - "readOnly": true - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy settings, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy settings, this may be returned as null.", - "readOnly": true - }, - "accountType": { - "type": "string", - "description": "The type of account represented by this user. This will be one of 'atlassian' (normal users), 'app' (application user) or 'customer' (Jira Service Desk customer user)", - "readOnly": true - } - } - }, - "comment": { - "description": "A comment about the worklog in [Atlassian Document Format](https://developer.atlassian.com/cloud/jira/platform/apis/document/structure/). Optional when creating or updating a worklog." - }, - "created": { - "type": "string", - "description": "The datetime on which the worklog was created.", - "format": "date-time", - "readOnly": true - }, - "updated": { - "type": "string", - "description": "The datetime on which the worklog was last updated.", - "format": "date-time", - "readOnly": true - }, - "visibility": { - "description": "Details about any restrictions in the visibility of the worklog. Optional when creating or updating a worklog.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Whether visibility of this item is restricted to a group or role.", - "enum": ["group", "role"] - }, - "value": { - "type": "string", - "description": "The name of the group or role to which visibility of this item is restricted." - } - } - }, - "started": { - "type": "string", - "description": "The datetime on which the worklog effort was started. Required when creating a worklog. Optional when updating a worklog.", - "format": "date-time" - }, - "timeSpent": { - "type": "string", - "description": "The time spent working on the issue as days (\\#d), hours (\\#h), or minutes (\\#m or \\#). Required when creating a worklog if `timeSpentSeconds` isn't provided. Optional when updating a worklog. Cannot be provided if `timeSpentSecond` is provided." - }, - "timeSpentSeconds": { - "type": "integer", - "description": "The time in seconds spent working on the issue. Required when creating a worklog if `timeSpent` isn't provided. Optional when updating a worklog. Cannot be provided if `timeSpent` is provided.", - "format": "int64" - }, - "id": { - "type": "string", - "description": "The ID of the worklog record.", - "readOnly": true - }, - "issueId": { - "type": "string", - "description": "The ID of the issue this worklog is for.", - "readOnly": true - }, - "properties": { - "type": "array", - "description": "Details of properties for the worklog. Optional when creating or updating a worklog.", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the property. Required on create and update." - }, - "value": { - "description": "The value of the property. Required on create and update." - } - } - } - } - }, - "additionalProperties": true, - "description": "Details of a worklog." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "jira_settings", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the application property. The ID and key are the same." - }, - "key": { - "type": "string", - "description": "The key of the application property. The ID and key are the same." - }, - "value": { "type": "string", "description": "The new value." }, - "name": { - "type": "string", - "description": "The name of the application property." - }, - "desc": { - "type": "string", - "description": "The description of the application property." - }, - "type": { - "type": "string", - "description": "The data type of the application property." - }, - "defaultValue": { - "type": "string", - "description": "The default value of the application property." - }, - "example": { "type": "string" }, - "allowedValues": { - "type": "array", - "description": "The allowed values, if applicable.", - "items": { "type": "string" } - } - }, - "additionalProperties": false, - "description": "Details of an application property." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "labels", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": ["object", "null"], - "properties": { - "id": { - "type": ["string", "null"] - }, - "key": { - "type": ["string", "null"] - }, - "value": { - "type": ["string", "null"] - }, - "name": { - "type": ["string", "null"] - }, - "desc": { - "type": ["string", "null"] - }, - "type": { - "type": ["string", "null"] - } - }, - "additionalProperties": true - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "permissions", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "permissions": { - "type": "object", - "description": "List of permissions.", - "readOnly": true - } - }, - "additionalProperties": false, - "description": "Details about permissions." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "permission_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "permissionSchemes": { - "type": "array", - "description": "Permission schemes list.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "The expand options available for the permission scheme.", - "readOnly": true - }, - "id": { - "type": "integer", - "description": "The ID of the permission scheme.", - "format": "int64", - "readOnly": true - }, - "self": { - "type": "string", - "description": "The URL of the permission scheme.", - "format": "uri", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the permission scheme. Must be unique." - }, - "description": { - "type": "string", - "description": "A description for the permission scheme." - }, - "scope": { - "description": "The scope of the permission scheme.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - }, - "permissions": { - "type": "array", - "description": "The permission scheme to create or update. See [About permission schemes and grants](#about-permission-schemes-and-grants) for more information.", - "items": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the permission granted details.", - "format": "int64", - "readOnly": true - }, - "self": { - "type": "string", - "description": "The URL of the permission granted details.", - "format": "uri", - "readOnly": true - }, - "holder": { - "description": "The user or group being granted the permission. It consists of a `type` and a type-dependent `parameter`. See [Holder object](#holder-object) in *Get all permission schemes* for more information.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of permission holder." - }, - "parameter": { - "type": "string", - "description": "The identifier of permission holder." - }, - "expand": { - "type": "string", - "description": "Expand options that include additional permission holder details in the response.", - "readOnly": true - } - } - }, - "permission": { - "type": "string", - "description": "The permission to grant. This permission can be one of the built-in permissions or a custom permission added by an app. See [Built-in permissions](#built-in-permissions) in *Get all permission schemes* for more information about the built-in permissions. See the [project permission](https://developer.atlassian.com/cloud/jira/platform/modules/project-permission/) and [global permission](https://developer.atlassian.com/cloud/jira/platform/modules/global-permission/) module documentation for more information about custom permissions." - } - } - } - } - } - } - } - }, - "additionalProperties": false, - "description": "List of all permission schemes." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "projects", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "expand": { - "type": "string", - "description": "Expand options that include additional project details in the response.", - "readOnly": true, - "xml": { - "attribute": true - } - }, - "self": { - "type": "string", - "description": "The URL of the project details.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "A brief description of the project.", - "readOnly": true - }, - "lead": { - "description": "The username of the project lead.", - "readOnly": true - }, - "components": { - "type": "array", - "description": "List of the components contained in the project.", - "readOnly": true - }, - "issueTypes": { - "type": "array", - "description": "List of the issue types available in the project.", - "readOnly": true - }, - "url": { - "type": "string", - "description": "A link to information about this project, such as project documentation.", - "readOnly": true - }, - "email": { - "type": "string", - "description": "An email address associated with the project." - }, - "assigneeType": { - "type": "string", - "description": "The default assignee when creating issues for this project.", - "readOnly": true, - "enum": ["PROJECT_LEAD", "UNASSIGNED"] - }, - "versions": { - "type": "array", - "description": "The versions defined in the project. For more information, see [Create version](#api-rest-api-3-version-post).", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "roles": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The name and self URL for each role defined in the project. For more information, see [Create project role](#api-rest-api-3-role-post).", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether the project is simplified.", - "readOnly": true - }, - "style": { - "type": "string", - "description": "The type of the project.", - "readOnly": true, - "enum": ["classic", "next-gen"] - }, - "favourite": { - "type": "boolean", - "description": "Whether the project is selected as a favorite." - }, - "isPrivate": { - "type": "boolean", - "description": "Whether the project is private.", - "readOnly": true - }, - "issueTypeHierarchy": { - "description": "The issue type hierarchy for the project", - "readOnly": true - }, - "permissions": { - "description": "User permissions on the project", - "readOnly": true - }, - "properties": { - "type": "object", - "additionalProperties": { - "readOnly": true - }, - "description": "Map of project properties", - "readOnly": true - }, - "uuid": { - "type": "string", - "description": "Unique ID for next-gen projects.", - "format": "uuid", - "readOnly": true - }, - "insight": { - "description": "Insights about the project.", - "readOnly": true - }, - "deleted": { - "type": "boolean", - "description": "Whether the project is marked as deleted.", - "readOnly": true - }, - "retentionTillDate": { - "type": "string", - "description": "The date when the project is deleted permanently.", - "format": "date-time", - "readOnly": true - }, - "deletedDate": { - "type": "string", - "description": "The date when the project was marked as deleted.", - "format": "date-time", - "readOnly": true - }, - "deletedBy": { - "description": "The user who marked the project as deleted.", - "readOnly": true - }, - "archived": { - "type": "boolean", - "description": "Whether the project is archived.", - "readOnly": true - }, - "archivedDate": { - "type": "string", - "description": "The date when the project was archived.", - "format": "date-time", - "readOnly": true - }, - "archivedBy": { - "description": "The user who archived the project.", - "readOnly": true - } - }, - "additionalProperties": false, - "description": "Details about a project." - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_avatars", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "system": { - "type": "array", - "description": "List of avatars included with Jira. These avatars cannot be deleted.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the avatar." - }, - "owner": { - "type": "string", - "description": "The owner of the avatar. For a system avatar the owner is null (and nothing is returned). For non-system avatars this is the appropriate identifier, such as the ID for a project or the account ID for a user.", - "readOnly": true - }, - "isSystemAvatar": { - "type": "boolean", - "description": "Whether the avatar is a system avatar.", - "readOnly": true - }, - "isSelected": { - "type": "boolean", - "description": "Whether the avatar is used in Jira. For example, shown as a project's avatar.", - "readOnly": true - }, - "isDeletable": { - "type": "boolean", - "description": "Whether the avatar can be deleted.", - "readOnly": true - }, - "fileName": { - "type": "string", - "description": "The file name of the avatar icon. Returned for system avatars.", - "readOnly": true - }, - "urls": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The list of avatar icon URLs.", - "readOnly": true - } - } - } - }, - "custom": { - "type": "array", - "description": "List of avatars added to Jira. These avatars may be deleted.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the avatar." - }, - "owner": { - "type": "string", - "description": "The owner of the avatar. For a system avatar the owner is null (and nothing is returned). For non-system avatars this is the appropriate identifier, such as the ID for a project or the account ID for a user.", - "readOnly": true - }, - "isSystemAvatar": { - "type": "boolean", - "description": "Whether the avatar is a system avatar.", - "readOnly": true - }, - "isSelected": { - "type": "boolean", - "description": "Whether the avatar is used in Jira. For example, shown as a project's avatar.", - "readOnly": true - }, - "isDeletable": { - "type": "boolean", - "description": "Whether the avatar can be deleted.", - "readOnly": true - }, - "fileName": { - "type": "string", - "description": "The file name of the avatar icon. Returned for system avatars.", - "readOnly": true - }, - "urls": { - "type": "object", - "additionalProperties": { - "type": "string", - "format": "uri", - "readOnly": true - }, - "description": "The list of avatar icon URLs.", - "readOnly": true - } - } - } - } - }, - "additionalProperties": false, - "description": "List of project avatars." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_categories", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project category. Required on create, optional on update." - }, - "description": { - "type": "string", - "description": "The description of the project category. Required on create, optional on update." - } - }, - "additionalProperties": false, - "description": "A project category." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_components", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "description": "The list of items.", - "readOnly": true, - "items": { - "properties": { - "issueCount": { - "type": "integer", - "description": "Count of issues for the component.", - "format": "int64", - "readOnly": true - }, - "self": { - "type": "string", - "description": "The URL for this count of the issues contained in the component.", - "format": "uri", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description for the component.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "The key of the project to which the component is assigned.", - "readOnly": true - }, - "assigneeType": { - "type": "string", - "description": "The nominal user type used to determine the assignee for issues created with this component. See `realAssigneeType` for details on how the type of the user, and hence the user, assigned to issues is determined. Takes the following values:\n\n * `PROJECT_LEAD` the assignee to any issues created with this component is nominally the lead for the project the component is in.\n * `COMPONENT_LEAD` the assignee to any issues created with this component is nominally the lead for the component.\n * `UNASSIGNED` an assignee is not set for issues created with this component.\n * `PROJECT_DEFAULT` the assignee to any issues created with this component is nominally the default assignee for the project that the component is in.", - "readOnly": true, - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "lead": { - "description": "The user details for the component's lead user.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "projectId": { - "type": "integer", - "description": "Not used.", - "format": "int64", - "readOnly": true - }, - "realAssignee": { - "description": "The user assigned to issues created with this component, when `assigneeType` does not identify a valid assignee.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "isAssigneeTypeValid": { - "type": "boolean", - "description": "Whether a user is associated with `assigneeType`. For example, if the `assigneeType` is set to `COMPONENT_LEAD` but the component lead is not set, then `false` is returned.", - "readOnly": true - }, - "assignee": { - "description": "The details of the user associated with `assigneeType`, if any. See `realAssignee` for details of the user assigned to issues created with this component.", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "realAssigneeType": { - "type": "string", - "description": "The type of the assignee that is assigned to issues created with this component, when an assignee cannot be set from the `assigneeType`. For example, `assigneeType` is set to `COMPONENT_LEAD` but no component lead is set. This property is set to one of the following values:\n\n * `PROJECT_LEAD` when `assigneeType` is `PROJECT_LEAD` and the project lead has permission to be assigned issues in the project that the component is in.\n * `COMPONENT_LEAD` when `assignee`Type is `COMPONENT_LEAD` and the component lead has permission to be assigned issues in the project that the component is in.\n * `UNASSIGNED` when `assigneeType` is `UNASSIGNED` and Jira is configured to allow unassigned issues.\n * `PROJECT_DEFAULT` when none of the preceding cases are true.", - "readOnly": true, - "enum": [ - "PROJECT_DEFAULT", - "COMPONENT_LEAD", - "PROJECT_LEAD", - "UNASSIGNED" - ] - }, - "name": { - "type": "string", - "description": "The name for the component.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The unique identifier for the component.", - "readOnly": true - } - }, - "description": "Details about a component with a count of the issues it contains." - } - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_email", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "emailAddress": { - "type": "string", - "description": "The email address." - } - }, - "additionalProperties": false, - "description": "A project's sender email address." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_permission_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the issue security scheme.", - "readOnly": true - }, - "id": { - "type": "integer", - "description": "The ID of the issue security scheme.", - "format": "int64", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue security scheme.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue security scheme.", - "readOnly": true - }, - "defaultSecurityLevelId": { - "type": "integer", - "description": "The ID of the default security level.", - "format": "int64", - "readOnly": true - }, - "levels": { - "type": "array", - "items": { - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the issue level security item.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the issue level security item.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the issue level security item.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the issue level security item.", - "readOnly": true - } - } - } - } - }, - "additionalProperties": false, - "description": "Details about a security scheme." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_types", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the project type.", - "readOnly": true - }, - "formattedKey": { - "type": "string", - "description": "The formatted key of the project type.", - "readOnly": true - }, - "descriptionI18nKey": { - "type": "string", - "description": "The key of the project type's description.", - "readOnly": true - }, - "icon": { - "type": "string", - "description": "The icon of the project type.", - "readOnly": true - }, - "color": { - "type": "string", - "description": "The color of the project type.", - "readOnly": true - } - }, - "additionalProperties": false, - "description": "Details about a project type." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_versions", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "description": "The list of items.", - "readOnly": true, - "items": { - "properties": { - "expand": { - "type": "string", - "description": "Use [expand](em>#expansion) to include additional information about version in the response. This parameter accepts a comma-separated list. Expand options include:\n\n * `operations` Returns the list of operations available for this version.\n * `issuesstatus` Returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.\n\nOptional for create and update.", - "xml": { "attribute": true } - }, - "self": { - "type": "string", - "description": "The URL of the version.", - "format": "uri", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the version.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the version. Optional when creating or updating a version." - }, - "name": { - "type": "string", - "description": "The unique name of the version. Required when creating a version. Optional when updating a version. The maximum length is 255 characters." - }, - "archived": { - "type": "boolean", - "description": "Indicates that the version is archived. Optional when creating or updating a version." - }, - "released": { - "type": "boolean", - "description": "Indicates that the version is released. If the version is released a request to release again is ignored. Not applicable when creating a version. Optional when updating a version." - }, - "startDate": { - "type": "string", - "description": "The start date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "releaseDate": { - "type": "string", - "description": "The release date of the version. Expressed in ISO 8601 format (yyyy-mm-dd). Optional when creating or updating a version.", - "format": "date" - }, - "overdue": { - "type": "boolean", - "description": "Indicates that the version is overdue.", - "readOnly": true - }, - "userStartDate": { - "type": "string", - "description": "The date on which work on this version is expected to start, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "userReleaseDate": { - "type": "string", - "description": "The date on which work on this version is expected to finish, expressed in the instance's *Day/Month/Year Format* date format.", - "readOnly": true - }, - "project": { - "type": "string", - "description": "Deprecated. Use `projectId`." - }, - "projectId": { - "type": "integer", - "description": "The ID of the project to which this version is attached. Required when creating a version. Not applicable when updating a version.", - "format": "int64" - }, - "moveUnfixedIssuesTo": { - "type": "string", - "description": "The URL of the self link to the version to which all unfixed issues are moved when a version is released. Not applicable when creating a version. Optional when updating a version.", - "format": "uri" - }, - "operations": { - "type": "array", - "description": "If the expand option `operations` is used, returns the list of operations available for this version.", - "readOnly": true, - "items": { - "type": "object", - "properties": { - "id": { "type": "string" }, - "styleClass": { "type": "string" }, - "iconClass": { "type": "string" }, - "label": { "type": "string" }, - "title": { "type": "string" }, - "href": { "type": "string" }, - "weight": { "type": "integer", "format": "int32" } - } - } - }, - "issuesStatusForFixVersion": { - "description": "If the expand option `issuesstatus` is used, returns the count of issues in this version for each of the status categories *to do*, *in progress*, *done*, and *unmapped*. The *unmapped* property contains a count of issues with a status other than *to do*, *in progress*, and *done*.", - "readOnly": true, - "type": "object", - "properties": { - "unmapped": { - "type": "integer", - "description": "Count of issues with a status other than *to do*, *in progress*, and *done*.", - "format": "int64", - "readOnly": true - }, - "toDo": { - "type": "integer", - "description": "Count of issues with status *to do*.", - "format": "int64", - "readOnly": true - }, - "inProgress": { - "type": "integer", - "description": "Count of issues with status *in progress*.", - "format": "int64", - "readOnly": true - }, - "done": { - "type": "integer", - "description": "Count of issues with status *done*.", - "format": "int64", - "readOnly": true - } - } - } - }, - "xml": { "name": "version" } - } - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "screens", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "description": "The list of items.", - "readOnly": true, - "items": { - "properties": { - "id": { - "type": "integer", - "description": "The ID of the screen.", - "format": "int64", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the screen.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the screen.", - "readOnly": true - }, - "scope": { - "description": "The scope of the screen.", - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of scope.", - "readOnly": true, - "enum": ["PROJECT", "TEMPLATE"] - }, - "project": { - "description": "The project the item has scope in.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project details.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project." - }, - "key": { - "type": "string", - "description": "The key of the project.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the project.", - "readOnly": true - }, - "projectTypeKey": { - "type": "string", - "description": "The [project type](https://confluence.atlassian.com/x/GwiiLQ#Jiraapplicationsoverview-Productfeaturesandprojecttypes) of the project.", - "readOnly": true, - "enum": ["software", "service_desk", "business"] - }, - "simplified": { - "type": "boolean", - "description": "Whether or not the project is simplified.", - "readOnly": true - }, - "avatarUrls": { - "description": "The URLs of the project's avatars.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "projectCategory": { - "description": "The category the project belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the project category.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the project category.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The name of the project category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The description of the project category.", - "readOnly": true - } - } - } - } - } - } - } - }, - "description": "A screen." - } - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "screen_tabs", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["name"], - "type": "object", - "properties": { - "id": { - "type": "integer", - "description": "The ID of the screen tab.", - "format": "int64", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the screen tab. The maximum length is 255 characters." - } - }, - "additionalProperties": false, - "description": "A screen tab." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "screen_tab_fields", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the screen tab field.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the screen tab field. Required on create and update. The maximum length is 255 characters." - } - }, - "additionalProperties": false, - "description": "A screen tab field." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "screen_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "description": "The list of items.", - "readOnly": true, - "items": { - "properties": { - "id": { - "type": "integer", - "description": "The ID of the screen scheme.", - "format": "int64" - }, - "name": { - "type": "string", - "description": "The name of the screen scheme." - }, - "description": { - "type": "string", - "description": "The description of the screen scheme." - }, - "screens": { - "description": "The IDs of the screens for the screen types of the screen scheme.", - "type": "object", - "properties": { - "edit": { - "type": "integer", - "description": "The ID of the edit screen.", - "format": "int64" - }, - "create": { - "type": "integer", - "description": "The ID of the create screen.", - "format": "int64" - }, - "view": { - "type": "integer", - "description": "The ID of the view screen.", - "format": "int64" - }, - "default": { - "type": "integer", - "description": "The ID of the default screen. Required when creating a screen scheme.", - "format": "int64" - } - } - } - }, - "description": "A screen scheme." - } - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "time_tracking", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "required": ["key"], - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key for the time tracking provider. For example, *JIRA*." - }, - "name": { - "type": "string", - "description": "The name of the time tracking provider. For example, *JIRA provided time tracking*." - }, - "url": { - "type": "string", - "description": "The URL of the configuration page for the time tracking provider app. For example, */example/config/url*. This property is only returned if the `adminPageKey` property is set in the module descriptor of the time tracking provider app.", - "readOnly": true - } - }, - "additionalProperties": false, - "description": "Details about the time tracking provider." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "users", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user’s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user’s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user’s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user’s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { - "attribute": true - } - } - }, - "additionalProperties": false, - "description": "A user with details as permitted by the user's Atlassian Account privacy settings. However, be aware of these exceptions:\n\n * User record deleted from Atlassian: This occurs as the result of a right to be forgotten request. In this case, `displayName` provides an indication and other parameters have default values or are blank (for example, email is blank).\n * User record corrupted: This occurs as a results of events such as a server import and can only happen to deleted users. In this case, `accountId` returns *unknown* and all other parameters have fallback values.\n * User record unavailable: This usually occurs due to an internal service outage. In this case, all parameters have fallback values." - }, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflows", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "description": "The list of items.", - "readOnly": true, - "items": { - "properties": { - "id": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the workflow." - } - } - }, - "description": { - "type": "string", - "description": "The description of the workflow." - }, - "transitions": { - "type": "array", - "description": "The transitions of the workflow.", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the transition." - }, - "name": { - "type": "string", - "description": "The name of the transition." - }, - "description": { - "type": "string", - "description": "The description of the transition." - }, - "from": { - "type": "array", - "description": "The statuses the transition can start from.", - "items": { - "type": "string", - "description": "The statuses the transition can start from." - } - }, - "to": { - "type": "string", - "description": "The status the transition goes to." - }, - "type": { - "type": "string", - "description": "The type of the transition.", - "enum": ["global", "initial", "directed"] - }, - "screen": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the screen." - } - } - }, - "rules": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "description": "The workflow conditions.", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of the transition rule." - }, - "configuration": { - "description": "The configuration of the transition rule. This is currently returned only for some of the rule types. Availability of this property is subject to change." - } - } - } - }, - "validators": { - "type": "array", - "description": "The workflow validators.", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of the transition rule." - }, - "configuration": { - "description": "The configuration of the transition rule. This is currently returned only for some of the rule types. Availability of this property is subject to change." - } - } - } - }, - "postFunctions": { - "type": "array", - "description": "The workflow post functions.", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of the transition rule." - }, - "configuration": { - "description": "The configuration of the transition rule. This is currently returned only for some of the rule types. Availability of this property is subject to change." - } - } - } - } - } - } - } - } - }, - "statuses": { - "type": "array", - "description": "The statuses of the workflow.", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the issue status." - }, - "name": { - "type": "string", - "description": "The name of the status in the workflow." - }, - "properties": { - "type": "object", - "properties": { - "issueEditable": { - "type": "boolean", - "description": "Whether issues are editable in this status." - } - } - } - } - } - } - }, - "description": "Details about a workflow." - } - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflow_schemes", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "array", - "description": "The list of items.", - "readOnly": true, - "items": { - "properties": { - "id": { - "type": "integer", - "description": "The ID of the workflow scheme.", - "format": "int64", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the workflow scheme. The name must be unique. The maximum length is 255 characters. Required when creating a workflow scheme." - }, - "description": { - "type": "string", - "description": "The description of the workflow scheme." - }, - "defaultWorkflow": { - "type": "string", - "description": "The name of the default workflow for the workflow scheme. The default workflow has *All Unassigned Issue Types* assigned to it in Jira. If `defaultWorkflow` is not specified when creating a workflow scheme, it is set to *Jira Workflow (jira)*." - }, - "issueTypeMappings": { - "type": "object", - "additionalProperties": { "type": "string" }, - "description": "The issue type to workflow mappings, where each mapping is an issue type ID and workflow name pair. Note that an issue type can only be mapped to one workflow in a workflow scheme." - }, - "originalDefaultWorkflow": { - "type": "string", - "description": "For draft workflow schemes, this property is the name of the default workflow for the original workflow scheme. The default workflow has *All Unassigned Issue Types* assigned to it in Jira.", - "readOnly": true - }, - "originalIssueTypeMappings": { - "type": "object", - "additionalProperties": { "type": "string", "readOnly": true }, - "description": "For draft workflow schemes, this property is the issue type to workflow mappings for the original workflow scheme, where each mapping is an issue type ID and workflow name pair. Note that an issue type can only be mapped to one workflow in a workflow scheme.", - "readOnly": true - }, - "draft": { - "type": "boolean", - "description": "Whether the workflow scheme is a draft or not.", - "readOnly": true - }, - "lastModifiedUser": { - "description": "The user that last modified the draft workflow scheme. A modification is a change to the issue type-project mappings only. This property does not apply to non-draft workflows.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the user.", - "format": "uri", - "readOnly": true - }, - "key": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "accountId": { - "maxLength": 128, - "type": "string", - "description": "The account ID of the user, which uniquely identifies the user across all Atlassian products. For example, *5b10ac8d82e05b22cc7d4ef5*. Required in requests." - }, - "accountType": { - "type": "string", - "description": "The user account type. Can take the following values:\n\n * `atlassian` regular Atlassian user account\n * `app` system account used for Connect applications and OAuth to represent external systems\n * `customer` Jira Service Desk account representing an external service desk", - "readOnly": true, - "enum": ["atlassian", "app", "customer", "unknown"] - }, - "name": { - "type": "string", - "description": "This property is no longer available and will be removed from the documentation soon. See the [deprecation notice](https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/) for details." - }, - "emailAddress": { - "type": "string", - "description": "The email address of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "avatarUrls": { - "description": "The avatars of the user.", - "readOnly": true, - "type": "object", - "properties": { - "16x16": { - "type": "string", - "description": "The URL of the item's 16x16 pixel avatar.", - "format": "uri" - }, - "24x24": { - "type": "string", - "description": "The URL of the item's 24x24 pixel avatar.", - "format": "uri" - }, - "32x32": { - "type": "string", - "description": "The URL of the item's 32x32 pixel avatar.", - "format": "uri" - }, - "48x48": { - "type": "string", - "description": "The URL of the item's 48x48 pixel avatar.", - "format": "uri" - } - } - }, - "displayName": { - "type": "string", - "description": "The display name of the user. Depending on the user\u2019s privacy setting, this may return an alternative value.", - "readOnly": true - }, - "active": { - "type": "boolean", - "description": "Whether the user is active.", - "readOnly": true - }, - "timeZone": { - "type": "string", - "description": "The time zone specified in the user's profile. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "locale": { - "type": "string", - "description": "The locale of the user. Depending on the user\u2019s privacy setting, this may be returned as null.", - "readOnly": true - }, - "groups": { - "description": "The groups that the user belongs to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of group." - }, - "self": { - "type": "string", - "description": "The URL for these group details.", - "format": "uri", - "readOnly": true - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "applicationRoles": { - "description": "The application roles the user is assigned to.", - "readOnly": true, - "type": "object", - "properties": { - "size": { - "type": "integer", - "format": "int32", - "xml": { "attribute": true } - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "key": { - "type": "string", - "description": "The key of the application role." - }, - "groups": { - "uniqueItems": true, - "type": "array", - "description": "The groups associated with the application role.", - "items": { "type": "string" } - }, - "name": { - "type": "string", - "description": "The display name of the application role." - }, - "defaultGroups": { - "uniqueItems": true, - "type": "array", - "description": "The groups that are granted default access for this application role.", - "items": { "type": "string" } - }, - "selectedByDefault": { - "type": "boolean", - "description": "Determines whether this application role should be selected by default on user creation." - }, - "defined": { - "type": "boolean", - "description": "Deprecated." - }, - "numberOfSeats": { - "type": "integer", - "description": "The maximum count of users on your license.", - "format": "int32" - }, - "remainingSeats": { - "type": "integer", - "description": "The count of users remaining on your license.", - "format": "int32" - }, - "userCount": { - "type": "integer", - "description": "The number of users counting against your license.", - "format": "int32" - }, - "userCountDescription": { - "type": "string", - "description": "The [type of users](https://confluence.atlassian.com/x/lRW3Ng) being counted against your license." - }, - "hasUnlimitedSeats": { "type": "boolean" }, - "platform": { - "type": "boolean", - "description": "Indicates if the application role belongs to Jira platform (`jira-core`)." - } - } - } - }, - "pagingCallback": { "type": "object" }, - "callback": { "type": "object" }, - "max-results": { - "type": "integer", - "format": "int32", - "xml": { "name": "max-results", "attribute": true } - } - } - }, - "expand": { - "type": "string", - "description": "Expand options that include additional user details in the response.", - "readOnly": true, - "xml": { "attribute": true } - } - } - }, - "lastModified": { - "type": "string", - "description": "The date-time that the draft workflow scheme was last modified. A modification is a change to the issue type-project mappings only. This property does not apply to non-draft workflows.", - "readOnly": true - }, - "self": { "type": "string", "format": "uri", "readOnly": true }, - "updateDraftIfNeeded": { - "type": "boolean", - "description": "Whether to create or update a draft workflow scheme when updating an active workflow scheme. An active workflow scheme is a workflow scheme that is used by at least one project. The following examples show how this property works:\n\n * Update an active workflow scheme with `updateDraftIfNeeded` set to `true`: If a draft workflow scheme exists, it is updated. Otherwise, a draft workflow scheme is created.\n * Update an active workflow scheme with `updateDraftIfNeeded` set to `false`: An error is returned, as active workflow schemes cannot be updated.\n * Update an inactive workflow scheme with `updateDraftIfNeeded` set to `true`: The workflow scheme is updated, as inactive workflow schemes do not require drafts to update.\n\nDefaults to `false`." - }, - "issueTypes": { - "type": "object", - "description": "The issue types available in Jira.", - "readOnly": true - } - }, - "description": "Details about a workflow scheme." - } - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflow_statuses", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the status.", - "readOnly": true - }, - "description": { - "type": "string", - "description": "The description of the status.", - "readOnly": true - }, - "iconUrl": { - "type": "string", - "description": "The URL of the icon used to represent the status.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the status.", - "readOnly": true - }, - "id": { - "type": "string", - "description": "The ID of the status.", - "readOnly": true - }, - "statusCategory": { - "description": "The category assigned to the status.", - "readOnly": true, - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the status category.", - "readOnly": true - }, - "id": { - "type": "integer", - "description": "The ID of the status category.", - "format": "int64", - "readOnly": true - }, - "key": { - "type": "string", - "description": "The key of the status category.", - "readOnly": true - }, - "colorName": { - "type": "string", - "description": "The name of the color used to represent the status category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the status category.", - "readOnly": true - } - } - } - }, - "additionalProperties": true, - "description": "A status." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflow_status_categories", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "self": { - "type": "string", - "description": "The URL of the status category.", - "readOnly": true - }, - "id": { - "type": "integer", - "description": "The ID of the status category.", - "format": "int64", - "readOnly": true - }, - "key": { - "type": "string", - "description": "The key of the status category.", - "readOnly": true - }, - "colorName": { - "type": "string", - "description": "The name of the color used to represent the status category.", - "readOnly": true - }, - "name": { - "type": "string", - "description": "The name of the status category.", - "readOnly": true - } - }, - "additionalProperties": true, - "description": "A status category." - }, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/inc_configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/inc_configured_catalog.json deleted file mode 100644 index e7b087c991b15..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/inc_configured_catalog.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "issues", - "json_schema": {}, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["updated"] - }, - "sync_mode": "incremental", - "cursor_field": ["updated"], - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "issue_worklogs", - "json_schema": {}, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["updated"] - }, - "sync_mode": "incremental", - "cursor_field": ["updated"], - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "issue_comments", - "json_schema": {}, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["updated"] - }, - "sync_mode": "incremental", - "cursor_field": ["updated"], - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "pull_requests", - "json_schema": {}, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["updated"] - }, - "sync_mode": "incremental", - "cursor_field": ["updated"], - "destination_sync_mode": "append" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/issue_worklogs_configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/issue_worklogs_configured_catalog.json deleted file mode 100644 index 9988b4462befc..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/issue_worklogs_configured_catalog.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "issue_worklogs", - "json_schema": {}, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["updated"] - }, - "sync_mode": "incremental", - "cursor_field": ["updated"], - "destination_sync_mode": "append" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/issues_configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/issues_configured_catalog.json deleted file mode 100644 index 1c4ec982815ca..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/issues_configured_catalog.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "issues", - "json_schema": {}, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["created"] - }, - "sync_mode": "incremental", - "cursor_field": ["created"], - "destination_sync_mode": "append" - }, - { - "stream": { - "name": "issue_comments", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_fields", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_field_configurations", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_custom_field_contexts", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_link_types", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_navigator_settings", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_notification_schemes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_priorities", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_remote_links", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_resolutions", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_security_schemes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_type_schemes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_type_screen_schemes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_votes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "issue_watchers", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/labels_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/labels_catalog.json deleted file mode 100644 index 555962f6462b8..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/labels_catalog.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "labels", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/projects_configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/projects_configured_catalog.json deleted file mode 100644 index cba9ac942190d..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/projects_configured_catalog.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "projects", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_avatars", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_categories", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_components", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_email", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_permission_schemes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_types", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "project_versions", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/users_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/users_catalog.json deleted file mode 100644 index ae547e4af2cf3..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/users_catalog.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "users", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "users_groups_detailed", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/workflows_configured_catalog.json b/airbyte-integrations/connectors/source-jira/integration_tests/workflows_configured_catalog.json deleted file mode 100644 index 52bca37c385ad..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/workflows_configured_catalog.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "workflows", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflow_schemes", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflow_statuses", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "workflow_status_categories", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": false - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - } - ] -} From 5e27e6648fc83c2283a733b56f30aa26fc4e9079 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 08:51:28 +0000 Subject: [PATCH 60/77] re-implement get_starting_point Signed-off-by: Sergey Chvalyuk --- .../source-jira/acceptance-test-config.yml | 6 ++ .../integration_tests/abnormal_state.json | 61 +++++++++++++++++-- .../source-jira/source_jira/streams.py | 16 ++++- .../source-jira/source_jira/utils.py | 14 ----- 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index 2e1ada3fa3ddb..e46fff7f2ff88 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -28,3 +28,9 @@ acceptance_tests: - name: "issue_properties" - name: "project_permission_schemes" - name: "screen_tab_fields" + incremental: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-jira/integration_tests/abnormal_state.json index abed3d6bbca5c..af6f2b9ee0502 100644 --- a/airbyte-integrations/connectors/source-jira/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-jira/integration_tests/abnormal_state.json @@ -1,8 +1,57 @@ -{ - "issues": { - "created": "2121-02-14T22:01:22.313Z" +[ + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "board_issues" + }, + "stream_state": { + "updated": "2122-01-01T00:00:00Z" + } + } }, - "issue_worklogs": { - "started": "2121-04-14T11:30:22.313Z" + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "issues" + }, + "stream_state": { + "updated": "2122-01-01T00:00:00Z" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "issue_comments" + }, + "stream_state": { + "updated": "2122-01-01T00:00:00Z" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "issue_worklogs" + }, + "stream_state": { + "updated": "2122-01-01T00:00:00Z" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "sprint_issues" + }, + "stream_state": { + "updated": "2122-01-01T00:00:00Z" + } + } } -} +] diff --git a/airbyte-integrations/connectors/source-jira/source_jira/streams.py b/airbyte-integrations/connectors/source-jira/source_jira/streams.py index 9ab72fab84e80..45fde4ece011a 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/streams.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/streams.py @@ -13,7 +13,7 @@ from airbyte_cdk.sources.streams.http import HttpStream from requests.exceptions import HTTPError -from .utils import call_once, read_full_refresh, read_incremental, safe_max +from .utils import read_full_refresh, read_incremental, safe_max API_VERSION = 3 @@ -97,6 +97,10 @@ def __init__(self, start_date: Optional[pendulum.DateTime] = None, **kwargs): class IncrementalJiraStream(StartDateJiraStream, ABC): + def __init__(self, **kwargs): + super().__init__(**kwargs) + self._starting_point_cache = {} + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]): updated_state = latest_record[self.cursor_field] stream_state_value = current_stream_state.get(self.cursor_field) @@ -111,8 +115,12 @@ def jql_compare_date(self, stream_state: Mapping[str, Any]) -> Optional[str]: compare_date = compare_date.strftime("%Y/%m/%d %H:%M") return f"{self.cursor_field} >= '{compare_date}'" - @call_once def get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: + if self.cursor_field not in self._starting_point_cache: + self._starting_point_cache[self.cursor_field] = self._get_starting_point(stream_state=stream_state) + return self._starting_point_cache[self.cursor_field] + + def _get_starting_point(self, stream_state: Mapping[str, Any]) -> Optional[pendulum.DateTime]: if stream_state: stream_state_value = stream_state.get(self.cursor_field) if stream_state_value: @@ -129,6 +137,10 @@ def read_records( if not start_point or cursor_value >= start_point: yield record + def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + self._starting_point_cache.clear() + yield from super().stream_slices(**kwargs) + class ApplicationRoles(JiraStream): """ diff --git a/airbyte-integrations/connectors/source-jira/source_jira/utils.py b/airbyte-integrations/connectors/source-jira/source_jira/utils.py index 892317ab278b7..c6a3e45517042 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/utils.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/utils.py @@ -30,17 +30,3 @@ def read_incremental(stream_instance: Stream, stream_state: MutableMapping[str, records = stream_instance.read_records(sync_mode=SyncMode.incremental, stream_slice=_slice, stream_state=stream_state) for record in records: yield record - - -def call_once(f): - result = None - called = False - - def wrapper(*args, **kwargs): - nonlocal called, result - if not called: - result = f(*args, **kwargs) - called = True - return result - - return wrapper From 5802c81ecef474742d32cfb0840da9fac151aa32 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 08:53:16 +0000 Subject: [PATCH 61/77] full_refresh added Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/acceptance-test-config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index e46fff7f2ff88..b7732d7d02092 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -34,3 +34,7 @@ acceptance_tests: configured_catalog_path: "integration_tests/configured_catalog.json" future_state: future_state_path: "integration_tests/abnormal_state.json" + full_refresh: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" From 18f90b9b3bce0a9e5cafada3eaed45fae7c0e6c9 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 09:32:07 +0000 Subject: [PATCH 62/77] expect_records added Signed-off-by: Sergey Chvalyuk --- .../source-jira/acceptance-test-config.yml | 5 + .../expected_label_records.txt | 2 - .../integration_tests/expected_records.txt | 198 ++++++++++++++++++ 3 files changed, 203 insertions(+), 2 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt create mode 100644 airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt diff --git a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml index b7732d7d02092..789ec275c41a9 100644 --- a/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-jira/acceptance-test-config.yml @@ -24,6 +24,11 @@ acceptance_tests: tests: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" + expect_records: + path: "integration_tests/expected_records.txt" + extra_fields: no + exact_order: no + extra_records: yes empty_streams: - name: "issue_properties" - name: "project_permission_schemes" diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt b/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt deleted file mode 100644 index 2b1820399c8e1..0000000000000 --- a/airbyte-integrations/connectors/source-jira/integration_tests/expected_label_records.txt +++ /dev/null @@ -1,2 +0,0 @@ -{"stream":"labels","data":{"label":"test"},"emitted_at":1670963992553} -{"stream":"labels","data":{"label":"zZ"},"emitted_at":1670963992553} diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt new file mode 100644 index 0000000000000..29a09a4522932 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt @@ -0,0 +1,198 @@ +{"stream": "application_roles", "data": {"key": "jira-software", "groups": ["jira-software-users", "atlassian-addons-admin", "system-administrators", "site-admins", "administrators"], "groupDetails": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}, {"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"}, {"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "system-administrators", "groupId": "ed0ab3a1-afa4-4ff5-a878-fc90c1574818", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ed0ab3a1-afa4-4ff5-a878-fc90c1574818"}, {"name": "site-admins", "groupId": "76dad095-fc1a-467a-88b4-fde534220985", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"}], "name": "Jira Software", "defaultGroups": ["jira-software-users"], "defaultGroupsDetails": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}], "selectedByDefault": false, "defined": true, "numberOfSeats": 10, "remainingSeats": 6, "userCount": 4, "userCountDescription": "users", "hasUnlimitedSeats": false, "platform": false}, "emitted_at": 1671009526987} +{"stream": "avatars", "data": {"id": "10300", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10300", "24x24": "/secure/useravatar?size=small&avatarId=10300", "32x32": "/secure/useravatar?size=medium&avatarId=10300", "48x48": "/secure/useravatar?avatarId=10300"}}, "emitted_at": 1671009527335} +{"stream": "avatars", "data": {"id": "10303", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10303", "24x24": "/secure/useravatar?size=small&avatarId=10303", "32x32": "/secure/useravatar?size=medium&avatarId=10303", "48x48": "/secure/useravatar?avatarId=10303"}}, "emitted_at": 1671009527335} +{"stream": "avatars", "data": {"id": "10304", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10304", "24x24": "/secure/useravatar?size=small&avatarId=10304", "32x32": "/secure/useravatar?size=medium&avatarId=10304", "48x48": "/secure/useravatar?avatarId=10304"}}, "emitted_at": 1671009527335} +{"stream": "avatars", "data": {"id": "10306", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10306", "24x24": "/secure/useravatar?size=small&avatarId=10306", "32x32": "/secure/useravatar?size=medium&avatarId=10306", "48x48": "/secure/useravatar?avatarId=10306"}}, "emitted_at": 1671009527335} +{"stream": "avatars", "data": {"id": "10307", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/useravatar?size=xsmall&avatarId=10307", "24x24": "/secure/useravatar?size=small&avatarId=10307", "32x32": "/secure/useravatar?size=medium&avatarId=10307", "48x48": "/secure/useravatar?avatarId=10307"}}, "emitted_at": 1671009527336} +{"stream": "boards", "data": {"id": 1, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/1", "name": "IT board", "type": "scrum", "location": {"projectId": 10000, "displayName": "integration-tests (IT)", "projectName": "integration-tests", "projectKey": "IT", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10424?size=small", "name": "integration-tests (IT)"}, "projectId": "10000", "projectKey": "IT"}, "emitted_at": 1671009527915} +{"stream": "boards", "data": {"id": 17, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/board/17", "name": "TESTKEY13 board", "type": "scrum", "location": {"projectId": 10016, "displayName": "Test project 13 (TESTKEY13)", "projectName": "Test project 13", "projectKey": "TESTKEY13", "projectTypeKey": "software", "avatarURI": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small", "name": "Test project 13 (TESTKEY13)"}, "projectId": "10016", "projectKey": "TESTKEY13"}, "emitted_at": 1671009527915} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10012", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", "key": "IT-6", "fields": {"updated": "2022-05-17T04:26:21.613-0700", "created": "2021-03-11T06:14:18.085-0800"}, "boardId": 1, "created": "2021-03-11T06:14:18.085-0800", "updated": "2022-05-17T04:26:21.613-0700"}, "emitted_at": 1671009528768} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10000", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10000", "key": "IT-1", "fields": {"updated": "2022-05-17T04:26:28.885-0700", "created": "2020-12-07T06:12:17.863-0800"}, "boardId": 1, "created": "2020-12-07T06:12:17.863-0800", "updated": "2022-05-17T04:26:28.885-0700"}, "emitted_at": 1671009528768} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10001", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10001", "key": "IT-2", "fields": {"updated": "2021-04-15T11:40:26.679-0700", "created": "2020-12-07T06:13:00.586-0800"}, "boardId": 1, "created": "2020-12-07T06:13:00.586-0800", "updated": "2021-04-15T11:40:26.679-0700"}, "emitted_at": 1671009528768} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10019", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10019", "key": "IT-9", "fields": {"updated": "2022-05-17T04:25:20.681-0700", "created": "2021-03-11T06:14:24.791-0800"}, "boardId": 1, "created": "2021-03-11T06:14:24.791-0800", "updated": "2022-05-17T04:25:20.681-0700"}, "emitted_at": 1671009528769} +{"stream": "board_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "10007", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10007", "key": "IT-3", "fields": {"updated": "2021-04-15T11:40:26.030-0700", "created": "2021-03-11T06:14:12.850-0800"}, "boardId": 1, "created": "2021-03-11T06:14:12.850-0800", "updated": "2021-04-15T11:40:26.030-0700"}, "emitted_at": 1671009528769} +{"stream": "dashboards", "data": {"id": "10000", "isFavourite": false, "name": "Default dashboard", "popularity": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10000", "sharePermissions": [{"id": 10000, "type": "global"}], "editPermissions": [], "view": "/jira/dashboards/10000", "systemDashboard": true}, "emitted_at": 1671009529776} +{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10002", "isFavourite": true, "name": "Test dashboard 1", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10002", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10002", "systemDashboard": false}, "emitted_at": 1671009529776} +{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10011", "isFavourite": true, "name": "Test dashboard 10", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 9, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10011", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10011", "systemDashboard": false}, "emitted_at": 1671009529776} +{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10022", "isFavourite": true, "name": "Test dashboard 1001", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 20, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10022", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10022", "systemDashboard": false}, "emitted_at": 1671009529777} +{"stream": "dashboards", "data": {"description": "A dashboard to help auditors identify sample of issues to check.", "id": "10031", "isFavourite": true, "name": "Test dashboard 10010", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "displayName": "integration test", "active": true, "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}}, "popularity": 1, "rank": 29, "self": "https://airbyteio.atlassian.net/rest/api/3/dashboard/10031", "sharePermissions": [], "editPermissions": [], "view": "/jira/dashboards/10031", "systemDashboard": false}, "emitted_at": 1671009529777} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10003", "id": "10003", "name": "Filter for EX board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = EX ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10003", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+EX+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10004, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", "id": "10003", "key": "EX", "assigneeType": "PROJECT_LEAD", "name": "Example", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1671009530546} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10000", "id": "10000", "name": "Filter for IT board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = IT ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10000", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+IT+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10058, "type": "group", "group": {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}}, {"id": 10059, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10057, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "assigneeType": "PROJECT_LEAD", "name": "integration-tests", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1671009530547} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10001", "id": "10001", "name": "Filter for P2 board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = P2 ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10001", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+P2+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10063, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10064, "type": "group", "group": {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}}, {"id": 10062, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10001", "id": "10001", "key": "P2", "assigneeType": "PROJECT_LEAD", "name": "project-2", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10411?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1671009530547} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10004", "id": "10004", "name": "Filter for TESTKEY1 board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = TESTKEY1 ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10004", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+TESTKEY1+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10066, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, {"id": 10065, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10004", "id": "10004", "key": "TESTKEY1", "assigneeType": "PROJECT_LEAD", "name": "Test project 1", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10419", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10419?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10419?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10419?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1671009530547} +{"stream": "filters", "data": {"expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "https://airbyteio.atlassian.net/rest/api/3/filter/10013", "id": "10013", "name": "Filter for TESTKEY10 board", "owner": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "jql": "project = TESTKEY10 ORDER BY Rank ASC", "viewUrl": "https://airbyteio.atlassian.net/issues/?filter=10013", "searchUrl": "https://airbyteio.atlassian.net/rest/api/3/search?jql=project+%3D+TESTKEY10+ORDER+BY+Rank+ASC", "favourite": false, "favouritedCount": 0, "sharePermissions": [{"id": 10014, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10013", "id": "10013", "key": "TESTKEY10", "assigneeType": "PROJECT_LEAD", "name": "Test project 10", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10416", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10416?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10416?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10416?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}], "isWritable": true, "subscriptions": []}, "emitted_at": 1671009530548} +{"stream": "filter_sharing", "data": {"id": 10004, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", "id": "10003", "key": "EX", "assigneeType": "PROJECT_LEAD", "name": "Example", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}, "emitted_at": 1671009531332} +{"stream": "filter_sharing", "data": {"id": 10058, "type": "group", "group": {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}}, "emitted_at": 1671009531517} +{"stream": "filter_sharing", "data": {"id": 10059, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, "emitted_at": 1671009531517} +{"stream": "filter_sharing", "data": {"id": 10057, "type": "project", "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "assigneeType": "PROJECT_LEAD", "name": "integration-tests", "roles": {}, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "properties": {}}}, "emitted_at": 1671009531517} +{"stream": "filter_sharing", "data": {"id": 10063, "type": "group", "group": {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}}, "emitted_at": 1671009531734} +{"stream": "groups", "data": {"name": "Test group 17", "groupId": "022bc924-ac57-442d-80c9-df042b73ad87"}, "emitted_at": 1671009546481} +{"stream": "groups", "data": {"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1"}, "emitted_at": 1671009546482} +{"stream": "groups", "data": {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, "emitted_at": 1671009546482} +{"stream": "groups", "data": {"name": "Test group 6", "groupId": "2d4af5cf-cd34-4e78-9445-abc000cdd5cc"}, "emitted_at": 1671009546482} +{"stream": "groups", "data": {"name": "jira-admins-airbyteio", "groupId": "2d55cbe0-4cab-46a4-853e-ec31162ab9a3"}, "emitted_at": 1671009546482} +{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10627", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627", "key": "TESTKEY13-1", "fields": {"statuscategorychangedate": "2022-06-09T16:29:32.382-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "name": "Test project 13", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": "2022-12-09T06:08:31.026-0800", "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "customfield_10181": null, "created": "2022-06-09T16:29:31.871-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10025": null, "labels": ["test"], "customfield_10026": null, "customfield_10016": null, "customfield_10017": "dark_orange", "customfield_10215": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i0077b:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-12-08T02:22:18.889-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", "id": "10065", "name": "Component 0", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test issue"}]}]}, "customfield_10010": null, "customfield_10011": "EPIC NAME TEXT", "customfield_10210": null, "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10211": null, "customfield_10013": "ghx-label-14", "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "timetracking": {}, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "aggregatetimeestimate": null, "customfield_10009": "2022-12-09T00:00:00.000-0800", "attachment": [], "customfield_10209": null, "summary": "My Summary", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10016", "projectKey": "TESTKEY13", "created": "2022-06-09T16:29:31.871-0700", "updated": "2022-12-08T02:22:18.889-0800"}, "emitted_at": 1671009548676} +{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10626", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "key": "IT-26", "fields": {"statuscategorychangedate": "2022-05-17T04:28:19.775-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": "2022-12-06T12:56:19.627-0800", "customfield_10181": null, "created": "2022-05-17T04:28:19.523-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10025": null, "customfield_10026": null, "labels": [], "customfield_10016": null, "customfield_10017": "dark_yellow", "customfield_10215": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i00773:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "outwardIssue": {"id": "10625", "key": "IT-25", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "fields": {"summary": "Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-05-17T04:28:19.834-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-2", "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "timetracking": {}, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "attachment": [], "aggregatetimeestimate": null, "customfield_10009": null, "customfield_10209": null, "summary": "CLONE - Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:28:19.523-0700", "updated": "2022-05-17T04:28:19.834-0700"}, "emitted_at": 1671009548677} +{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10625", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "key": "IT-25", "fields": {"statuscategorychangedate": "2022-05-17T04:06:24.675-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "lastViewed": null, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/watchers", "watchCount": 1, "isWatching": true}, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "customfield_10181": null, "created": "2022-05-17T04:06:24.048-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10026": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i0076v:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "inwardIssue": {"id": "10626", "key": "IT-26", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "fields": {"summary": "CLONE - Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-05-17T04:28:19.876-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-2", "customfield_10014": null, "customfield_10212": null, "customfield_10213": null, "timetracking": {}, "customfield_10015": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "aggregatetimeestimate": null, "attachment": [], "customfield_10009": null, "customfield_10209": null, "summary": "Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "comment": {"comments": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076-0700", "updated": "2022-05-17T04:06:55.076-0700", "jsdPublic": true}], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment", "maxResults": 1, "total": 1, "startAt": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/votes", "votes": 0, "hasVoted": false}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:06:24.048-0700", "updated": "2022-05-17T04:28:19.876-0700"}, "emitted_at": 1671009548677} +{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10080", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080", "key": "IT-24", "fields": {"statuscategorychangedate": "2021-03-11T06:17:33.483-0800", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}, "timespent": 20880, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": 20880, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "lastViewed": null, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/watchers", "watchCount": 1, "isWatching": true}, "customfield_10181": null, "created": "2021-03-11T06:17:33.169-0800", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10016": null, "customfield_10215": null, "customfield_10017": null, "customfield_10018": {"hasEpicLinkFieldDependency": true, "showField": true, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i000hr:", "aggregatetimeoriginalestimate": null, "timeestimate": 0, "versions": [], "issuelinks": [{"id": "10244", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10244", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "inwardIssue": {"id": "10069", "key": "IT-22", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10069", "fields": {"summary": "Test 63", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}, {"id": "10243", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10243", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "inwardIssue": {"id": "10075", "key": "IT-23", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075", "fields": {"summary": "Test 69", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}}}}], "assignee": null, "updated": "2021-04-15T11:39:47.872-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [], "timeoriginalestimate": null, "description": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test description 74"}]}]}, "customfield_10010": null, "customfield_10210": null, "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "customfield_10213": null, "timetracking": {"remainingEstimate": "0m", "timeSpent": "5h 48m", "remainingEstimateSeconds": 0, "timeSpentSeconds": 20880}, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "aggregatetimeestimate": 0, "customfield_10009": null, "attachment": [{"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10123", "id": "10123", "filename": "demo.xlsx", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:01.652-0700", "size": 7360, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10123"}], "customfield_10209": null, "summary": "Test 74", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 20880, "total": 20880, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 20880, "total": 20880, "percent": 100}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/comment", "maxResults": 0, "total": 0, "startAt": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/votes", "votes": 1, "hasVoted": true}, "worklog": {"startAt": 0, "maxResults": 20, "total": 3, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:46.574-0700", "updated": "2021-04-15T11:39:46.574-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 21m", "timeSpentSeconds": 8460, "id": "11708", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.215-0700", "updated": "2021-04-15T11:39:47.215-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "37m", "timeSpentSeconds": 2220, "id": "11709", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11710", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.834-0700", "updated": "2021-04-15T11:39:47.834-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 50m", "timeSpentSeconds": 10200, "id": "11710", "issueId": "10080"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2021-03-11T06:17:33.169-0800", "updated": "2021-04-15T11:39:47.872-0700"}, "emitted_at": 1671009548678} +{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10075", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075", "key": "IT-23", "fields": {"statuscategorychangedate": "2021-03-11T06:17:28.873-0800", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}, "timespent": 26880, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": 26880, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": null, "customfield_10181": null, "created": "2021-03-11T06:17:28.477-0800", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "customfield_10023": null, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10016": null, "customfield_10215": null, "customfield_10017": null, "customfield_10018": {"hasEpicLinkFieldDependency": true, "showField": true, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i000gn:", "timeestimate": 0, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [{"id": "10243", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10243", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "outwardIssue": {"id": "10080", "key": "IT-24", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080", "fields": {"summary": "Test 74", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}}}}], "assignee": null, "updated": "2021-04-15T11:39:50.244-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [], "timeoriginalestimate": null, "description": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test description 69"}]}]}, "customfield_10010": null, "customfield_10210": null, "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "customfield_10015": null, "timetracking": {"remainingEstimate": "0m", "timeSpent": "7h 28m", "remainingEstimateSeconds": 0, "timeSpentSeconds": 26880}, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "customfield_10009": null, "aggregatetimeestimate": 0, "attachment": [{"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10126", "id": "10126", "filename": "demo.csv", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:04.596-0700", "size": 284042, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10126"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10125", "id": "10125", "filename": "demo.json", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:03.555-0700", "size": 15576, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10125"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10127", "id": "10127", "filename": "demo.xls", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:05.632-0700", "size": 13824, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10127"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10124", "id": "10124", "filename": "demo.xlsx", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:02.575-0700", "size": 7360, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10124"}], "customfield_10209": null, "summary": "Test 69", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 26880, "total": 26880, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 26880, "total": 26880, "percent": 100}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/votes", "votes": 1, "hasVoted": true}, "comment": {"comments": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", "id": "10521", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:32:43.099-0700", "updated": "2021-04-14T14:32:43.099-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10639", "id": "10639", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.998-0700", "updated": "2021-04-15T00:08:48.998-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10640", "id": "10640", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:49.523-0700", "updated": "2021-04-15T00:08:49.523-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10641", "id": "10641", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:50.048-0700", "updated": "2021-04-15T00:08:50.048-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10642", "id": "10642", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:50.571-0700", "updated": "2021-04-15T00:08:50.571-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10643", "id": "10643", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:51.142-0700", "updated": "2021-04-15T00:08:51.142-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10644", "id": "10644", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:51.717-0700", "updated": "2021-04-15T00:08:51.717-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10645", "id": "10645", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:52.217-0700", "updated": "2021-04-15T00:08:52.217-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10646", "id": "10646", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:52.941-0700", "updated": "2021-04-15T00:08:52.941-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10647", "id": "10647", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:53.824-0700", "updated": "2021-04-15T00:08:53.824-0700", "jsdPublic": true}], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment", "maxResults": 10, "total": 10, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 4, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11711", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:48.447-0700", "updated": "2021-04-15T11:39:48.447-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 28m", "timeSpentSeconds": 5280, "id": "11711", "issueId": "10075"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11712", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:49.096-0700", "updated": "2021-04-15T11:39:49.096-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 55m", "timeSpentSeconds": 6900, "id": "11712", "issueId": "10075"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11713", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:49.662-0700", "updated": "2021-04-15T11:39:49.662-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 42m", "timeSpentSeconds": 9720, "id": "11713", "issueId": "10075"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11714", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 3", "type": "text"}]}]}, "created": "2021-04-15T11:39:50.205-0700", "updated": "2021-04-15T11:39:50.205-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 23m", "timeSpentSeconds": 4980, "id": "11714", "issueId": "10075"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2021-03-11T06:17:28.477-0800", "updated": "2021-04-15T11:39:50.244-0700"}, "emitted_at": 1671009548680} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076-0700", "updated": "2022-05-17T04:06:55.076-0700", "jsdPublic": true}, "emitted_at": 1671009550053} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", "id": "10521", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:32:43.099-0700", "updated": "2021-04-14T14:32:43.099-0700", "jsdPublic": true}, "emitted_at": 1671009550435} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10639", "id": "10639", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.998-0700", "updated": "2021-04-15T00:08:48.998-0700", "jsdPublic": true}, "emitted_at": 1671009550435} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10640", "id": "10640", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:49.523-0700", "updated": "2021-04-15T00:08:49.523-0700", "jsdPublic": true}, "emitted_at": 1671009550436} +{"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10641", "id": "10641", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:50.048-0700", "updated": "2021-04-15T00:08:50.048-0700", "jsdPublic": true}, "emitted_at": 1671009550436} +{"stream": "issue_fields", "data": {"id": "statuscategorychangedate", "key": "statuscategorychangedate", "name": "Status Category Changed", "custom": false, "orderable": false, "navigable": true, "searchable": true, "clauseNames": ["statusCategoryChangedDate"], "schema": {"type": "datetime", "system": "statuscategorychangedate"}}, "emitted_at": 1671009554865} +{"stream": "issue_fields", "data": {"id": "issuetype", "key": "issuetype", "name": "Issue Type", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["issuetype", "type"], "schema": {"type": "issuetype", "system": "issuetype"}}, "emitted_at": 1671009554866} +{"stream": "issue_fields", "data": {"id": "parent", "key": "parent", "name": "Parent", "custom": false, "orderable": false, "navigable": true, "searchable": false, "clauseNames": ["parent"]}, "emitted_at": 1671009554866} +{"stream": "issue_fields", "data": {"id": "timespent", "key": "timespent", "name": "Time Spent", "custom": false, "orderable": false, "navigable": true, "searchable": false, "clauseNames": ["timespent"], "schema": {"type": "number", "system": "timespent"}}, "emitted_at": 1671009554866} +{"stream": "issue_fields", "data": {"id": "customfield_10030", "key": "io.tempo.jira__account", "name": "Account", "untranslatedName": "Account", "custom": true, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["Account", "cf[10030]"], "schema": {"type": "option2", "custom": "com.atlassian.plugins.atlassian-connect-plugin:io.tempo.jira__account", "customId": 10030}}, "emitted_at": 1671009554866} +{"stream": "issue_field_configurations", "data": {"id": 10000, "name": "Default Field Configuration", "description": "The default field configuration", "isDefault": true}, "emitted_at": 1671009555202} +{"stream": "issue_custom_field_contexts", "data": {"id": "10130", "name": "Default Configuration Scheme for Account", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true}, "emitted_at": 1671009555559} +{"stream": "issue_custom_field_contexts", "data": {"id": "10129", "name": "Default Configuration Scheme for Team", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true}, "emitted_at": 1671009555694} +{"stream": "issue_custom_field_contexts", "data": {"id": "10333", "name": "Default Configuration Scheme for New custom field 3", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true}, "emitted_at": 1671009555838} +{"stream": "issue_custom_field_contexts", "data": {"id": "10120", "name": "Default Configuration Scheme for Sprint", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true}, "emitted_at": 1671009555977} +{"stream": "issue_custom_field_contexts", "data": {"id": "10121", "name": "Default Configuration Scheme for Flagged", "description": "Default configuration scheme generated by Jira", "isGlobalContext": true, "isAnyIssueType": true}, "emitted_at": 1671009556112} +{"stream": "issue_link_types", "data": {"id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10000"}, "emitted_at": 1671009561974} +{"stream": "issue_link_types", "data": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "emitted_at": 1671009561975} +{"stream": "issue_link_types", "data": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "emitted_at": 1671009561975} +{"stream": "issue_link_types", "data": {"id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10003"}, "emitted_at": 1671009561975} +{"stream": "issue_navigator_settings", "data": {"label": "Issue Type", "value": "issuetype"}, "emitted_at": 1671009562329} +{"stream": "issue_navigator_settings", "data": {"label": "Key", "value": "issuekey"}, "emitted_at": 1671009562329} +{"stream": "issue_navigator_settings", "data": {"label": "Summary", "value": "summary"}, "emitted_at": 1671009562329} +{"stream": "issue_navigator_settings", "data": {"label": "Assignee", "value": "assignee"}, "emitted_at": 1671009562329} +{"stream": "issue_navigator_settings", "data": {"label": "Reporter", "value": "reporter"}, "emitted_at": 1671009562330} +{"stream": "issue_notification_schemes", "data": {"expand": "notificationSchemeEvents,user,group,projectRole,field,all", "id": 10000, "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10000", "name": "Default Notification Scheme"}, "emitted_at": 1671009562628} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/1", "statusColor": "#d04437", "description": "This problem will block progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/highest.svg", "name": "Highest", "id": "1", "isDefault": false}, "emitted_at": 1671009562940} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/2", "statusColor": "#f15C75", "description": "Serious problem that could block progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/high.svg", "name": "High", "id": "2", "isDefault": false}, "emitted_at": 1671009562940} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "statusColor": "#f79232", "description": "Has the potential to affect progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3", "isDefault": false}, "emitted_at": 1671009562940} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "statusColor": "#707070", "description": "Minor problem or easily worked around.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4", "isDefault": false}, "emitted_at": 1671009562940} +{"stream": "issue_priorities", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/5", "statusColor": "#999999", "description": "Trivial problem with little or no impact on progress.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/lowest.svg", "name": "Lowest", "id": "5", "isDefault": false}, "emitted_at": 1671009562941} +{"stream": "issue_remote_links", "data": {"id": 10046, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/remotelink/10046", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}}, "emitted_at": 1671009569133} +{"stream": "issue_remote_links", "data": {"id": 10047, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/remotelink/10047", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}}, "emitted_at": 1671009569285} +{"stream": "issue_remote_links", "data": {"id": 10048, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-22/remotelink/10048", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}}, "emitted_at": 1671009569438} +{"stream": "issue_remote_links", "data": {"id": 10049, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-21/remotelink/10049", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}}, "emitted_at": 1671009569605} +{"stream": "issue_remote_links", "data": {"id": 10050, "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-20/remotelink/10050", "globalId": "system=https://www.mycompany.com/support&id=1", "application": {"type": "com.acme.tracker", "name": "My Acme Tracker"}, "relationship": "causes", "object": {"url": "https://www.mycompany.com/support?id=1", "title": "TSTSUP-111", "summary": "Customer support issue", "icon": {"url16x16": "https://www.mycompany.com/support/ticket.png", "title": "Support Ticket"}, "status": {"resolved": true, "icon": {"url16x16": "https://www.mycompany.com/support/resolved.png", "title": "Case Closed", "link": "https://www.mycompany.com/support?id=1&details=closed"}}}}, "emitted_at": 1671009569762} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10000", "id": "10000", "description": "Work has been completed on this issue.", "name": "Done", "isDefault": false}, "emitted_at": 1671009573115} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10001", "id": "10001", "description": "This issue won't be actioned.", "name": "Won't Do", "isDefault": false}, "emitted_at": 1671009573115} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10002", "id": "10002", "description": "The problem is a duplicate of an existing issue.", "name": "Duplicate", "isDefault": false}, "emitted_at": 1671009573115} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10003", "id": "10003", "description": "All attempts at reproducing this issue failed, or not enough information was available to reproduce the issue. Reading the code produces no clues as to why this behavior would occur. If more information appears later, please reopen the issue.", "name": "Cannot Reproduce", "isDefault": false}, "emitted_at": 1671009573115} +{"stream": "issue_resolutions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10004", "id": "10004", "description": "Fixed", "name": "Fixed", "isDefault": false}, "emitted_at": 1671009573116} +{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10001", "id": 10001, "name": "Security scheme 2", "description": "Security scheme 2"}, "emitted_at": 1671009573415} +{"stream": "issue_security_schemes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10000", "id": 10000, "name": "Security scheme 1", "description": "Security scheme 1", "defaultSecurityLevelId": 10002}, "emitted_at": 1671009573415} +{"stream": "issue_type_schemes", "data": {"id": "10000", "name": "Default Issue Type Scheme", "description": "Default issue type scheme is the list of global issue types. All newly created issue types will automatically be added to this scheme.", "isDefault": true}, "emitted_at": 1671009573731} +{"stream": "issue_type_schemes", "data": {"id": "10126", "name": "IT: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1671009573732} +{"stream": "issue_type_schemes", "data": {"id": "10128", "name": "P2: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1671009573732} +{"stream": "issue_type_schemes", "data": {"id": "10131", "name": "TEXT: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1671009573732} +{"stream": "issue_type_schemes", "data": {"id": "10132", "name": "EX: Scrum Issue Type Scheme", "defaultIssueTypeId": "10001"}, "emitted_at": 1671009573732} +{"stream": "issue_type_screen_schemes", "data": {"id": "1", "name": "Default Issue Type Screen Scheme", "description": "The default issue type screen scheme"}, "emitted_at": 1671009574180} +{"stream": "issue_type_screen_schemes", "data": {"id": "10000", "name": "IT: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1671009574180} +{"stream": "issue_type_screen_schemes", "data": {"id": "10001", "name": "P2: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1671009574180} +{"stream": "issue_type_screen_schemes", "data": {"id": "10002", "name": "TEXT: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1671009574180} +{"stream": "issue_type_screen_schemes", "data": {"id": "10003", "name": "EX: Scrum Issue Type Screen Scheme", "description": ""}, "emitted_at": 1671009574181} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/votes", "votes": 0, "hasVoted": false, "voters": []}, "emitted_at": 1671009574696} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false, "voters": []}, "emitted_at": 1671009574863} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/votes", "votes": 0, "hasVoted": false, "voters": []}, "emitted_at": 1671009575014} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/votes", "votes": 1, "hasVoted": true, "voters": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}]}, "emitted_at": 1671009575156} +{"stream": "issue_votes", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/votes", "votes": 1, "hasVoted": true, "voters": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}]}, "emitted_at": 1671009575313} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}]}, "emitted_at": 1671009579068} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}]}, "emitted_at": 1671009579225} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}]}, "emitted_at": 1671009579393} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}]}, "emitted_at": 1671009579542} +{"stream": "issue_watchers", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/watchers", "isWatching": true, "watchCount": 1, "watchers": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}]}, "emitted_at": 1671009579707} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:46.574-0700", "updated": "2021-04-15T11:39:46.574-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 21m", "timeSpentSeconds": 8460, "id": "11708", "issueId": "10080"}, "emitted_at": 1671009584405} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.215-0700", "updated": "2021-04-15T11:39:47.215-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "37m", "timeSpentSeconds": 2220, "id": "11709", "issueId": "10080"}, "emitted_at": 1671009584406} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11710", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.834-0700", "updated": "2021-04-15T11:39:47.834-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 50m", "timeSpentSeconds": 10200, "id": "11710", "issueId": "10080"}, "emitted_at": 1671009584406} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11711", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:48.447-0700", "updated": "2021-04-15T11:39:48.447-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 28m", "timeSpentSeconds": 5280, "id": "11711", "issueId": "10075"}, "emitted_at": 1671009584583} +{"stream": "issue_worklogs", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11712", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:49.096-0700", "updated": "2021-04-15T11:39:49.096-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 55m", "timeSpentSeconds": 6900, "id": "11712", "issueId": "10075"}, "emitted_at": 1671009584584} +{"stream": "jira_settings", "data": {"id": "jira.issuenav.criteria.autoupdate", "key": "jira.issuenav.criteria.autoupdate", "value": "true", "name": "Auto Update Criteria", "desc": "Turn on to update search results automatically", "type": "boolean"}, "emitted_at": 1671009589293} +{"stream": "jira_settings", "data": {"id": "jira.clone.prefix", "key": "jira.clone.prefix", "value": "CLONE -", "name": "The prefix added to the Summary field of cloned issues", "type": "string"}, "emitted_at": 1671009589293} +{"stream": "jira_settings", "data": {"id": "jira.date.picker.java.format", "key": "jira.date.picker.java.format", "value": "d/MMM/yy", "name": "Date Picker Format (Java)", "desc": "This part is only for the Java (server side) generated dates. Note that this should correspond to the javascript date picker format (jira.date.picker.javascript.format) setting.", "type": "string"}, "emitted_at": 1671009589293} +{"stream": "jira_settings", "data": {"id": "jira.date.picker.javascript.format", "key": "jira.date.picker.javascript.format", "value": "%e/%b/%y", "name": "Date Picker Format (JavaScript)", "desc": "This part is only for the JavaScript (client side) generated dates. Note that this should correspond to the java date picker format (jira.date.picker.java.format) setting.", "type": "string"}, "emitted_at": 1671009589293} +{"stream": "jira_settings", "data": {"id": "jira.date.time.picker.java.format", "key": "jira.date.time.picker.java.format", "value": "dd/MMM/yy h:mm a", "name": "DateTime Picker Format (Java)", "desc": "This part is only for the Java (server side) generated datetimes. Note that this should correspond to the javascript datetime picker format (jira.date.time.picker.javascript.format) setting.", "type": "string"}, "emitted_at": 1671009589293} +{"stream": "labels", "data": {"label": "test"}, "emitted_at": 1671009589718} +{"stream": "labels", "data": {"label": "zZ"}, "emitted_at": 1671009589719} +{"stream": "permissions", "data": {"key": "ADD_COMMENTS", "name": "Add Comments", "type": "PROJECT", "description": "Ability to comment on issues."}, "emitted_at": 1671009590097} +{"stream": "permissions", "data": {"key": "ADMINISTER", "name": "Administer Jira", "type": "GLOBAL", "description": "Create and administer projects, issue types, fields, workflows, and schemes for all projects. Users with this permission can perform most administration tasks, except: managing users, importing data, and editing system email settings."}, "emitted_at": 1671009590098} +{"stream": "permissions", "data": {"key": "ADMINISTER_PROJECTS", "name": "Administer Projects", "type": "PROJECT", "description": "Ability to administer a project in Jira."}, "emitted_at": 1671009590098} +{"stream": "permissions", "data": {"key": "ASSIGNABLE_USER", "name": "Assignable User", "type": "PROJECT", "description": "Users with this permission may be assigned to issues."}, "emitted_at": 1671009590098} +{"stream": "permissions", "data": {"key": "ASSIGN_ISSUES", "name": "Assign Issues", "type": "PROJECT", "description": "Ability to assign issues to other people."}, "emitted_at": 1671009590098} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10056, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056", "name": "CAW software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 14200, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14200", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14201, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14201", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14202, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14202", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14203, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14203", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14204, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14204", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14205, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14205", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14206, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14206", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14207, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14207", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14208, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14208", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14209, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14209", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14210, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14210", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14211, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14211", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14212, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14212", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14213, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14213", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14214, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14214", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14215, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14215", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14216, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14216", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14217, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14217", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14218, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14218", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14219, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14219", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14220, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14220", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14221, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14221", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14222, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14222", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14223, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14223", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14224, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14224", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14225, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14225", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14226, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14226", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14227, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14227", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14228, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14228", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14229, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14229", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14230, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14230", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14231, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14231", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14232, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14232", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14233, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14233", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14234, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14234", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14235, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14235", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14404, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14404", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14481, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14481", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14836, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14836", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14837, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14837", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 14236, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14236", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14237, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14237", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14238, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14238", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14239, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14239", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14240, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14240", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14241, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14241", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14242, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14242", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14243, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14243", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14244, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14244", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 14245, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14245", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14246, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14246", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14247, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14247", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14248, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14248", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14249, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14249", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14250, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14250", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14251, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14251", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14252, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14252", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14253, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14253", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14254, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14254", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14255, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14255", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14256, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14256", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14257, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14257", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14258, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14258", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14259, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14259", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14260, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14260", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14261, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14261", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14262, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14262", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14263, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14263", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14264, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14264", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14265, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14265", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14266, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14266", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14267, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14267", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14542, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14542", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14714, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14714", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14715, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10056/permission/14715", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}]}, "emitted_at": 1671009590690} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10055, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055", "name": "CLK software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 14132, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14132", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14133, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14133", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14134, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14134", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14135, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14135", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14136, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14136", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14137, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14137", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14138, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14138", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14139, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14139", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14140, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14140", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14141, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14141", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14142, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14142", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14143, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14143", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14144, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14144", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14145, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14145", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14146, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14146", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14147, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14147", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14148, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14148", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14149, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14149", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14150, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14150", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14151, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14151", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14152, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14152", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14153, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14153", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14154, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14154", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14155, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14155", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14156, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14156", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14157, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14157", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14158, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14158", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14159, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14159", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14160, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14160", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14161, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14161", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14162, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14162", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14163, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14163", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14164, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14164", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14165, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14165", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14166, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14166", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14167, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14167", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14405, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14405", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14482, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14482", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14834, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14834", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14835, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14835", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 14168, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14168", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14169, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14169", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14170, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14170", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14171, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14171", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14172, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14172", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14173, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14173", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14174, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14174", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14175, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14175", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14176, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14176", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 14177, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14177", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14178, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14178", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14179, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14179", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14180, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14180", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14181, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14181", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14182, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14182", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14183, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14183", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14184, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14184", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14185, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14185", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14186, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14186", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14187, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14187", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14188, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14188", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14189, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14189", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14190, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14190", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14191, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14191", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14192, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14192", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14193, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14193", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14194, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14194", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14195, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14195", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14196, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14196", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14197, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14197", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14198, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14198", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14199, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14199", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14543, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14543", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14712, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14712", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14713, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10055/permission/14713", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}]}, "emitted_at": 1671009590691} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 0, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0", "name": "Default Permission Scheme", "description": "This is the default Permission Scheme. Any new projects that are created will be assigned this scheme.", "permissions": [{"id": 10004, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10004", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10014, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10014", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10018, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10018", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10020, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10020", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10022, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10022", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10025, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10025", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10026, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10026", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10028, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10028", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10030, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10030", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10301, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10301", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 10302, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10302", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10303, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10303", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10304, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10304", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10305, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10305", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10306, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10306", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10307, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10307", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10308, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10308", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 10309, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10309", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10310, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10310", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10311, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10311", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10312, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10312", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10313, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10313", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10314, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10314", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10315, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10315", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10316, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10316", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10317, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10317", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10318, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10318", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 10319, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10319", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10320, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10320", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10321, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10321", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 10322, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10322", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 10323, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10323", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10324, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10324", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10325, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10325", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 10326, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10326", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10327, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10327", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10328, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10328", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 10329, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10329", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10330, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10330", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10331, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10331", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10332, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10332", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10333, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10333", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10464, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10464", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 10465, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10465", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 10466, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10466", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 10467, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10467", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14538, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14538", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14722, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14722", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14723, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14723", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 10005, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10005", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10006, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10006", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 10007, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10007", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 10008, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10008", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10009, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10009", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10010, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10010", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10011, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10011", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10012, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10012", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 10013, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10013", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 10015, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10015", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10016, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10016", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 10017, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10017", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10019, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10019", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10021, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10021", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10023, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10023", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10024, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10024", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10027, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10027", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10029, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10029", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10031, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10031", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10033, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10033", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10200, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10200", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10300, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/10300", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14599, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14599", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14600, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14600", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14601, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/0/permission/14601", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}]}, "emitted_at": 1671009590693} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10059, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059", "name": "Default software scheme", "description": "Default scheme for Software projects.", "permissions": [{"id": 14415, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14415", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14421, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14421", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14424, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14424", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14426, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14426", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14427, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14427", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14429, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14429", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14431, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14431", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14434, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14434", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14436, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14436", "holder": {"type": "projectRole", "parameter": "10002", "value": "10002", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14441, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14441", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 14442, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14442", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 14443, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14443", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14444, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14444", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14445, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14445", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14446, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14446", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14447, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14447", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14448, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14448", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 14449, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14449", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 14450, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14450", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 14451, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14451", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 14452, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14452", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 14453, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14453", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14454, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14454", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14455, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14455", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14456, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14456", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 14457, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14457", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 14458, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14458", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 14459, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14459", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14460, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14460", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14461, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14461", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 14462, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14462", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14463, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14463", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 14464, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14464", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 14465, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14465", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 14466, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14466", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14467, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14467", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14468, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14468", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14469, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14469", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14470, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14470", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14471, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14471", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14472, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14472", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14473, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14473", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14474, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14474", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 14475, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14475", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 14476, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14476", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 14477, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14477", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14478, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14478", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14842, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14842", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14843, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14843", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 14409, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14409", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 14410, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14410", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 14411, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14411", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 14412, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14412", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14413, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14413", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 14414, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14414", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 14416, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14416", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 14417, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14417", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 14418, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14418", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 14419, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14419", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 14420, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14420", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 14422, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14422", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 14423, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14423", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 14425, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14425", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 14428, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14428", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 14430, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14430", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 14432, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14432", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 14433, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14433", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 14435, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14435", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 14437, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14437", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 14438, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14438", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 14439, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14439", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 14440, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14440", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 14539, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14539", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14720, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14720", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14721, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10059/permission/14721", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}]}, "emitted_at": 1671009590694} +{"stream": "permission_schemes", "data": {"expand": "permissions,user,group,projectRole,field,all", "id": 10003, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003", "name": "EX software permission scheme", "description": "The permission scheme for Jira Software Free. In Free, any registered user can access and administer this project.", "permissions": [{"id": 10544, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10544", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADD_COMMENTS"}, {"id": 10545, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10545", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10546, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10546", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10547, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10547", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 10548, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10548", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10549, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10549", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10550, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10550", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10551, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10551", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "CREATE_ISSUES"}, {"id": 10552, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10552", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10553, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10553", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10554, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10554", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10555, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10555", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_ISSUES"}, {"id": 10556, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10556", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10557, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10557", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10558, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10558", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10559, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10559", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10560, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10560", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10561, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10561", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_ISSUES"}, {"id": 10562, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10562", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10563, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10563", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10564, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10564", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "LINK_ISSUES"}, {"id": 10565, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10565", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 10566, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10566", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10567, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10567", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10568, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10568", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "MOVE_ISSUES"}, {"id": 10569, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10569", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10570, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10570", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10571, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10571", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10572, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10572", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10573, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10573", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10574, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10574", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10575, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10575", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10576, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10576", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__log-work-for-others"}, {"id": 10577, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10577", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__set-billable-hours"}, {"id": 10578, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10578", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-all-worklogs"}, {"id": 10579, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10579", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "io.tempo.jira__view-issue-hours"}, {"id": 14012, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14012", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "SET_ISSUE_SECURITY"}, {"id": 14534, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14534", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14730, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14730", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14731, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14731", "holder": {"type": "projectRole", "parameter": "10003", "value": "10003", "expand": "projectRole"}, "permission": "VIEW_ISSUES"}, {"id": 10580, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10580", "holder": {"type": "applicationRole"}, "permission": "ADMINISTER_PROJECTS"}, {"id": 10581, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10581", "holder": {"type": "applicationRole"}, "permission": "BROWSE_PROJECTS"}, {"id": 10582, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10582", "holder": {"type": "applicationRole"}, "permission": "MANAGE_SPRINTS_PERMISSION"}, {"id": 10583, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10583", "holder": {"type": "applicationRole"}, "permission": "VIEW_DEV_TOOLS"}, {"id": 10584, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10584", "holder": {"type": "applicationRole"}, "permission": "VIEW_READONLY_WORKFLOW"}, {"id": 10585, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10585", "holder": {"type": "applicationRole"}, "permission": "ASSIGNABLE_USER"}, {"id": 10586, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10586", "holder": {"type": "applicationRole"}, "permission": "CLOSE_ISSUES"}, {"id": 10587, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10587", "holder": {"type": "applicationRole"}, "permission": "CREATE_ISSUES"}, {"id": 10588, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10588", "holder": {"type": "applicationRole"}, "permission": "DELETE_ISSUES"}, {"id": 10589, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10589", "holder": {"type": "applicationRole"}, "permission": "EDIT_ISSUES"}, {"id": 10590, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10590", "holder": {"type": "applicationRole"}, "permission": "LINK_ISSUES"}, {"id": 10591, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10591", "holder": {"type": "applicationRole"}, "permission": "MODIFY_REPORTER"}, {"id": 10592, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10592", "holder": {"type": "applicationRole"}, "permission": "MOVE_ISSUES"}, {"id": 10593, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10593", "holder": {"type": "applicationRole"}, "permission": "RESOLVE_ISSUES"}, {"id": 10594, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10594", "holder": {"type": "applicationRole"}, "permission": "SCHEDULE_ISSUES"}, {"id": 10595, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10595", "holder": {"type": "applicationRole"}, "permission": "TRANSITION_ISSUES"}, {"id": 10596, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10596", "holder": {"type": "applicationRole"}, "permission": "MANAGE_WATCHERS"}, {"id": 10597, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10597", "holder": {"type": "applicationRole"}, "permission": "VIEW_VOTERS_AND_WATCHERS"}, {"id": 10598, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10598", "holder": {"type": "applicationRole"}, "permission": "ADD_COMMENTS"}, {"id": 10599, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10599", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_COMMENTS"}, {"id": 10600, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10600", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_COMMENTS"}, {"id": 10601, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10601", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_COMMENTS"}, {"id": 10602, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10602", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_COMMENTS"}, {"id": 10603, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10603", "holder": {"type": "applicationRole"}, "permission": "CREATE_ATTACHMENTS"}, {"id": 10604, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10604", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_ATTACHMENTS"}, {"id": 10605, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10605", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_ATTACHMENTS"}, {"id": 10606, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10606", "holder": {"type": "applicationRole"}, "permission": "DELETE_ALL_WORKLOGS"}, {"id": 10607, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10607", "holder": {"type": "applicationRole"}, "permission": "DELETE_OWN_WORKLOGS"}, {"id": 10608, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10608", "holder": {"type": "applicationRole"}, "permission": "EDIT_ALL_WORKLOGS"}, {"id": 10609, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10609", "holder": {"type": "applicationRole"}, "permission": "EDIT_OWN_WORKLOGS"}, {"id": 10610, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10610", "holder": {"type": "applicationRole"}, "permission": "WORK_ON_ISSUES"}, {"id": 10611, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/10611", "holder": {"type": "applicationRole"}, "permission": "ASSIGN_ISSUES"}, {"id": 14595, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14595", "holder": {"type": "applicationRole"}, "permission": "VIEW_AGGREGATED_DATA"}, {"id": 14608, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14608", "holder": {"type": "applicationRole"}, "permission": "VIEW_PROJECTS"}, {"id": 14609, "self": "https://airbyteio.atlassian.net/rest/api/3/permissionscheme/10003/permission/14609", "holder": {"type": "applicationRole"}, "permission": "VIEW_ISSUES"}]}, "emitted_at": 1671009590696} +{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "description": "", "name": "integration-tests", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "isPrivate": false, "properties": {}}, "emitted_at": 1671009590800} +{"stream": "projects", "data": {"expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", "self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "description": "Test project 13 description", "name": "Test project 13", "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium"}, "projectTypeKey": "software", "simplified": false, "style": "classic", "isPrivate": false, "properties": {}}, "emitted_at": 1671009590800} +{"stream": "project_avatars", "data": {"id": "10400", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10400&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10400&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10400&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10400&avatarType=project"}}, "emitted_at": 1671009591118} +{"stream": "project_avatars", "data": {"id": "10401", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10401&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10401&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10401&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10401&avatarType=project"}}, "emitted_at": 1671009591118} +{"stream": "project_avatars", "data": {"id": "10402", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10402&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10402&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10402&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10402&avatarType=project"}}, "emitted_at": 1671009591118} +{"stream": "project_avatars", "data": {"id": "10403", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10403&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10403&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10403&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10403&avatarType=project"}}, "emitted_at": 1671009591118} +{"stream": "project_avatars", "data": {"id": "10404", "isSystemAvatar": true, "isSelected": false, "isDeletable": false, "urls": {"16x16": "/secure/viewavatar?size=xsmall&avatarId=10404&avatarType=project", "24x24": "/secure/viewavatar?size=small&avatarId=10404&avatarType=project", "32x32": "/secure/viewavatar?size=medium&avatarId=10404&avatarType=project", "48x48": "/secure/viewavatar?avatarId=10404&avatarType=project"}}, "emitted_at": 1671009591119} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", "id": "10000", "description": "Category 1", "name": "Category 1"}, "emitted_at": 1671009591744} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10001", "id": "10001", "description": "Category 2", "name": "Category 2"}, "emitted_at": 1671009591745} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10002", "id": "10002", "description": "Test Project Category 0", "name": "Test category 0"}, "emitted_at": 1671009591745} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10003", "id": "10003", "description": "Test Project Category 1", "name": "Test category 1"}, "emitted_at": 1671009591745} +{"stream": "project_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10004", "id": "10004", "description": "Test Project Category 2", "name": "Test category 2"}, "emitted_at": 1671009591745} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", "id": "10047", "name": "Component 0", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "description": "This is a Jira component", "name": "Component 0", "id": "10047", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}}, "emitted_at": 1671009592090} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", "id": "10000", "name": "Component 1", "description": "Component 1", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_DEFAULT", "realAssigneeType": "PROJECT_DEFAULT", "isAssigneeTypeValid": false, "project": "IT", "projectId": 10000}, "issueCount": 0, "isAssigneeTypeValid": false, "realAssigneeType": "PROJECT_DEFAULT", "description": "Component 1", "name": "Component 1", "id": "10000", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", "projectId": 10000, "project": "IT", "assigneeType": "PROJECT_DEFAULT", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}}, "emitted_at": 1671009592090} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10048", "id": "10048", "name": "Component 2", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 0, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "description": "This is a Jira component", "name": "Component 2", "id": "10048", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10048", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}}, "emitted_at": 1671009592091} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "IT", "projectId": 10000}, "issueCount": 2, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "description": "This is a Jira component", "name": "Component 3", "id": "10049", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "projectId": 10000, "project": "IT", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}}, "emitted_at": 1671009592091} +{"stream": "project_components", "data": {"componentBean": {"self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", "id": "10065", "name": "Component 0", "description": "This is a Jira component", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "realAssigneeType": "PROJECT_LEAD", "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "project": "TESTKEY13", "projectId": 10016}, "issueCount": 1, "realAssignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "isAssigneeTypeValid": true, "realAssigneeType": "PROJECT_LEAD", "description": "This is a Jira component", "name": "Component 0", "id": "10065", "self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", "projectId": 10016, "project": "TESTKEY13", "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}, "assigneeType": "PROJECT_LEAD", "lead": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true}}, "emitted_at": 1671009592275} +{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10000"}, "emitted_at": 1671009592577} +{"stream": "project_email", "data": {"emailAddress": "jira@airbyteio.atlassian.net", "projectId": "10016"}, "emitted_at": 1671009592701} +{"stream": "project_types", "data": {"key": "product_discovery", "formattedKey": "Product Discovery", "descriptionI18nKey": "jira.project.type.polaris.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRjc5MjMyOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTEzNi42NjcsMTc4LjMzM0wxMjUsMTkwbC00MS42NjctNDBMOTUsMTM4LjMzM2wzMC0zMEwxMzYuNjY3LDEyMGwtMzAsMzBMMTM2LjY2NywxNzguMzMzeiBNMjA1LDE2MS42NjdsLTMwLDMwTDE2My4zMzMsMTgwDQoJCWwzMC0zMGwtMzAtMzBMMTc1LDEwOC4zMzNMMjE2LjY2NywxNTBMMjA1LDE2MS42Njd6Ii8+DQo8L2c+DQo8Zz4NCgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSIxNzUsMTkxLjY2NyAyMDUsMTYxLjY2NyAyMTYuNjY3LDE1MCAxNzUsMTA4LjMzMyAxNjMuMzMzLDEyMCAxOTMuMzMzLDE1MCAxNjMuMzMzLDE4MCAJIi8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHBvaW50cz0iMTI1LDEwOC4zMzMgOTUsMTM4LjMzMyA4My4zMzMsMTUwIDEyNSwxOTAgMTM2LjY2NywxNzguMzMzIDEwNi42NjcsMTUwIDEzNi42NjcsMTIwIAkiLz4NCjwvZz4NCjwvc3ZnPg0K", "color": "#F5A623"}, "emitted_at": 1671009593606} +{"stream": "project_types", "data": {"key": "software", "formattedKey": "Software", "descriptionI18nKey": "jira.project.type.software.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojRjc5MjMyOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTEzNi42NjcsMTc4LjMzM0wxMjUsMTkwbC00MS42NjctNDBMOTUsMTM4LjMzM2wzMC0zMEwxMzYuNjY3LDEyMGwtMzAsMzBMMTM2LjY2NywxNzguMzMzeiBNMjA1LDE2MS42NjdsLTMwLDMwTDE2My4zMzMsMTgwDQoJCWwzMC0zMGwtMzAtMzBMMTc1LDEwOC4zMzNMMjE2LjY2NywxNTBMMjA1LDE2MS42Njd6Ii8+DQo8L2c+DQo8Zz4NCgk8cG9seWdvbiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgcG9pbnRzPSIxNzUsMTkxLjY2NyAyMDUsMTYxLjY2NyAyMTYuNjY3LDE1MCAxNzUsMTA4LjMzMyAxNjMuMzMzLDEyMCAxOTMuMzMzLDE1MCAxNjMuMzMzLDE4MCAJIi8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHBvaW50cz0iMTI1LDEwOC4zMzMgOTUsMTM4LjMzMyA4My4zMzMsMTUwIDEyNSwxOTAgMTM2LjY2NywxNzguMzMzIDEwNi42NjcsMTUwIDEzNi42NjcsMTIwIAkiLz4NCjwvZz4NCjwvc3ZnPg0K", "color": "#F5A623"}, "emitted_at": 1671009593607} +{"stream": "project_types", "data": {"key": "service_desk", "formattedKey": "Service Desk", "descriptionI18nKey": "jira.project.type.servicedesk.description.jsm", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8Zz4NCgkJPHJlY3QgeD0iMTAwIiB5PSIxMDAiIHN0eWxlPSJmaWxsOiM2N0FCNDk7IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjY2LjY2NyIvPg0KCQk8cGF0aCBzdHlsZT0iZmlsbDojNjdBQjQ5OyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkJIE0yMTYuNjY3LDEwMHY2Ni42Njd2MTYuNjY3aC01MFYyMDBIMjAwdjE2LjY2N0gxMDBWMjAwaDMzLjMzM3YtMTYuNjY3aC01MHYtMTYuNjY3VjEwMFY4My4zMzNoMTMzLjMzM1YxMDB6Ii8+DQoJPC9nPg0KPC9nPg0KPHBhdGggc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIGQ9Ik0yMTYuNjY3LDE4My4zMzN2LTE2LjY2N1YxMDBWODMuMzMzSDgzLjMzM1YxMDB2NjYuNjY3djE2LjY2N2g1MFYyMDBIMTAwdjE2LjY2N2gxMDBWMjAwaC0zMy4zMzMNCgl2LTE2LjY2N0gyMTYuNjY3eiBNMTAwLDE2Ni42NjdWMTAwaDEwMHY2Ni42NjdIMTAweiIvPg0KPC9zdmc+DQo=", "color": "#67AB49"}, "emitted_at": 1671009593607} +{"stream": "project_types", "data": {"key": "business", "formattedKey": "Business", "descriptionI18nKey": "jira.project.type.business.description", "icon": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnIGlkPSJMYXllcl8yIj4NCgk8cGF0aCBzdHlsZT0iZmlsbDojMzU3MkIwOyIgZD0iTTE1MCwwQzY2LjY2NywwLDAsNjYuNjY3LDAsMTUwczY2LjY2NywxNTAsMTUwLDE1MHMxNTAtNjYuNjY3LDE1MC0xNTBTMjMzLjMzMywwLDE1MCwweg0KCQkgTTE2Ni42NjcsMjE2LjY2N0g4My4zMzNWMjAwaDgzLjMzM1YyMTYuNjY3eiBNMjE2LjY2NywxODMuMzMzSDgzLjMzM3YtMTYuNjY3aDEzMy4zMzNWMTgzLjMzM3ogTTIxNi42NjcsMTUwSDgzLjMzM3YtMTYuNjY3DQoJCWgxMzMuMzMzVjE1MHogTTIxNi42NjcsMTE2LjY2N0g4My4zMzNWMTAwaDEzMy4zMzNWMTE2LjY2N3oiLz4NCjwvZz4NCjxyZWN0IHg9IjgzLjMzMyIgeT0iMjAwIiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgd2lkdGg9IjgzLjMzMyIgaGVpZ2h0PSIxNi42NjciLz4NCjxyZWN0IHg9IjgzLjMzMyIgeT0iMTY2LjY2NyIgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHdpZHRoPSIxMzMuMzMzIiBoZWlnaHQ9IjE2LjY2NyIvPg0KPHJlY3QgeD0iODMuMzMzIiB5PSIxMzMuMzMzIiBzdHlsZT0iZmlsbDojRkZGRkZGOyIgd2lkdGg9IjEzMy4zMzMiIGhlaWdodD0iMTYuNjY3Ii8+DQo8cmVjdCB4PSI4My4zMzMiIHk9IjEwMCIgc3R5bGU9ImZpbGw6I0ZGRkZGRjsiIHdpZHRoPSIxMzMuMzMzIiBoZWlnaHQ9IjE2LjY2NyIvPg0KPC9zdmc+DQo=", "color": "#1D8832"}, "emitted_at": 1671009593607} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10000", "id": "10000", "description": "Version 1", "name": "Version 1", "archived": false, "released": false, "startDate": "2021-02-18", "releaseDate": "2021-02-25", "overdue": true, "userStartDate": "17/Feb/21", "userReleaseDate": "24/Feb/21", "projectId": 10000}, "emitted_at": 1671009593935} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10040", "id": "10040", "description": "An excellent version", "name": "New Version 0", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1671009593936} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10041", "id": "10041", "description": "An excellent version", "name": "New Version 1", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1671009593936} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10042", "id": "10042", "description": "An excellent version", "name": "New Version 2", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1671009593936} +{"stream": "project_versions", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/version/10043", "id": "10043", "description": "An excellent version", "name": "New Version 3", "archived": false, "released": true, "releaseDate": "2010-07-06", "userReleaseDate": "05/Jul/10", "projectId": 10000}, "emitted_at": 1671009593936} +{"stream": "screens", "data": {"id": 1, "name": "Default Screen", "description": "Allows to update all system fields."}, "emitted_at": 1671009594287} +{"stream": "screens", "data": {"id": 2, "name": "Workflow Screen", "description": "This screen is used in the workflow and enables you to assign issues"}, "emitted_at": 1671009594288} +{"stream": "screens", "data": {"id": 3, "name": "Resolve Issue Screen", "description": "Allows to set resolution, change fix versions and assign an issue."}, "emitted_at": 1671009594288} +{"stream": "screens", "data": {"id": 10000, "name": "IT: Scrum Default Issue Screen", "description": ""}, "emitted_at": 1671009594288} +{"stream": "screens", "data": {"id": 10001, "name": "IT: Scrum Bug Screen", "description": ""}, "emitted_at": 1671009594288} +{"stream": "screen_tabs", "data": {"id": 10000, "name": "Field Tab"}, "emitted_at": 1671009594823} +{"stream": "screen_tabs", "data": {"id": 10001, "name": "Field Tab"}, "emitted_at": 1671009594967} +{"stream": "screen_tabs", "data": {"id": 10002, "name": "Field Tab"}, "emitted_at": 1671009595124} +{"stream": "screen_tabs", "data": {"id": 10003, "name": "Field Tab"}, "emitted_at": 1671009595266} +{"stream": "screen_tabs", "data": {"id": 10004, "name": "Field Tab"}, "emitted_at": 1671009595419} +{"stream": "screen_schemes", "data": {"id": 1, "name": "Default Screen Scheme", "description": "Default Screen Scheme", "screens": {"default": 1}}, "emitted_at": 1671009615169} +{"stream": "screen_schemes", "data": {"id": 10000, "name": "IT: Scrum Default Screen Scheme", "description": "", "screens": {"default": 10000}}, "emitted_at": 1671009615169} +{"stream": "screen_schemes", "data": {"id": 10001, "name": "IT: Scrum Bug Screen Scheme", "description": "", "screens": {"default": 10001}}, "emitted_at": 1671009615169} +{"stream": "screen_schemes", "data": {"id": 10002, "name": "P2: Scrum Default Screen Scheme", "description": "", "screens": {"default": 10002}}, "emitted_at": 1671009615169} +{"stream": "screen_schemes", "data": {"id": 10003, "name": "P2: Scrum Bug Screen Scheme", "description": "", "screens": {"default": 10003}}, "emitted_at": 1671009615170} +{"stream": "sprints", "data": {"id": 2, "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/2", "state": "active", "name": "IT Sprint 1", "startDate": "2022-05-17T11:25:59.072Z", "endDate": "2022-05-31T11:25:00.000Z", "originBoardId": 1, "goal": "Deliver results"}, "emitted_at": 1671009615863} +{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10012", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", "key": "IT-6", "fields": {"customfield_10016": null, "updated": "2022-05-17T04:26:21.613-0700", "created": "2021-03-11T06:14:18.085-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}}, "issueId": "10012", "sprintId": 2, "created": "2021-03-11T06:14:18.085-0800", "updated": "2022-05-17T04:26:21.613-0700"}, "emitted_at": 1671009616800} +{"stream": "sprint_issues", "data": {"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", "id": "2-10000", "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10000", "key": "IT-1", "fields": {"customfield_10016": null, "updated": "2022-05-17T04:26:28.885-0700", "created": "2020-12-07T06:12:17.863-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/2/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "customfield_10026": null}, "issueId": "10000", "sprintId": 2, "created": "2020-12-07T06:12:17.863-0800", "updated": "2022-05-17T04:26:28.885-0700"}, "emitted_at": 1671009616801} +{"stream": "time_tracking", "data": {"key": "JIRA", "name": "JIRA provided time tracking"}, "emitted_at": 1671009617122} +{"stream": "time_tracking", "data": {"key": "is.origo.jira.tempo-plugin__timetracking-provider", "name": "Tempo Timesheets"}, "emitted_at": 1671009617122} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "locale": "en_US"}, "emitted_at": 1671009617352} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"}, "displayName": "Automation for Jira", "active": true}, "emitted_at": 1671009617353} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5d53f3cbc6b9320d9ea5bdc2", "accountId": "5d53f3cbc6b9320d9ea5bdc2", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "24x24": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "16x16": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "32x32": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png"}, "displayName": "Jira Outlook", "active": true}, "emitted_at": 1671009617353} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:0867a421-a9ee-4659-801a-bc0ee4a4487e", "accountId": "557058:0867a421-a9ee-4659-801a-bc0ee4a4487e", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png", "24x24": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png", "16x16": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png", "32x32": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png"}, "displayName": "Slack", "active": true}, "emitted_at": 1671009617353} +{"stream": "users", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:950f9f5b-3d6d-4e1d-954a-21367ae9ac75", "accountId": "557058:950f9f5b-3d6d-4e1d-954a-21367ae9ac75", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png", "24x24": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png", "16x16": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png", "32x32": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png"}, "displayName": "Jira Service Management Widget", "active": true}, "emitted_at": 1671009617353} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "accountType": "atlassian", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 27, "items": [{"name": "administrators", "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1"}, {"name": "confluence-users", "groupId": "38d808e9-113f-45c4-817b-099e953b687a", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=38d808e9-113f-45c4-817b-099e953b687a"}, {"name": "integration-test-group", "groupId": "5f1ec851-f8da-4f90-ab42-8dc50a9f99d8", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8"}, {"name": "jira-administrators", "groupId": "58582f33-a5a6-43b9-92a6-ff0bbacb49ae", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}, {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, {"name": "site-admins", "groupId": "76dad095-fc1a-467a-88b4-fde534220985", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985"}, {"name": "Test group 0", "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7"}, {"name": "Test group 1", "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c"}, {"name": "Test group 10", "groupId": "e9f74708-e33c-4158-919d-6457f50c6e74", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74"}, {"name": "Test group 11", "groupId": "b0e6d76f-701a-4208-a88d-4478f242edde", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=b0e6d76f-701a-4208-a88d-4478f242edde"}, {"name": "Test group 12", "groupId": "dddc24a0-ef00-407e-abef-5a660b6f55cf", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dddc24a0-ef00-407e-abef-5a660b6f55cf"}, {"name": "Test group 13", "groupId": "dbe4af74-8387-4b08-843b-86af78dd738e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dbe4af74-8387-4b08-843b-86af78dd738e"}, {"name": "Test group 14", "groupId": "d4570a20-38d8-44cc-a63b-0924d0d0d0ff", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=d4570a20-38d8-44cc-a63b-0924d0d0d0ff"}, {"name": "Test group 15", "groupId": "87bde5c0-7231-44a7-88b5-421da2ab8052", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=87bde5c0-7231-44a7-88b5-421da2ab8052"}, {"name": "Test group 16", "groupId": "538b6aa2-bf57-402f-93c0-c2e2d68b7155", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=538b6aa2-bf57-402f-93c0-c2e2d68b7155"}, {"name": "Test group 17", "groupId": "022bc924-ac57-442d-80c9-df042b73ad87", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=022bc924-ac57-442d-80c9-df042b73ad87"}, {"name": "Test group 18", "groupId": "bbfc6fc9-96db-4e66-88f4-c55b08298272", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bbfc6fc9-96db-4e66-88f4-c55b08298272"}, {"name": "Test group 19", "groupId": "3c4fef5d-9721-4f20-9a68-346d222de3cf", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3c4fef5d-9721-4f20-9a68-346d222de3cf"}, {"name": "Test group 2", "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d"}, {"name": "Test group 3", "groupId": "638aa1ad-8707-4d56-9361-f5959b6c4785", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=638aa1ad-8707-4d56-9361-f5959b6c4785"}, {"name": "Test group 4", "groupId": "532554e0-43be-4eca-9186-b417dcf38547", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=532554e0-43be-4eca-9186-b417dcf38547"}, {"name": "Test group 5", "groupId": "6b663734-85b6-4185-8fb2-9ac27709b3aa", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=6b663734-85b6-4185-8fb2-9ac27709b3aa"}, {"name": "Test group 6", "groupId": "2d4af5cf-cd34-4e78-9445-abc000cdd5cc", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d4af5cf-cd34-4e78-9445-abc000cdd5cc"}, {"name": "Test group 7", "groupId": "e8a97909-d807-4f79-8548-1f2c156ae6f0", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e8a97909-d807-4f79-8548-1f2c156ae6f0"}, {"name": "Test group 8", "groupId": "3ee851e7-6688-495a-a6f6-737e85a23878", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3ee851e7-6688-495a-a6f6-737e85a23878"}, {"name": "Test group 9", "groupId": "af27d0b1-4378-443f-9a6d-f878848b144a", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=af27d0b1-4378-443f-9a6d-f878848b144a"}]}, "applicationRoles": {"size": 1, "items": [{"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1671009617690} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png"}, "displayName": "Automation for Jira", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 2, "items": [{"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 1, "items": [{"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1671009617824} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5d53f3cbc6b9320d9ea5bdc2", "accountId": "5d53f3cbc6b9320d9ea5bdc2", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "24x24": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "16x16": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png", "32x32": "https://secure.gravatar.com/avatar/40cff14f727dbf6d865576d575c6bdd2?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJO-4.png"}, "displayName": "Jira Outlook", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 1, "items": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 1, "items": [{"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1671009617960} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:0867a421-a9ee-4659-801a-bc0ee4a4487e", "accountId": "557058:0867a421-a9ee-4659-801a-bc0ee4a4487e", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png", "24x24": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png", "16x16": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png", "32x32": "https://secure.gravatar.com/avatar/ab3787cd0c16633ae050dff9d5ab15fc?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FS-0.png"}, "displayName": "Slack", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 1, "items": [{"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 1, "items": [{"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1671009618103} +{"stream": "users_groups_detailed", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:950f9f5b-3d6d-4e1d-954a-21367ae9ac75", "accountId": "557058:950f9f5b-3d6d-4e1d-954a-21367ae9ac75", "accountType": "app", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png", "24x24": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png", "16x16": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png", "32x32": "https://secure.gravatar.com/avatar/726e9dfb98dfab7231aca0392486818d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FJW-2.png"}, "displayName": "Jira Service Management Widget", "active": true, "timeZone": "America/Los_Angeles", "locale": "en_US", "groups": {"size": 2, "items": [{"name": "atlassian-addons-admin", "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83"}, {"name": "jira-software-users", "groupId": "4452b254-035d-469a-a422-1f4666dce50e", "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e"}]}, "applicationRoles": {"size": 1, "items": [{"key": "jira-software", "name": "Jira Software"}]}, "expand": "groups,applicationRoles"}, "emitted_at": 1671009618232} +{"stream": "workflows", "data": {"id": {"name": "Builds Workflow", "entityId": "Builds Workflow"}, "description": "Builds Workflow", "created": "1969-12-31T16:00:00.000-0800", "updated": "1969-12-31T16:00:00.000-0800"}, "emitted_at": 1671009624189} +{"stream": "workflows", "data": {"id": {"name": "classic default workflow", "entityId": "385bb764-dfb6-89a7-2e43-a25bdd0cbaf4"}, "description": "The classic JIRA default workflow", "created": "2020-12-03T23:41:38.951-0800", "updated": "2020-12-03T23:41:57.343-0800"}, "emitted_at": 1671009624189} +{"stream": "workflows", "data": {"id": {"name": "jira", "entityId": "jira"}, "description": "The default Jira workflow.", "created": "1969-12-31T16:00:00.000-0800", "updated": "1969-12-31T16:00:00.000-0800"}, "emitted_at": 1671009624189} +{"stream": "workflows", "data": {"id": {"name": "Software Simplified Workflow for Project EX", "entityId": "9beeb4c2-7947-4353-8db5-3e13f40b9f87"}, "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow is managed internally by Jira Software. Do not manually modify this workflow.", "created": "2021-02-04T10:49:47.874-0800", "updated": "2021-02-04T10:49:47.874-0800"}, "emitted_at": 1671009624189} +{"stream": "workflows", "data": {"id": {"name": "Software Simplified Workflow for Project IT", "entityId": "6c11bb77-8f4b-463d-8d37-dfc153b71df4"}, "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow is managed internally by Jira Software. Do not manually modify this workflow.", "created": "2020-12-03T23:45:34.235-0800", "updated": "2020-12-03T23:45:34.235-0800"}, "emitted_at": 1671009624190} +{"stream": "workflow_schemes", "data": {"id": 10000, "name": "classic", "description": "classic", "defaultWorkflow": "classic default workflow", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10000"}, "emitted_at": 1671009624676} +{"stream": "workflow_schemes", "data": {"id": 10001, "name": "IT: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project IT", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10001"}, "emitted_at": 1671009624676} +{"stream": "workflow_schemes", "data": {"id": 10002, "name": "P2: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project P2", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10002"}, "emitted_at": 1671009624676} +{"stream": "workflow_schemes", "data": {"id": 10003, "name": "TEXT: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project TEXT", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10003"}, "emitted_at": 1671009624677} +{"stream": "workflow_schemes", "data": {"id": 10004, "name": "EX: Software Simplified Workflow Scheme", "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", "defaultWorkflow": "Software Simplified Workflow for Project EX", "issueTypeMappings": {}, "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10004"}, "emitted_at": 1671009624677} +{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/3", "description": "This issue is being actively worked on at the moment by the assignee.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", "name": "In Progress", "untranslatedName": "In Progress", "id": "3", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}}, "emitted_at": 1671009625371} +{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "untranslatedName": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "emitted_at": 1671009625371} +{"stream": "workflow_statuses", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10001", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "Done", "untranslatedName": "Done", "id": "10001", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}}, "emitted_at": 1671009625372} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/1", "id": 1, "key": "undefined", "colorName": "medium-gray", "name": "No Category"}, "emitted_at": 1671009625688} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}, "emitted_at": 1671009625688} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", "id": 4, "key": "indeterminate", "colorName": "yellow", "name": "In Progress"}, "emitted_at": 1671009625688} +{"stream": "workflow_status_categories", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/3", "id": 3, "key": "done", "colorName": "green", "name": "Done"}, "emitted_at": 1671009625688} From 8a81dd1b4b639ffd09443aa58e784ff460f143ad Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 09:34:36 +0000 Subject: [PATCH 63/77] jira.md updated Signed-off-by: Sergey Chvalyuk --- docs/integrations/sources/jira.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/integrations/sources/jira.md b/docs/integrations/sources/jira.md index 1f2f21618fe83..b8cb0fc991ca3 100644 --- a/docs/integrations/sources/jira.md +++ b/docs/integrations/sources/jira.md @@ -96,7 +96,7 @@ The Jira connector should not run into Jira API limitations under normal usage. | Version | Date | Pull Request | Subject | |:--------|:-----------|:------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------| -| 0.3.1 | 2022-12-06 | [\#20128](https://github.com/airbytehq/airbyte/pull/20128) | Skip 404 for IssueCustomFieldContexts | +| 0.3.1 | 2022-12-14 | [\#20128](https://github.com/airbytehq/airbyte/pull/20128) | Improved code to become beta | | 0.3.0 | 2022-11-03 | [\#18901](https://github.com/airbytehq/airbyte/pull/18901) | Adds UserGroupsDetailed schema, fix Incremental normalization, add Incremental support for IssueComments, IssueWorklogs | | 0.2.23 | 2022-10-28 | [\#18505](https://github.com/airbytehq/airbyte/pull/18505) | Correcting `max_results` bug introduced in connector stream | | 0.2.22 | 2022-10-03 | [\#16944](https://github.com/airbytehq/airbyte/pull/16944) | Adds support for `max_results` to `users` stream | From d7ee368b3a5973510bf8d3e046ff3b98a622eee1 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Wed, 14 Dec 2022 20:15:29 +0000 Subject: [PATCH 64/77] "format": "date-time" - added Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/spec.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/spec.json b/airbyte-integrations/connectors/source-jira/source_jira/spec.json index 184df5b054f4e..2994df23ddf94 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/spec.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/spec.json @@ -39,7 +39,8 @@ "title": "Start Date", "description": "The date from which you'd like to replicate data for Jira in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", "examples": ["2021-03-01T00:00:00Z"], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" }, "expand_issue_changelog": { "type": "boolean", From 931c04ed7af59d027b2627f0bf0c1b20485a2346 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 07:05:42 +0000 Subject: [PATCH 65/77] TokenAuthenticator -> BasicHttpAuthenticator Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/source.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index b9cb2bc0dd86b..b315a8c1667e6 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -2,7 +2,6 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -from base64 import b64encode from json.decoder import JSONDecodeError from typing import Any, List, Mapping, Optional, Tuple @@ -11,7 +10,7 @@ from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http.auth import TokenAuthenticator +from airbyte_cdk.sources.streams.http.requests_native_auth import BasicHttpAuthenticator from .streams import ( ApplicationRoles, @@ -78,9 +77,7 @@ def _validate_and_transform(self, config: Mapping[str, Any]): @staticmethod def get_authenticator(config: Mapping[str, Any]): - token = b64encode(bytes(config["email"] + ":" + config["api_token"], "utf-8")).decode("ascii") - authenticator = TokenAuthenticator(token, auth_method="Basic") - return authenticator + return BasicHttpAuthenticator(config["email"], config["api_token"]) def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]: config = self._validate_and_transform(config) From 9b8451604f6fb83037cc115aa29951c7a9774e2a Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 07:22:12 +0000 Subject: [PATCH 66/77] re-implement check_connection Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/source.py | 30 ++++--------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index b315a8c1667e6..b8d262b613e0a 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -2,12 +2,10 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -from json.decoder import JSONDecodeError from typing import Any, List, Mapping, Optional, Tuple import pendulum from airbyte_cdk import AirbyteLogger -from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream from airbyte_cdk.sources.streams.http.requests_native_auth import BasicHttpAuthenticator @@ -66,6 +64,7 @@ WorkflowStatusCategories, WorkflowStatuses, ) +from .utils import read_full_refresh class SourceJira(AbstractSource): @@ -81,28 +80,11 @@ def get_authenticator(config: Mapping[str, Any]): def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]: config = self._validate_and_transform(config) - - alive = True - error_msg = None - - try: - authenticator = self.get_authenticator(config) - args = {"authenticator": authenticator, "domain": config["domain"], "projects": config["projects"]} - issue_resolutions = IssueResolutions(**args) - for item in issue_resolutions.read_records(sync_mode=SyncMode.full_refresh): - continue - except ConnectionError as error: - alive, error_msg = False, repr(error) - # If the input domain is incorrect or doesn't exist, then the response would be empty, resulting in a - # JSONDecodeError - except JSONDecodeError: - alive, error_msg = ( - False, - "Unable to connect to the Jira API with the provided credentials. Please make sure the input " - "credentials and environment are correct.", - ) - - return alive, error_msg + authenticator = self.get_authenticator(config) + kwargs = {"authenticator": authenticator, "domain": config["domain"], "projects": config["projects"]} + labels_stream = Labels(**kwargs) + next(read_full_refresh(labels_stream), None) + return True, None def streams(self, config: Mapping[str, Any]) -> List[Stream]: config = self._validate_and_transform(config) From 8aa95bf187a03ad9ba09d287fccb459f48471442 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 09:14:02 +0000 Subject: [PATCH 67/77] requests_native_auth -> auth Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/source.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index b8d262b613e0a..a3ff8ec0ed498 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -8,7 +8,7 @@ from airbyte_cdk import AirbyteLogger from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http.requests_native_auth import BasicHttpAuthenticator +from airbyte_cdk.sources.streams.http.auth import BasicHttpAuthenticator from .streams import ( ApplicationRoles, From 16ea12c8a1e837e20a3e6ce8cd07efa92015929e Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 12:43:17 +0000 Subject: [PATCH 68/77] check projects added Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/source.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/source.py b/airbyte-integrations/connectors/source-jira/source_jira/source.py index a3ff8ec0ed498..ce7b454d19cf2 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/source.py +++ b/airbyte-integrations/connectors/source-jira/source_jira/source.py @@ -84,6 +84,12 @@ def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> kwargs = {"authenticator": authenticator, "domain": config["domain"], "projects": config["projects"]} labels_stream = Labels(**kwargs) next(read_full_refresh(labels_stream), None) + # check projects + projects_stream = Projects(**kwargs) + projects = {project["key"] for project in read_full_refresh(projects_stream)} + unknown_projects = set(config["projects"]) - projects + if unknown_projects: + return False, "unknown project(s): " + ", ".join(unknown_projects) return True, None def streams(self, config: Mapping[str, Any]) -> List[Stream]: From cd89cd422408a2c66b9645ebd1846ae0e05aa99e Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 12:46:00 +0000 Subject: [PATCH 69/77] "airbyte-cdk~=0.14" Signed-off-by: Sergey Chvalyuk --- airbyte-integrations/connectors/source-jira/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/setup.py b/airbyte-integrations/connectors/source-jira/setup.py index 7a7ee6925a854..6b2118e587387 100644 --- a/airbyte-integrations/connectors/source-jira/setup.py +++ b/airbyte-integrations/connectors/source-jira/setup.py @@ -5,7 +5,7 @@ from setuptools import find_packages, setup -MAIN_REQUIREMENTS = ["airbyte-cdk~=0.1", "requests==2.25.1", "pendulum~=2.1.2"] +MAIN_REQUIREMENTS = ["airbyte-cdk~=0.14", "requests==2.25.1", "pendulum~=2.1.2"] TEST_REQUIREMENTS = [ "pytest==6.1.2", From a1a22da2f4768b57d52eec075f42bb9fa4d74eaf Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 13:12:37 +0000 Subject: [PATCH 70/77] add more streams to docs Signed-off-by: Sergey Chvalyuk --- docs/integrations/sources/jira.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/integrations/sources/jira.md b/docs/integrations/sources/jira.md index b8cb0fc991ca3..2959c783697de 100644 --- a/docs/integrations/sources/jira.md +++ b/docs/integrations/sources/jira.md @@ -19,9 +19,10 @@ This source is capable of syncing the following tables and their data: * [Application roles](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-rest-api-3-applicationrole-get) * [Avatars](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-avatars/#api-rest-api-3-avatar-type-system-get) +* [Board issues](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-issue-get) +* [Boards](https://developer.atlassian.com/cloud/jira/software/rest/api-group-other-operations/#api-agile-1-0-board-get) * [Dashboards](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dashboards/#api-rest-api-3-dashboard-get) * [Filters](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filters/#api-rest-api-3-filter-search-get) -* [Filters](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filter-sharing/#api-rest-api-3-filter-id-permission-get) * [Filter sharing](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filter-sharing/#api-rest-api-3-filter-id-permission-get) * [Groups](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-groups/#api-rest-api-3-groups-picker-get) * [Issues](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-get) @@ -55,9 +56,11 @@ This source is capable of syncing the following tables and their data: * [Project types](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-types/#api-rest-api-3-project-type-get) * [Project versions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-project-versions/#api-rest-api-3-project-projectidorkey-version-get) * [Screens](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screens/#api-rest-api-3-screens-get) -* [Screen tabs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tabs/) +* [Screen tabs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tabs/#api-rest-api-3-screens-screenid-tabs-get) * [Screen tab fields](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tab-fields/#api-rest-api-3-screens-screenid-tabs-tabid-fields-get) * [Screen schemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-schemes/#api-rest-api-3-screenscheme-get) +* [Sprint issues](https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-rest-agile-1-0-sprint-sprintid-issue-get) +* [Sprints](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-sprint-get) * [Time tracking](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-time-tracking/#api-rest-api-3-configuration-timetracking-list-get) * [Users](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-user-search/#api-rest-api-3-user-search-get) * [UsersGroupsDetailed](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-users/#api-rest-api-3-user-groups-get) From fb55927e7f7c4f2116e46e9dc645077e0cc95093 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Thu, 15 Dec 2022 13:47:53 +0000 Subject: [PATCH 71/77] extract incremental streams Signed-off-by: Sergey Chvalyuk --- docs/integrations/sources/jira.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/integrations/sources/jira.md b/docs/integrations/sources/jira.md index 2959c783697de..3c0b6273aa945 100644 --- a/docs/integrations/sources/jira.md +++ b/docs/integrations/sources/jira.md @@ -13,20 +13,17 @@ Check out common troubleshooting issues for the Jira connector on our Discourse [here](https://discuss.airbyte.io/tags/c/connector/11/source-jira). -## Supported Tables +## Supported Streams -This source is capable of syncing the following tables and their data: +This connector outputs the following full refresh streams: * [Application roles](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-application-roles/#api-rest-api-3-applicationrole-get) * [Avatars](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-avatars/#api-rest-api-3-avatar-type-system-get) -* [Board issues](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-issue-get) * [Boards](https://developer.atlassian.com/cloud/jira/software/rest/api-group-other-operations/#api-agile-1-0-board-get) * [Dashboards](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-dashboards/#api-rest-api-3-dashboard-get) * [Filters](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filters/#api-rest-api-3-filter-search-get) * [Filter sharing](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-filter-sharing/#api-rest-api-3-filter-id-permission-get) * [Groups](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-groups/#api-rest-api-3-groups-picker-get) -* [Issues](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-get) -* [Issue comments](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-rest-api-3-issue-issueidorkey-comment-get) * [Issue fields](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-fields/#api-rest-api-3-field-get) * [Issue field configurations](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-field-configurations/#api-rest-api-3-fieldconfiguration-get) * [Issue custom field contexts](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-custom-field-contexts/#api-rest-api-3-field-fieldid-context-get) @@ -42,7 +39,6 @@ This source is capable of syncing the following tables and their data: * [Issue type screen schemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-type-screen-schemes/#api-rest-api-3-issuetypescreenscheme-get) * [Issue votes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-votes/#api-group-issue-votes) * [Issue watchers](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-watchers/#api-rest-api-3-issue-issueidorkey-watchers-get) -* [Issue worklogs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-worklogs/#api-rest-api-3-issue-issueidorkey-worklog-get) * [Jira settings](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-jira-settings/#api-rest-api-3-application-properties-get) * [Labels](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-labels/#api-rest-api-3-label-get) * [Permissions](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-permissions/#api-rest-api-3-mypermissions-get) @@ -59,7 +55,6 @@ This source is capable of syncing the following tables and their data: * [Screen tabs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tabs/#api-rest-api-3-screens-screenid-tabs-get) * [Screen tab fields](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-tab-fields/#api-rest-api-3-screens-screenid-tabs-tabid-fields-get) * [Screen schemes](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-screen-schemes/#api-rest-api-3-screenscheme-get) -* [Sprint issues](https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-rest-agile-1-0-sprint-sprintid-issue-get) * [Sprints](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-sprint-get) * [Time tracking](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-time-tracking/#api-rest-api-3-configuration-timetracking-list-get) * [Users](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-user-search/#api-rest-api-3-user-search-get) @@ -69,6 +64,14 @@ This source is capable of syncing the following tables and their data: * [Workflow statuses](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-statuses/#api-rest-api-3-status-get) * [Workflow status categories](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-workflow-status-categories/#api-rest-api-3-statuscategory-get) +This connector outputs the following incremental streams: + +* [Board issues](https://developer.atlassian.com/cloud/jira/software/rest/api-group-board/#api-rest-agile-1-0-board-boardid-issue-get) +* [Issue comments](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-comments/#api-rest-api-3-issue-issueidorkey-comment-get) +* [Issue worklogs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-worklogs/#api-rest-api-3-issue-issueidorkey-worklog-get) +* [Issues](https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issue-search/#api-rest-api-3-search-get) +* [Sprint issues](https://developer.atlassian.com/cloud/jira/software/rest/api-group-sprint/#api-rest-agile-1-0-sprint-sprintid-issue-get) + If there are more endpoints you'd like Airbyte to support, please [create an issue.](https://github.com/airbytehq/airbyte/issues/new/choose) ## Experimental Tables From f24da68e9cd9246a015b97fd408d6dee67ffa37a Mon Sep 17 00:00:00 2001 From: Daryna Ishchenko Date: Thu, 15 Dec 2022 19:13:03 +0200 Subject: [PATCH 72/77] added unit test for source-jira --- .../connectors/source-jira/setup.py | 1 + .../source-jira/unit_tests/__init__.py | 3 + .../source-jira/unit_tests/conftest.py | 95 +++++++ .../responses/application_role.json | 58 ++++ .../unit_tests/responses/board.json | 55 ++++ .../unit_tests/responses/dashboard.json | 36 +++ .../unit_tests/responses/filter.json | 53 ++++ .../unit_tests/responses/groups.json | 20 ++ .../unit_tests/responses/issue_fields.json | 47 ++++ .../responses/issue_notification_schemas.json | 19 ++ .../responses/issue_properties.json | 31 +++ .../responses/issue_resolutions.json | 25 ++ .../responses/issue_security_schemes.json | 17 ++ .../unit_tests/responses/issue_type.json | 20 ++ .../issues_field_configurations.json | 10 + .../responses/issues_link_types.json | 25 ++ .../responses/issues_navigator_settings.json | 14 + .../source-jira/unit_tests/test_source.py | 35 +++ .../source-jira/unit_tests/test_streams.py | 262 ++++++++++++++++++ 19 files changed, 826 insertions(+) create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/__init__.py create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/conftest.py create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/application_role.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/dashboard.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/groups.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_notification_schemas.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_properties.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_resolutions.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_security_schemes.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_type.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_field_configurations.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_link_types.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_navigator_settings.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/test_source.py create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py diff --git a/airbyte-integrations/connectors/source-jira/setup.py b/airbyte-integrations/connectors/source-jira/setup.py index 7a7ee6925a854..68484a0e8bf8f 100644 --- a/airbyte-integrations/connectors/source-jira/setup.py +++ b/airbyte-integrations/connectors/source-jira/setup.py @@ -10,6 +10,7 @@ TEST_REQUIREMENTS = [ "pytest==6.1.2", "source-acceptance-test", + "responses~=0.22.0", ] setup( diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py b/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py new file mode 100644 index 0000000000000..5de7610a9b2b8 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py b/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py new file mode 100644 index 0000000000000..4b1ed9fea7677 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py @@ -0,0 +1,95 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +import pytest + +import json +import os + +from pytest import fixture + + +@pytest.fixture +def config(): + return { + "api_token": "token", + "domain": "domain", + "email": "email@email.com", + "start_date": "2021-01-01T00:00:00Z", + "projects": ["Project1", "Project2"] + } + + +def load_file(fn): + return open(os.path.join("unit_tests", "responses", fn)).read() + + +@fixture +def application_roles_response(): + return json.loads(load_file("application_role.json")) + + +@fixture +def boards_response(): + return json.loads(load_file("board.json")) + + +@fixture +def dashboards_response(): + return json.loads(load_file("dashboard.json")) + + +@fixture +def filters_response(): + return json.loads(load_file("filter.json")) + + +@fixture +def groups_response(): + return json.loads(load_file("groups.json")) + + +@fixture +def issue_fields_response(): + return json.loads(load_file("issue_fields.json")) + + +@fixture +def issues_field_configurations_response(): + return json.loads(load_file("issues_field_configurations.json")) + + +@fixture +def issues_link_types_response(): + return json.loads(load_file("issues_link_types.json")) + + +@fixture +def issues_navigator_settings_response(): + return json.loads(load_file("issues_navigator_settings.json")) + + +@fixture +def issue_notification_schemas_response(): + return json.loads(load_file("issue_notification_schemas.json")) + + +@fixture +def issue_properties_response(): + return json.loads(load_file("issue_properties.json")) + + +@fixture +def issue_resolutions_response(): + return json.loads(load_file("issue_resolutions.json")) + + +@fixture +def issue_security_schemes_response(): + return json.loads(load_file("issue_security_schemes.json")) + + +@fixture +def issue_type_schemes_response(): + return json.loads(load_file("issue_type.json")) diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/application_role.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/application_role.json new file mode 100644 index 0000000000000..59278724ab6a3 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/application_role.json @@ -0,0 +1,58 @@ +[ + { + "key": "jira-software", + "groups": [ + "jira-software-users", + "atlassian-addons-admin", + "system-administrators", + "site-admins", + "administrators" + ], + "groupDetails": [ + { + "name": "test", + "groupId": "test", + "self": "test" + }, + { + "name": "administrators", + "groupId": "test", + "self": "test" + }, + { + "name": "atlassian-addons-admin", + "groupId": "test", + "self": "test" + }, + { + "name": "system-administrators", + "groupId": "test", + "self": "test" + }, + { + "name": "site-admins", + "groupId": "test", + "self": "test" + } + ], + "name": "Jira Software", + "defaultGroups": [ + "jira-software-users" + ], + "defaultGroupsDetails": [ + { + "name": "jira-software-users", + "groupId": "test", + "self": "test" + } + ], + "selectedByDefault": false, + "defined": true, + "numberOfSeats": 100, + "remainingSeats": 61, + "userCount": 14, + "userCountDescription": "users", + "hasUnlimitedSeats": false, + "platform": false + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json new file mode 100644 index 0000000000000..8b078d53c6e53 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json @@ -0,0 +1,55 @@ +{ + "values": [ + { + "id": 1, + "self": "https://test/rest/agile/1.0/board/1", + "name": "IT board", + "type": "scrum", + "location": { + "projectId": 10000, + "displayName": "integration-tests (IT)", + "projectName": "integration-tests", + "projectKey": "Project1", + "projectTypeKey": "software", + "avatarURI": "test avatar", + "name": "integration-tests (IT)" + }, + "projectId": "10000", + "projectKey": "Project1" + }, + { + "id": 17, + "self": "https://test/rest/agile/1.0/board/17", + "name": "Project1 board", + "type": "scrum", + "location": { + "projectId": 10016, + "displayName": "Project1(Project1)", + "projectName": "Test project 13", + "projectKey": "Project1", + "projectTypeKey": "software", + "avatarURI": "test avatar", + "name": "Project1(Project1)" + }, + "projectId": "10016", + "projectKey": "Project1" + }, + { + "id": 20, + "self": "https://test/rest/agile/1.0/board/17", + "name": "Project1 board", + "type": "scrum", + "location": { + "projectId": 10016, + "displayName": "Project1(Project1)", + "projectName": "Test project 13", + "projectKey": "Project1", + "projectTypeKey": "software", + "avatarURI": "test avatar", + "name": "Project1(Project1)" + }, + "projectId": "10016", + "projectKey": "Project1" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/dashboard.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/dashboard.json new file mode 100644 index 0000000000000..d1772124ec94a --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/dashboard.json @@ -0,0 +1,36 @@ +{ + "dashboards": [ + { + "id": "1", + "isFavourite": false, + "name": "test dashboard", + "popularity": 0, + "self": "test", + "sharePermissions": [ + { + "id": 1, + "type": "global" + } + ], + "editPermissions": [], + "view": "/jira/dashboards/1", + "systemDashboard": true + }, + { + "id": "2", + "isFavourite": false, + "name": "test dashboard", + "popularity": 0, + "self": "test", + "sharePermissions": [ + { + "id": 2, + "type": "global" + } + ], + "editPermissions": [], + "view": "/jira/dashboards/2", + "systemDashboard": true + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json new file mode 100644 index 0000000000000..ba2b894000733 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json @@ -0,0 +1,53 @@ +{ + "values": [ + { + "expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", + "self": "test", + "id": "10003", + "name": "Filter for EX board", + "owner": { + "self": "test", + "accountId": "test", + "avatarUrls": { + "48x48": "test", + "24x24": "test", + "16x16": "test", + "32x32": "test" + }, + "displayName": "integration test", + "active": true + }, + "jql": "project = EX ORDER BY Rank ASC", + "viewUrl": "test", + "searchUrl": "test", + "favourite": false, + "favouritedCount": 0, + "sharePermissions": [ + { + "id": 10004, + "type": "project", + "project": { + "self": "test", + "id": "10003", + "key": "EX", + "assigneeType": "PROJECT_LEAD", + "name": "Example", + "roles": {}, + "avatarUrls": { + "48x48": "test", + "24x24": "test", + "16x16": "test", + "32x32": "test" + }, + "projectTypeKey": "software", + "simplified": false, + "style": "classic", + "properties": {} + } + } + ], + "isWritable": true, + "subscriptions": [] + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/groups.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/groups.json new file mode 100644 index 0000000000000..f9bfc52ecc5e2 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/groups.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "name": "Test group 17", + "groupId": "test1" + }, + { + "name": "Test group 17", + "groupId": "test2" + }, + { + "name": "Test group 17", + "groupId": "test3" + }, + { + "name": "Test group 17", + "groupId": "test4" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json new file mode 100644 index 0000000000000..a90dfc7e3ea79 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json @@ -0,0 +1,47 @@ +[ + { + "id": "statuscategorychangedate", + "key": "statuscategorychangedate", + "name": "Status Category Changed", + "custom": false, + "orderable": false, + "navigable": true, + "searchable": true, + "clauseNames": [ + "statusCategoryChangedDate" + ], + "schema": { + "type": "datetime", + "system": "statuscategorychangedate" + } + }, + { + "id": "issuetype", + "key": "issuetype", + "name": "Issue Type", + "custom": false, + "orderable": true, + "navigable": true, + "searchable": true, + "clauseNames": [ + "issuetype", + "type" + ], + "schema": { + "type": "issuetype", + "system": "issuetype" + } + }, + { + "id": "parent", + "key": "parent", + "name": "Parent", + "custom": false, + "orderable": false, + "navigable": true, + "searchable": false, + "clauseNames": [ + "parent" + ] + } +] diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_notification_schemas.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_notification_schemas.json new file mode 100644 index 0000000000000..83ae82f4e70af --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_notification_schemas.json @@ -0,0 +1,19 @@ +{ + "values": [ + { + "expand": "notificationSchemeEvents,user,group,projectRole,field,all", + "id": 10000, + "self": "https://airbyteio.atlassian.net/rest/api/3/notificationscheme/10000", + "name": "Default Notification Scheme" + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/1", + "statusColor": "#d04437", + "description": "This problem will block progress.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/highest.svg", + "name": "Highest", + "id": "1", + "isDefault": false + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_properties.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_properties.json new file mode 100644 index 0000000000000..35bdfe3294fae --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_properties.json @@ -0,0 +1,31 @@ +{ + "values": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/1", + "statusColor": "#d04437", + "description": "This problem will block progress.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/highest.svg", + "name": "Highest", + "id": "1", + "isDefault": false + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/2", + "statusColor": "#f15C75", + "description": "Serious problem that could block progress.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/high.svg", + "name": "High", + "id": "2", + "isDefault": false + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", + "statusColor": "#f79232", + "description": "Has the potential to affect progress.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", + "name": "Medium", + "id": "3", + "isDefault": false + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_resolutions.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_resolutions.json new file mode 100644 index 0000000000000..05d099d0a5c49 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_resolutions.json @@ -0,0 +1,25 @@ +{ + "values": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10000", + "id": "10000", + "description": "Work has been completed on this issue.", + "name": "Done", + "isDefault": false + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10001", + "id": "10001", + "description": "This issue won't be actioned.", + "name": "Won't Do", + "isDefault": false + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/resolution/10002", + "id": "10002", + "description": "The problem is a duplicate of an existing issue.", + "name": "Duplicate", + "isDefault": false + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_security_schemes.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_security_schemes.json new file mode 100644 index 0000000000000..2fff5eb10a668 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_security_schemes.json @@ -0,0 +1,17 @@ +{ + "issueSecuritySchemes": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10001", + "id": 10001, + "name": "Security scheme 2", + "description": "Security scheme 2" + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/issuesecurityschemes/10000", + "id": 10000, + "name": "Security scheme 1", + "description": "Security scheme 1", + "defaultSecurityLevelId": 10002 + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_type.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_type.json new file mode 100644 index 0000000000000..fe00415a627bf --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_type.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": "10000", + "name": "Default Issue Type Scheme", + "description": "Default issue type scheme is the list of global issue types. All newly created issue types will automatically be added to this scheme.", + "isDefault": true + }, + { + "id": "10126", + "name": "IT: Scrum Issue Type Scheme", + "defaultIssueTypeId": "10001" + }, + { + "id": "10128", + "name": "P2: Scrum Issue Type Scheme", + "defaultIssueTypeId": "10001" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_field_configurations.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_field_configurations.json new file mode 100644 index 0000000000000..836741367613a --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_field_configurations.json @@ -0,0 +1,10 @@ +{ + "values": [ + { + "id": 10000, + "name": "Default Field Configuration", + "description": "The default field configuration", + "isDefault": true + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_link_types.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_link_types.json new file mode 100644 index 0000000000000..4d155274f9fb1 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_link_types.json @@ -0,0 +1,25 @@ +{ + "issueLinkTypes": [ + { + "id": "10000", + "name": "Blocks", + "inward": "is blocked by", + "outward": "blocks", + "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10000" + }, + { + "id": "10001", + "name": "Cloners", + "inward": "is cloned by", + "outward": "clones", + "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001" + }, + { + "id": "10002", + "name": "Duplicate", + "inward": "is duplicated by", + "outward": "duplicates", + "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_navigator_settings.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_navigator_settings.json new file mode 100644 index 0000000000000..b1e458116430f --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues_navigator_settings.json @@ -0,0 +1,14 @@ +[ + { + "label": "Issue Type", + "value": "issuetype" + }, + { + "label": "Key", + "value": "issuekey" + }, + { + "label": "Summary", + "value": "summary" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py b/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py new file mode 100644 index 0000000000000..ff5ddd071fcbe --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py @@ -0,0 +1,35 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +from unittest.mock import MagicMock + +import responses +from source_jira.source import SourceJira + + +def test_streams(config): + source = SourceJira() + streams = source.streams(config) + expected_streams_number = 51 + assert len(streams) == expected_streams_number + + +@responses.activate +def test_check_connection(config): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/resolution/search?maxResults=50", + json={}, + ) + source = SourceJira() + logger_mock = MagicMock() + + assert source.check_connection(logger=logger_mock, config=config) == (True, None) + + +def test_get_authenticator(config): + source = SourceJira() + authenticator = source.get_authenticator(config=config) + + assert authenticator.get_auth_header() == {'Authorization': 'Basic ZW1haWxAZW1haWwuY29tOnRva2Vu'} diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py new file mode 100644 index 0000000000000..113914c33bb97 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py @@ -0,0 +1,262 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +import responses +from airbyte_cdk.models import SyncMode + +from source_jira.streams import ( + ApplicationRoles, + Boards, + Dashboards, + Filters, + Groups, + IssueFields, + IssueFieldConfigurations, + IssueLinkTypes, + IssueNavigatorSettings, + IssueNotificationSchemes, + IssuePriorities, + IssueResolutions, + IssueSecuritySchemes, + IssueTypeSchemes +) +from source_jira.source import SourceJira + + +@responses.activate +def test_application_roles_stream(config, application_roles_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/applicationrole?maxResults=50", + json=application_roles_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ApplicationRoles(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_boards_stream(config, boards_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board?maxResults=50", + json=boards_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Boards(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 + + +@responses.activate +def test_dashboards_stream(config, dashboards_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/dashboard?maxResults=50", + json=dashboards_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Dashboards(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_filters_stream(config, filters_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/filter/search?maxResults=50&expand=description%2Cowner%2Cjql%2CviewUrl%2CsearchUrl%2Cfavourite%2CfavouritedCount%2CsharePermissions%2CisWritable%2Csubscriptions", + json=filters_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Filters(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_groups_stream(config, groups_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/group/bulk?maxResults=50", + json=groups_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Groups(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 4 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issues_fields_stream(config, issue_fields_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/field?maxResults=50", + json=issue_fields_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueFields(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issues_field_configurations_stream(config, issues_field_configurations_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/fieldconfiguration?maxResults=50", + json=issues_field_configurations_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueFieldConfigurations(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issues_link_types_stream(config, issues_link_types_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issueLinkType?maxResults=50", + json=issues_link_types_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueLinkTypes(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issues_navigator_settings_stream(config, issues_navigator_settings_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/settings/columns?maxResults=50", + json=issues_navigator_settings_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueNavigatorSettings(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_notification_schemas_stream(config, issue_notification_schemas_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/notificationscheme?maxResults=50", + json=issue_notification_schemas_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueNotificationSchemes(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_properties_stream(config, issue_properties_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/priority/search?maxResults=50", + json=issue_properties_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssuePriorities(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_resolutions_stream(config, issue_resolutions_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/resolution/search?maxResults=50", + json=issue_resolutions_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueResolutions(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_security_schemes_stream(config, issue_security_schemes_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issuesecurityschemes?maxResults=50", + json=issue_security_schemes_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueSecuritySchemes(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_type_schemes_stream(config, issue_type_schemes_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issuetypescheme?maxResults=50", + json=issue_type_schemes_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueTypeSchemes(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 1 From 135bd5e541ef063ecfc557fba779f66118d15fc2 Mon Sep 17 00:00:00 2001 From: Daryna Ishchenko Date: Fri, 16 Dec 2022 00:56:58 +0200 Subject: [PATCH 73/77] added unit tests for jira --- .../connectors/source-jira/setup.py | 2 +- .../source-jira/unit_tests/__init__.py | 2 +- .../source-jira/unit_tests/conftest.py | 168 ++++- .../unit_tests/responses/avatars.json | 28 + .../unit_tests/responses/board.json | 4 +- .../unit_tests/responses/board_issues.json | 17 + .../unit_tests/responses/filter.json | 4 +- .../unit_tests/responses/filter_sharing.json | 24 + .../unit_tests/responses/issue_comments.json | 108 +++ .../issue_custom_field_contexts.json | 18 + .../unit_tests/responses/issue_fields.json | 2 +- .../responses/issue_property_keys.json | 24 + .../responses/issue_remote_links.json | 56 ++ .../unit_tests/responses/issue_votes.json | 22 + .../unit_tests/responses/issue_watchers.json | 13 + .../unit_tests/responses/issue_worklogs.json | 48 ++ .../unit_tests/responses/issues.json | 252 +++++++ .../unit_tests/responses/jira_settings.json | 17 + .../unit_tests/responses/labels.json | 10 + .../unit_tests/responses/permissions.json | 10 + .../responses/project_components.json | 146 +++++ .../unit_tests/responses/project_email.json | 10 + .../responses/project_permissions.json | 16 + .../unit_tests/responses/projects.json | 42 ++ .../responses/projects_avatars.json | 30 + .../responses/projects_categories.json | 14 + .../responses/projects_versions.json | 38 ++ .../unit_tests/responses/screen_tabs.json | 10 + .../unit_tests/responses/screens.json | 14 + .../unit_tests/responses/sprint_issues.json | 33 + .../unit_tests/responses/sprints.json | 14 + .../unit_tests/responses/time_tracking.json | 6 + .../unit_tests/responses/users.json | 26 + .../responses/users_groups_detailed.json | 208 ++++++ .../responses/workflow_schemas.json | 20 + .../responses/workflow_status_categories.json | 16 + .../responses/workflow_statuses.json | 32 + .../unit_tests/responses/workflows.json | 22 + .../source-jira/unit_tests/test_streams.py | 618 +++++++++++++++++- .../source-jira/unit_tests/test_utils.py | 17 + 40 files changed, 2148 insertions(+), 13 deletions(-) create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/avatars.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/board_issues.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/filter_sharing.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_comments.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_custom_field_contexts.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_property_keys.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_remote_links.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_votes.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_watchers.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_worklogs.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/issues.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/jira_settings.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/labels.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/permissions.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/project_components.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/project_email.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/project_permissions.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/projects.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_avatars.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_categories.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_versions.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/screen_tabs.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/screens.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/sprint_issues.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/sprints.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/time_tracking.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/users.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/users_groups_detailed.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_schemas.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_status_categories.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_statuses.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/responses/workflows.json create mode 100644 airbyte-integrations/connectors/source-jira/unit_tests/test_utils.py diff --git a/airbyte-integrations/connectors/source-jira/setup.py b/airbyte-integrations/connectors/source-jira/setup.py index 68484a0e8bf8f..b8cc64afbbac9 100644 --- a/airbyte-integrations/connectors/source-jira/setup.py +++ b/airbyte-integrations/connectors/source-jira/setup.py @@ -8,7 +8,7 @@ MAIN_REQUIREMENTS = ["airbyte-cdk~=0.1", "requests==2.25.1", "pendulum~=2.1.2"] TEST_REQUIREMENTS = [ - "pytest==6.1.2", + "pytest==6.2.5", "source-acceptance-test", "responses~=0.22.0", ] diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py b/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py index 5de7610a9b2b8..1100c1c58cf51 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py +++ b/airbyte-integrations/connectors/source-jira/unit_tests/__init__.py @@ -1,3 +1,3 @@ # # Copyright (c) 2022 Airbyte, Inc., all rights reserved. -# \ No newline at end of file +# diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py b/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py index 4b1ed9fea7677..3095b649fdeaa 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py @@ -2,11 +2,10 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -import pytest - import json import os +import pytest from pytest import fixture @@ -93,3 +92,168 @@ def issue_security_schemes_response(): @fixture def issue_type_schemes_response(): return json.loads(load_file("issue_type.json")) + + +@fixture +def jira_settings_response(): + return json.loads(load_file("jira_settings.json")) + + +@fixture +def board_issues_response(): + return json.loads(load_file("board_issues.json")) + + +@fixture +def filter_sharing_response(): + return json.loads(load_file("filter_sharing.json")) + + +@fixture +def projects_response(): + return json.loads(load_file("projects.json")) + + +@fixture +def projects_avatars_response(): + return json.loads(load_file("projects_avatars.json")) + + +@fixture +def projects_categories_response(): + return json.loads(load_file("projects_categories.json")) + + +@fixture +def screens_response(): + return json.loads(load_file("screens.json")) + + +@fixture +def screen_tabs_response(): + return json.loads(load_file("screen_tabs.json")) + + +@fixture +def screen_tab_fields_response(): + return json.loads(load_file("screen_tab_fields.json")) + + +@fixture +def sprints_response(): + return json.loads(load_file("sprints.json")) + + +@fixture +def sprints_issues_response(): + return json.loads(load_file("sprint_issues.json")) + + +@fixture +def time_tracking_response(): + return json.loads(load_file("time_tracking.json")) + + +@fixture +def users_response(): + return json.loads(load_file("users.json")) + + +@fixture +def users_groups_detailed_response(): + return json.loads(load_file("users_groups_detailed.json")) + + +@fixture +def workflows_response(): + return json.loads(load_file("workflows.json")) + + +@fixture +def workflow_schemas_response(): + return json.loads(load_file("workflow_schemas.json")) + + +@fixture +def workflow_statuses_response(): + return json.loads(load_file("workflow_statuses.json")) + + +@fixture +def workflow_status_categories_response(): + return json.loads(load_file("workflow_status_categories.json")) + + +@fixture +def avatars_response(): + return json.loads(load_file("avatars.json")) + + +@fixture +def issues_response(): + return json.loads(load_file("issues.json")) + + +@fixture +def issue_comments_response(): + return json.loads(load_file("issue_comments.json")) + + +@fixture +def issue_custom_field_contexts_response(): + return json.loads(load_file("issue_custom_field_contexts.json")) + + +@fixture +def issue_property_keys_response(): + return json.loads(load_file("issue_property_keys.json")) + + +@fixture +def project_permissions_response(): + return json.loads(load_file("project_permissions.json")) + + +@fixture +def project_email_response(): + return json.loads(load_file("project_email.json")) + + +@fixture +def project_components_response(): + return json.loads(load_file("project_components.json")) + + +@fixture +def permissions_response(): + return json.loads(load_file("permissions.json")) + + +@fixture +def labels_response(): + return json.loads(load_file("labels.json")) + + +@fixture +def issue_worklogs_response(): + return json.loads(load_file("issue_worklogs.json")) + + +@fixture +def issue_watchers_response(): + return json.loads(load_file("issue_watchers.json")) + + +@fixture +def issue_votes_response(): + return json.loads(load_file("issue_votes.json")) + + +@fixture +def issue_remote_links_response(): + return json.loads(load_file("issue_remote_links.json")) + + +@fixture +def projects_versions_response(): + return json.loads(load_file("projects_versions.json")) diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/avatars.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/avatars.json new file mode 100644 index 0000000000000..d2bcac330da4e --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/avatars.json @@ -0,0 +1,28 @@ +{ + "system": [ + { + "id": "10300", + "isSystemAvatar": true, + "isSelected": false, + "isDeletable": false, + "urls": { + "16x16": "/secure/useravatar?size=xsmall&avatarId=10300", + "24x24": "/secure/useravatar?size=small&avatarId=10300", + "32x32": "/secure/useravatar?size=medium&avatarId=10300", + "48x48": "/secure/useravatar?avatarId=10300" + } + }, + { + "id": "10303", + "isSystemAvatar": true, + "isSelected": false, + "isDeletable": false, + "urls": { + "16x16": "/secure/useravatar?size=xsmall&avatarId=10303", + "24x24": "/secure/useravatar?size=small&avatarId=10303", + "32x32": "/secure/useravatar?size=medium&avatarId=10303", + "48x48": "/secure/useravatar?avatarId=10303" + } + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json index 8b078d53c6e53..ebe2fdd85ed12 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/board.json @@ -18,7 +18,7 @@ "projectKey": "Project1" }, { - "id": 17, + "id": 2, "self": "https://test/rest/agile/1.0/board/17", "name": "Project1 board", "type": "scrum", @@ -35,7 +35,7 @@ "projectKey": "Project1" }, { - "id": 20, + "id": 3, "self": "https://test/rest/agile/1.0/board/17", "name": "Project1 board", "type": "scrum", diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/board_issues.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/board_issues.json new file mode 100644 index 0000000000000..c01a2410d8b42 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/board_issues.json @@ -0,0 +1,17 @@ +{ + "issues": [ + { + "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", + "id": "10012", + "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", + "key": "IT-6", + "fields": { + "updated": "2022-05-17T04:26:21.613-0700", + "created": "2021-03-11T06:14:18.085-0800" + }, + "boardId": 1, + "created": "2021-03-11T06:14:18.085-0800", + "updated": "2022-05-17T04:26:21.613-0700" + } + ] +} diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json index ba2b894000733..6a1267d7c3ab9 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter.json @@ -3,7 +3,7 @@ { "expand": "description,owner,jql,viewUrl,searchUrl,favourite,favouritedCount,sharePermissions,editPermissions,isWritable,subscriptions", "self": "test", - "id": "10003", + "id": "1", "name": "Filter for EX board", "owner": { "self": "test", @@ -24,7 +24,7 @@ "favouritedCount": 0, "sharePermissions": [ { - "id": 10004, + "id": 2, "type": "project", "project": { "self": "test", diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter_sharing.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter_sharing.json new file mode 100644 index 0000000000000..9b52e16869791 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/filter_sharing.json @@ -0,0 +1,24 @@ +[ + { + "id": 10004, + "type": "project", + "project": { + "self": "https://airbyteio.atlassian.net/rest/api/3/project/10003", + "id": "1", + "key": "EX", + "assigneeType": "PROJECT_LEAD", + "name": "Example", + "roles": {}, + "avatarUrls": { + "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406", + "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=small", + "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=xsmall", + "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10406?size=medium" + }, + "projectTypeKey": "software", + "simplified": false, + "style": "classic", + "properties": {} + } + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_comments.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_comments.json new file mode 100644 index 0000000000000..469f09add69c3 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_comments.json @@ -0,0 +1,108 @@ +{ + "comments": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", + "id": "10755", + "author": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "body": { + "version": 1, + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Closed" + } + ] + } + ] + }, + "updateAuthor": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "created": "2022-05-17T04:06:55.076-0700", + "updated": "2022-05-17T04:06:55.076-0700", + "jsdPublic": true + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", + "id": "10521", + "author": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "body": { + "type": "doc", + "version": 1, + "content": [ + { + "type": "paragraph", + "content": [ + { + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", + "type": "text" + } + ] + } + ] + }, + "updateAuthor": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "created": "2021-04-14T14:32:43.099-0700", + "updated": "2021-04-14T14:32:43.099-0700", + "jsdPublic": true + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_custom_field_contexts.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_custom_field_contexts.json new file mode 100644 index 0000000000000..26379e87c7cfc --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_custom_field_contexts.json @@ -0,0 +1,18 @@ +{ + "values": [ + { + "id": "10130", + "name": "Default Configuration Scheme for Account", + "description": "Default configuration scheme generated by Jira", + "isGlobalContext": true, + "isAnyIssueType": true + }, + { + "id": "10129", + "name": "Default Configuration Scheme for Team", + "description": "Default configuration scheme generated by Jira", + "isGlobalContext": true, + "isAnyIssueType": true + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json index a90dfc7e3ea79..610e30b832c76 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_fields.json @@ -19,7 +19,7 @@ "id": "issuetype", "key": "issuetype", "name": "Issue Type", - "custom": false, + "custom": true, "orderable": true, "navigable": true, "searchable": true, diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_property_keys.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_property_keys.json new file mode 100644 index 0000000000000..f7e5cc4076b5f --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_property_keys.json @@ -0,0 +1,24 @@ +{ + "key": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/1", + "statusColor": "#d04437", + "description": "This problem will block progress.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/highest.svg", + "name": "Highest", + "id": "1", + "isDefault": false, + "key": "TESTKEY13-1" + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/2", + "statusColor": "#f15C75", + "description": "Serious problem that could block progress.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/high.svg", + "name": "High", + "id": "2", + "isDefault": false, + "key": "TESTKEY13-1" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_remote_links.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_remote_links.json new file mode 100644 index 0000000000000..6dbf2bc1576d3 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_remote_links.json @@ -0,0 +1,56 @@ +[ + { + "id": 10000, + "self": "https://your-domain.atlassian.net/rest/api/issue/MKY-1/remotelink/10000", + "globalId": "system=http://www.mycompany.com/support&id=1", + "application": { + "type": "com.acme.tracker", + "name": "My Acme Tracker" + }, + "relationship": "causes", + "object": { + "url": "http://www.mycompany.com/support?id=1", + "title": "TSTSUP-111", + "summary": "Customer support issue", + "icon": { + "url16x16": "http://www.mycompany.com/support/ticket.png", + "title": "Support Ticket" + }, + "status": { + "resolved": true, + "icon": { + "url16x16": "http://www.mycompany.com/support/resolved.png", + "title": "Case Closed", + "link": "http://www.mycompany.com/support?id=1&details=closed" + } + } + } + }, + { + "id": 10001, + "self": "https://your-domain.atlassian.net/rest/api/issue/MKY-1/remotelink/10001", + "globalId": "system=http://www.anothercompany.com/tester&id=1234", + "application": { + "type": "com.acme.tester", + "name": "My Acme Tester" + }, + "relationship": "is tested by", + "object": { + "url": "http://www.anothercompany.com/tester/testcase/1234", + "title": "Test Case #1234", + "summary": "Test that the submit button saves the item", + "icon": { + "url16x16": "http://www.anothercompany.com/tester/images/testcase.gif", + "title": "Test Case" + }, + "status": { + "resolved": false, + "icon": { + "url16x16": "http://www.anothercompany.com/tester/images/person/mia.gif", + "title": "Tested by Mia Krystof", + "link": "http://www.anothercompany.com/tester/person?accountId=5b10a2844c20165700ede21g" + } + } + } + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_votes.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_votes.json new file mode 100644 index 0000000000000..f9e403dfd42bc --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_votes.json @@ -0,0 +1,22 @@ +{ + "self": "https://your-domain.atlassian.net/rest/api/issue/MKY-1/votes", + "votes": 24, + "hasVoted": true, + "voters": [ + { + "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g", + "key": "", + "accountId": "5b10a2844c20165700ede21g", + "accountType": "atlassian", + "name": "", + "avatarUrls": { + "48x48": "https://avatar-management--avatars.server-location.prod.public.atl-paas.net/initials/MK-5.png?size=48&s=48", + "24x24": "https://avatar-management--avatars.server-location.prod.public.atl-paas.net/initials/MK-5.png?size=24&s=24", + "16x16": "https://avatar-management--avatars.server-location.prod.public.atl-paas.net/initials/MK-5.png?size=16&s=16", + "32x32": "https://avatar-management--avatars.server-location.prod.public.atl-paas.net/initials/MK-5.png?size=32&s=32" + }, + "displayName": "Mia Krystof", + "active": false + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_watchers.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_watchers.json new file mode 100644 index 0000000000000..831072d27fecd --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_watchers.json @@ -0,0 +1,13 @@ +{ + "self": "https://your-domain.atlassian.net/rest/api/3/issue/EX-1/watchers", + "isWatching": false, + "watchCount": 1, + "watchers": [ + { + "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g", + "accountId": "5b10a2844c20165700ede21g", + "displayName": "Mia Krystof", + "active": false + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_worklogs.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_worklogs.json new file mode 100644 index 0000000000000..b298cef96fb62 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issue_worklogs.json @@ -0,0 +1,48 @@ +{ + "startAt": 0, + "maxResults": 1, + "total": 1, + "worklogs": [ + { + "self": "https://your-domain.atlassian.net/rest/api/3/issue/10010/worklog/10000", + "author": { + "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g", + "accountId": "5b10a2844c20165700ede21g", + "displayName": "Mia Krystof", + "active": false + }, + "updateAuthor": { + "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g", + "accountId": "5b10a2844c20165700ede21g", + "displayName": "Mia Krystof", + "active": false + }, + "comment": { + "type": "doc", + "version": 1, + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "I did some work here." + } + ] + } + ] + }, + "updated": "2021-01-18T23:45:00.000+0000", + "visibility": { + "type": "group", + "value": "jira-developers", + "identifier": "276f955c-63d7-42c8-9520-92d01dca0625" + }, + "started": "2021-01-17T12:34:00.000+0000", + "timeSpent": "3h 20m", + "timeSpentSeconds": 12000, + "id": "100028", + "issueId": "10002" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues.json new file mode 100644 index 0000000000000..a970c050c7bef --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/issues.json @@ -0,0 +1,252 @@ +{ + "issues": [ + { + "expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", + "id": "10627", + "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627", + "key": "TESTKEY13-1", + "fields": { + "statuscategorychangedate": "2022-06-09T16:29:32.382-0700", + "issuetype": { + "self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", + "id": "10000", + "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", + "name": "Epic", + "subtask": false, + "hierarchyLevel": 1 + }, + "development": "", + "timespent": null, + "customfield_10030": null, + "project": { + "self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", + "id": "10016", + "key": "TESTKEY13", + "name": "Test project 13", + "projectTypeKey": "software", + "simplified": false, + "avatarUrls": { + "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", + "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", + "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", + "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium" + } + }, + "fixVersions": [], + "aggregatetimespent": null, + "resolution": null, + "customfield_10029": null, + "resolutiondate": null, + "workratio": -1, + "watches": { + "self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/watchers", + "watchCount": 1, + "isWatching": true + }, + "lastViewed": "2022-12-09T06:08:31.026-0800", + "issuerestriction": { + "issuerestrictions": {}, + "shouldDisplay": false + }, + "customfield_10181": null, + "created": "2022-06-09T16:29:31.871-0700", + "customfield_10020": null, + "customfield_10021": null, + "customfield_10022": null, + "customfield_10023": null, + "priority": { + "self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", + "name": "Low", + "id": "4" + }, + "customfield_10024": null, + "customfield_10025": null, + "labels": [ + "test" + ], + "customfield_10026": null, + "customfield_10016": null, + "customfield_10017": "dark_orange", + "customfield_10215": null, + "customfield_10018": { + "hasEpicLinkFieldDependency": false, + "showField": false, + "nonEditableReason": { + "reason": "PLUGIN_LICENSE_ERROR", + "message": "The Parent Link is only available to Jira Premium users." + } + }, + "customfield_10019": "0|i0077b:", + "timeestimate": null, + "aggregatetimeoriginalestimate": null, + "versions": [], + "issuelinks": [], + "assignee": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "updated": "2022-12-08T02:22:18.889-0800", + "status": { + "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", + "description": "", + "iconUrl": "https://airbyteio.atlassian.net/", + "name": "To Do", + "id": "10000", + "statusCategory": { + "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", + "id": 2, + "key": "new", + "colorName": "blue-gray", + "name": "To Do" + } + }, + "components": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", + "id": "10065", + "name": "Component 0", + "description": "This is a Jira component" + } + ], + "timeoriginalestimate": null, + "description": { + "version": 1, + "type": "doc", + "content": [ + { + "type": "paragraph", + "content": [ + { + "type": "text", + "text": "Test issue" + } + ] + } + ] + }, + "customfield_10010": null, + "customfield_10011": "EPIC NAME TEXT", + "customfield_10210": null, + "customfield_10012": { + "self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", + "value": "To Do", + "id": "10016" + }, + "customfield_10211": null, + "customfield_10013": "ghx-label-14", + "customfield_10212": null, + "customfield_10014": null, + "customfield_10015": null, + "timetracking": {}, + "customfield_10213": null, + "customfield_10005": null, + "customfield_10006": null, + "security": null, + "customfield_10007": null, + "customfield_10008": null, + "aggregatetimeestimate": null, + "customfield_10009": "2022-12-09T00:00:00.000-0800", + "attachment": [], + "customfield_10209": null, + "summary": "My Summary", + "creator": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "subtasks": [], + "reporter": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + }, + "aggregateprogress": { + "progress": 0, + "total": 0 + }, + "customfield_10001": null, + "customfield_10002": null, + "customfield_10047": null, + "customfield_10003": [ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "accountType": "atlassian" + } + ], + "customfield_10004": null, + "environment": null, + "duedate": null, + "progress": { + "progress": 0, + "total": 0 + }, + "votes": { + "self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/votes", + "votes": 0, + "hasVoted": false + }, + "comment": { + "comments": [], + "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627/comment", + "maxResults": 0, + "total": 0, + "startAt": 0 + }, + "worklog": { + "startAt": 0, + "maxResults": 20, + "total": 0, + "worklogs": [] + } + }, + "projectId": "10016", + "projectKey": "TESTKEY13", + "created": "2022-06-09T16:29:31.871-0700", + "updated": "2022-12-08T02:22:18.889-0800" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/jira_settings.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/jira_settings.json new file mode 100644 index 0000000000000..9a4fd50098079 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/jira_settings.json @@ -0,0 +1,17 @@ +[ + { + "id": "jira.issuenav.criteria.autoupdate", + "key": "jira.issuenav.criteria.autoupdate", + "value": "true", + "name": "Auto Update Criteria", + "desc": "Turn on to update search results automatically", + "type": "boolean" + }, + { + "id": "jira.clone.prefix", + "key": "jira.clone.prefix", + "value": "CLONE -", + "name": "The prefix added to the Summary field of cloned issues", + "type": "string" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/labels.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/labels.json new file mode 100644 index 0000000000000..251696ac53c80 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/labels.json @@ -0,0 +1,10 @@ +{ + "maxResults": 2, + "startAt": 0, + "total": 100, + "isLast": false, + "values": [ + "performance", + "security" + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/permissions.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/permissions.json new file mode 100644 index 0000000000000..c9a0e2b6b2f26 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/permissions.json @@ -0,0 +1,10 @@ +{ + "permissions": { + "BULK_CHANGE": { + "key": "BULK_CHANGE", + "name": "Bulk Change", + "type": "GLOBAL", + "description": "Ability to modify a collection of issues at once. For example, resolve multiple issues in one step." + } + } +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_components.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_components.json new file mode 100644 index 0000000000000..b81cdb7cd4db1 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_components.json @@ -0,0 +1,146 @@ +{ + "values": [ + { + "componentBean": { + "self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", + "id": "10047", + "name": "Component 0", + "description": "This is a Jira component", + "lead": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + }, + "assigneeType": "PROJECT_LEAD", + "assignee": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + }, + "realAssigneeType": "PROJECT_LEAD", + "realAssignee": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + }, + "isAssigneeTypeValid": true, + "project": "IT", + "projectId": 10000 + }, + "issueCount": 0, + "realAssignee": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + }, + "isAssigneeTypeValid": true, + "realAssigneeType": "PROJECT_LEAD", + "description": "This is a Jira component", + "name": "Component 0", + "id": "10047", + "self": "https://airbyteio.atlassian.net/rest/api/3/component/10047", + "projectId": 10000, + "project": "IT", + "assignee": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + }, + "assigneeType": "PROJECT_LEAD", + "lead": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + } + }, + { + "componentBean": { + "self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", + "id": "10000", + "name": "Component 1", + "description": "Component 1", + "lead": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + }, + "assigneeType": "PROJECT_DEFAULT", + "realAssigneeType": "PROJECT_DEFAULT", + "isAssigneeTypeValid": false, + "project": "IT", + "projectId": 10000 + }, + "issueCount": 0, + "isAssigneeTypeValid": false, + "realAssigneeType": "PROJECT_DEFAULT", + "description": "Component 1", + "name": "Component 1", + "id": "10000", + "self": "https://airbyteio.atlassian.net/rest/api/3/component/10000", + "projectId": 10000, + "project": "IT", + "assigneeType": "PROJECT_DEFAULT", + "lead": { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true + } + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_email.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_email.json new file mode 100644 index 0000000000000..a16798f2ccf2f --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_email.json @@ -0,0 +1,10 @@ +[ + { + "emailAddress": "jira@airbyteio.atlassian.net", + "projectId": "10000" + }, + { + "emailAddress": "jira@airbyteio.atlassian.net", + "projectId": "10016" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_permissions.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_permissions.json new file mode 100644 index 0000000000000..a5c2cedad686b --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/project_permissions.json @@ -0,0 +1,16 @@ +{ + "levels": [ + { + "self": "https://your-domain.atlassian.net/rest/api/3/securitylevel/100000", + "id": "100000", + "description": "Only the reporter and internal staff can see this issue.", + "name": "Reporter Only" + }, + { + "self": "https://your-domain.atlassian.net/rest/api/3/securitylevel/100001", + "id": "100001", + "description": "Only internal staff can see this issue.", + "name": "Staff Only" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects.json new file mode 100644 index 0000000000000..b155807cea6c9 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects.json @@ -0,0 +1,42 @@ +{ + "values": [ + { + "expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", + "self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", + "id": "1", + "key": "Project1", + "description": "", + "name": "integration-tests", + "avatarUrls": { + "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", + "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", + "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", + "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium" + }, + "projectTypeKey": "software", + "simplified": false, + "style": "classic", + "isPrivate": false, + "properties": {} + }, + { + "expand": "description,lead,issueTypes,url,projectKeys,permissions,insight", + "self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", + "id": "2", + "key": "Project1", + "description": "Test project 13 description", + "name": "Test project 13", + "avatarUrls": { + "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", + "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", + "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", + "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium" + }, + "projectTypeKey": "software", + "simplified": false, + "style": "classic", + "isPrivate": false, + "properties": {} + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_avatars.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_avatars.json new file mode 100644 index 0000000000000..0c0ead56df9b1 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_avatars.json @@ -0,0 +1,30 @@ +{ + "custom": [ + { + "id": "1", + "isSystemAvatar": true, + "isSelected": false, + "isDeletable": false, + "urls": { + "16x16": "/secure/viewavatar?size=xsmall&avatarId=10400&avatarType=project", + "24x24": "/secure/viewavatar?size=small&avatarId=10400&avatarType=project", + "32x32": "/secure/viewavatar?size=medium&avatarId=10400&avatarType=project", + "48x48": "/secure/viewavatar?avatarId=10400&avatarType=project" + } + } + ], + "system": [ + { + "id": "2", + "isSystemAvatar": true, + "isSelected": false, + "isDeletable": false, + "urls": { + "16x16": "/secure/viewavatar?size=xsmall&avatarId=10401&avatarType=project", + "24x24": "/secure/viewavatar?size=small&avatarId=10401&avatarType=project", + "32x32": "/secure/viewavatar?size=medium&avatarId=10401&avatarType=project", + "48x48": "/secure/viewavatar?avatarId=10401&avatarType=project" + } + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_categories.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_categories.json new file mode 100644 index 0000000000000..d9a1eb92b67bf --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_categories.json @@ -0,0 +1,14 @@ +[ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", + "id": "10000", + "description": "Category 1", + "name": "Category 1" + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10001", + "id": "10001", + "description": "Category 2", + "name": "Category 2" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_versions.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_versions.json new file mode 100644 index 0000000000000..ae4f8c424a07c --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/projects_versions.json @@ -0,0 +1,38 @@ +{ + "self": "https://your-domain.atlassian.net/rest/api/3/project/PR/version?startAt=0&maxResults=2", + "nextPage": "https://your-domain.atlassian.net/rest/api/3/project/PR/version?startAt=2&maxResults=2", + "maxResults": 2, + "startAt": 2, + "total": 7, + "isLast": true, + "values": [ + { + "self": "https://your-domain.atlassian.net/rest/api/3/version/10000", + "id": "1", + "description": "An excellent version", + "name": "New Version 1", + "archived": false, + "released": true, + "releaseDate": "2010-07-06", + "overdue": true, + "userReleaseDate": "6/Jul/2010", + "projectId": 1 + }, + { + "self": "https://your-domain.atlassian.net/rest/api/3/version/10010", + "id": "2", + "description": "Minor Bugfix version", + "name": "Next Version", + "archived": false, + "released": false, + "overdue": false, + "projectId": 1, + "issuesStatusForFixVersion": { + "unmapped": 0, + "toDo": 10, + "inProgress": 20, + "done": 100 + } + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/screen_tabs.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/screen_tabs.json new file mode 100644 index 0000000000000..ec0a5ee795050 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/screen_tabs.json @@ -0,0 +1,10 @@ +[ + { + "id": 10000, + "name": "Field Tab" + }, + { + "id": 10001, + "name": "Field Tab" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/screens.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/screens.json new file mode 100644 index 0000000000000..b7ae1067088aa --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/screens.json @@ -0,0 +1,14 @@ +{ + "values": [ + { + "id": 1, + "name": "Default Screen", + "description": "Allows to update all system fields." + }, + { + "id": 2, + "name": "Workflow Screen", + "description": "This screen is used in the workflow and enables you to assign issues" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/sprint_issues.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/sprint_issues.json new file mode 100644 index 0000000000000..e6f405b040892 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/sprint_issues.json @@ -0,0 +1,33 @@ +{ + "issues": [ + { + "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields", + "id": "2-10012", + "self": "https://airbyteio.atlassian.net/rest/agile/1.0/issue/10012", + "key": "IT-6", + "fields": { + "customfield_10016": null, + "updated": "2022-05-17T04:26:21.613-0700", + "created": "2021-03-11T06:14:18.085-0800", + "status": { + "self": "https://airbyteio.atlassian.net/rest/api/2/status/10000", + "description": "", + "iconUrl": "https://airbyteio.atlassian.net/", + "name": "To Do", + "id": "10000", + "statusCategory": { + "self": "https://airbyteio.atlassian.net/rest/api/2/statuscategory/2", + "id": 2, + "key": "new", + "colorName": "blue-gray", + "name": "To Do" + } + } + }, + "issueId": "10012", + "sprintId": 2, + "created": "2021-03-11T06:14:18.085-0800", + "updated": "2022-05-17T04:26:21.613-0700" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/sprints.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/sprints.json new file mode 100644 index 0000000000000..e254a83380e47 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/sprints.json @@ -0,0 +1,14 @@ +{ + "values": [ + { + "id": 2, + "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/2", + "state": "active", + "name": "IT Sprint 1", + "startDate": "2022-05-17T11:25:59.072Z", + "endDate": "2022-05-31T11:25:00.000Z", + "originBoardId": 1, + "goal": "Deliver results" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/time_tracking.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/time_tracking.json new file mode 100644 index 0000000000000..e003b94aacb55 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/time_tracking.json @@ -0,0 +1,6 @@ +[ + { + "key": "JIRA", + "name": "JIRA provided time tracking" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/users.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/users.json new file mode 100644 index 0000000000000..b526d3ca43ab0 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/users.json @@ -0,0 +1,26 @@ +[ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "1", + "accountType": "atlassian", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + } + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "2", + "accountType": "atlassian", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + } + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/users_groups_detailed.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/users_groups_detailed.json new file mode 100644 index 0000000000000..42f10c5fde796 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/users_groups_detailed.json @@ -0,0 +1,208 @@ +[ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", + "accountId": "5fc9e78d2730d800760becc4", + "accountType": "atlassian", + "emailAddress": "integration-test@airbyte.io", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", + "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" + }, + "displayName": "integration test", + "active": true, + "timeZone": "America/Los_Angeles", + "locale": "en_US", + "groups": { + "size": 27, + "items": [ + { + "name": "administrators", + "groupId": "0ca6e087-7a61-4986-a269-98fe268854a1", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=0ca6e087-7a61-4986-a269-98fe268854a1" + }, + { + "name": "confluence-users", + "groupId": "38d808e9-113f-45c4-817b-099e953b687a", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=38d808e9-113f-45c4-817b-099e953b687a" + }, + { + "name": "integration-test-group", + "groupId": "5f1ec851-f8da-4f90-ab42-8dc50a9f99d8", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5f1ec851-f8da-4f90-ab42-8dc50a9f99d8" + }, + { + "name": "jira-administrators", + "groupId": "58582f33-a5a6-43b9-92a6-ff0bbacb49ae", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=58582f33-a5a6-43b9-92a6-ff0bbacb49ae" + }, + { + "name": "jira-software-users", + "groupId": "4452b254-035d-469a-a422-1f4666dce50e", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e" + }, + { + "name": "jira-users", + "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2513da2e-08cf-4415-9bcd-cbbd32fa227d" + }, + { + "name": "site-admins", + "groupId": "76dad095-fc1a-467a-88b4-fde534220985", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=76dad095-fc1a-467a-88b4-fde534220985" + }, + { + "name": "Test group 0", + "groupId": "ee8d15d1-6462-406a-b0a6-8065b7e4cdd7", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=ee8d15d1-6462-406a-b0a6-8065b7e4cdd7" + }, + { + "name": "Test group 1", + "groupId": "bda1faf1-1a1a-42d1-82e4-a428c8b8f67c", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bda1faf1-1a1a-42d1-82e4-a428c8b8f67c" + }, + { + "name": "Test group 10", + "groupId": "e9f74708-e33c-4158-919d-6457f50c6e74", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e9f74708-e33c-4158-919d-6457f50c6e74" + }, + { + "name": "Test group 11", + "groupId": "b0e6d76f-701a-4208-a88d-4478f242edde", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=b0e6d76f-701a-4208-a88d-4478f242edde" + }, + { + "name": "Test group 12", + "groupId": "dddc24a0-ef00-407e-abef-5a660b6f55cf", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dddc24a0-ef00-407e-abef-5a660b6f55cf" + }, + { + "name": "Test group 13", + "groupId": "dbe4af74-8387-4b08-843b-86af78dd738e", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=dbe4af74-8387-4b08-843b-86af78dd738e" + }, + { + "name": "Test group 14", + "groupId": "d4570a20-38d8-44cc-a63b-0924d0d0d0ff", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=d4570a20-38d8-44cc-a63b-0924d0d0d0ff" + }, + { + "name": "Test group 15", + "groupId": "87bde5c0-7231-44a7-88b5-421da2ab8052", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=87bde5c0-7231-44a7-88b5-421da2ab8052" + }, + { + "name": "Test group 16", + "groupId": "538b6aa2-bf57-402f-93c0-c2e2d68b7155", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=538b6aa2-bf57-402f-93c0-c2e2d68b7155" + }, + { + "name": "Test group 17", + "groupId": "022bc924-ac57-442d-80c9-df042b73ad87", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=022bc924-ac57-442d-80c9-df042b73ad87" + }, + { + "name": "Test group 18", + "groupId": "bbfc6fc9-96db-4e66-88f4-c55b08298272", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=bbfc6fc9-96db-4e66-88f4-c55b08298272" + }, + { + "name": "Test group 19", + "groupId": "3c4fef5d-9721-4f20-9a68-346d222de3cf", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3c4fef5d-9721-4f20-9a68-346d222de3cf" + }, + { + "name": "Test group 2", + "groupId": "5ddb26f1-2d31-414a-ac34-b2d6de38805d", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=5ddb26f1-2d31-414a-ac34-b2d6de38805d" + }, + { + "name": "Test group 3", + "groupId": "638aa1ad-8707-4d56-9361-f5959b6c4785", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=638aa1ad-8707-4d56-9361-f5959b6c4785" + }, + { + "name": "Test group 4", + "groupId": "532554e0-43be-4eca-9186-b417dcf38547", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=532554e0-43be-4eca-9186-b417dcf38547" + }, + { + "name": "Test group 5", + "groupId": "6b663734-85b6-4185-8fb2-9ac27709b3aa", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=6b663734-85b6-4185-8fb2-9ac27709b3aa" + }, + { + "name": "Test group 6", + "groupId": "2d4af5cf-cd34-4e78-9445-abc000cdd5cc", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=2d4af5cf-cd34-4e78-9445-abc000cdd5cc" + }, + { + "name": "Test group 7", + "groupId": "e8a97909-d807-4f79-8548-1f2c156ae6f0", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=e8a97909-d807-4f79-8548-1f2c156ae6f0" + }, + { + "name": "Test group 8", + "groupId": "3ee851e7-6688-495a-a6f6-737e85a23878", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=3ee851e7-6688-495a-a6f6-737e85a23878" + }, + { + "name": "Test group 9", + "groupId": "af27d0b1-4378-443f-9a6d-f878848b144a", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=af27d0b1-4378-443f-9a6d-f878848b144a" + } + ] + }, + "applicationRoles": { + "size": 1, + "items": [ + { + "key": "jira-software", + "name": "Jira Software" + } + ] + }, + "expand": "groups,applicationRoles" + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", + "accountId": "557058:f58131cb-b67d-43c7-b30d-6b58d40bd077", + "accountType": "app", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", + "24x24": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", + "16x16": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png", + "32x32": "https://secure.gravatar.com/avatar/600529a9c8bfef89daa848e6db28ed2d?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FAJ-0.png" + }, + "displayName": "Automation for Jira", + "active": true, + "timeZone": "America/Los_Angeles", + "locale": "en_US", + "groups": { + "size": 2, + "items": [ + { + "name": "atlassian-addons-admin", + "groupId": "90b9ffb1-ed26-4b5e-af59-8f684900ce83", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=90b9ffb1-ed26-4b5e-af59-8f684900ce83" + }, + { + "name": "jira-software-users", + "groupId": "4452b254-035d-469a-a422-1f4666dce50e", + "self": "https://airbyteio.atlassian.net/rest/api/3/group?groupId=4452b254-035d-469a-a422-1f4666dce50e" + } + ] + }, + "applicationRoles": { + "size": 1, + "items": [ + { + "key": "jira-software", + "name": "Jira Software" + } + ] + }, + "expand": "groups,applicationRoles" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_schemas.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_schemas.json new file mode 100644 index 0000000000000..71b07527775ff --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_schemas.json @@ -0,0 +1,20 @@ +{ + "values": [ + { + "id": 10000, + "name": "classic", + "description": "classic", + "defaultWorkflow": "classic default workflow", + "issueTypeMappings": {}, + "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10000" + }, + { + "id": 10001, + "name": "IT: Software Simplified Workflow Scheme", + "description": "Generated by JIRA Software version 1001.0.0-SNAPSHOT. This workflow scheme is managed internally by Jira Software. Do not manually modify this workflow scheme.", + "defaultWorkflow": "Software Simplified Workflow for Project IT", + "issueTypeMappings": {}, + "self": "https://airbyteio.atlassian.net/rest/api/3/workflowscheme/10001" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_status_categories.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_status_categories.json new file mode 100644 index 0000000000000..6099fcd994467 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_status_categories.json @@ -0,0 +1,16 @@ +[ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/1", + "id": 1, + "key": "undefined", + "colorName": "medium-gray", + "name": "No Category" + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", + "id": 2, + "key": "new", + "colorName": "blue-gray", + "name": "To Do" + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_statuses.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_statuses.json new file mode 100644 index 0000000000000..210811cb20cb6 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflow_statuses.json @@ -0,0 +1,32 @@ +[ + { + "self": "https://airbyteio.atlassian.net/rest/api/3/status/3", + "description": "This issue is being actively worked on at the moment by the assignee.", + "iconUrl": "https://airbyteio.atlassian.net/images/icons/statuses/inprogress.png", + "name": "In Progress", + "untranslatedName": "In Progress", + "id": "3", + "statusCategory": { + "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/4", + "id": 4, + "key": "indeterminate", + "colorName": "yellow", + "name": "In Progress" + } + }, + { + "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", + "description": "", + "iconUrl": "https://airbyteio.atlassian.net/", + "name": "To Do", + "untranslatedName": "To Do", + "id": "10000", + "statusCategory": { + "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", + "id": 2, + "key": "new", + "colorName": "blue-gray", + "name": "To Do" + } + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflows.json b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflows.json new file mode 100644 index 0000000000000..04828d7d8926e --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/responses/workflows.json @@ -0,0 +1,22 @@ +{ + "values": [ + { + "id": { + "name": "Builds Workflow", + "entityId": "Builds Workflow" + }, + "description": "Builds Workflow", + "created": "1969-12-31T16:00:00.000-0800", + "updated": "1969-12-31T16:00:00.000-0800" + }, + { + "id": { + "name": "classic default workflow", + "entityId": "385bb764-dfb6-89a7-2e43-a25bdd0cbaf4" + }, + "description": "The classic JIRA default workflow", + "created": "2020-12-03T23:41:38.951-0800", + "updated": "2020-12-03T23:41:57.343-0800" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py index 113914c33bb97..2dbc22530db8f 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py @@ -2,26 +2,59 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +import pytest import responses from airbyte_cdk.models import SyncMode - +from requests.exceptions import HTTPError +from source_jira.source import SourceJira from source_jira.streams import ( ApplicationRoles, + Avatars, + BoardIssues, Boards, Dashboards, Filters, + FilterSharing, Groups, - IssueFields, + IssueComments, + IssueCustomFieldContexts, IssueFieldConfigurations, + IssueFields, IssueLinkTypes, IssueNavigatorSettings, IssueNotificationSchemes, IssuePriorities, + IssuePropertyKeys, + IssueRemoteLinks, IssueResolutions, + Issues, IssueSecuritySchemes, - IssueTypeSchemes + IssueTypeSchemes, + IssueVotes, + IssueWatchers, + IssueWorklogs, + JiraSettings, + Labels, + Permissions, + ProjectAvatars, + ProjectCategories, + ProjectComponents, + ProjectEmail, + ProjectPermissionSchemes, + Projects, + ProjectVersions, + Screens, + ScreenTabs, + SprintIssues, + Sprints, + TimeTracking, + Users, + UsersGroupsDetailed, + Workflows, + WorkflowSchemes, + WorkflowStatusCategories, + WorkflowStatuses, ) -from source_jira.source import SourceJira @responses.activate @@ -41,6 +74,21 @@ def test_application_roles_stream(config, application_roles_response): assert len(responses.calls) == 1 +@responses.activate +def test_application_roles_stream_http_error(config, application_roles_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/applicationrole?maxResults=50", + json={'error': 'not found'}, status=404 + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ApplicationRoles(**args) + with pytest.raises(HTTPError): + [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + + @responses.activate def test_boards_stream(config, boards_response): responses.add( @@ -260,3 +308,565 @@ def test_issue_type_schemes_stream(config, issue_type_schemes_response): records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] assert len(records) == 3 assert len(responses.calls) == 1 + + +@responses.activate +def test_jira_settings_stream(config, jira_settings_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/application-properties?maxResults=50", + json=jira_settings_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = JiraSettings(**args) + + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_board_issues_stream(config, board_issues_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board/1/issue?maxResults=50&fields=key&fields=created&fields=updated", + json=board_issues_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board/2/issue?maxResults=50&fields=key&fields=created&fields=updated", + json={}, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board/3/issue?maxResults=50&fields=key&fields=created&fields=updated", + json={}, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = BoardIssues(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 1 + assert len(responses.calls) == 3 + + +@responses.activate +def test_filter_sharing_stream(config, filter_sharing_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/filter/1/permission?maxResults=50", + json=filter_sharing_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = FilterSharing(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_projects_stream(config, projects_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/search?maxResults=50&expand=description", + json=projects_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Projects(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_projects_avatars_stream(config, projects_avatars_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/Project1/avatars?maxResults=50", + json=projects_avatars_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ProjectAvatars(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 4 + assert len(responses.calls) == 2 + + +@responses.activate +def test_projects_categories_stream(config, projects_categories_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/projectCategory?maxResults=50", + json=projects_categories_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ProjectCategories(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_screens_stream(config, screens_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/screens?maxResults=50", + json=screens_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Screens(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_screen_tabs_stream(config, screen_tabs_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/screens/1/tabs?maxResults=50", + json=screen_tabs_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/screens/2/tabs?maxResults=50", + json={}, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ScreenTabs(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 2 + + +@responses.activate +def test_sprints_stream(config, sprints_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board/1/sprint?maxResults=50", + json=sprints_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board/2/sprint?maxResults=50", + json=sprints_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/board/3/sprint?maxResults=50", + json=sprints_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Sprints(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 3 + assert len(responses.calls) == 3 + + +@responses.activate +def test_sprint_issues_stream(config, sprints_issues_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/agile/1.0/sprint/2/issue?maxResults=50&fields=key&fields=status&fields=created&fields=updated", + json=sprints_issues_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = SprintIssues(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 3 + assert len(responses.calls) == 3 + + +@responses.activate +def test_time_tracking_stream(config, time_tracking_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/configuration/timetracking/list?maxResults=50", + json=time_tracking_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = TimeTracking(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_users_stream(config, users_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/users/search?maxResults=50", + json=users_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Users(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_users_groups_detailed_stream(config, users_groups_detailed_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/user?maxResults=50&accountId=1&expand=groups%2CapplicationRoles", + json=users_groups_detailed_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/user?maxResults=50&accountId=2&expand=groups%2CapplicationRoles", + json=users_groups_detailed_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = UsersGroupsDetailed(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 4 + assert len(responses.calls) == 2 + + +@responses.activate +def test_workflows_stream(config, workflows_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/workflow/search?maxResults=50", + json=workflows_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Workflows(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_workflow_schemas_stream(config, workflow_schemas_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/workflowscheme?maxResults=50", + json=workflow_schemas_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = WorkflowSchemes(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_workflow_statuses_stream(config, workflow_statuses_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/status?maxResults=50", + json=workflow_statuses_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = WorkflowStatuses(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_workflow_status_categories_stream(config, workflow_status_categories_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/statuscategory?maxResults=50", + json=workflow_status_categories_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = WorkflowStatusCategories(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.incremental)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_avatars_stream(config, avatars_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/avatar/issuetype/system?maxResults=50", + json=avatars_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Avatars(**args) + records = [r for r in + stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice={"avatar_type": "issuetype"})] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issues_stream(config, issues_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/search?maxResults=50&fields=%2Aall&jql=project+in+%28%271%27%2C+%272%27%29", + json=issues_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Issues(**args) + records = [r for r in + stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_comments_stream(config, issue_comments_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issue/TESTKEY13-1/comment?maxResults=50", + json=issue_comments_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueComments(**args) + records = [r for r in + stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_custom_field_contexts_stream(config, issue_custom_field_contexts_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/field/issuetype/context?maxResults=50", + json=issue_custom_field_contexts_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueCustomFieldContexts(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice={"field_id": "10130"})] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_property_keys_stream(config, issue_property_keys_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issue/TESTKEY13-1/properties?maxResults=50", + json=issue_property_keys_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssuePropertyKeys(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, + stream_slice={"issue_key": "TESTKEY13-1", "key": "TESTKEY13-1"})] + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_project_permissions_stream(config, project_permissions_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/Project1/securitylevel?maxResults=50", + json=project_permissions_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ProjectPermissionSchemes(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, + stream_slice={"key": "TESTKEY13-1"})] + assert len(records) == 4 + + +@responses.activate +def test_project_email_stream(config, project_email_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/1/email?maxResults=50", + json=project_email_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/2/email?maxResults=50", + json=project_email_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ProjectEmail(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, + stream_slice={"key": "TESTKEY13-1"})] + assert len(records) == 4 + assert len(responses.calls) == 2 + + +@responses.activate +def test_project_components_stream(config, project_components_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/Project1/component?maxResults=50", + json=project_components_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ProjectComponents(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, + stream_slice={"key": "Project1"})] + assert len(records) == 4 + assert len(responses.calls) == 2 + + +@responses.activate +def test_permissions_stream(config, permissions_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/permissions?maxResults=50", + json=permissions_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Permissions(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_labels_stream(config, labels_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/label?maxResults=50", + json=labels_response, + ) + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/label?maxResults=50&startAt=2", + json={}, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = Labels(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 2 + assert len(responses.calls) == 2 + + +@responses.activate +def test_issue_worklogs_stream(config, issue_worklogs_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issue/TESTKEY13-1/worklog?maxResults=50", + json=issue_worklogs_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueWorklogs(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_watchers_stream(config, issue_watchers_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issue/TESTKEY13-1/watchers?maxResults=50", + json=issue_watchers_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueWatchers(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_votes_stream(config, issue_votes_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issue/TESTKEY13-1/votes?maxResults=50", + json=issue_votes_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueVotes(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice={"key": "Project1"})] + + assert len(records) == 1 + assert len(responses.calls) == 1 + + +@responses.activate +def test_issue_remote_links_stream(config, issue_remote_links_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/issue/TESTKEY13-1/remotelink?maxResults=50", + json=issue_remote_links_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = IssueRemoteLinks(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice={"key": "Project1"})] + + assert len(records) == 2 + assert len(responses.calls) == 1 + + +@responses.activate +def test_project_versions_stream(config, projects_versions_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/Project1/version?maxResults=50", + json=projects_versions_response, + ) + + authenticator = SourceJira().get_authenticator(config=config) + args = {"authenticator": authenticator, "domain": config["domain"], "projects": config.get("projects", [])} + stream = ProjectVersions(**args) + records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice={"key": "Project1"})] + + assert len(records) == 4 + assert len(responses.calls) == 2 diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/test_utils.py b/airbyte-integrations/connectors/source-jira/unit_tests/test_utils.py new file mode 100644 index 0000000000000..3c52a656828b5 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/unit_tests/test_utils.py @@ -0,0 +1,17 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +from source_jira.utils import safe_max + + +def test_safe_max_arg1_none(): + assert safe_max(None, 1) == 1 + + +def test_safe_max_arg2_none(): + assert safe_max(1, None) == 1 + + +def test_safe_max_both_args(): + assert safe_max(1, 2) == 2 From fec793567f39c84db21c26a5eac7e7a854eecf5a Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 16 Dec 2022 04:16:14 +0000 Subject: [PATCH 74/77] order added to spec.json Signed-off-by: Sergey Chvalyuk --- .../source-jira/source_jira/spec.json | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/spec.json b/airbyte-integrations/connectors/source-jira/source_jira/spec.json index 2994df23ddf94..21d87233d5c3d 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/spec.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/spec.json @@ -11,19 +11,22 @@ "type": "string", "title": "API Token", "description": "Jira API Token. See the docs for more information on how to generate this key.", - "airbyte_secret": true + "airbyte_secret": true, + "order": 0 }, "domain": { "type": "string", "title": "Domain", "examples": ["domainname.atlassian.net"], "pattern": "^[a-zA-Z0-9._-]*\\.atlassian\\.net$", - "description": "The Domain for your Jira account, e.g. airbyteio.atlassian.net" + "description": "The Domain for your Jira account, e.g. airbyteio.atlassian.net", + "order": 1 }, "email": { "type": "string", "title": "Email", - "description": "The user email for your Jira account." + "description": "The user email for your Jira account.", + "order": 2 }, "projects": { "type": "array", @@ -32,7 +35,8 @@ "type": "string" }, "examples": ["PROJ1", "PROJ2"], - "description": "List of Jira project keys to replicate data for." + "description": "List of Jira project keys to replicate data for.", + "order": 3 }, "start_date": { "type": "string", @@ -40,25 +44,29 @@ "description": "The date from which you'd like to replicate data for Jira in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", "examples": ["2021-03-01T00:00:00Z"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" + "format": "date-time", + "order": 4 }, "expand_issue_changelog": { "type": "boolean", "title": "Expand Issue Changelog", "description": "Expand the changelog when replicating issues.", - "default": false + "default": false, + "order": 5 }, "render_fields": { "type": "boolean", "title": "Render Issue Fields", "description": "Render issue fields in HTML format in addition to Jira JSON-like format.", - "default": false + "default": false, + "order": 6 }, "enable_experimental_streams": { "type": "boolean", "title": "Enable Experimental Streams", "description": "Allow the use of experimental streams which rely on undocumented Jira API endpoints. See https://docs.airbyte.com/integrations/sources/jira#experimental-tables for more info.", - "default": false + "default": false, + "order": 7 } } } From 307ced7bc9c7673c467377e7ced7f4eaa3cdeca5 Mon Sep 17 00:00:00 2001 From: Sergey Chvalyuk Date: Fri, 16 Dec 2022 05:52:05 +0000 Subject: [PATCH 75/77] description for start date improved Signed-off-by: Sergey Chvalyuk --- .../connectors/source-jira/source_jira/spec.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-jira/source_jira/spec.json b/airbyte-integrations/connectors/source-jira/source_jira/spec.json index 21d87233d5c3d..5101bba702ff1 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/spec.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/spec.json @@ -41,7 +41,7 @@ "start_date": { "type": "string", "title": "Start Date", - "description": "The date from which you'd like to replicate data for Jira in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", + "description": "The date from which you want to replicate data from Jira, use the format YYYY-MM-DDT00:00:00Z. Note that this field only applies to certain streams, and only data generated on or after the start date will be replicated. For more information, refer to the documentation.", "examples": ["2021-03-01T00:00:00Z"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "format": "date-time", From af1cfca76d0c8a16c4c79cacf3e3ea2ddc87ac25 Mon Sep 17 00:00:00 2001 From: Daryna Ishchenko Date: Fri, 16 Dec 2022 12:15:36 +0200 Subject: [PATCH 76/77] fixed tests --- .../connectors/source-jira/unit_tests/conftest.py | 2 +- .../connectors/source-jira/unit_tests/test_source.py | 12 +++++++++--- .../source-jira/unit_tests/test_streams.py | 1 - 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py b/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py index 3095b649fdeaa..208168964cd25 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-jira/unit_tests/conftest.py @@ -16,7 +16,7 @@ def config(): "domain": "domain", "email": "email@email.com", "start_date": "2021-01-01T00:00:00Z", - "projects": ["Project1", "Project2"] + "projects": ["Project1"] } diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py b/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py index ff5ddd071fcbe..2854318060076 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-jira/unit_tests/test_source.py @@ -8,6 +8,7 @@ from source_jira.source import SourceJira +@responses.activate def test_streams(config): source = SourceJira() streams = source.streams(config) @@ -16,11 +17,16 @@ def test_streams(config): @responses.activate -def test_check_connection(config): +def test_check_connection(config, projects_response, labels_response): + responses.add( + responses.GET, + f"https://{config['domain']}/rest/api/3/project/search?maxResults=50&expand=description", + json=projects_response, + ) responses.add( responses.GET, - f"https://{config['domain']}/rest/api/3/resolution/search?maxResults=50", - json={}, + f"https://{config['domain']}/rest/api/3/label?maxResults=50", + json=labels_response, ) source = SourceJira() logger_mock = MagicMock() diff --git a/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py index 2dbc22530db8f..1c68f0e196e34 100644 --- a/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-jira/unit_tests/test_streams.py @@ -382,7 +382,6 @@ def test_projects_stream(config, projects_response): stream = Projects(**args) records = [r for r in stream.read_records(sync_mode=SyncMode.full_refresh)] assert len(records) == 2 - assert len(responses.calls) == 1 @responses.activate From a200f00d5427de27023800dfd25387fc21166081 Mon Sep 17 00:00:00 2001 From: Daryna Ishchenko Date: Fri, 16 Dec 2022 15:08:30 +0200 Subject: [PATCH 77/77] fixed expected records for stream issues --- .../source-jira/integration_tests/expected_records.txt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt index 29a09a4522932..c0475f82f8a57 100644 --- a/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt +++ b/airbyte-integrations/connectors/source-jira/integration_tests/expected_records.txt @@ -31,11 +31,9 @@ {"stream": "groups", "data": {"name": "jira-users", "groupId": "2513da2e-08cf-4415-9bcd-cbbd32fa227d"}, "emitted_at": 1671009546482} {"stream": "groups", "data": {"name": "Test group 6", "groupId": "2d4af5cf-cd34-4e78-9445-abc000cdd5cc"}, "emitted_at": 1671009546482} {"stream": "groups", "data": {"name": "jira-admins-airbyteio", "groupId": "2d55cbe0-4cab-46a4-853e-ec31162ab9a3"}, "emitted_at": 1671009546482} -{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10627", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627", "key": "TESTKEY13-1", "fields": {"statuscategorychangedate": "2022-06-09T16:29:32.382-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "name": "Test project 13", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": "2022-12-09T06:08:31.026-0800", "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "customfield_10181": null, "created": "2022-06-09T16:29:31.871-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10025": null, "labels": ["test"], "customfield_10026": null, "customfield_10016": null, "customfield_10017": "dark_orange", "customfield_10215": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i0077b:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-12-08T02:22:18.889-0800", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", "id": "10065", "name": "Component 0", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test issue"}]}]}, "customfield_10010": null, "customfield_10011": "EPIC NAME TEXT", "customfield_10210": null, "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10211": null, "customfield_10013": "ghx-label-14", "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "timetracking": {}, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "aggregatetimeestimate": null, "customfield_10009": "2022-12-09T00:00:00.000-0800", "attachment": [], "customfield_10209": null, "summary": "My Summary", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": [{"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}], "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10016", "projectKey": "TESTKEY13", "created": "2022-06-09T16:29:31.871-0700", "updated": "2022-12-08T02:22:18.889-0800"}, "emitted_at": 1671009548676} -{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10626", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "key": "IT-26", "fields": {"statuscategorychangedate": "2022-05-17T04:28:19.775-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": "2022-12-06T12:56:19.627-0800", "customfield_10181": null, "created": "2022-05-17T04:28:19.523-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10025": null, "customfield_10026": null, "labels": [], "customfield_10016": null, "customfield_10017": "dark_yellow", "customfield_10215": null, "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i00773:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "outwardIssue": {"id": "10625", "key": "IT-25", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "fields": {"summary": "Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-05-17T04:28:19.834-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-2", "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "timetracking": {}, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "attachment": [], "aggregatetimeestimate": null, "customfield_10009": null, "customfield_10209": null, "summary": "CLONE - Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:28:19.523-0700", "updated": "2022-05-17T04:28:19.834-0700"}, "emitted_at": 1671009548677} -{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10625", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "key": "IT-25", "fields": {"statuscategorychangedate": "2022-05-17T04:06:24.675-0700", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}, "timespent": null, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "lastViewed": null, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/watchers", "watchCount": 1, "isWatching": true}, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "customfield_10181": null, "created": "2022-05-17T04:06:24.048-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10026": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10018": {"hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i0076v:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [{"id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": {"id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001"}, "inwardIssue": {"id": "10626", "key": "IT-26", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "fields": {"summary": "CLONE - Aggregate issues", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}], "assignee": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updated": "2022-05-17T04:28:19.876-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [{"self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component"}], "timeoriginalestimate": null, "description": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Implement OAUth"}]}]}, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": {"self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016"}, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-2", "customfield_10014": null, "customfield_10212": null, "customfield_10213": null, "timetracking": {}, "customfield_10015": null, "customfield_10005": null, "customfield_10006": null, "security": null, "customfield_10007": null, "customfield_10008": null, "aggregatetimeestimate": null, "attachment": [], "customfield_10009": null, "customfield_10209": null, "summary": "Aggregate issues", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 0, "total": 0}, "customfield_10001": null, "customfield_10002": null, "customfield_10047": null, "customfield_10003": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 0, "total": 0}, "comment": {"comments": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076-0700", "updated": "2022-05-17T04:06:55.076-0700", "jsdPublic": true}], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment", "maxResults": 1, "total": 1, "startAt": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/votes", "votes": 0, "hasVoted": false}, "worklog": {"startAt": 0, "maxResults": 20, "total": 0, "worklogs": []}}, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:06:24.048-0700", "updated": "2022-05-17T04:28:19.876-0700"}, "emitted_at": 1671009548677} -{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10080", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080", "key": "IT-24", "fields": {"statuscategorychangedate": "2021-03-11T06:17:33.483-0800", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}, "timespent": 20880, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": 20880, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "lastViewed": null, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/watchers", "watchCount": 1, "isWatching": true}, "customfield_10181": null, "created": "2021-03-11T06:17:33.169-0800", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10016": null, "customfield_10215": null, "customfield_10017": null, "customfield_10018": {"hasEpicLinkFieldDependency": true, "showField": true, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i000hr:", "aggregatetimeoriginalestimate": null, "timeestimate": 0, "versions": [], "issuelinks": [{"id": "10244", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10244", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "inwardIssue": {"id": "10069", "key": "IT-22", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10069", "fields": {"summary": "Test 63", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1}}}}, {"id": "10243", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10243", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "inwardIssue": {"id": "10075", "key": "IT-23", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075", "fields": {"summary": "Test 69", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}}}}], "assignee": null, "updated": "2021-04-15T11:39:47.872-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [], "timeoriginalestimate": null, "description": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test description 74"}]}]}, "customfield_10010": null, "customfield_10210": null, "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "customfield_10213": null, "timetracking": {"remainingEstimate": "0m", "timeSpent": "5h 48m", "remainingEstimateSeconds": 0, "timeSpentSeconds": 20880}, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "aggregatetimeestimate": 0, "customfield_10009": null, "attachment": [{"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10123", "id": "10123", "filename": "demo.xlsx", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:01.652-0700", "size": 7360, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10123"}], "customfield_10209": null, "summary": "Test 74", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 20880, "total": 20880, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 20880, "total": 20880, "percent": 100}, "comment": {"comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/comment", "maxResults": 0, "total": 0, "startAt": 0}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-24/votes", "votes": 1, "hasVoted": true}, "worklog": {"startAt": 0, "maxResults": 20, "total": 3, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11708", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:46.574-0700", "updated": "2021-04-15T11:39:46.574-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 21m", "timeSpentSeconds": 8460, "id": "11708", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11709", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.215-0700", "updated": "2021-04-15T11:39:47.215-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "37m", "timeSpentSeconds": 2220, "id": "11709", "issueId": "10080"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080/worklog/11710", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:47.834-0700", "updated": "2021-04-15T11:39:47.834-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 50m", "timeSpentSeconds": 10200, "id": "11710", "issueId": "10080"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2021-03-11T06:17:33.169-0800", "updated": "2021-04-15T11:39:47.872-0700"}, "emitted_at": 1671009548678} -{"stream": "issues", "data": {"expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10075", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075", "key": "IT-23", "fields": {"statuscategorychangedate": "2021-03-11T06:17:28.873-0800", "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}, "timespent": 26880, "customfield_10030": null, "project": {"self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": {"48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium"}}, "fixVersions": [], "aggregatetimespent": 26880, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "issuerestriction": {"issuerestrictions": {}, "shouldDisplay": false}, "watches": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/watchers", "watchCount": 1, "isWatching": true}, "lastViewed": null, "customfield_10181": null, "created": "2021-03-11T06:17:28.477-0800", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "customfield_10023": null, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10016": null, "customfield_10215": null, "customfield_10017": null, "customfield_10018": {"hasEpicLinkFieldDependency": true, "showField": true, "nonEditableReason": {"reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users."}}, "customfield_10019": "0|i000gn:", "timeestimate": 0, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [{"id": "10243", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10243", "type": {"id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10002"}, "outwardIssue": {"id": "10080", "key": "IT-24", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10080", "fields": {"summary": "Test 74", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "priority": {"self": "https://airbyteio.atlassian.net/rest/api/3/priority/3", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/medium.svg", "name": "Medium", "id": "3"}, "issuetype": {"self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10004", "id": "10004", "description": "A problem or error.", "iconUrl": "https://airbyteio.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10303?size=medium", "name": "Bug", "subtask": false, "avatarId": 10303, "hierarchyLevel": 0}}}}], "assignee": null, "updated": "2021-04-15T11:39:50.244-0700", "status": {"self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": {"self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do"}}, "components": [], "timeoriginalestimate": null, "description": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Test description 69"}]}]}, "customfield_10010": null, "customfield_10210": null, "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "customfield_10015": null, "timetracking": {"remainingEstimate": "0m", "timeSpent": "7h 28m", "remainingEstimateSeconds": 0, "timeSpentSeconds": 26880}, "customfield_10213": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "customfield_10009": null, "aggregatetimeestimate": 0, "attachment": [{"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10126", "id": "10126", "filename": "demo.csv", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:04.596-0700", "size": 284042, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10126"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10125", "id": "10125", "filename": "demo.json", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:03.555-0700", "size": 15576, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10125"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10127", "id": "10127", "filename": "demo.xls", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:05.632-0700", "size": 13824, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10127"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/attachment/10124", "id": "10124", "filename": "demo.xlsx", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:11:02.575-0700", "size": 7360, "content": "https://airbyteio.atlassian.net/rest/api/3/attachment/content/10124"}], "customfield_10209": null, "summary": "Test 69", "creator": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "subtasks": [], "reporter": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "aggregateprogress": {"progress": 26880, "total": 26880, "percent": 100}, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": {"progress": 26880, "total": 26880, "percent": 100}, "votes": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-23/votes", "votes": 1, "hasVoted": true}, "comment": {"comments": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", "id": "10521", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:32:43.099-0700", "updated": "2021-04-14T14:32:43.099-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10639", "id": "10639", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.998-0700", "updated": "2021-04-15T00:08:48.998-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10640", "id": "10640", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:49.523-0700", "updated": "2021-04-15T00:08:49.523-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10641", "id": "10641", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:50.048-0700", "updated": "2021-04-15T00:08:50.048-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10642", "id": "10642", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:50.571-0700", "updated": "2021-04-15T00:08:50.571-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10643", "id": "10643", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:51.142-0700", "updated": "2021-04-15T00:08:51.142-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10644", "id": "10644", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:51.717-0700", "updated": "2021-04-15T00:08:51.717-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10645", "id": "10645", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:52.217-0700", "updated": "2021-04-15T00:08:52.217-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10646", "id": "10646", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:52.941-0700", "updated": "2021-04-15T00:08:52.941-0700", "jsdPublic": true}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10647", "id": "10647", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:53.824-0700", "updated": "2021-04-15T00:08:53.824-0700", "jsdPublic": true}], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment", "maxResults": 10, "total": 10, "startAt": 0}, "worklog": {"startAt": 0, "maxResults": 20, "total": 4, "worklogs": [{"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11711", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 0", "type": "text"}]}]}, "created": "2021-04-15T11:39:48.447-0700", "updated": "2021-04-15T11:39:48.447-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 28m", "timeSpentSeconds": 5280, "id": "11711", "issueId": "10075"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11712", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 1", "type": "text"}]}]}, "created": "2021-04-15T11:39:49.096-0700", "updated": "2021-04-15T11:39:49.096-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 55m", "timeSpentSeconds": 6900, "id": "11712", "issueId": "10075"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11713", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 2", "type": "text"}]}]}, "created": "2021-04-15T11:39:49.662-0700", "updated": "2021-04-15T11:39:49.662-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "2h 42m", "timeSpentSeconds": 9720, "id": "11713", "issueId": "10075"}, {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/worklog/11714", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "comment": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "I did some work here. 3", "type": "text"}]}]}, "created": "2021-04-15T11:39:50.205-0700", "updated": "2021-04-15T11:39:50.205-0700", "started": "2021-04-14T18:48:52.747-0700", "timeSpent": "1h 23m", "timeSpentSeconds": 4980, "id": "11714", "issueId": "10075"}]}}, "projectId": "10000", "projectKey": "IT", "created": "2021-03-11T06:17:28.477-0800", "updated": "2021-04-15T11:39:50.244-0700"}, "emitted_at": 1671009548680} +{"stream": "issues", "data": { "expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10627", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627", "key": "TESTKEY13-1", "fields": { "statuscategorychangedate": "2022-06-09T16:29:32.382-0700", "issuetype": { "self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1 }, "timespent": null, "customfield_10030": null, "project": { "self": "https://airbyteio.atlassian.net/rest/api/3/project/10016", "id": "10016", "key": "TESTKEY13", "name": "Test project 13", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10425?size=medium" } }, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "watches": { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/watchers", "watchCount": 1, "isWatching": true }, "issuerestriction": { "issuerestrictions": {}, "shouldDisplay": false }, "lastViewed": "2022-12-15T13:21:26.510-0800", "customfield_10181": null, "created": "2022-06-09T16:29:31.871-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "priority": { "self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4" }, "customfield_10023": null, "customfield_10024": null, "customfield_10025": null, "customfield_10026": null, "labels": [ "test" ], "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_orange", "customfield_10018": { "hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": { "reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users." } }, "customfield_10019": "0|i0077b:", "timeestimate": null, "aggregatetimeoriginalestimate": null, "versions": [], "issuelinks": [], "assignee": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "updated": "2022-12-08T02:22:18.889-0800", "status": { "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": { "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "self": "https://airbyteio.atlassian.net/rest/api/3/component/10065", "id": "10065", "name": "Component 0", "description": "This is a Jira component" } ], "timeoriginalestimate": null, "description": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Test issue" } ] } ] }, "customfield_10010": null, "customfield_10011": "EPIC NAME TEXT", "customfield_10012": { "self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016" }, "customfield_10210": null, "customfield_10211": null, "customfield_10013": "ghx-label-14", "customfield_10014": null, "customfield_10212": null, "timetracking": {}, "customfield_10213": null, "customfield_10015": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "aggregatetimeestimate": null, "customfield_10009": "2022-12-09T00:00:00.000-0800", "attachment": [], "customfield_10209": null, "summary": "My Summary", "creator": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "subtasks": [], "reporter": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "aggregateprogress": { "progress": 0, "total": 0 }, "customfield_10001": null, "customfield_10002": null, "customfield_10003": [ { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" } ], "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": { "progress": 0, "total": 0 }, "comment": { "comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10627/comment", "maxResults": 0, "total": 0, "startAt": 0 }, "votes": { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/TESTKEY13-1/votes", "votes": 0, "hasVoted": false }, "worklog": { "startAt": 0, "maxResults": 20, "total": 0, "worklogs": [] } }, "projectId": "10016", "projectKey": "TESTKEY13", "created": "2022-06-09T16:29:31.871-0700", "updated": "2022-12-08T02:22:18.889-0800" }, "emitted_at": 1671009548676} +{"stream": "issues", "data": { "expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10626", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "key": "IT-26", "fields": { "statuscategorychangedate": "2022-05-17T04:28:19.775-0700", "issuetype": { "self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1 }, "timespent": null, "customfield_10030": null, "project": { "self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium" } }, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "watches": { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/watchers", "watchCount": 1, "isWatching": true }, "lastViewed": "2022-12-06T12:56:19.627-0800", "issuerestriction": { "issuerestrictions": {}, "shouldDisplay": false }, "customfield_10181": null, "created": "2022-05-17T04:28:19.523-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "customfield_10023": null, "priority": { "self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4" }, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10026": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10018": { "hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": { "reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users." } }, "customfield_10019": "0|i00773:", "aggregatetimeoriginalestimate": null, "timeestimate": null, "versions": [], "issuelinks": [ { "id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": { "id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001" }, "outwardIssue": { "id": "10625", "key": "IT-25", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "fields": { "summary": "Aggregate issues", "status": { "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": { "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4" }, "issuetype": { "self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1 } } } } ], "assignee": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "updated": "2022-05-17T04:28:19.834-0700", "status": { "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": { "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component" } ], "timeoriginalestimate": null, "description": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Implement OAUth" } ] } ] }, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10210": null, "customfield_10012": { "self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016" }, "customfield_10013": "ghx-label-2", "customfield_10211": null, "customfield_10014": null, "customfield_10212": null, "customfield_10213": null, "timetracking": {}, "customfield_10015": null, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "customfield_10009": null, "aggregatetimeestimate": null, "attachment": [], "customfield_10209": null, "summary": "CLONE - Aggregate issues", "creator": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "subtasks": [], "reporter": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "aggregateprogress": { "progress": 0, "total": 0 }, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": { "progress": 0, "total": 0 }, "votes": { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-26/votes", "votes": 0, "hasVoted": false }, "comment": { "comments": [], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626/comment", "maxResults": 0, "total": 0, "startAt": 0 }, "worklog": { "startAt": 0, "maxResults": 20, "total": 0, "worklogs": [] } }, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:28:19.523-0700", "updated": "2022-05-17T04:28:19.834-0700" }, "emitted_at": 1671009548676} +{"stream": "issues", "data": { "expand": "operations,customfield_10030.properties,versionedRepresentations,editmeta,changelog,customfield_10029.properties,customfield_10010.requestTypePractice,renderedFields", "id": "10625", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625", "key": "IT-25", "fields": { "statuscategorychangedate": "2022-05-17T04:06:24.675-0700", "issuetype": { "self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1 }, "timespent": null, "customfield_10030": null, "project": { "self": "https://airbyteio.atlassian.net/rest/api/3/project/10000", "id": "10000", "key": "IT", "name": "integration-tests", "projectTypeKey": "software", "simplified": false, "avatarUrls": { "48x48": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424", "24x24": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=small", "16x16": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=xsmall", "32x32": "https://airbyteio.atlassian.net/rest/api/3/universal_avatar/view/type/project/avatar/10424?size=medium" } }, "fixVersions": [], "aggregatetimespent": null, "resolution": null, "customfield_10029": null, "resolutiondate": null, "workratio": -1, "lastViewed": null, "issuerestriction": { "issuerestrictions": {}, "shouldDisplay": false }, "watches": { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/watchers", "watchCount": 1, "isWatching": true }, "customfield_10181": null, "created": "2022-05-17T04:06:24.048-0700", "customfield_10020": null, "customfield_10021": null, "customfield_10022": null, "priority": { "self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4" }, "customfield_10023": null, "customfield_10024": null, "customfield_10025": null, "labels": [], "customfield_10026": null, "customfield_10016": null, "customfield_10215": null, "customfield_10017": "dark_yellow", "customfield_10018": { "hasEpicLinkFieldDependency": false, "showField": false, "nonEditableReason": { "reason": "PLUGIN_LICENSE_ERROR", "message": "The Parent Link is only available to Jira Premium users." } }, "customfield_10019": "0|i0076v:", "aggregatetimeoriginalestimate": null, "timeestimate": null, "versions": [], "issuelinks": [ { "id": "10263", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLink/10263", "type": { "id": "10001", "name": "Cloners", "inward": "is cloned by", "outward": "clones", "self": "https://airbyteio.atlassian.net/rest/api/3/issueLinkType/10001" }, "inwardIssue": { "id": "10626", "key": "IT-26", "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10626", "fields": { "summary": "CLONE - Aggregate issues", "status": { "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": { "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "self": "https://airbyteio.atlassian.net/rest/api/3/priority/4", "iconUrl": "https://airbyteio.atlassian.net/images/icons/priorities/low.svg", "name": "Low", "id": "4" }, "issuetype": { "self": "https://airbyteio.atlassian.net/rest/api/3/issuetype/10000", "id": "10000", "description": "A big user story that needs to be broken down. Created by Jira Software - do not edit or delete.", "iconUrl": "https://airbyteio.atlassian.net/images/icons/issuetypes/epic.svg", "name": "Epic", "subtask": false, "hierarchyLevel": 1 } } } } ], "assignee": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "updated": "2022-05-17T04:28:19.876-0700", "status": { "self": "https://airbyteio.atlassian.net/rest/api/3/status/10000", "description": "", "iconUrl": "https://airbyteio.atlassian.net/", "name": "To Do", "id": "10000", "statusCategory": { "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "self": "https://airbyteio.atlassian.net/rest/api/3/component/10049", "id": "10049", "name": "Component 3", "description": "This is a Jira component" } ], "timeoriginalestimate": null, "description": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Implement OAUth" } ] } ] }, "customfield_10010": null, "customfield_10011": "Test 2", "customfield_10012": { "self": "https://airbyteio.atlassian.net/rest/api/3/customFieldOption/10016", "value": "To Do", "id": "10016" }, "customfield_10210": null, "customfield_10013": "ghx-label-2", "customfield_10211": null, "customfield_10212": null, "customfield_10014": null, "customfield_10015": null, "customfield_10213": null, "timetracking": {}, "customfield_10005": null, "customfield_10006": null, "customfield_10007": null, "security": null, "customfield_10008": null, "attachment": [], "customfield_10009": null, "aggregatetimeestimate": null, "customfield_10209": null, "summary": "Aggregate issues", "creator": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "subtasks": [], "reporter": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "aggregateprogress": { "progress": 0, "total": 0 }, "customfield_10001": null, "customfield_10002": null, "customfield_10003": null, "customfield_10047": null, "customfield_10004": null, "environment": null, "duedate": null, "progress": { "progress": 0, "total": 0 }, "comment": { "comments": [ { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "body": { "version": 1, "type": "doc", "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": "Closed" } ] } ] }, "updateAuthor": { "self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": { "48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png" }, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian" }, "created": "2022-05-17T04:06:55.076-0700", "updated": "2022-05-17T04:06:55.076-0700", "jsdPublic": true } ], "self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment", "maxResults": 1, "total": 1, "startAt": 0 }, "votes": { "self": "https://airbyteio.atlassian.net/rest/api/3/issue/IT-25/votes", "votes": 0, "hasVoted": false }, "worklog": { "startAt": 0, "maxResults": 20, "total": 0, "worklogs": [] } }, "projectId": "10000", "projectKey": "IT", "created": "2022-05-17T04:06:24.048-0700", "updated": "2022-05-17T04:28:19.876-0700" }, "emitted_at": 1671009548676} {"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10625/comment/10755", "id": "10755", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"version": 1, "type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Closed"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2022-05-17T04:06:55.076-0700", "updated": "2022-05-17T04:06:55.076-0700", "jsdPublic": true}, "emitted_at": 1671009550053} {"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10521", "id": "10521", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-14T14:32:43.099-0700", "updated": "2021-04-14T14:32:43.099-0700", "jsdPublic": true}, "emitted_at": 1671009550435} {"stream": "issue_comments", "data": {"self": "https://airbyteio.atlassian.net/rest/api/3/issue/10075/comment/10639", "id": "10639", "author": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "body": {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"text": "Linked related issue!", "type": "text"}]}]}, "updateAuthor": {"self": "https://airbyteio.atlassian.net/rest/api/3/user?accountId=5fc9e78d2730d800760becc4", "accountId": "5fc9e78d2730d800760becc4", "emailAddress": "integration-test@airbyte.io", "avatarUrls": {"48x48": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "24x24": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "16x16": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png", "32x32": "https://secure.gravatar.com/avatar/0a7841feac7218131ce7b427283c24ef?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FIT-5.png"}, "displayName": "integration test", "active": true, "timeZone": "America/Los_Angeles", "accountType": "atlassian"}, "created": "2021-04-15T00:08:48.998-0700", "updated": "2021-04-15T00:08:48.998-0700", "jsdPublic": true}, "emitted_at": 1671009550435}