diff --git a/destinations/airbyte-faros-destination/resources/source-specific-configs/bigquery.json b/destinations/airbyte-faros-destination/resources/source-specific-configs/bigquery.json new file mode 100644 index 000000000..1dfd2fdc3 --- /dev/null +++ b/destinations/airbyte-faros-destination/resources/source-specific-configs/bigquery.json @@ -0,0 +1,17 @@ +{ + "title": "BigQuery", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "Configuration", + "properties": { + "source_type": { + "type": "string", + "const": "BigQuery", + "order": 0 + } + } + } + ] +} diff --git a/destinations/airbyte-faros-destination/resources/source-specific-configs/spec.json b/destinations/airbyte-faros-destination/resources/source-specific-configs/spec.json index 3d0668302..51d708baa 100644 --- a/destinations/airbyte-faros-destination/resources/source-specific-configs/spec.json +++ b/destinations/airbyte-faros-destination/resources/source-specific-configs/spec.json @@ -33,6 +33,9 @@ "bamboohr": { "$ref": "bamboohr.json" }, + "bigquery": { + "$ref": "bigquery.json" + }, "bitbucket": { "$ref": "bitbucket.json" }, diff --git a/destinations/airbyte-faros-destination/src/converters/bigquery/common.ts b/destinations/airbyte-faros-destination/src/converters/bigquery/common.ts new file mode 100644 index 000000000..8574bd5ba --- /dev/null +++ b/destinations/airbyte-faros-destination/src/converters/bigquery/common.ts @@ -0,0 +1,14 @@ +import {Converter, StreamContext} from '../converter'; + +interface BigQueryConfig { +} + +/** BigQuery converter base */ +export abstract class BigQueryConverter extends Converter { + source = 'BigQuery'; + + + protected bigqueryConfig(ctx: StreamContext): BigQueryConfig { + return ctx.config?.source_specific_configs?.bigquery; + } +} diff --git a/destinations/airbyte-faros-destination/src/converters/bigquery/deployments.ts b/destinations/airbyte-faros-destination/src/converters/bigquery/deployments.ts new file mode 100644 index 000000000..7d602db6a --- /dev/null +++ b/destinations/airbyte-faros-destination/src/converters/bigquery/deployments.ts @@ -0,0 +1,97 @@ +import {AirbyteRecord} from 'faros-airbyte-cdk'; + +import {DestinationModel, DestinationRecord} from '../converter'; +import {BigQueryConverter} from './common'; + +export class Deployments extends BigQueryConverter { + id(record: AirbyteRecord): string { + return record.record.data.id; + } + readonly destinationModels: ReadonlyArray = [ + 'cicd_Build', + 'cicd_Deployment', + 'vcs_Commit', + 'cicd_DeploymentChangeset' + ]; + + async convert( + record: AirbyteRecord + ): Promise> { + const res: DestinationRecord[] = []; + + //cicd_Deployment + const uid = record.record.data.uid; + const startedAt = record.record.data.started_at; + const endedAt = record.record.data.ended_at; + const env = record.record.data.env; + const status = record.record.data.status; + const url = record.record.data.url; + const source = record.record.data.source || this.source; + + //cicd_Build + const buildUid = `${record.record.data.build_uid}`; + const buildNumber = record.record.data.build_number; + const buildUrl = record.record.data.url; + + //vcs_Commit & cicd_DeploymentChangeset + const commit = record.record.data.commit_sha; + + if (uid) { + res.push({ + model: 'cicd_Deployment', + record: { + uid: uid, + startedAt: startedAt, + endedAt: endedAt, + env: env, + status: status, + url: url, + source: source, + build: { + uid: buildUid, + }, + changeset: { + commit: { + sha: commit, + }, + }, + }, + }); + } + + if (buildUid) { + res.push({ + model: 'cicd_Build', + record: { + uid: buildUid, + number: buildNumber, + url: buildUrl, + }, + }); + } + + if (commit) { + res.push({ + model: 'vcs_Commit', + record: { + sha: commit, + }, + }); + + res.push({ + model: 'cicd_DeploymentChangeset', + record: { + commit: { + sha: commit, + }, + deployment: { + uid: uid, + source: source, + }, + }, + }); + } + + return res; + } +} diff --git a/destinations/airbyte-faros-destination/test/__snapshots__/index.test.ts.snap b/destinations/airbyte-faros-destination/test/__snapshots__/index.test.ts.snap index a6e5991bc..7808a8184 100644 --- a/destinations/airbyte-faros-destination/test/__snapshots__/index.test.ts.snap +++ b/destinations/airbyte-faros-destination/test/__snapshots__/index.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`index spec 1`] = ` -"{\\"spec\\":{\\"documentationUrl\\":\\"https://docs.faros.ai\\",\\"supportsIncremental\\":true,\\"supportsNormalization\\":false,\\"supportsDBT\\":true,\\"supported_destination_sync_modes\\":[\\"overwrite\\",\\"append\\",\\"append_dedup\\"],\\"connectionSpecification\\":{\\"$schema\\":\\"http://json-schema.org/draft-07/schema#\\",\\"title\\":\\"Faros Destination Spec\\",\\"type\\":\\"object\\",\\"required\\":[\\"edition_configs\\"],\\"additionalProperties\\":true,\\"properties\\":{\\"edition_configs\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Community Edition\\",\\"required\\":[\\"hasura_url\\"],\\"properties\\":{\\"edition\\":{\\"type\\":\\"string\\",\\"const\\":\\"community\\"},\\"hasura_admin_secret\\":{\\"type\\":\\"string\\",\\"airbyte_secret\\":true},\\"hasura_url\\":{\\"type\\":\\"string\\",\\"default\\":\\"http://localhost:8080\\"},\\"segment_user_id\\":{\\"type\\":\\"string\\",\\"format\\":\\"uuid\\"},\\"community_graphql_batch_size\\":{\\"type\\":\\"integer\\",\\"default\\":100}}},{\\"type\\":\\"object\\",\\"title\\":\\"Cloud Edition\\",\\"required\\":[\\"api_key\\"],\\"properties\\":{\\"edition\\":{\\"type\\":\\"string\\",\\"const\\":\\"cloud\\"},\\"api_url\\":{\\"type\\":\\"string\\",\\"default\\":\\"https://prod.api.faros.ai\\"},\\"api_key\\":{\\"type\\":\\"string\\",\\"airbyte_secret\\":true},\\"graph\\":{\\"type\\":\\"string\\",\\"default\\":\\"default\\"},\\"graphql_api\\":{\\"type\\":\\"string\\",\\"default\\":\\"v2\\",\\"enum\\":[\\"v1\\",\\"v2\\"]},\\"cloud_graphql_upsert_batch_size\\":{\\"type\\":\\"integer\\",\\"default\\":10000},\\"cloud_graphql_batch_size\\":{\\"type\\":\\"integer\\",\\"default\\":100},\\"check_connection\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"upload_sync_logs\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"origin\\":{\\"type\\":\\"string\\"},\\"accept_input_records_origin\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"replace_origin_map\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"exclude_fields_map\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"redact_fields_map\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"redact_custom_replace\\":{\\"type\\":\\"string\\"},\\"redact_custom_regex\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"dry_run\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"log_records\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"invalid_record_strategy\\":{\\"type\\":\\"string\\",\\"default\\":\\"SKIP\\",\\"enum\\":[\\"FAIL\\",\\"SKIP\\"]},\\"jsonata_expression\\":{\\"type\\":\\"string\\",\\"multiline\\":true},\\"jsonata_mode\\":{\\"type\\":\\"string\\",\\"default\\":\\"FALLBACK\\",\\"enum\\":[\\"FALLBACK\\",\\"OVERRIDE\\"]},\\"jsonata_destination_models\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"source_specific_configs\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configurations\\",\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Source-specific configs\\"},\\"agileaccelerator\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"AgileAccelerator\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000},\\"work_additional_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]}}}]},\\"asana\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Asana\\"},\\"task_custom_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}}}}]},\\"aws-cloudwatch-metrics\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"AWS Cloudwatch Metrics\\"},\\"tag_key\\":{\\"type\\":\\"string\\"},\\"tag_value\\":{\\"type\\":\\"string\\"},\\"should_tag_definition\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"azurepipeline\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Azure pipeline\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"default\\":\\"{}\\"}}}]},\\"azureactivedirectory\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Azure Active Directory\\"},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"backlog\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Backlog\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"bamboohr\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"BambooHR\\"},\\"bootstrap_teams_from_managers\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"inactive_employment_history_status\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"example\\":[\\"Terminated\\",\\"On-Leave\\"]},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"bitbucket\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Bitbucket\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"circleci\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"CircleCI\\"},\\"skip_writing_test_cases\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"clickup\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"ClickUp\\"},\\"taskboard_source\\":{\\"type\\":\\"string\\",\\"default\\":\\"space\\",\\"enum\\":[\\"space\\",\\"folder\\",\\"list\\"]},\\"truncate_limit\\":{\\"type\\":\\"integer\\",\\"default\\":10000}}}]},\\"datadog\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Datadog\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"default_severity\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Sev[1-5])?(Custom)?$\\"}}}]},\\"docker\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"required\\":[\\"organization\\"],\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Docker\\"},\\"label_prefix\\":{\\"type\\":\\"string\\"},\\"skip_tags\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"organization\\":{\\"type\\":\\"string\\",\\"default\\":\\"unknown-org\\"}}}]},\\"firehydrant\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"FireHydrant\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"googlecalendar\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Google Calendar\\"},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"jenkins\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Jenkins\\"},\\"create_commit_records\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"jira\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Jira\\"},\\"use_board_ownership\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"truncate_limit\\":{\\"type\\":\\"integer\\",\\"default\\":10000},\\"exclude_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]},\\"additional_fields_array_limit\\":{\\"type\\":\\"integer\\",\\"default\\":50}}}]},\\"notion\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"None\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Notion_None\\"}}},{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"required\\":[\\"kind_property\\"],\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Notion\\"},\\"kind_property\\":{\\"type\\":\\"string\\"},\\"projects\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Project Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Projects\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"}}}}}]},\\"epics\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Epic Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Epics\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"},\\"project\\":{\\"type\\":\\"string\\",\\"default\\":\\"Project\\"},\\"status\\":{\\"type\\":\\"string\\",\\"default\\":\\"Status\\"}}}}}]},\\"sprints\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Sprint Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Sprints\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"},\\"status\\":{\\"type\\":\\"string\\",\\"default\\":\\"Status\\"},\\"started_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Started At\\"},\\"ended_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Ended At\\"},\\"closed_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Closed At\\"}}}}}]},\\"tasks\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Task Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Tasks\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"include_additional_properties\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"},\\"type\\":{\\"type\\":\\"string\\",\\"default\\":\\"Type\\"},\\"project\\":{\\"type\\":\\"string\\",\\"default\\":\\"Project\\"},\\"epic\\":{\\"type\\":\\"string\\",\\"default\\":\\"Epic\\"},\\"sprint\\":{\\"type\\":\\"string\\",\\"default\\":\\"Sprint\\"},\\"status\\":{\\"type\\":\\"string\\",\\"default\\":\\"Status\\"},\\"priority\\":{\\"type\\":\\"string\\",\\"default\\":\\"Priority\\"},\\"points\\":{\\"type\\":\\"string\\",\\"default\\":\\"Points\\"},\\"assignee\\":{\\"type\\":\\"string\\",\\"default\\":\\"Assignee\\"},\\"resolved_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Resolved At\\"}}}}}]}}}]},\\"octopus\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Octopus\\"},\\"vcs_source\\":{\\"type\\":\\"string\\",\\"default\\":\\"GitHub\\"}}}]},\\"okta\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Okta\\"},\\"column_names_mapping\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"start_date_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"startDate\\"},\\"full_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"displayName\\"},\\"first_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"firstName\\"},\\"last_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"lastName\\"},\\"employee_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"employeeNumber\\"},\\"manager_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"manager\\"},\\"manager_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"managerId\\"},\\"team_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"departmentId\\"},\\"team_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"department\\"},\\"termination_date_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"endDate\\"},\\"location_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"location\\"},\\"email_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"email\\"},\\"employee_type_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"employeeType\\"}}}}}]},\\"opsgenie\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"OpsGenie\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"pagerduty\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"PagerDuty\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"associate_applications_to_teams\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"default_severity\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Sev[1-5])?(Custom)?$\\"}}}]},\\"phabricator\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Phabricator\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"servicenow\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"ServiceNow\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"application_field\\":{\\"type\\":\\"string\\",\\"default\\":\\"business_service\\",\\"pattern\\":\\"^(business_service|cmdb_ci)$\\"},\\"default_severity\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Sev[1-5])?(Custom)?$\\"},\\"default_priority\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Critical|High|Medium|Low|Custom)$\\"},\\"store_current_incidents_associations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"squadcast\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"SquadCast\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"statuspage\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Statuspage\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"surveys\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Surveys\\"},\\"survey_responses_table_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Responses\\"},\\"survey_metadata_table_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Metadata\\"},\\"question_metadata_table_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Question Metadata\\"},\\"column_names_mapping\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"survey_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Name\\"},\\"survey_description_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Description\\"},\\"survey_type_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Type\\"},\\"survey_status_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Status\\"},\\"survey_started_at_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Started At\\"},\\"survey_ended_at_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Ended At\\"},\\"respondent_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"respondent_email_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Email\\"},\\"respondent_team_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Team ID\\"},\\"respondent_team_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Team Name\\"},\\"question_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Question\\"},\\"question_category_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Category\\"},\\"response_type_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Response Type\\"},\\"response_submitted_at_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Timestamp\\"}}},\\"question_category_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"exclude_columns\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]}}}]},\\"trello\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Trello\\"},\\"task_status_category_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"victorops\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"VictorOps\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"application_field\\":{\\"type\\":\\"string\\",\\"default\\":\\"service\\"}}}]},\\"workday\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Workday\\"},\\"orgs_to_keep\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]},\\"orgs_to_ignore\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]},\\"fail_on_cycles\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"ignore_cycle_teams\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"keep_terminated_employees\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"xray\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Xray\\"}}}]},\\"zendesk\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Zendesk\\"},\\"ticket_additional_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"additional_fields_array_limit\\":{\\"type\\":\\"integer\\",\\"default\\":50},\\"team_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"sync_groups\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]}}}]},\\"keep_alive\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"skip_source_success_check\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"faros_source_id\\":{\\"type\\":\\"string\\"},\\"fail_on_source_error\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"reset_page_size\\":{\\"type\\":\\"integer\\",\\"default\\":500}}}},\\"type\\":\\"SPEC\\"} +"{\\"spec\\":{\\"documentationUrl\\":\\"https://docs.faros.ai\\",\\"supportsIncremental\\":true,\\"supportsNormalization\\":false,\\"supportsDBT\\":true,\\"supported_destination_sync_modes\\":[\\"overwrite\\",\\"append\\",\\"append_dedup\\"],\\"connectionSpecification\\":{\\"$schema\\":\\"http://json-schema.org/draft-07/schema#\\",\\"title\\":\\"Faros Destination Spec\\",\\"type\\":\\"object\\",\\"required\\":[\\"edition_configs\\"],\\"additionalProperties\\":true,\\"properties\\":{\\"edition_configs\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Community Edition\\",\\"required\\":[\\"hasura_url\\"],\\"properties\\":{\\"edition\\":{\\"type\\":\\"string\\",\\"const\\":\\"community\\"},\\"hasura_admin_secret\\":{\\"type\\":\\"string\\",\\"airbyte_secret\\":true},\\"hasura_url\\":{\\"type\\":\\"string\\",\\"default\\":\\"http://localhost:8080\\"},\\"segment_user_id\\":{\\"type\\":\\"string\\",\\"format\\":\\"uuid\\"},\\"community_graphql_batch_size\\":{\\"type\\":\\"integer\\",\\"default\\":100}}},{\\"type\\":\\"object\\",\\"title\\":\\"Cloud Edition\\",\\"required\\":[\\"api_key\\"],\\"properties\\":{\\"edition\\":{\\"type\\":\\"string\\",\\"const\\":\\"cloud\\"},\\"api_url\\":{\\"type\\":\\"string\\",\\"default\\":\\"https://prod.api.faros.ai\\"},\\"api_key\\":{\\"type\\":\\"string\\",\\"airbyte_secret\\":true},\\"graph\\":{\\"type\\":\\"string\\",\\"default\\":\\"default\\"},\\"graphql_api\\":{\\"type\\":\\"string\\",\\"default\\":\\"v2\\",\\"enum\\":[\\"v1\\",\\"v2\\"]},\\"cloud_graphql_upsert_batch_size\\":{\\"type\\":\\"integer\\",\\"default\\":10000},\\"cloud_graphql_batch_size\\":{\\"type\\":\\"integer\\",\\"default\\":100},\\"check_connection\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"upload_sync_logs\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"origin\\":{\\"type\\":\\"string\\"},\\"accept_input_records_origin\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"replace_origin_map\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"exclude_fields_map\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"redact_fields_map\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"redact_custom_replace\\":{\\"type\\":\\"string\\"},\\"redact_custom_regex\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"dry_run\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"log_records\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"invalid_record_strategy\\":{\\"type\\":\\"string\\",\\"default\\":\\"SKIP\\",\\"enum\\":[\\"FAIL\\",\\"SKIP\\"]},\\"jsonata_expression\\":{\\"type\\":\\"string\\",\\"multiline\\":true},\\"jsonata_mode\\":{\\"type\\":\\"string\\",\\"default\\":\\"FALLBACK\\",\\"enum\\":[\\"FALLBACK\\",\\"OVERRIDE\\"]},\\"jsonata_destination_models\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"source_specific_configs\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configurations\\",\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Source-specific configs\\"},\\"agileaccelerator\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"AgileAccelerator\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000},\\"work_additional_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]}}}]},\\"asana\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Asana\\"},\\"task_custom_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}}}}]},\\"aws-cloudwatch-metrics\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"AWS Cloudwatch Metrics\\"},\\"tag_key\\":{\\"type\\":\\"string\\"},\\"tag_value\\":{\\"type\\":\\"string\\"},\\"should_tag_definition\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"azurepipeline\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Azure pipeline\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"default\\":\\"{}\\"}}}]},\\"azureactivedirectory\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Azure Active Directory\\"},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"backlog\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Backlog\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"bamboohr\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"BambooHR\\"},\\"bootstrap_teams_from_managers\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"inactive_employment_history_status\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"example\\":[\\"Terminated\\",\\"On-Leave\\"]},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"bigquery\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"BigQuery\\"}}}]},\\"bitbucket\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Bitbucket\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"circleci\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"CircleCI\\"},\\"skip_writing_test_cases\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"clickup\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"ClickUp\\"},\\"taskboard_source\\":{\\"type\\":\\"string\\",\\"default\\":\\"space\\",\\"enum\\":[\\"space\\",\\"folder\\",\\"list\\"]},\\"truncate_limit\\":{\\"type\\":\\"integer\\",\\"default\\":10000}}}]},\\"datadog\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Datadog\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"default_severity\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Sev[1-5])?(Custom)?$\\"}}}]},\\"docker\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"required\\":[\\"organization\\"],\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Docker\\"},\\"label_prefix\\":{\\"type\\":\\"string\\"},\\"skip_tags\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"organization\\":{\\"type\\":\\"string\\",\\"default\\":\\"unknown-org\\"}}}]},\\"firehydrant\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"FireHydrant\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"googlecalendar\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Google Calendar\\"},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":true}}}]},\\"jenkins\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Jenkins\\"},\\"create_commit_records\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"jira\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Jira\\"},\\"use_board_ownership\\":{\\"type\\":\\"boolean\\",\\"default\\":true},\\"truncate_limit\\":{\\"type\\":\\"integer\\",\\"default\\":10000},\\"exclude_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]},\\"additional_fields_array_limit\\":{\\"type\\":\\"integer\\",\\"default\\":50}}}]},\\"notion\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"None\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Notion_None\\"}}},{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"required\\":[\\"kind_property\\"],\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Notion\\"},\\"kind_property\\":{\\"type\\":\\"string\\"},\\"projects\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Project Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Projects\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"}}}}}]},\\"epics\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Epic Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Epics\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"},\\"project\\":{\\"type\\":\\"string\\",\\"default\\":\\"Project\\"},\\"status\\":{\\"type\\":\\"string\\",\\"default\\":\\"Status\\"}}}}}]},\\"sprints\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Sprint Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Sprints\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"},\\"status\\":{\\"type\\":\\"string\\",\\"default\\":\\"Status\\"},\\"started_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Started At\\"},\\"ended_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Ended At\\"},\\"closed_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Closed At\\"}}}}}]},\\"tasks\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Task Configuration\\",\\"required\\":[\\"kind\\"],\\"properties\\":{\\"option_title\\":{\\"type\\":\\"string\\",\\"const\\":\\"Tasks\\"},\\"kind\\":{\\"type\\":\\"string\\"},\\"include_additional_properties\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"properties\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"description\\":{\\"type\\":\\"string\\",\\"default\\":\\"Description\\"},\\"type\\":{\\"type\\":\\"string\\",\\"default\\":\\"Type\\"},\\"project\\":{\\"type\\":\\"string\\",\\"default\\":\\"Project\\"},\\"epic\\":{\\"type\\":\\"string\\",\\"default\\":\\"Epic\\"},\\"sprint\\":{\\"type\\":\\"string\\",\\"default\\":\\"Sprint\\"},\\"status\\":{\\"type\\":\\"string\\",\\"default\\":\\"Status\\"},\\"priority\\":{\\"type\\":\\"string\\",\\"default\\":\\"Priority\\"},\\"points\\":{\\"type\\":\\"string\\",\\"default\\":\\"Points\\"},\\"assignee\\":{\\"type\\":\\"string\\",\\"default\\":\\"Assignee\\"},\\"resolved_at\\":{\\"type\\":\\"string\\",\\"default\\":\\"Resolved At\\"}}}}}]}}}]},\\"octopus\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Octopus\\"},\\"vcs_source\\":{\\"type\\":\\"string\\",\\"default\\":\\"GitHub\\"}}}]},\\"okta\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Okta\\"},\\"column_names_mapping\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"start_date_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"startDate\\"},\\"full_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"displayName\\"},\\"first_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"firstName\\"},\\"last_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"lastName\\"},\\"employee_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"employeeNumber\\"},\\"manager_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"manager\\"},\\"manager_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"managerId\\"},\\"team_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"departmentId\\"},\\"team_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"department\\"},\\"termination_date_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"endDate\\"},\\"location_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"location\\"},\\"email_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"email\\"},\\"employee_type_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"employeeType\\"}}}}}]},\\"opsgenie\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"OpsGenie\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"pagerduty\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"PagerDuty\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"associate_applications_to_teams\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"default_severity\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Sev[1-5])?(Custom)?$\\"}}}]},\\"phabricator\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Phabricator\\"},\\"max_description_length\\":{\\"type\\":\\"integer\\",\\"default\\":1000}}}]},\\"servicenow\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"ServiceNow\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"application_field\\":{\\"type\\":\\"string\\",\\"default\\":\\"business_service\\",\\"pattern\\":\\"^(business_service|cmdb_ci)$\\"},\\"default_severity\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Sev[1-5])?(Custom)?$\\"},\\"default_priority\\":{\\"type\\":\\"string\\",\\"pattern\\":\\"^(Critical|High|Medium|Low|Custom)$\\"},\\"store_current_incidents_associations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"squadcast\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"SquadCast\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"statuspage\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Statuspage\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"surveys\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Surveys\\"},\\"survey_responses_table_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Responses\\"},\\"survey_metadata_table_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Metadata\\"},\\"question_metadata_table_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Question Metadata\\"},\\"column_names_mapping\\":{\\"type\\":\\"object\\",\\"properties\\":{\\"survey_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Name\\"},\\"survey_description_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Description\\"},\\"survey_type_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Type\\"},\\"survey_status_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Status\\"},\\"survey_started_at_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Started At\\"},\\"survey_ended_at_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Survey Ended At\\"},\\"respondent_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Name\\"},\\"respondent_email_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Email\\"},\\"respondent_team_id_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Team ID\\"},\\"respondent_team_name_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Team Name\\"},\\"question_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Question\\"},\\"question_category_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Category\\"},\\"response_type_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Response Type\\"},\\"response_submitted_at_column_name\\":{\\"type\\":\\"string\\",\\"default\\":\\"Timestamp\\"}}},\\"question_category_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"exclude_columns\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]}}}]},\\"trello\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Trello\\"},\\"task_status_category_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"}}}]},\\"victorops\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"VictorOps\\"},\\"application_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"application_field\\":{\\"type\\":\\"string\\",\\"default\\":\\"service\\"}}}]},\\"workday\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Workday\\"},\\"orgs_to_keep\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]},\\"orgs_to_ignore\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"},\\"default\\":[]},\\"fail_on_cycles\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"ignore_cycle_teams\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"keep_terminated_employees\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"resolve_locations\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]},\\"xray\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"type\\":\\"object\\",\\"title\\":\\"Configuration\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Xray\\"}}}]},\\"zendesk\\":{\\"type\\":\\"object\\",\\"oneOf\\":[{\\"title\\":\\"Configuration\\",\\"type\\":\\"object\\",\\"properties\\":{\\"source_type\\":{\\"type\\":\\"string\\",\\"const\\":\\"Zendesk\\"},\\"ticket_additional_fields\\":{\\"type\\":\\"array\\",\\"items\\":{\\"type\\":\\"string\\"}},\\"additional_fields_array_limit\\":{\\"type\\":\\"integer\\",\\"default\\":50},\\"team_mapping\\":{\\"type\\":\\"string\\",\\"multiline\\":true,\\"default\\":\\"{}\\"},\\"sync_groups\\":{\\"type\\":\\"boolean\\",\\"default\\":false}}}]}}}]},\\"keep_alive\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"skip_source_success_check\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"faros_source_id\\":{\\"type\\":\\"string\\"},\\"fail_on_source_error\\":{\\"type\\":\\"boolean\\",\\"default\\":false},\\"reset_page_size\\":{\\"type\\":\\"integer\\",\\"default\\":500}}}},\\"type\\":\\"SPEC\\"} " `; diff --git a/destinations/airbyte-faros-destination/test/converters/__snapshots__/bigquery.test.ts.snap b/destinations/airbyte-faros-destination/test/converters/__snapshots__/bigquery.test.ts.snap new file mode 100644 index 000000000..2bf67d8f6 --- /dev/null +++ b/destinations/airbyte-faros-destination/test/converters/__snapshots__/bigquery.test.ts.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`bigquery basic test process records from all streams 1`] = ` +Array [ + "Processed 7 records", + "Processed records by stream: {\\\\\\"bigquery__bigquery__deployments\\\\\\":7}\\"},\\"type\\":\\"LOG\\"}", + "Would write 28 records", + "Would write records by model: {\\\\\\"cicd_Build\\\\\\":7,\\\\\\"cicd_Deployment\\\\\\":7,\\\\\\"cicd_DeploymentChangeset\\\\\\":7,\\\\\\"vcs_Commit\\\\\\":7}\\"},\\"type\\":\\"LOG\\"}", + "Skipped 0 records", + "Errored 0 records", +] +`; diff --git a/destinations/airbyte-faros-destination/test/converters/bigquery.test.ts b/destinations/airbyte-faros-destination/test/converters/bigquery.test.ts new file mode 100644 index 000000000..784d3703c --- /dev/null +++ b/destinations/airbyte-faros-destination/test/converters/bigquery.test.ts @@ -0,0 +1,3 @@ +import {generateBasicTestSuite} from './utils'; + +generateBasicTestSuite({sourceName: 'bigquery'}); diff --git a/destinations/airbyte-faros-destination/test/converters/data.ts b/destinations/airbyte-faros-destination/test/converters/data.ts index 3eb3c7012..4f09e818f 100644 --- a/destinations/airbyte-faros-destination/test/converters/data.ts +++ b/destinations/airbyte-faros-destination/test/converters/data.ts @@ -140,3 +140,6 @@ export const zendeskAllStreamsLog = readTestResourceFile( export const trelloAllStreamsLog = readTestResourceFile( 'trello/all-streams.log' ); +export const bigqueryAllStreamsLog = readTestResourceFile( + 'bigquery/all-streams.log' +); diff --git a/destinations/airbyte-faros-destination/test/resources/bigquery/all-streams.log b/destinations/airbyte-faros-destination/test/resources/bigquery/all-streams.log new file mode 100644 index 000000000..710ca9780 --- /dev/null +++ b/destinations/airbyte-faros-destination/test/resources/bigquery/all-streams.log @@ -0,0 +1,7 @@ +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-08-03T21:01:13Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid189","env":"Staging","status":"success","build_uid":107808,"build_number":107808,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"f78b22e9ac7c610a3f5a04bd5ac8df680d9881e3","client_build_number":18900900107808},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-14T22:20:52Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/133645","ended_at":"2023-08-03T21:01:13Z","uid":"uid202","env":"Production","status":"success","build_uid":133645,"build_number":133645,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"5fd2f9bea33f6a9545fc92a8947013e86f66c292","client_build_number":20301000133645},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-06T19:46:35Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/133645","ended_at":"2023-08-03T21:01:13Z","uid":"uid203","env":"Development","status":"failure","build_uid":132209,"build_number":132209,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"209352e0595c86e93759b5c11b6284c2be13edcd","client_build_number":20301000132209},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-07T19:13:23Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid204","env":"Staging","status":"failure","build_uid":132502,"build_number":132502,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"dfbdf1b9b97e77dd9cc321556adb4c55f0cd27a1","client_build_number":20301000132502},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-07T15:20:12Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid205","env":"Production","status":"failure","build_uid":132450,"build_number":132450,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"33693814967195dc940e987265797f5980c81e70","client_build_number":20301000132450},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-07T00:13:27Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid206","env":"Development","status":"success","build_uid":132354,"build_number":132354,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"dafcc8a156fc30fed062f5ddd859ab34c712a827","client_build_number":20301000132354},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-09T21:14:34Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid207","env":"Staging","status":"success","build_uid":132962,"build_number":132962,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"9f4a555ab16b8c8f77229a470dddcb7145b0e2df","client_build_number":20301000132962},"emitted_at":1737154317860}} diff --git a/destinations/airbyte-faros-destination/test/resources/bigquery/catalog.json b/destinations/airbyte-faros-destination/test/resources/bigquery/catalog.json new file mode 100644 index 000000000..1829b9544 --- /dev/null +++ b/destinations/airbyte-faros-destination/test/resources/bigquery/catalog.json @@ -0,0 +1,10 @@ +{ + "streams": [ + { + "stream": { + "name": "bigquery__bigquery__deployments" + }, + "destination_sync_mode": "append" + } + ] + } \ No newline at end of file diff --git a/source.json b/source.json new file mode 100644 index 000000000..710ca9780 --- /dev/null +++ b/source.json @@ -0,0 +1,7 @@ +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-08-03T21:01:13Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid189","env":"Staging","status":"success","build_uid":107808,"build_number":107808,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"f78b22e9ac7c610a3f5a04bd5ac8df680d9881e3","client_build_number":18900900107808},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-14T22:20:52Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/133645","ended_at":"2023-08-03T21:01:13Z","uid":"uid202","env":"Production","status":"success","build_uid":133645,"build_number":133645,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"5fd2f9bea33f6a9545fc92a8947013e86f66c292","client_build_number":20301000133645},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-06T19:46:35Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/133645","ended_at":"2023-08-03T21:01:13Z","uid":"uid203","env":"Development","status":"failure","build_uid":132209,"build_number":132209,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"209352e0595c86e93759b5c11b6284c2be13edcd","client_build_number":20301000132209},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-07T19:13:23Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid204","env":"Staging","status":"failure","build_uid":132502,"build_number":132502,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"dfbdf1b9b97e77dd9cc321556adb4c55f0cd27a1","client_build_number":20301000132502},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-07T15:20:12Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid205","env":"Production","status":"failure","build_uid":132450,"build_number":132450,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"33693814967195dc940e987265797f5980c81e70","client_build_number":20301000132450},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-07T00:13:27Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid206","env":"Development","status":"success","build_uid":132354,"build_number":132354,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"dafcc8a156fc30fed062f5ddd859ab34c712a827","client_build_number":20301000132354},"emitted_at":1737154317860}} +{"type":"RECORD","record":{"stream":"bigquery__bigquery__deployments","data":{"started_at":"2023-11-09T21:14:34Z","url":"https://buildkite.com/foobar/foobar-android-rn-js/builds/107808","ended_at":"2023-08-03T21:01:13Z","uid":"uid207","env":"Staging","status":"success","build_uid":132962,"build_number":132962,"pipeline_name":"foobar-android-rn-js","pipeline_uid":"foobar-android-rn-js","commit_sha":"9f4a555ab16b8c8f77229a470dddcb7145b0e2df","client_build_number":20301000132962},"emitted_at":1737154317860}}