├── .husky
├── .gitignore
└── pre-commit
├── sources
├── bamboohr-source
│ ├── test_files
│ │ ├── users.json
│ │ ├── invalid_config.json
│ │ └── full_configured_catalog.json
│ ├── src
│ │ ├── streams
│ │ │ ├── index.ts
│ │ │ └── users.ts
│ │ ├── tsconfig.json
│ │ └── models.ts
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ └── acceptance-test-config.yml
├── okta-source
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ └── invalid_config.json
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ └── acceptance-test-config.yml
├── buildkite-source
│ ├── test_files
│ │ ├── builds.json
│ │ ├── invalid_config.json
│ │ ├── pipelines_all.json
│ │ ├── abnormal_state.json
│ │ ├── incremental_configured_catalog.json
│ │ ├── pipelines.json
│ │ └── pipelines_input.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ ├── index.ts
│ │ │ └── pipelines.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ ├── schemas
│ │ │ └── organizations.json
│ │ └── gql
│ │ │ └── pipelines-query.gql
│ └── acceptance-test-config.yml
├── jenkins-source
│ ├── test_files
│ │ ├── jenkins
│ │ │ ├── data
│ │ │ │ ├── secret.key.not-so-secret
│ │ │ │ ├── jobs
│ │ │ │ │ └── Faros-test-job
│ │ │ │ │ │ ├── builds
│ │ │ │ │ │ ├── 1
│ │ │ │ │ │ │ ├── changelog.xml
│ │ │ │ │ │ │ └── log
│ │ │ │ │ │ ├── 2
│ │ │ │ │ │ │ ├── changelog.xml
│ │ │ │ │ │ │ └── log
│ │ │ │ │ │ ├── 3
│ │ │ │ │ │ │ ├── changelog.xml
│ │ │ │ │ │ │ └── log
│ │ │ │ │ │ ├── legacyIds
│ │ │ │ │ │ └── permalinks
│ │ │ │ │ │ ├── nextBuildNumber
│ │ │ │ │ │ └── config.xml
│ │ │ │ ├── jenkins.install.UpgradeWizard.state
│ │ │ │ ├── jenkins.install.InstallUtil.lastExecVersion
│ │ │ │ ├── .owner
│ │ │ │ ├── secret.key
│ │ │ │ ├── userContent
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── identity.key.enc
│ │ │ │ ├── queue.xml
│ │ │ │ ├── queue.xml.bak
│ │ │ │ ├── copy_reference_file.log
│ │ │ │ ├── hudson.model.UpdateCenter.xml
│ │ │ │ ├── jenkins.telemetry.Correlator.xml
│ │ │ │ └── users
│ │ │ │ │ ├── users.xml
│ │ │ │ │ └── admin_14692387833535189143
│ │ │ │ │ └── apiTokenStats.xml
│ │ │ ├── docker-compose.yml
│ │ │ └── README.md
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── config.json
│ │ └── jobs.json
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ └── bootstrap.md
├── datadog-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── config.json
│ │ └── future_state.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ └── README.md
├── pagerduty-source
│ ├── test_files
│ │ ├── config.json
│ │ ├── invalid_config.json
│ │ └── abnormal_state.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ ├── index.ts
│ │ │ ├── teams.ts
│ │ │ └── prioritiesResource.ts
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ └── schemas
│ │ │ ├── users.json
│ │ │ ├── teams.json
│ │ │ └── prioritiesResource.json
│ └── bootstrap.md
├── servicenow-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── config.json
│ │ ├── future_state.json
│ │ └── incidents.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ └── schemas
│ │ │ ├── user.json
│ │ │ └── incident.json
│ └── README.md
├── squadcast-source
│ ├── test_files
│ │ ├── config.json
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── incremental_configured_catalog.json
│ │ └── services.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ └── index.ts
│ ├── test
│ │ └── tsconfig.json
│ ├── bootstrap.md
│ └── acceptance-test-config.yml
├── docker-source
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── full_configured_catalog.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ └── acceptance-test-config.yml
├── gitlab-ci-source
│ ├── src
│ │ ├── gitlab
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ ├── index.ts
│ │ │ └── groups.ts
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── invalid_config.json
│ │ ├── groups.json
│ │ ├── groups-response.json
│ │ ├── projects.json
│ │ ├── projects-response.json
│ │ ├── incremental_configured_catalog.json
│ │ ├── pipelines.json
│ │ └── pipelines-response.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ └── schemas
│ │ │ ├── pipelines.json
│ │ │ ├── groups.json
│ │ │ └── projects.json
│ └── acceptance-test-config.yml
├── example-source
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── config.json
│ │ ├── invalid_config.json
│ │ ├── full_configured_catalog.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ ├── index.test.ts
│ │ └── tsconfig.json
│ ├── resources
│ │ └── spec.json
│ └── acceptance-test-config.yml
├── agileaccelerator-source
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── invalid_config.json
│ │ ├── full_configured_catalog.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ ├── bootstrap.md
│ └── acceptance-test-config.yml
├── firehydrant-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── users.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ └── schemas
│ │ │ └── users.json
│ └── acceptance-test-config.yml
├── customer-io-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ └── abnormal_state.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── tsconfig.json
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── customer-io
│ │ │ └── typings.ts
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ ├── schemas
│ │ │ ├── newsletters.json
│ │ │ └── campaign-actions.json
│ │ └── spec.json
│ └── bootstrap.md
├── harness-source
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── invalid_config.json
│ │ ├── full_configured_catalog.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ ├── bootstrap.md
│ └── acceptance-test-config.yml
├── opsgenie-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── teams.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ └── resources
│ │ └── schemas
│ │ └── teams.json
├── googlecalendar-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── config.json
│ │ ├── abnormal_state.json
│ │ └── calendars.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ └── bootstrap.md
├── circleci-source
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ ├── .DS_Store
│ │ └── tsconfig.json
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── projects.json
│ │ └── incremental_configured_catalog.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ ├── bootstrap.md
│ ├── resources
│ │ └── schemas
│ │ │ └── projects.json
│ └── acceptance-test-config.yml
├── victorops-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ ├── users.json
│ │ ├── incremental_configured_catalog.json
│ │ └── teams.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ ├── index.ts
│ │ │ ├── teams.ts
│ │ │ └── users.ts
│ ├── test
│ │ └── tsconfig.json
│ ├── bootstrap.md
│ ├── resources
│ │ └── schemas
│ │ │ ├── users.json
│ │ │ └── teams.json
│ └── acceptance-test-config.yml
├── statuspage-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ ├── abnormal_state.json
│ │ └── users.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ └── index.ts
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ └── schemas
│ │ │ ├── users.json
│ │ │ └── incidentUpdates.json
│ └── acceptance-test-config.yml
├── phabricator-source
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── invalid_config.json
│ │ └── config.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ ├── index.test.ts
│ │ └── tsconfig.json
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ └── index.ts
│ ├── bootstrap.md
│ └── acceptance-test-config.yml
├── azure-repos-source
│ ├── test_files
│ │ └── invalid_config.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ ├── index.ts
│ │ │ └── users.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ └── acceptance-test-config.yml
├── backlog-source
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── invalid_config.json
│ │ ├── incremental_configured_catalog.json
│ │ └── users.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── streams
│ │ │ ├── index.ts
│ │ │ └── users.ts
│ │ └── tsconfig.json
│ ├── test
│ │ └── tsconfig.json
│ ├── resources
│ │ └── schemas
│ │ │ └── users.json
│ └── acceptance-test-config.yml
├── shortcut-source
│ ├── test_files
│ │ ├── abnormal_state.json
│ │ ├── invalid_config.json
│ │ ├── incremental_configured_catalog.json
│ │ └── members.json
│ ├── bin
│ │ └── main
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ ├── index.ts
│ │ │ ├── members.ts
│ │ │ ├── projects.ts
│ │ │ ├── stories.ts
│ │ │ └── epics.ts
│ ├── test
│ │ └── tsconfig.json
│ └── acceptance-test-config.yml
├── azureactivedirectory-source
│ ├── test_files
│ │ ├── invalid_config.json
│ │ └── full_configured_catalog.json
│ ├── src
│ │ ├── streams
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── bin
│ │ └── main
│ ├── test
│ │ └── tsconfig.json
│ └── acceptance-test-config.yml
├── bitbucket-source
│ ├── bin
│ │ └── main
│ ├── test_files
│ │ ├── invalid_config.json
│ │ └── abnormal_state.json
│ ├── src
│ │ ├── tsconfig.json
│ │ └── streams
│ │ │ ├── index.ts
│ │ │ └── workspaces.ts
│ ├── test
│ │ └── tsconfig.json
│ └── resources
│ │ └── schemas
│ │ └── workspaces.json
└── azurepipeline-source
│ ├── bin
│ └── main
│ ├── test_files
│ ├── invalid_config.json
│ └── abnormal_state.json
│ ├── src
│ ├── streams
│ │ └── index.ts
│ └── tsconfig.json
│ ├── test
│ └── tsconfig.json
│ └── acceptance-test-config.yml
├── .github
├── CODEOWNERS
├── workflows
│ └── skip-test-sources.txt
├── dependabot.yml
└── pull_request_template.md
├── .huskyrc.json
├── .lintstagedrc.json
├── CONTRIBUTING.md
├── .prettierrc.json
├── CODE_OF_CONDUCT.md
├── lerna.json
├── destinations
└── airbyte-faros-destination
│ ├── bin
│ └── main
│ ├── img
│ └── source_destination.png
│ ├── src
│ ├── tsconfig.json
│ ├── converters
│ │ ├── okta_faros
│ │ │ ├── common.ts
│ │ │ ├── users.ts
│ │ │ └── groups.ts
│ │ ├── okta
│ │ │ └── common.ts
│ │ ├── azureactivedirectory
│ │ │ └── common.ts
│ │ ├── jira
│ │ │ ├── sprint_issues.ts
│ │ │ ├── pull_requests.ts
│ │ │ ├── issue_fields.ts
│ │ │ ├── workflow_statuses.ts
│ │ │ └── board_issues.ts
│ │ ├── gitlab
│ │ │ ├── group_labels.ts
│ │ │ └── project_labels.ts
│ │ ├── asana
│ │ │ ├── users.ts
│ │ │ └── tags.ts
│ │ ├── github
│ │ │ ├── issue_labels.ts
│ │ │ ├── users.ts
│ │ │ ├── assignees.ts
│ │ │ ├── collaborators.ts
│ │ │ ├── projects.ts
│ │ │ └── branches.ts
│ │ ├── bamboohr
│ │ │ ├── common.ts
│ │ │ └── models.ts
│ │ ├── pagerduty
│ │ │ └── users.ts
│ │ ├── servicenow
│ │ │ └── users.ts
│ │ ├── datadog
│ │ │ └── users.ts
│ │ ├── statuspage
│ │ │ └── users.ts
│ │ ├── firehydrant
│ │ │ └── teams.ts
│ │ ├── opsgenie
│ │ │ └── teams.ts
│ │ ├── backlog
│ │ │ └── users.ts
│ │ ├── shortcut
│ │ │ └── members.ts
│ │ ├── squadcast
│ │ │ └── users.ts
│ │ ├── victorops
│ │ │ └── teams.ts
│ │ └── buildkite
│ │ │ └── organizations.ts
│ ├── community
│ │ └── types.ts
│ └── destination-runner.ts
│ ├── test
│ ├── tsconfig.json
│ └── resources
│ │ ├── docker
│ │ └── catalog.json
│ │ ├── bamboohr
│ │ └── catalog.json
│ │ ├── agileaccelerator
│ │ └── catalog.json
│ │ ├── faros_feeds
│ │ └── catalog.json
│ │ ├── okta
│ │ └── catalog.json
│ │ ├── datadog
│ │ └── catalog.json
│ │ ├── circleci
│ │ └── catalog.json
│ │ ├── harness
│ │ └── catalog.json
│ │ ├── servicenow
│ │ └── catalog.json
│ │ ├── azureactivedirectory
│ │ └── catalog.json
│ │ ├── jenkins
│ │ └── catalog.json
│ │ ├── opsgenie
│ │ └── catalog.json
│ │ ├── victorops
│ │ └── catalog.json
│ │ ├── firehydrant
│ │ └── catalog.json
│ │ ├── buildkite
│ │ └── catalog.json
│ │ ├── statuspage
│ │ └── catalog.json
│ │ ├── azurepipeline
│ │ └── catalog.json
│ │ ├── azure-repos
│ │ └── catalog.json
│ │ ├── backlog
│ │ └── catalog.json
│ │ ├── squadcast
│ │ └── catalog.json
│ │ ├── shortcut
│ │ └── catalog.json
│ │ ├── gitlab-ci
│ │ └── catalog.json
│ │ ├── phabricator
│ │ └── catalog.json
│ │ ├── pagerduty
│ │ └── catalog.json
│ │ └── asana
│ │ └── catalog.json
│ └── resources
│ └── fetch-primary-keys.sql
├── faros-airbyte-cdk
├── src
│ ├── tsconfig.json
│ ├── runner.ts
│ ├── index.ts
│ ├── destinations
│ │ └── destination.ts
│ └── connector.ts
├── test
│ └── tsconfig.json
└── README.md
├── .dockerignore
├── .tsconfig.json
├── .gitignore
└── Dockerfile
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/test_files/users.json:
--------------------------------------------------------------------------------
1 | []
2 |
--------------------------------------------------------------------------------
/sources/okta-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/builds.json:
--------------------------------------------------------------------------------
1 | []
2 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @cjwooo @tovbinm @ypc-faros @willmarks
2 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/secret.key.not-so-secret:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.huskyrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "hooks": {
3 | "pre-commit": "lint-staged"
4 | }
5 | }
--------------------------------------------------------------------------------
/sources/datadog-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "bad": ""
3 | }
4 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/legacyIds:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "token"
3 | }
4 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/nextBuildNumber:
--------------------------------------------------------------------------------
1 | 4
2 |
--------------------------------------------------------------------------------
/sources/servicenow-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "bad": ""
3 | }
4 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx lint-staged
5 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jenkins.install.UpgradeWizard.state:
--------------------------------------------------------------------------------
1 | 2.303.1
--------------------------------------------------------------------------------
/sources/squadcast-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "squadcast-token"
3 | }
4 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jenkins.install.InstallUtil.lastExecVersion:
--------------------------------------------------------------------------------
1 | 2.303.1
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/1/changelog.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/2/changelog.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/3/changelog.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.lintstagedrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "*.ts": [
3 | "prettier --write",
4 | "eslint --fix"
5 | ]
6 | }
--------------------------------------------------------------------------------
/sources/bamboohr-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Users} from './users';
2 | export {Users};
3 |
--------------------------------------------------------------------------------
/sources/docker-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Tags} from './tags';
2 |
3 | export {Tags};
4 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/src/gitlab/index.ts:
--------------------------------------------------------------------------------
1 | export * from './gitlab';
2 | export * from './types';
3 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/.owner:
--------------------------------------------------------------------------------
1 | 324256173 contextPath="" at 7@ad42d17cdcad
2 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "api_key": "",
3 | "domain": ""
4 | }
5 |
--------------------------------------------------------------------------------
/sources/example-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Builds} from './builds';
2 |
3 | export {Builds};
4 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "",
3 | "start_date":""
4 | }
5 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 | View on [docs.airbyte.io](https://docs.airbyte.io/contributing-to-airbyte)
3 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Works} from './works';
2 |
3 | export {Works};
4 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "",
3 | "cutoff_days":90
4 | }
5 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "",
3 | "cutoff_days":90
4 | }
5 |
--------------------------------------------------------------------------------
/sources/squadcast-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "",
3 | "cutoff_days":90
4 | }
5 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSpacing": false,
3 | "trailingComma": "es5",
4 | "singleQuote": true
5 | }
6 |
--------------------------------------------------------------------------------
/sources/customer-io-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "app_api_key": "",
3 | "cutoff_days":90
4 | }
5 |
--------------------------------------------------------------------------------
/sources/example-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "builds": {
3 | "cutoff": 1735718400000
4 | }
5 | }
--------------------------------------------------------------------------------
/sources/harness-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Executions} from './executions';
2 |
3 | export {Executions};
4 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "api_key": "",
3 | "cutoff_days": 90
4 | }
5 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/pipelines_all.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "slug": "kelvin-test"
4 | }
5 | ]
6 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "pipelines": {
3 | "cutoff": 1735718400000
4 | }
5 | }
--------------------------------------------------------------------------------
/sources/googlecalendar-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "private_key": "",
3 | "client_email": ""
4 | }
5 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/secret.key:
--------------------------------------------------------------------------------
1 | 7aa047712e6d26248588f27ca6270128cc0cb70e58ab0f75c179bd658e3ca755
--------------------------------------------------------------------------------
/sources/servicenow-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "username": "username",
3 | "password": "password"
4 | }
5 |
--------------------------------------------------------------------------------
/sources/circleci-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | export {Projects} from './projects';
2 | export {Pipelines} from './pipelines';
3 |
--------------------------------------------------------------------------------
/sources/victorops-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "apiId":"",
3 | "apiKey":"",
4 | "cutoff_days":90
5 | }
6 |
--------------------------------------------------------------------------------
/sources/circleci-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "",
3 | "repo_names": [],
4 | "cutoff_days": 90
5 | }
6 |
--------------------------------------------------------------------------------
/sources/datadog-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "apiKey": "key",
3 | "applicationKey": "key",
4 | "pageSize": 10
5 | }
6 |
--------------------------------------------------------------------------------
/sources/example-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url": "http://localhost",
3 | "token": "",
4 | "user": "chris"
5 | }
--------------------------------------------------------------------------------
/sources/harness-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "executions": {
3 | "lastEndedAt": 1735689600000
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/harness-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "api_key": "",
3 | "account_id": "",
4 | "cutoff_days":90
5 | }
6 |
--------------------------------------------------------------------------------
/sources/statuspage-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "api_key": "",
3 | "page_id": "",
4 | "cutoff_days":90
5 | }
6 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of conduct
2 | View in [docs.airbyte.io](https://docs.airbyte.io/contributing-to-airbyte/code-of-conduct)
3 |
--------------------------------------------------------------------------------
/sources/circleci-source/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datacamp/airbyte-connectors/main/sources/circleci-source/src/.DS_Store
--------------------------------------------------------------------------------
/sources/docker-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "username": "",
3 | "password": "",
4 | "repositories": "test"
5 | }
6 |
--------------------------------------------------------------------------------
/sources/example-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url":"url",
3 | "user":"baduser",
4 | "token":"token"
5 | }
6 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "private_key": "PRIVATE_KEY",
3 | "client_email": "CLIENT_EMAIL"
4 | }
5 |
--------------------------------------------------------------------------------
/sources/okta-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "domain_name": "dev-88164258",
3 | "token": "",
4 | "version": "v1"
5 | }
--------------------------------------------------------------------------------
/sources/phabricator-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "repositories": {
3 | "latestCreatedAt": 1735718400000
4 | }
5 | }
--------------------------------------------------------------------------------
/sources/azure-repos-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "access_token": "",
3 | "organization": "",
4 | "project": ""
5 | }
6 |
--------------------------------------------------------------------------------
/sources/backlog-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "issues": {
3 | "lastUpdatedAt": "2025-01-01T00:00:00Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/circleci-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "pipelines": {
3 | "lastUpdatedAt": "2025-01-01 00:00:00"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url":"url",
3 | "user":"baduser",
4 | "token":"token"
5 | }
6 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url": "url",
3 | "user": "baduser",
4 | "token": "token"
5 | }
6 |
--------------------------------------------------------------------------------
/sources/okta-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Groups} from './groups';
2 | import {Users} from './users';
3 | export {Users, Groups};
4 |
--------------------------------------------------------------------------------
/sources/shortcut-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "iterations": {
3 | "lastUpdatedAt": "2025-01-01T00:00:00Z"
4 | }
5 | }
--------------------------------------------------------------------------------
/sources/victorops-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "cutoff": "2025-01-01T08:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "works": {
3 | "cutoff": "2025-01-01T08:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "builds": {
3 | "lastCreatedAt": "2025-01-01T00:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/docker-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "tags": {
3 | "lastCreatedAt": "2025-01-01T00:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/jenkins-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Builds} from './builds';
2 | import {Jobs} from './jobs';
3 |
4 | export {Builds, Jobs};
5 |
--------------------------------------------------------------------------------
/sources/phabricator-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url": "url",
3 | "token": "token",
4 | "cutoff_days": 90
5 | }
6 |
--------------------------------------------------------------------------------
/sources/squadcast-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "lastUpdatedAt": "2025-01-01T00:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/lerna.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.0.1",
3 | "packages": [
4 | "faros-airbyte-cdk",
5 | "destinations/**",
6 | "sources/**"
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "client_id": "",
3 | "client_secret": "",
4 | "tenant_id": ""
5 | }
6 |
--------------------------------------------------------------------------------
/sources/docker-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "lastCreatedAt": "2025-01-01T00:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/okta-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/shortcut-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "",
3 | "base_url":"https://api.app.shortcut.com",
4 | "version":"v3"
5 | }
--------------------------------------------------------------------------------
/sources/azure-repos-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Groups} from './groups';
2 | import {Users} from './users';
3 | export {Users, Groups};
4 |
--------------------------------------------------------------------------------
/sources/backlog-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/backlog-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "apiKey": "",
3 | "space": "devcube",
4 | "cutoff_days":90,
5 | "version": "v2"
6 | }
7 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/buildkite-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/circleci-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/customer-io-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/datadog-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/datadog-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Incidents} from './incident';
2 | import {Users} from './users';
3 |
4 | export {Incidents, Users};
5 |
--------------------------------------------------------------------------------
/sources/example-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/example-source/test/index.test.ts:
--------------------------------------------------------------------------------
1 | describe('index', () => {
2 | test('ok?', async () => {
3 | expect('OK').toEqual('OK');
4 | });
5 | });
6 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/harness-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/jenkins-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/userContent/readme.txt:
--------------------------------------------------------------------------------
1 | Files in this directory will be served under your http://yourjenkins/userContent/
2 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "lastCreatedAt": "2025-01-01T00:00:00.000Z"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/phabricator-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/servicenow-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/shortcut-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/squadcast-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/statuspage-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/victorops-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/phabricator-source/test/index.test.ts:
--------------------------------------------------------------------------------
1 | describe('index', () => {
2 | test('ok?', async () => {
3 | expect('OK').toEqual('OK');
4 | });
5 | });
6 |
--------------------------------------------------------------------------------
/sources/phabricator-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url": "http://localhost",
3 | "token": "ok",
4 | "start_date": "2021-03-01T00:00:00Z"
5 | }
--------------------------------------------------------------------------------
/sources/servicenow-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Incidents} from './incidents';
2 | import {Users} from './users';
3 |
4 | export {Incidents, Users};
5 |
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "access_token": "",
3 | "organization": "",
4 | "project": "",
5 | "start_date": ""
6 | }
7 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Calendars} from './calendars';
2 | import {Events} from './events';
3 |
4 | export {Calendars, Events};
5 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "builds": {
3 | "newJobsLastCompletedBuilds": {
4 | "Faros-test-job": 3
5 | }
6 | }
7 | }
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/bin/main:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | const {mainCommand} = require('../lib');
4 |
5 | mainCommand().parseAsync(process.argv);
6 |
--------------------------------------------------------------------------------
/faros-airbyte-cdk/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url": "http://127.0.0.1:8080",
3 | "token": "112886b247f226a0c18f5422e36a3d2806",
4 | "user": "admin"
5 | }
6 |
--------------------------------------------------------------------------------
/sources/circleci-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/example-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/victorops-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/bitbucket-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "serverUrl": "url",
3 | "username": "bad-username",
4 | "password": "bad-password",
5 | "cutoff_days":90
6 | }
7 |
--------------------------------------------------------------------------------
/sources/customer-io-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/datadog-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/harness-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/sources/phabricator-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/servicenow-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/img/source_destination.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datacamp/airbyte-connectors/main/destinations/airbyte-faros-destination/img/source_destination.png
--------------------------------------------------------------------------------
/sources/customer-io-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | export {Campaigns} from './campaigns';
2 | export {CampaignActions} from './campaign-actions';
3 | export {Newsletters} from './newsletters';
4 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/identity.key.enc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datacamp/airbyte-connectors/main/sources/jenkins-source/test_files/jenkins/data/identity.key.enc
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib"
6 | }
7 | }
--------------------------------------------------------------------------------
/sources/backlog-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Issues} from './issues';
2 | import {Projects} from './projects';
3 | import {Users} from './users';
4 | export {Issues, Projects, Users};
5 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Incidents} from './incidents';
2 | import {Teams} from './teams';
3 | import {Users} from './users';
4 | export {Incidents, Users, Teams};
5 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Incidents} from './incidents';
2 | import {Teams} from './teams';
3 | import {Users} from './users';
4 | export {Incidents, Users, Teams};
5 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/queue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 3
4 |
5 |
--------------------------------------------------------------------------------
/sources/victorops-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Incidents} from './incidents';
2 | import {Teams} from './teams';
3 | import {Users} from './users';
4 |
5 | export {Incidents, Teams, Users};
6 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/lib
3 | **/secrets
4 | **/*.log
5 | **/*.out
6 | **/.pytest_cache
7 | **/acceptance-test-config.yml
8 | **/acceptance_tests_logs
9 | **/test_files
10 | **/test
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/queue.xml.bak:
--------------------------------------------------------------------------------
1 |
2 |
3 | 3
4 |
5 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Builds} from './builds';
2 | import {Pipelines} from './pipelines';
3 | import {Releases} from './releases';
4 | export {Pipelines, Builds, Releases};
5 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "sourceMap": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/okta_faros/common.ts:
--------------------------------------------------------------------------------
1 | import {Converter} from '../converter';
2 |
3 | export abstract class OktaFarosConverter extends Converter {
4 | source = 'Okta_Faros';
5 | }
6 |
--------------------------------------------------------------------------------
/sources/buildkite-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Builds} from './builds';
2 | import {Organizations} from './organizations';
3 | import {Pipelines} from './pipelines';
4 | export {Organizations, Pipelines, Builds};
5 |
--------------------------------------------------------------------------------
/sources/datadog-source/test_files/future_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "lastModified": "2022-02-27T21:14:44.708Z"
4 | },
5 | "users": {
6 | "lastModifiedAt": "2022-02-27T21:10:44.706Z"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/okta-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/buildkite-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/docker-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/jenkins-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "lastSynced": "2200-10-29T05:52:30Z"
4 | },
5 | "incident_log_entries": {
6 | "lastSynced": "2200-10-29T05:52:30Z"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/servicenow-source/test_files/future_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "sys_updated_on": "2022-02-27T21:14:44.708Z"
4 | },
5 | "users": {
6 | "sys_updated_on": "2022-02-27T21:10:44.706Z"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/shortcut-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/squadcast-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/statuspage-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/azure-repos-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {PullRequests} from './pulllrequests';
2 | import {Repositories} from './repositories';
3 | import {Users} from './users';
4 | export {Repositories, PullRequests, Users};
5 |
--------------------------------------------------------------------------------
/sources/azure-repos-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/copy_reference_file.log:
--------------------------------------------------------------------------------
1 | --- Copying files at Mon Sep 6 16:20:12 UTC 2021
2 | --- Copying files at Mon Sep 6 19:51:19 UTC 2021
3 | --- Copying files at Mon Sep 6 20:01:02 UTC 2021
4 |
--------------------------------------------------------------------------------
/sources/statuspage-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Incidents} from './incidents';
2 | import {IncidentUpdates} from './incidentUpdates';
3 | import {Users} from './users';
4 |
5 | export {Incidents, IncidentUpdates, Users};
6 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "builds": {
3 | "lastQueueTime": "2025-01-01T00:00:00Z"
4 | },
5 | "releases": {
6 | "lastCreatedOn": "2025-01-01T00:00:00Z"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/permalinks:
--------------------------------------------------------------------------------
1 | lastCompletedBuild 3
2 | lastFailedBuild -1
3 | lastStableBuild 3
4 | lastSuccessfulBuild 3
5 | lastUnstableBuild -1
6 | lastUnsuccessfulBuild -1
7 |
--------------------------------------------------------------------------------
/sources/backlog-source/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "composite": true,
5 | "outDir": "../lib",
6 | "experimentalDecorators": true,
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/faros-airbyte-cdk/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/test_files/invalid_config.json:
--------------------------------------------------------------------------------
1 | {
2 | "server_url": "",
3 | "client_id": "",
4 | "client_secret": "",
5 | "username": "",
6 | "password": "",
7 | "api_token": "",
8 | "cutoff_days":90
9 | }
10 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Groups} from './groups';
2 | import {Jobs} from './jobs';
3 | import {Pipelines} from './pipelines';
4 | import {Projects} from './projects';
5 |
6 | export {Groups, Projects, Pipelines, Jobs};
7 |
--------------------------------------------------------------------------------
/sources/okta-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/azure-repos-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/circleci-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/customer-io-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/datadog-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/example-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/harness-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/hudson.model.UpdateCenter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | default
5 | https://updates.jenkins.io/update-center.json
6 |
7 |
--------------------------------------------------------------------------------
/sources/phabricator-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/servicenow-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/squadcast-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Events} from './events';
2 | import {Incidents} from './incidents';
3 | import {Services} from './services';
4 | import {Users} from './users';
5 |
6 | export {Events, Incidents, Services, Users};
7 |
--------------------------------------------------------------------------------
/sources/victorops-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jenkins.telemetry.Correlator.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 54773ce8-20b2-435b-a3c7-769a568b0abe
4 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test"
5 | },
6 | "references": [
7 | {
8 | "path": "../src"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/docker/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__docker__tags"
6 | },
7 | "destination_sync_mode": "append"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/sources/customer-io-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "campaigns": {
3 | "cutoff": 1735718400000
4 | },
5 | "campaign_actions": {
6 | "cutoff": 1735718400000
7 | },
8 | "newsletters": {
9 | "cutoff": 1735718400000
10 | }
11 | }
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/bamboohr/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__bamboohr__users"
6 | },
7 | "destination_sync_mode": "append"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 |
3 | services:
4 | jenkins:
5 | image: jenkins/jenkins:lts-jdk11
6 | ports:
7 | - 8080:8080
8 | - 50000:50000
9 | volumes:
10 | - ./data:/var/jenkins_home
11 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "sourceMap": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/agileaccelerator/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__agileaccelerator__works"
6 | },
7 | "destination_sync_mode": "append"
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/faros-airbyte-cdk/README.md:
--------------------------------------------------------------------------------
1 | # Airbyte Connector Development Kit (CDK) for JavaScript/TypeScript
2 |
3 | [](https://badge.fury.io/js/faros-airbyte-cdk)
4 |
5 | 📖 Read more here - https://github.com/faros-ai/airbyte-connectors
6 |
--------------------------------------------------------------------------------
/sources/backlog-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true,
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/docker-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/shortcut-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/squadcast-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/statuspage-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/shortcut-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Epics} from './epics';
2 | import {Iterations} from './iterations';
3 | import {Members} from './members';
4 | import {Projects} from './projects';
5 | import {Stories} from './stories';
6 | export {Projects, Iterations, Epics, Stories, Members};
7 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/test/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../../.tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out/test",
5 | "experimentalDecorators": true
6 | },
7 | "references": [
8 | {
9 | "path": "../src"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "calendars": {
3 | "lastSyncToken": "CIDPmvb-q_QCEjRmYXJvcy10ZXN0QGZhcm9zLXRlc3QtMzMyMjA5LmlhbS5nc2VydmljZWFjY291bnQuY29t"
4 | },
5 | "events": {
6 | "lastSyncToken": "CIDPmvb-q_QCEIDPmvb-q_QCGAUg8PPzxQE="
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/sources/statuspage-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "incidents": {
3 | "cutoff": "2025-01-01T08:00:00.000Z"
4 | },
5 | "incident_updates": {
6 | "cutoff": "2025-01-01T08:00:00.000Z"
7 | },
8 | "users": {
9 | "cutoff": "2025-01-01T08:00:00.000Z"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/faros_feeds/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__faros_feeds__faros_feed"
6 | },
7 | "destination_sync_mode": "append"
8 | }
9 | ]
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/sources/phabricator-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Commits} from './commits';
2 | import {Projects} from './projects';
3 | import {Repositories} from './repositories';
4 | import {Revisions} from './revisions';
5 | import {Users} from './users';
6 |
7 | export {Commits, Projects, Repositories, Revisions, Users};
8 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/README.md:
--------------------------------------------------------------------------------
1 | You need run Jenkins's server to fix the error: "identity.key.enc is corrupted. Identity.key.enc will be deleted and a new one will be generated.
2 | javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption."
3 |
--------------------------------------------------------------------------------
/.github/workflows/skip-test-sources.txt:
--------------------------------------------------------------------------------
1 | agileaccelerator-source
2 | azure-repos-source
3 | azurepipeline-source
4 | bamboohr-source
5 | gitlab-ci-source
6 | googlecalendar-source
7 | datadog-source
8 | jenkins-source
9 | okta-source
10 | opsgenie-source
11 | servicenow-source
12 | squadcast-source
13 | phabricator-source
14 | victorops-source
15 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "monthly"
7 | - package-ecosystem: "npm"
8 | directory: "/"
9 | schedule:
10 | interval: "monthly"
11 | labels:
12 | - 'dependencies'
13 | open-pull-requests-limit: 10
14 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | AgileAccelerator is a REST API. This connector has the following streams:
4 |
5 | * [Works]({DOMAIN_URL}/lightning/setup/ObjectManager/01I7Q000000PsSD/FieldsAndRelationships/view) \(Incremental\)
6 |
7 | See [here]({DOMAIN_URL}/lightning/setup/ObjectManager/home) for API
8 | documentation.
9 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {IncidentLogEntries} from './incidentLogEntries';
2 | import {Incidents} from './incidents';
3 | import {PrioritiesResource} from './prioritiesResource';
4 | import {Teams} from './teams';
5 | import {Users} from './users';
6 |
7 | export {IncidentLogEntries, Incidents, PrioritiesResource, Users, Teams};
8 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/test_files/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "608c2d17-4009-49e5-9491-b93168a7d0c7",
4 | "name": "Kelvin Tran",
5 | "email": "huongkstn@gmail.com",
6 | "created_at": "2022-03-07T15:00:29.757Z",
7 | "updated_at": "2022-03-07T15:00:29.757Z",
8 | "slack_linked?": true
9 | }
10 | ]
11 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## Description
2 |
3 | > Provide description here
4 |
5 | ## Type of change
6 | - [ ] Bug fix
7 | - [ ] New feature
8 | - [ ] Breaking change
9 |
10 | ## Related issues
11 |
12 | > Fix [#1]()
13 |
14 | ## Migration notes
15 |
16 | > Describe migration notes if any
17 |
18 | ## Extra info
19 |
20 | > Add any additional information
21 |
--------------------------------------------------------------------------------
/faros-airbyte-cdk/src/runner.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteLogger} from './logger';
2 |
3 | export abstract class Runner {
4 | constructor(logger: AirbyteLogger) {
5 | process.on('unhandledRejection', (error) => {
6 | throw error;
7 | });
8 | process.on('uncaughtException', (error) => {
9 | logger.trace(error);
10 | process.exit(1);
11 | });
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/sources/servicenow-source/resources/schemas/user.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "required": [
5 | "sys_id"
6 | ],
7 | "properties": {
8 | "sys_id": {"type": "string"},
9 | "name": {"type": "string"},
10 | "email": {"type": "string"},
11 | "sys_updated_on": {"type": "string"}
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/.tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "esModuleInterop": true,
5 | "module": "commonjs",
6 | "noImplicitAny": false,
7 | "pretty": true,
8 | "resolveJsonModule": false,
9 | "skipLibCheck": true,
10 | "sourceMap": false,
11 | "strict": true,
12 | "strictNullChecks": false,
13 | "target": "es2019"
14 | }
15 | }
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/groups.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": 1,
3 | "created_at": "2020-01-15T12:36:29.590Z",
4 | "description": "Aliquid qui quis dignissimos distinctio ut commodi voluptas est.",
5 | "name": "Best Group",
6 | "path": "best-group",
7 | "full_path": "best-group",
8 | "visibility": "public",
9 | "web_url": "https://gitlab.example.com/groups/best-group"
10 | }
11 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/users/users.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 1
4 |
5 |
6 | admin
7 | admin_14692387833535189143
8 |
9 |
10 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/okta/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__okta__groups"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__okta__users"
12 | },
13 | "destination_sync_mode": "append"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/datadog/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__datadog__incidents"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__datadog__users"
12 | },
13 | "destination_sync_mode": "append"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/circleci/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__circleci__projects"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__circleci__pipelines"
12 | },
13 | "destination_sync_mode": "append"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/groups-response.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "createdAt": "2020-01-15T12:36:29.590Z",
5 | "description": "Aliquid qui quis dignissimos distinctio ut commodi voluptas est.",
6 | "name": "Best Group",
7 | "path": "best-group",
8 | "fullPath": "best-group",
9 | "visibility": "public",
10 | "webUrl": "https://gitlab.example.com/groups/best-group"
11 | }
12 | ]
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/harness/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__harness__executions"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__harness__something_else"
12 | },
13 | "destination_sync_mode": "append"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/servicenow/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__servicenow__incidents"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__servicenow__users"
12 | },
13 | "destination_sync_mode": "append"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/sources/victorops-source/test_files/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "firstName": "Roman",
4 | "lastName": "Kyrnis",
5 | "displayName": "Roman Kyrnis",
6 | "username": "roman.kyrnis",
7 | "email": "roman.ky@mydevcube.com",
8 | "createdAt": "2021-11-02T16:19:02Z",
9 | "passwordLastUpdated": "2021-11-02T16:19:02Z",
10 | "verified": true,
11 | "_selfUrl": "/api-public/v1/user/roman.kyrnis"
12 | }
13 | ]
14 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/okta/common.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {Converter} from '../converter';
4 |
5 | /** Okta converter base */
6 | export abstract class OktaConverter extends Converter {
7 | source = 'Okta';
8 |
9 | /** Almost every Okta record have id property */
10 | id(record: AirbyteRecord): any {
11 | return record?.record?.data?.id;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/faros-airbyte-cdk/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './destinations/destination';
2 | export * from './destinations/destination-runner';
3 | export {wrapApiError} from './errors';
4 | export * from './logger';
5 | export * from './protocol';
6 | export * from './sources/source-base';
7 | export * from './sources/source';
8 | export * from './sources/source-runner';
9 | export * from './sources/streams/stream-base';
10 | export * from './utils';
11 |
--------------------------------------------------------------------------------
/sources/buildkite-source/resources/schemas/organizations.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "additionalProperties": true,
5 | "properties": {
6 | "id": {
7 | "type": "string"
8 | },
9 | "name": {
10 | "type": "string"
11 | },
12 | "slug": {
13 | "type": "string"
14 | },
15 | "web_url": {
16 | "type": "string"
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | lib/
2 | out/
3 | secrets/
4 | node_modules/
5 | acceptance_tests_logs/
6 | .vscode/
7 |
8 | .DS_Store
9 | acceptance-test-*.log
10 | *.code-workspace
11 |
12 | faros-airbyte-cdk/package-lock.json
13 | destinations/**/package-lock.json
14 | sources/**/package-lock.json
15 |
16 | **/jenkins/data/logs
17 | **/jenkins/data/war
18 | **/jenkins/data/.cache
19 | **/jenkins/data/.java
20 | **/jenkins/data/.lastStarted
21 | **/jenkins/data/*.log
22 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/azureactivedirectory/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__azureactivedirectory__groups"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__azureactivedirectory__users"
12 | },
13 | "destination_sync_mode": "append"
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/test_files/teams.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "26f9e160-0aac-40d9-ae19-c1c3fe2000be",
4 | "name": "Nodejs team",
5 | "description": "Nodejs team",
6 | "links": {
7 | "web": "https://huongtn.app.opsgenie.com/teams/dashboard/26f9e160-0aac-40d9-ae19-c1c3fe2000be/main",
8 | "api": "https://api.opsgenie.com/v2/teams/26f9e160-0aac-40d9-ae19-c1c3fe2000be"
9 | }
10 | }
11 | ]
12 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/1/log:
--------------------------------------------------------------------------------
1 | Started by user [8mha:////4IJFoT+H9WjAPaWj9Ss3Dt1fIxAvrCgzz8aXPlaejePcAAAAlx+LCAAAAAAAAP9b85aBtbiIQTGjNKU4P08vOT+vOD8nVc83PyU1x6OyILUoJzMv2y+/JJUBAhiZGBgqihhk0NSjKDWzXb3RdlLBUSYGJk8GtpzUvPSSDB8G5tKinBIGIZ+sxLJE/ZzEvHT94JKizLx0a6BxUmjGOUNodHsLgAzWEgZu/dLi1CL9xJTczDwAj6GcLcAAAAA=[0madmin
2 | Running as SYSTEM
3 | Building in workspace /var/jenkins_home/workspace/Faros-test-job
4 | Finished: SUCCESS
5 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/2/log:
--------------------------------------------------------------------------------
1 | Started by user [8mha:////4IJFoT+H9WjAPaWj9Ss3Dt1fIxAvrCgzz8aXPlaejePcAAAAlx+LCAAAAAAAAP9b85aBtbiIQTGjNKU4P08vOT+vOD8nVc83PyU1x6OyILUoJzMv2y+/JJUBAhiZGBgqihhk0NSjKDWzXb3RdlLBUSYGJk8GtpzUvPSSDB8G5tKinBIGIZ+sxLJE/ZzEvHT94JKizLx0a6BxUmjGOUNodHsLgAzWEgZu/dLi1CL9xJTczDwAj6GcLcAAAAA=[0madmin
2 | Running as SYSTEM
3 | Building in workspace /var/jenkins_home/workspace/Faros-test-job
4 | Finished: SUCCESS
5 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/builds/3/log:
--------------------------------------------------------------------------------
1 | Started by user [8mha:////4IJFoT+H9WjAPaWj9Ss3Dt1fIxAvrCgzz8aXPlaejePcAAAAlx+LCAAAAAAAAP9b85aBtbiIQTGjNKU4P08vOT+vOD8nVc83PyU1x6OyILUoJzMv2y+/JJUBAhiZGBgqihhk0NSjKDWzXb3RdlLBUSYGJk8GtpzUvPSSDB8G5tKinBIGIZ+sxLJE/ZzEvHT94JKizLx0a6BxUmjGOUNodHsLgAzWEgZu/dLi1CL9xJTczDwAj6GcLcAAAAA=[0madmin
2 | Running as SYSTEM
3 | Building in workspace /var/jenkins_home/workspace/Faros-test-job
4 | Finished: SUCCESS
5 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/projects.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": 1,
3 | "archived": false,
4 | "created_at": "2022-04-01T11:19:37.180Z",
5 | "default_branch": "main",
6 | "description": "Aliquid qui quis dignissimos distinctio ut commodi voluptas est. project1",
7 | "name": "Project1",
8 | "path": "project1",
9 | "path_with_namespace": "best-group/project1",
10 | "visibility": "private",
11 | "web_url": "https://gitlab.example.com/best-group/project1"
12 | }
13 |
--------------------------------------------------------------------------------
/sources/circleci-source/test_files/projects.json:
--------------------------------------------------------------------------------
1 | {
2 | "slug": "gh/huongtn/sample-test",
3 | "organization_name": "huongtn",
4 | "organization_id": "988b9f2e-fc7c-4a81-b2ac-651c352e01b5",
5 | "name": "sample-test",
6 | "id": "19713f32-e5b8-4f7e-9978-ecc3f96b3113",
7 | "organization_slug": "gh/huongtn",
8 | "vcs_info": {
9 | "vcs_url": "https://github.com/huongtn/sample-test",
10 | "default_branch": "main",
11 | "provider": "GitHub"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/azureactivedirectory/common.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {Converter} from '../converter';
4 |
5 | /** AzureActiveDirectory converter base */
6 | export abstract class AzureActiveDirectoryConverter extends Converter {
7 | source = 'AzureActiveDirectory';
8 | /** Almost every Azure Active Directory record have id property */
9 | id(record: AirbyteRecord): any {
10 | return record?.record?.data?.id;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/projects-response.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "archived": false,
5 | "createdAt": "2022-04-01T11:19:37.180Z",
6 | "defaultBranch": "main",
7 | "description": "Aliquid qui quis dignissimos distinctio ut commodi voluptas est. project1",
8 | "name": "Project1",
9 | "path": "project1",
10 | "pathWithNamespace": "best-group/project1",
11 | "visibility": "private",
12 | "webUrl": "https://gitlab.example.com/best-group/project1"
13 | }
14 | ]
--------------------------------------------------------------------------------
/sources/bamboohr-source/test_files/full_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "users",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh"
9 | ],
10 | "source_defined_cursor": true,
11 | "source_defined_primary_key": [
12 | [
13 | "uid"
14 | ]
15 | ]
16 | },
17 | "sync_mode": "full_refresh",
18 | "destination_sync_mode": "overwrite"
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/sources/victorops-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | VictorOps is a REST API. This connector has the following streams:
4 |
5 | * [Incidents](https://portal.victorops.com/public/api-docs.html#!/Reporting/get_api_reporting_v2_incidents) \(Incremental\)
6 | * [Teams](https://portal.victorops.com/public/api-docs.html#!/Teams/get_api_public_v1_team)
7 | * [Users](https://portal.victorops.com/public/api-docs.html#!/Users/get_api_public_v1_user)
8 |
9 | See [here](https://portal.victorops.com/public/api-docs.html) for API
10 | documentation.
11 |
--------------------------------------------------------------------------------
/sources/customer-io-source/resources/schemas/newsletters.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "integer"
7 | },
8 | "deduplicate_id": {
9 | "type": "string"
10 | },
11 | "name": {
12 | "type": "string"
13 | },
14 | "type": {
15 | "type": "string"
16 | },
17 | "updated": {
18 | "type": "integer"
19 | },
20 | "created": {
21 | "type": "integer"
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | GoogleCalendar is a REST API. This connector has the following streams:
4 |
5 | * [Calendars](https://developers.google.com/calendar/api/v3/reference/calendarList/list) \(Incremental\)
6 | * [Events](https://developers.google.com/calendar/api/v3/reference/events/list) \(Incremental\)
7 |
8 | [Service Account](https://support.google.com/a/answer/7378726?hl=en) is used to authenticate to Google Calendar. See [here](https://developers.google.com/calendar/api/v3/reference) for API
9 | documentation.
10 |
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/users/admin_14692387833535189143/apiTokenStats.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 8814633a-e564-4534-a0d1-4a9b96fd6e6d
6 | 2021-09-06 19:43:24.662 UTC
7 | 209
8 |
9 |
10 |
--------------------------------------------------------------------------------
/sources/squadcast-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | SquadCast is a REST API. This connector has the following streams:
4 |
5 | * [Events](https://apidocs.squadcast.com/#7be5218b-a817-4c88-92c1-a7f0d4528553)
6 | * [Incidents](https://apidocs.squadcast.com/#3d00d5c6-6b9b-410c-a11b-0da72c60d419) \(Incremental\)
7 | * [Services](https://apidocs.squadcast.com/#abb07c8a-d547-46eb-88f1-19378314ec4e)
8 | * [Users](https://apidocs.squadcast.com/#b6654727-8106-4995-a0a3-6a80d29a4951)
9 |
10 | See [here](https://apidocs.squadcast.com/#intro) for API
11 | documentation.
12 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/jenkins/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__jenkins__jobs"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__jenkins__builds"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__jenkins__something_else"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/opsgenie/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__opsgenie__incidents"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__opsgenie__teams"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__opsgenie__users"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/victorops/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__victorops__incidents"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__victorops__teams"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__victorops__users"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/sources/harness-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | Harness is a GraphQL API. This connector has the following streams:
4 |
5 | * [Executions](https://docs.harness.io/article/ba4vs50071-use-workflows-api) \(Incremental\)
6 |
7 | See [here](https://docs.harness.io/article/tm0w6rruqv-harness-api) for API
8 | documentation. While Harness has both REST and GraphQL APIs, this connector only
9 | uses the GraphQL API. This might change as additional streams are added to the
10 | connector.
11 |
12 | The Execution stream pulls executions from both Harness Pipelines and Workflows.
13 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/firehydrant/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__firehydrant__incidents"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__firehydrant__teams"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__firehydrant__users"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/buildkite/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__buildkite__organizations"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__buildkite__pipelines"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__buildkite__builds"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/statuspage/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__statuspage__incidents"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__statuspage__incident_updates"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__statuspage__users"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/resources/schemas/pipelines.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "number"
7 | },
8 | "commitSha": {
9 | "type": "string"
10 | },
11 | "projectId": {
12 | "type": "number"
13 | },
14 | "status": {
15 | "type": "string"
16 | },
17 | "createdAt": {
18 | "type": "string"
19 | },
20 | "updatedAt": {
21 | "type": "string"
22 | },
23 | "webUrl": {
24 | "type": "string"
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/azurepipeline/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__azurepipeline__pipelines"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__azurepipeline__builds"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__azurepipeline__releases"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/sources/googlecalendar-source/test_files/calendars.json:
--------------------------------------------------------------------------------
1 | {
2 | "nextSyncToken": "sync-token",
3 | "items": [
4 | {
5 | "kind": "calendar#calendarListEntry",
6 | "etag": "\"1637221140246000\"",
7 | "id": "5vokul6v3odfgpopgq0pec51k0@group.calendar.google.com",
8 | "summary": "First created calendar in this account",
9 | "timeZone": "UTC",
10 | "colorId": "10",
11 | "backgroundColor": "#b3dc6c",
12 | "foregroundColor": "#000000",
13 | "selected": true,
14 | "accessRole": "owner",
15 | "defaultReminders": []
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/jira/sprint_issues.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {JiraConverter} from './common';
5 |
6 | // Required as dependency Sprints converter
7 | export class SprintIssues extends JiraConverter {
8 | readonly destinationModels: ReadonlyArray = [];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | return [];
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/azure-repos/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__azure-repos__repositories"
6 | },
7 | "destination_sync_mode": "overwrite"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__azure-repos__pull_requests"
12 | },
13 | "destination_sync_mode": "overwrite"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__azure-repos__users"
18 | },
19 | "destination_sync_mode": "overwrite"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/jira/pull_requests.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {JiraConverter} from './common';
5 |
6 | // Required as dependency by Issues converter
7 | export class PullRequests extends JiraConverter {
8 | readonly destinationModels: ReadonlyArray = [];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | return [];
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/sources/statuspage-source/resources/schemas/users.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "first_name": {
9 | "type": "string"
10 | },
11 | "last_name": {
12 | "type": "string"
13 | },
14 | "updated_at": {
15 | "type": "string"
16 | },
17 | "created_at": {
18 | "type": "string"
19 | },
20 | "email": {
21 | "type": "string"
22 | },
23 | "organization_id": {
24 | "type": "string"
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/jira/issue_fields.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {JiraConverter} from './common';
5 |
6 | // Required as dependency by Issues and Sprints stream
7 | export class IssueFields extends JiraConverter {
8 | readonly destinationModels: ReadonlyArray = [];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | return [];
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/jira/workflow_statuses.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {JiraConverter} from './common';
5 |
6 | // Required as dependency by Issues converter
7 | export class WorkflowStatuses extends JiraConverter {
8 | readonly destinationModels: ReadonlyArray = [];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | return [];
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/backlog/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__backlog__issues"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__backlog__projects"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__backlog__users"
18 | },
19 | "destination_sync_mode": "append"
20 | }
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "builds",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "default_cursor_field": [
12 | "createdAt"
13 | ],
14 | "source_defined_primary_key": [
15 | [
16 | "id"
17 | ]
18 | ]
19 | },
20 | "sync_mode": "incremental",
21 | "destination_sync_mode": "append"
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/sources/datadog-source/README.md:
--------------------------------------------------------------------------------
1 | # Datadog Source
2 |
3 | This source streams data from the [Datadog APIs](https://docs.datadoghq.com/api/latest/) using the [Datadog Node.js API client](https://www.npmjs.com/package/@datadog/datadog-api-client).
4 |
5 | ## Streams
6 |
7 | | Model | Full | Incremental |
8 | |---|---|---|
9 | | Incidents | ✅ | ✅ |
10 | | Users | ✅ | ✅ |
11 |
12 | ## Testing
13 |
14 | From the Datadog source directory execute:
15 |
16 | ```sh
17 | $ npm t
18 | ```
19 |
20 | From the repo root directory execute:
21 |
22 | ```sh
23 | $ ./scripts/source-acceptance-test.sh datadog-source
24 | ```
25 |
--------------------------------------------------------------------------------
/sources/squadcast-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "incidents",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "default_cursor_field": [
12 | "created_at"
13 | ],
14 | "source_defined_primary_key": [
15 | [
16 | "id"
17 | ]
18 | ]
19 | },
20 | "sync_mode": "incremental",
21 | "destination_sync_mode": "append"
22 | }
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/sources/statuspage-source/resources/schemas/incidentUpdates.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "body": {
6 | "type": "string"
7 | },
8 | "created_at": {
9 | "type": "string"
10 | },
11 | "display_at": {
12 | "type": "string"
13 | },
14 | "id": {
15 | "type": "string"
16 | },
17 | "incident_id": {
18 | "type": "string"
19 | },
20 | "status": {
21 | "type": "string"
22 | },
23 | "updated_at": {
24 | "type": "string"
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/sources/example-source/test_files/full_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "builds",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "source_defined_primary_key": [
13 | [
14 | "uid"
15 | ],
16 | [
17 | "source"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "full_refresh",
22 | "destination_sync_mode": "overwrite"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jenkins/data/jobs/Faros-test-job/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | false
5 |
6 |
7 | true
8 | false
9 | false
10 | false
11 |
12 | false
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/sources/servicenow-source/README.md:
--------------------------------------------------------------------------------
1 | # ServiceNow Source
2 |
3 | This source streams data from the [ServiceNow GraphQL API](https://docs.servicenow.com/bundle/sandiego-application-development/page/integrate/graphql/task/query-schema-from-component.html)
4 |
5 | ## Streams
6 |
7 | | Model | Full | Incremental |
8 | |---|---|---|
9 | | Incidents | ✅ | ✅ |
10 | | Users | ✅ | ✅ |
11 |
12 | ## Testing
13 |
14 | From the ServiceNow source directory execute:
15 |
16 | ```sh
17 | $ npm t
18 | ```
19 |
20 | From the repo root directory execute:
21 |
22 | ```sh
23 | $ ./scripts/source-acceptance-test.sh servicenow-source
24 | ```
25 |
--------------------------------------------------------------------------------
/sources/docker-source/test_files/full_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "tags",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "default_cursor_field": [
12 | "imageConfig",
13 | "created"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "name"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "full_refresh",
22 | "destination_sync_mode": "overwrite"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/resources/schemas/users.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-04/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "name": {
9 | "type": "string"
10 | },
11 | "email": {
12 | "type": ["string","null"]
13 | },
14 | "created_at": {
15 | "type": "string"
16 | },
17 | "updated_at": {
18 | "type": "string"
19 | },
20 | "slack_linked?": {
21 | "type": "boolean"
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/sources/shortcut-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "iterations",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "source_defined_primary_key": [
13 | [
14 | "id"
15 | ]
16 | ],
17 | "cursor_field": [
18 | "updated_at"
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/resources/schemas/groups.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "number"
7 | },
8 | "createdAt": {
9 | "type": "string"
10 | },
11 | "description": {
12 | "type": "string"
13 | },
14 | "name": {
15 | "type": "string"
16 | },
17 | "path": {
18 | "type": "string"
19 | },
20 | "fullPath": {
21 | "type": "string"
22 | },
23 | "visibility": {
24 | "type": "string"
25 | },
26 | "webUrl": {
27 | "type": "string"
28 | }
29 | }
30 | }
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "pipelines",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "default_cursor_field": [
13 | "updatedAt"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/sources/harness-source/test_files/full_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "executions",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "default_cursor_field": [
13 | "endedAt"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "full_refresh",
22 | "destination_sync_mode": "overwrite"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/circleci-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "pipelines",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "source_defined_primary_key": [
13 | [
14 | "id"
15 | ]
16 | ],
17 | "default_cursor_field": [
18 | "updated_at"
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/test_files/full_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "works",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "default_cursor_field": [
13 | "LastModifiedDate"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "Id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "full_refresh",
22 | "destination_sync_mode": "overwrite"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "incidents",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "default_cursor_field": [
12 | "created_at"
13 | ],
14 | "source_defined_cursor": true,
15 | "source_defined_primary_key": [
16 | [
17 | "id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "works",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "default_cursor_field": [
13 | "LastModifiedDate"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "Id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/victorops-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "incidents",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "default_cursor_field": [
13 | "startTime"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "incidentNumber"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/servicenow-source/test_files/incidents.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "severity": "3",
4 | "short_description": "Unable to connect to email",
5 | "closed_at": "2016-12-14 02:46:44",
6 | "cmdb_ci": "Storage Area Network 001",
7 | "business_service": "Email",
8 | "sys_updated_on": "2016-12-14 02:46:44",
9 | "priority": "3",
10 | "sys_id": "1c741bd70b2322007518478d83673af3",
11 | "number": "INC0000060",
12 | "opened_at": "2016-12-12 15:19:57",
13 | "opened_by": "681ccaf9c0a8016400b98a06818d57c7",
14 | "resolved_at": "2016-12-13 21:43:14",
15 | "state": "7",
16 | "assigned_to": "5137153cc611227c000bbd1bd8cd2007"
17 | }
18 | ]
19 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/gitlab/group_labels.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {GitlabConverter} from '../common/gitlab';
4 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
5 |
6 | export class GroupLabels extends GitlabConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_Label'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const label = record.record.data;
14 |
15 | return [{model: 'tms_Label', record: {name: label.name}}];
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/gitlab/project_labels.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {GitlabConverter} from '../common/gitlab';
4 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
5 |
6 | export class ProjectLabels extends GitlabConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_Label'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const label = record.record.data;
14 |
15 | return [{model: 'tms_Label', record: {name: label.name}}];
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/sources/example-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "builds",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "source_defined_primary_key": [
13 | [
14 | "uid"
15 | ],
16 | [
17 | "source"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append",
23 | "cursor_field": [
24 | "updated_at"
25 | ]
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/sources/okta-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: okta-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/test_files/abnormal_state.json:
--------------------------------------------------------------------------------
1 | {
2 | "commits": {
3 | "RomanKyrnis/geekhub2019": {
4 | "cutoff": "2025-01-01T00:00:00.000Z"
5 | }
6 | },
7 | "issues": {
8 | "RomanKyrnis/geekhub2019": {
9 | "cutoff": "2025-01-01T00:00:00.000Z"
10 | }
11 | },
12 | "pipeline_steps": {
13 | "RomanKyrnis/geekhub2019": {
14 | "cutoff": "2025-01-01T00:00:00.000Z"
15 | }
16 | },
17 | "pull_request_activities": {
18 | "RomanKyrnis/geekhub2019": {
19 | "cutoff": "2025-01-01T00:00:00.000Z"
20 | }
21 | },
22 | "pull_requests": {
23 | "RomanKyrnis/geekhub2019": {
24 | "cutoff": "2025-01-01T00:00:00.000Z"
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: bamboohr-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/pipelines.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "sha": "4e8bb881bdde32ab967003895cefea8a5315cbe1",
5 | "project_id": 2,
6 | "status": "success",
7 | "created_at": "2022-04-04T07:04:36.512Z",
8 | "updated_at": "2022-04-04T07:06:54.227Z",
9 | "web_url": "https://gitlab.example.com/best-group/project2/-/pipelines/1"
10 | },
11 | {
12 | "id": 2,
13 | "sha": "e22e85f05b6ac3ffc2e32cc581b31fe5f3ac5061",
14 | "project_id": 2,
15 | "status": "success",
16 | "created_at": "2022-04-03T16:35:21.749Z",
17 | "updated_at": "2022-04-03T16:35:21.749Z",
18 | "web_url": "https://gitlab.example.com/best-group/project2/-/pipelines/2"
19 | }
20 | ]
--------------------------------------------------------------------------------
/sources/azure-repos-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: azure-repos-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/asana/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {AsanaCommon, AsanaConverter, AsanaUser} from './common';
5 |
6 | export class Users extends AsanaConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data as AsanaUser;
15 |
16 | return [AsanaCommon.tms_User(user, source)];
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/github/issue_labels.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {GitHubConverter} from './common';
5 |
6 | export class IssueLabels extends GitHubConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_Label'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const label = record.record.data;
14 | return [
15 | {
16 | model: 'tms_Label',
17 | record: {name: label.name},
18 | },
19 | ];
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/test_files/pipelines-response.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 1,
4 | "commitSha": "4e8bb881bdde32ab967003895cefea8a5315cbe1",
5 | "projectId": 2,
6 | "status": "success",
7 | "createdAt": "2022-04-04T07:04:36.512Z",
8 | "updatedAt": "2022-04-04T07:06:54.227Z",
9 | "webUrl": "https://gitlab.example.com/best-group/project2/-/pipelines/1"
10 | },
11 | {
12 | "id": 2,
13 | "commitSha": "e22e85f05b6ac3ffc2e32cc581b31fe5f3ac5061",
14 | "projectId": 2,
15 | "status": "success",
16 | "createdAt": "2022-04-03T16:35:21.749Z",
17 | "updatedAt": "2022-04-03T16:35:21.749Z",
18 | "webUrl": "https://gitlab.example.com/best-group/project2/-/pipelines/2"
19 | }
20 | ]
--------------------------------------------------------------------------------
/sources/harness-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "executions",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "default_cursor_field": [
13 | "endedAt"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append",
23 | "cursor_field": [
24 | "endedAt"
25 | ]
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/faros-airbyte-cdk/src/destinations/destination.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteConnector} from '../connector';
2 | import {
3 | AirbyteConfig,
4 | AirbyteConfiguredCatalog,
5 | AirbyteStateMessage,
6 | } from '../protocol';
7 |
8 | /**
9 | * Airbyte Destination
10 | * https://docs.airbyte.io/understanding-airbyte/airbyte-specification#destination
11 | */
12 | export abstract class AirbyteDestination extends AirbyteConnector {
13 | /**
14 | * Implement to define how the connector writes data to the destination
15 | */
16 | abstract write(
17 | config: AirbyteConfig,
18 | catalog: AirbyteConfiguredCatalog,
19 | stdin: NodeJS.ReadStream,
20 | dryRun: boolean
21 | ): AsyncGenerator;
22 | }
23 |
--------------------------------------------------------------------------------
/sources/phabricator-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | Phabricator is a REST API. This connector has the following streams:
4 |
5 | * [Commits](https://secure.phabricator.com/conduit/method/diffusion.commit.search/) \(Incremental\)
6 | * [Projects](https://secure.phabricator.com/conduit/method/project.search/) \(Incremental\)
7 | * [Repositories](https://secure.phabricator.com/conduit/method/diffusion.repository.search/) \(Incremental\)
8 | * [Revisions](https://secure.phabricator.com/conduit/method/differential.revision.search/) \(Incremental\)
9 | * [Users](https://secure.phabricator.com/conduit/method/user.search/) \(Incremental\)
10 |
11 | See [here](https://secure.phabricator.com/conduit/) for API
12 | documentation.
13 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/asana/tags.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {AsanaConverter} from './common';
5 |
6 | export class Tags extends AsanaConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_Label'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const tag = record.record.data;
14 |
15 | return [
16 | {
17 | model: 'tms_Label',
18 | record: {
19 | name: tag.name,
20 | },
21 | },
22 | ];
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/squadcast/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__squadcast__events"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__squadcast__incidents"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__squadcast__services"
18 | },
19 | "destination_sync_mode": "append"
20 | },
21 | {
22 | "stream": {
23 | "name": "mytestsource__squadcast__users"
24 | },
25 | "destination_sync_mode": "append"
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: azureactivedirectory-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 |
--------------------------------------------------------------------------------
/sources/customer-io-source/src/customer-io/typings.ts:
--------------------------------------------------------------------------------
1 | export interface CustomerIOListCampaignsResponse {
2 | campaigns: CustomerIOCampaign[];
3 | }
4 |
5 | export interface CustomerIOCampaign {
6 | id: number;
7 | updated: number;
8 | actions?: CustomerIOCampaignAction[];
9 | }
10 |
11 | export interface CustomerIOListCampaignActionsResponse {
12 | actions: CustomerIOCampaignAction[];
13 | next: string;
14 | }
15 |
16 | export interface CustomerIOCampaignAction {
17 | id: string;
18 | updated: number;
19 | }
20 |
21 | export interface CustomerIOListNewsletterResponse {
22 | newsletters: CustomerIONewsletter[];
23 | }
24 |
25 | export interface CustomerIONewsletter {
26 | id: number;
27 | updated: number;
28 | }
29 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/resources/schemas/users.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "type": {
9 | "type": "string"
10 | },
11 | "summary": {
12 | "type": "string"
13 | },
14 | "self": {
15 | "type": "string"
16 | },
17 | "html_url": {
18 | "type": "string"
19 | },
20 | "email": {
21 | "type": "string"
22 | },
23 | "name": {
24 | "type": "string"
25 | }
26 | },
27 | "required": [
28 | "id",
29 | "type",
30 | "summary",
31 | "self",
32 | "html_url",
33 | "email",
34 | "name"
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:16-alpine
2 |
3 | WORKDIR /home/node/airbyte
4 | RUN npm install -g lerna tsc
5 |
6 | COPY lerna.json .tsconfig.json package.json package-lock.json ./
7 | RUN sed -i "/jest\|mockttp/d" package.json
8 | COPY ./faros-airbyte-cdk ./faros-airbyte-cdk
9 | COPY ./sources ./sources
10 | COPY ./destinations ./destinations
11 | RUN lerna bootstrap --hoist
12 |
13 | ARG path
14 | RUN test -n "$path" || (echo "'path' argument is not set, e.g --build-arg path=destinations/airbyte-faros-destination" && false)
15 | ENV CONNECTOR_PATH $path
16 |
17 | RUN ln -s "/home/node/airbyte/$CONNECTOR_PATH/bin/main" "/home/node/airbyte/main"
18 |
19 | ENV AIRBYTE_ENTRYPOINT "/home/node/airbyte/main"
20 | ENTRYPOINT ["/home/node/airbyte/main"]
21 |
--------------------------------------------------------------------------------
/sources/customer-io-source/resources/schemas/campaign-actions.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "campaign_id": {
9 | "type": "integer"
10 | },
11 | "parent_action_id": {
12 | "type": "integer"
13 | },
14 | "deduplicate_id": {
15 | "type": "string"
16 | },
17 | "name": {
18 | "type": "string"
19 | },
20 | "created": {
21 | "type": "integer"
22 | },
23 | "updated": {
24 | "type": "integer"
25 | },
26 | "body": {
27 | "type": "string"
28 | },
29 | "type": {
30 | "type": "string"
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/resources/schemas/teams.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "type": {
9 | "type": "string"
10 | },
11 | "summary": {
12 | "type": "string"
13 | },
14 | "self": {
15 | "type": "string"
16 | },
17 | "html_url": {
18 | "type": "string"
19 | },
20 | "name": {
21 | "type": "string"
22 | },
23 | "description": {
24 | "type": "string"
25 | }
26 | },
27 | "required": [
28 | "id",
29 | "type",
30 | "summary",
31 | "self",
32 | "html_url",
33 | "name",
34 | "description"
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | PagerDuty is a REST API. This connector has the following streams:
4 |
5 | * [Incidents](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODEzOA-list-incidents) \(Incremental\)
6 | * [Incident Log Entries](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODE1NA-list-log-entries) \(Incremental\)
7 | * [Priorities](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODE2NA-list-priorities)
8 | * [Users](https://developer.pagerduty.com/api-reference/b3A6Mjc0ODIzMw-list-users)
9 | * [Teams](https://developer.pagerduty.com/api-reference/0138639504311-list-teams)
10 |
11 | See [here](https://developer.pagerduty.com/api-reference/YXBpOjI3NDgwOTk-pager-duty-api) for API
12 | documentation.
13 |
--------------------------------------------------------------------------------
/sources/servicenow-source/resources/schemas/incident.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "required": ["sys_id"],
5 | "properties": {
6 | "sys_id": {"type": "string"},
7 | "number": {"type": "string"},
8 | "short_description": {"type": "string"},
9 | "severity": {"type": "string"},
10 | "priority": {"type": "string"},
11 | "state": {"type": "string"},
12 | "assigned_to": {"type": "string"},
13 | "resolved_at": {"type": "string"},
14 | "opened_at": {"type": "string"},
15 | "closed_at": {"type": "string"},
16 | "sys_updated_on": {"type": "string"},
17 | "business_service": {"type": "string"},
18 | "cmdb_ci": {"type": "string"}
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/github/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {GitHubCommon, GitHubConverter} from './common';
5 |
6 | export class Users extends GitHubConverter {
7 | readonly destinationModels: ReadonlyArray = [
8 | 'vcs_Membership',
9 | 'vcs_User',
10 | ];
11 |
12 | async convert(
13 | record: AirbyteRecord,
14 | ctx: StreamContext
15 | ): Promise> {
16 | const source = this.streamName.source;
17 | const user = record.record.data;
18 | return GitHubCommon.vcs_User_with_Membership(user, source);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/resources/fetch-primary-keys.sql:
--------------------------------------------------------------------------------
1 | select kcu.table_name,
2 | cols.generation_expression as exp
3 | from information_schema.table_constraints tco
4 | join information_schema.key_column_usage kcu
5 | on kcu.constraint_name = tco.constraint_name
6 | and kcu.constraint_schema = tco.constraint_schema
7 | and kcu.constraint_name = tco.constraint_name
8 | join information_schema.columns cols
9 | on kcu.table_name = cols.table_name
10 | and kcu.column_name = cols.column_name
11 | where tco.constraint_type = 'PRIMARY KEY'
12 | and kcu.table_schema = 'public'
13 | and kcu.column_name = 'id'
14 | and cols.generation_expression is not null
15 | order by kcu.table_schema,
16 | kcu.table_name;
17 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/github/assignees.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {GitHubCommon, GitHubConverter} from './common';
5 |
6 | export class Assignees extends GitHubConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data;
15 | const res = GitHubCommon.tms_User(user, source);
16 |
17 | if (res) return [res];
18 | return [];
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/resources/schemas/prioritiesResource.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "type": {
9 | "type": "string"
10 | },
11 | "summary": {
12 | "type": "string"
13 | },
14 | "self": {
15 | "type": "string"
16 | },
17 | "html_url": {
18 | "type": "string"
19 | },
20 | "description": {
21 | "type": "string"
22 | },
23 | "name": {
24 | "type": "string"
25 | }
26 | },
27 | "required": [
28 | "id",
29 | "type",
30 | "summary",
31 | "self",
32 | "html_url",
33 | "description",
34 | "name"
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/github/collaborators.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {GitHubCommon, GitHubConverter} from './common';
5 |
6 | export class Collaborators extends GitHubConverter {
7 | readonly destinationModels: ReadonlyArray = [
8 | 'vcs_Membership',
9 | 'vcs_User',
10 | ];
11 |
12 | async convert(
13 | record: AirbyteRecord,
14 | ctx: StreamContext
15 | ): Promise> {
16 | const source = this.streamName.source;
17 | const user = record.record.data;
18 |
19 | return GitHubCommon.vcs_User_with_Membership(user, source);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/resources/schemas/teams.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-04/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "string"
7 | },
8 | "name": {
9 | "type": "string"
10 | },
11 | "description": {
12 | "type": [
13 | "string",
14 | "null"
15 | ]
16 | },
17 | "links": {
18 | "type": "object",
19 | "properties": {
20 | "web": {
21 | "type": "string"
22 | },
23 | "api": {
24 | "type": "string"
25 | }
26 | }
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/resources/schemas/projects.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "number"
7 | },
8 | "archived": {
9 | "type": "boolean"
10 | },
11 | "createdAt": {
12 | "type": "string"
13 | },
14 | "defaultBranch": {
15 | "type": "string"
16 | },
17 | "description": {
18 | "type": "string"
19 | },
20 | "name": {
21 | "type": "string"
22 | },
23 | "path": {
24 | "type": "string"
25 | },
26 | "pathWithNamespace": {
27 | "type": "string"
28 | },
29 | "visibility": {
30 | "type": "string"
31 | },
32 | "webUrl": {
33 | "type": "string"
34 | }
35 | }
36 | }
--------------------------------------------------------------------------------
/sources/pagerduty-source/src/streams/teams.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteLogger, AirbyteStreamBase, StreamKey} from 'faros-airbyte-cdk';
2 | import {Dictionary} from 'ts-essentials';
3 |
4 | import {Pagerduty, PagerdutyConfig, Priority} from '../pagerduty';
5 |
6 | export class Teams extends AirbyteStreamBase {
7 | constructor(readonly config: PagerdutyConfig, logger: AirbyteLogger) {
8 | super(logger);
9 | }
10 |
11 | getJsonSchema(): Dictionary {
12 | return require('../../resources/schemas/teams.json');
13 | }
14 | get primaryKey(): StreamKey {
15 | return 'id';
16 | }
17 |
18 | async *readRecords(): AsyncGenerator {
19 | const pagerduty = Pagerduty.instance(this.config, this.logger);
20 |
21 | yield* pagerduty.getTeams();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/sources/victorops-source/resources/schemas/users.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "required": [
5 | "username"
6 | ],
7 | "properties": {
8 | "firstName": {
9 | "type": "string"
10 | },
11 | "lastName": {
12 | "type": "string"
13 | },
14 | "displayName": {
15 | "type": "string"
16 | },
17 | "username": {
18 | "type": "string"
19 | },
20 | "email": {
21 | "type": "string"
22 | },
23 | "createdAt": {
24 | "type": "string"
25 | },
26 | "passwordLastUpdated": {
27 | "type": "string"
28 | },
29 | "verified": {
30 | "type": "boolean"
31 | },
32 | "_selfUrl": {
33 | "type": "string"
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/sources/victorops-source/resources/schemas/teams.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "required": [
5 | "name",
6 | "slug"
7 | ],
8 | "properties": {
9 | "name": {
10 | "type": "string"
11 | },
12 | "slug": {
13 | "type": "string"
14 | },
15 | "_selfUrl": {
16 | "type": "string"
17 | },
18 | "_membersUrl": {
19 | "type": "string"
20 | },
21 | "_policiesUrl": {
22 | "type": "string"
23 | },
24 | "_adminsUrl": {
25 | "type": "string"
26 | },
27 | "memberCount": {
28 | "type": "number"
29 | },
30 | "version": {
31 | "type": "number"
32 | },
33 | "isDefaultTeam": {
34 | "type": "boolean"
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/src/streams/index.ts:
--------------------------------------------------------------------------------
1 | import {Branches} from './branches';
2 | import {Commits} from './commits';
3 | import {Deployments} from './deployments';
4 | import {Issues} from './issues';
5 | import {PipelineSteps} from './pipeline_steps';
6 | import {Pipelines} from './pipelines';
7 | import {PullRequestActivities} from './pull_request_activities';
8 | import {PullRequests} from './pull_requests';
9 | import {Repositories} from './repositories';
10 | import {WorkspaceUsers} from './workspace_users';
11 | import {Workspaces} from './workspaces';
12 |
13 | export {
14 | Branches,
15 | Commits,
16 | Deployments,
17 | Issues,
18 | PipelineSteps,
19 | Pipelines,
20 | PullRequestActivities,
21 | PullRequests,
22 | Repositories,
23 | WorkspaceUsers,
24 | Workspaces,
25 | };
26 |
--------------------------------------------------------------------------------
/sources/docker-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "tags",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "default_cursor_field": [
12 | "imageConfig",
13 | "created"
14 | ],
15 | "source_defined_primary_key": [
16 | [
17 | "name"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/backlog-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "issues",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "source_defined_cursor": true,
12 | "source_defined_primary_key": [
13 | [
14 | "id"
15 | ]
16 | ],
17 | "cursor_field": [
18 | "updated"
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/statuspage-source/test_files/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "3",
4 | "first_name": "#3",
5 | "last_name": "testUser",
6 | "updated_at": "2021-11-11T00:00:00",
7 | "created_at": "2021-11-11T00:00:00",
8 | "email": "testUser",
9 | "organization_id": "321"
10 | },
11 | {
12 | "id": "2",
13 | "first_name": "#2",
14 | "last_name": "testUser",
15 | "updated_at": "2021-11-08T00:00:00",
16 | "created_at": "2021-11-08T00:00:00",
17 | "email": "testUser",
18 | "organization_id": "321"
19 | },
20 | {
21 | "id": "1",
22 | "first_name": "#1",
23 | "last_name": "testUser",
24 | "updated_at": "2021-11-01T00:00:00",
25 | "created_at": "2021-11-01T00:00:00",
26 | "email": "testUser",
27 | "organization_id": "321"
28 | }
29 | ]
30 |
--------------------------------------------------------------------------------
/sources/buildkite-source/resources/gql/pipelines-query.gql:
--------------------------------------------------------------------------------
1 | query pipelinesQuery($slug: ID!, $pageSize: Int!, $after: String) {
2 | organization(slug: $slug) {
3 | pipelines(first: $pageSize, after: $after){
4 | edges{
5 | node {
6 | id
7 | organization()
8 | {
9 | slug
10 | }
11 | uuid
12 | name
13 | slug
14 | url
15 | createdAt
16 | description
17 | repository {
18 | url
19 | provider {
20 | name
21 | }
22 | }
23 | }
24 | cursor
25 | }
26 | pageInfo{
27 | hasNextPage
28 | endCursor
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/sources/opsgenie-source/test_files/incremental_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "incidents",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh",
9 | "incremental"
10 | ],
11 | "default_cursor_field": [
12 | "createdAt"
13 | ],
14 | "source_defined_cursor": true,
15 | "source_defined_primary_key": [
16 | [
17 | "id"
18 | ]
19 | ]
20 | },
21 | "sync_mode": "incremental",
22 | "destination_sync_mode": "append"
23 | }
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/pipelines.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "UGlwZWxpbmUtLS01ZjBhZmM1MC04YTcxLTQyMzUtYTE0Ny00ZmY4YmU5ZTM4Njg=",
4 | "organization": {
5 | "slug": "devcube"
6 | },
7 | "uuid": "5f0afc50-8a71-4235-a147-4ff8be9e3868",
8 | "name": "Kelvin test",
9 | "slug": "kelvin-test",
10 | "url": "https://buildkite.com/devcube/kelvin-test",
11 | "createdAt": "2021-12-20T03:21:28.048Z",
12 | "description": null,
13 | "cursor":"ktkhMjAyMS0xMi0yMCAwMzoyMToyOC4wNDgxMDUwMDAgVVRD2SQ1ZjBhZmM1MC04YTcxLTQyMzUtYTE0Ny00ZmY4YmU5ZTM4Njg=",
14 | "repository": {
15 | "url": "git@github.com:huongtn/ECHTMen.git",
16 | "provider": {
17 | "name": "GitHub"
18 | }
19 | }
20 | }
21 | ]
22 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/community/types.ts:
--------------------------------------------------------------------------------
1 | import {Dictionary} from 'ts-essentials';
2 |
3 | export enum Operation {
4 | UPSERT = 'Upsert',
5 | UPDATE = 'Update',
6 | DELETION = 'Deletion',
7 | }
8 |
9 | export interface TimestampedRecord {
10 | model: string;
11 | origin: string;
12 | at: number;
13 | operation: Operation;
14 | }
15 |
16 | export interface UpsertRecord extends TimestampedRecord {
17 | operation: Operation.UPSERT;
18 | data: Dictionary;
19 | }
20 |
21 | export interface UpdateRecord extends TimestampedRecord {
22 | operation: Operation.UPDATE;
23 | where: Dictionary;
24 | mask: string[];
25 | patch: Dictionary;
26 | }
27 |
28 | export interface DeletionRecord extends TimestampedRecord {
29 | operation: Operation.DELETION;
30 | where: Dictionary;
31 | }
32 |
--------------------------------------------------------------------------------
/sources/jenkins-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | Jenkins is a REST API. This connector has the following streams:
4 |
5 | * [Builds](https://your.jenkins.url/job/$JOB_NAME/$BUILD_NUMBER/api/json?pretty=true) \(Incremental\)
6 | * [Jobs](https://your.jenkins.url/job/$JOB_NAME/api/json?pretty=true)
7 |
8 | In the above links, replace `your.jenkins.url` with the url of your Jenkins
9 | instance, and replace any environment variables with an existing Jenkins job or
10 | build id.
11 |
12 | See [https://your.jenkins.url/api](https://your.jenkins.url/api) for API
13 | documentation.
14 |
15 | ## Testing
16 |
17 | A live Jenkins Server is required to run the Source Acceptance Tests. An example
18 | of how to do this is in [our Github Actions
19 | Workflow](https://github.com/faros-ai/airbyte-connectors/blob/main/.github/workflows/ci.yml#L54).
20 |
--------------------------------------------------------------------------------
/sources/customer-io-source/resources/spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "documentationUrl": "https://docs.faros.ai",
3 | "connectionSpecification": {
4 | "$schema": "http://json-schema.org/draft-07/schema#",
5 | "title": "Customer.io Spec",
6 | "type": "object",
7 | "required": [
8 | "app_api_key",
9 | "cutoff_days"
10 | ],
11 | "additionalProperties": false,
12 | "properties": {
13 | "app_api_key": {
14 | "type": "string",
15 | "title": "App API Key",
16 | "description": "App API Key for Customer.io API authentication",
17 | "airbyte_secret": true
18 | },
19 | "cutoff_days": {
20 | "type": "integer",
21 | "title": "Cutoff Days",
22 | "default": 90,
23 | "description": "Only fetch data updated after cutoff"
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/src/streams/workspaces.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteLogger, AirbyteStreamBase, StreamKey} from 'faros-airbyte-cdk';
2 | import {Dictionary} from 'ts-essentials';
3 |
4 | import {Bitbucket} from '../bitbucket/bitbucket';
5 | import {BitbucketConfig, Workspace} from '../bitbucket/types';
6 |
7 | export class Workspaces extends AirbyteStreamBase {
8 | constructor(readonly config: BitbucketConfig, logger: AirbyteLogger) {
9 | super(logger);
10 | }
11 |
12 | getJsonSchema(): Dictionary {
13 | return require('../../resources/schemas/workspaces.json');
14 | }
15 | get primaryKey(): StreamKey {
16 | return ['uuid'];
17 | }
18 |
19 | async *readRecords(): AsyncGenerator {
20 | const bitbucket = Bitbucket.instance(this.config, this.logger);
21 |
22 | yield* bitbucket.getWorkspaces();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/sources/example-source/resources/spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "documentationUrl": "https://docs.faros.ai",
3 | "connectionSpecification": {
4 | "$schema": "http://json-schema.org/draft-07/schema#",
5 | "title": "Jenkins Spec",
6 | "type": "object",
7 | "required": [
8 | "server_url",
9 | "user",
10 | "token"
11 | ],
12 | "additionalProperties": false,
13 | "properties": {
14 | "server_url": {
15 | "type": "string",
16 | "title": "Jenkins Server URL",
17 | "examples": [
18 | "https://my-jenkins-server.example.com"
19 | ]
20 | },
21 | "user": {
22 | "type": "string",
23 | "title": "Jenkins User"
24 | },
25 | "token": {
26 | "type": "string",
27 | "title": "Jenkins Token",
28 | "airbyte_secret": true
29 | }
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/faros-airbyte-cdk/src/connector.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteConfig,
3 | AirbyteConnectionStatusMessage,
4 | AirbyteSpec,
5 | } from './protocol';
6 |
7 | export abstract class AirbyteConnector {
8 | /**
9 | * @returns the spec for this integration. The spec is a JSON-Schema object
10 | * describing the required configurations (e.g: username and password)
11 | * required to run this integration.
12 | */
13 | abstract spec(): Promise;
14 |
15 | /**
16 | * Tests if the input configuration can be used to successfully connect to the
17 | * integration e.g: if a provided Stripe API token can be used to connect to
18 | * the Stripe API.
19 | *
20 | * @returns Whether the check succeeds or fails with an error message.
21 | */
22 | abstract check(
23 | config: AirbyteConfig
24 | ): Promise;
25 | }
26 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/bamboohr/common.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {Converter, StreamContext} from '../converter';
4 |
5 | export interface BambooHRConfig {
6 | bootstrap_teams_from_managers?: boolean;
7 | }
8 |
9 | /** BambooHR converter base */
10 | export abstract class BambooHRConverter extends Converter {
11 | source = 'BambooHR';
12 | /** Almost every BambooHR record have id property */
13 | id(record: AirbyteRecord): any {
14 | return record?.record?.data?.id;
15 | }
16 |
17 | protected bamboohrConfig(ctx: StreamContext): BambooHRConfig {
18 | return ctx.config.source_specific_configs?.bamboohr ?? {};
19 | }
20 |
21 | protected bootstrapTeamsFromManagers(ctx: StreamContext): boolean {
22 | return this.bamboohrConfig(ctx).bootstrap_teams_from_managers ?? false;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/pagerduty/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {PagerDutyConverter} from './common';
5 |
6 | export class Users extends PagerDutyConverter {
7 | readonly destinationModels: ReadonlyArray = ['ims_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data;
15 |
16 | return [
17 | {
18 | model: 'ims_User',
19 | record: {
20 | uid: user.id,
21 | email: user.email,
22 | name: user.name,
23 | source,
24 | },
25 | },
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/sources/circleci-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | Customer.io is a REST API. This connector has the following streams:
4 |
5 | * [Campaigns](https://customer.io/docs/api/#operation/listCampaigns) \(Incremental\)
6 | * [Campaign Actions](https://customer.io/docs/api/#operation/listCampaignActions) \(Incremental\)
7 | * [Newsletters](https://customer.io/docs/api/#operation/listNewsletters) \(Incremental\)
8 |
9 | See [here](https://customer.io/docs/api/) for API documentation. Note that the
10 | API is divided into three different API hosts: Track, App, and Beta. These hosts
11 | provide access to different components of Customer.io, and each host has its own
12 | request limits and authentication methods. The current connector streams all use
13 | the [Beta API](https://customer.io/docs/api/#tag/betaOverview). In the future,
14 | additional streams may use the other API hosts.
15 |
--------------------------------------------------------------------------------
/sources/circleci-source/resources/schemas/projects.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema#",
3 | "type": "object",
4 | "properties": {
5 | "slug": {
6 | "type": "string"
7 | },
8 | "organization_name": {
9 | "type": "string"
10 | },
11 | "organization_id": {
12 | "type": "string"
13 | },
14 | "name": {
15 | "type": "string"
16 | },
17 | "id": {
18 | "type": "string"
19 | },
20 | "organization_slug": {
21 | "type": "string"
22 | },
23 | "vcs_info": {
24 | "type": "object",
25 | "properties": {
26 | "vcs_url": {
27 | "type": "string"
28 | },
29 | "default_branch": {
30 | "type": "string"
31 | },
32 | "provider": {
33 | "type": "string"
34 | }
35 | }
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/servicenow/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {ServiceNowConverter} from './common';
5 |
6 | export class Users extends ServiceNowConverter {
7 | readonly destinationModels: ReadonlyArray = ['ims_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data;
15 |
16 | return [
17 | {
18 | model: 'ims_User',
19 | record: {
20 | uid: user.sys_id,
21 | email: user.email,
22 | name: user.name,
23 | source,
24 | },
25 | },
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/shortcut/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__shortcut__projects"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__shortcut__iterations"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__shortcut__epics"
18 | },
19 | "destination_sync_mode": "append"
20 | },
21 | {
22 | "stream": {
23 | "name": "mytestsource__shortcut__stories"
24 | },
25 | "destination_sync_mode": "append"
26 | },
27 | {
28 | "stream": {
29 | "name": "mytestsource__shortcut__members"
30 | },
31 | "destination_sync_mode": "append"
32 | }
33 | ]
34 | }
--------------------------------------------------------------------------------
/sources/customer-io-source/bootstrap.md:
--------------------------------------------------------------------------------
1 | ## Streams
2 |
3 | Customer.io is a REST API. This connector has the following streams:
4 |
5 | * [Campaigns](https://customer.io/docs/api/#operation/listCampaigns) \(Incremental\)
6 | * [Campaign Actions](https://customer.io/docs/api/#operation/listCampaignActions) \(Incremental\)
7 | * [Newsletters](https://customer.io/docs/api/#operation/listNewsletters) \(Incremental\)
8 |
9 | See [here](https://customer.io/docs/api/) for API documentation. Note that the
10 | API is divided into three different API hosts: Track, App, and Beta. These hosts
11 | provide access to different components of Customer.io, and each host has its own
12 | request limits and authentication methods. The current connector streams all use
13 | the [Beta API](https://customer.io/docs/api/#tag/betaOverview). In the future,
14 | additional streams may use the other API hosts.
15 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/gitlab-ci/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__gitlab-ci__groups"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__gitlab-ci__projects"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__gitlab-ci__pipelines"
18 | },
19 | "destination_sync_mode": "append"
20 | },
21 | {
22 | "stream": {
23 | "name": "mytestsource__gitlab-ci__jobs"
24 | },
25 | "destination_sync_mode": "append"
26 | },
27 | {
28 | "stream": {
29 | "name": "mytestsource__gitlab-ci__something_else"
30 | },
31 | "destination_sync_mode": "append"
32 | }
33 | ]
34 | }
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/datadog/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {DatadogConverter} from './common';
5 |
6 | export class Users extends DatadogConverter {
7 | readonly destinationModels: ReadonlyArray = ['ims_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data;
15 |
16 | return [
17 | {
18 | model: 'ims_User',
19 | record: {
20 | uid: user?.id,
21 | email: user?.attributes?.email,
22 | name: user?.attributes?.name,
23 | source,
24 | },
25 | },
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/statuspage/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {StatuspageConverter} from './common';
5 |
6 | export class Users extends StatuspageConverter {
7 | readonly destinationModels: ReadonlyArray = ['ims_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data;
15 |
16 | return [
17 | {
18 | model: 'ims_User',
19 | record: {
20 | uid: user.id,
21 | email: user.email,
22 | name: `${user.first_name} ${user.last_name}`,
23 | source,
24 | },
25 | },
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/phabricator/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__phabricator__repositories"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__phabricator__commits"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__phabricator__revisions"
18 | },
19 | "destination_sync_mode": "append"
20 | },
21 | {
22 | "stream": {
23 | "name": "mytestsource__phabricator__users"
24 | },
25 | "destination_sync_mode": "append"
26 | },
27 | {
28 | "stream": {
29 | "name": "mytestsource__phabricator__projects"
30 | },
31 | "destination_sync_mode": "append"
32 | }
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/src/models.ts:
--------------------------------------------------------------------------------
1 | export interface User {
2 | id: number;
3 | employeeId: number;
4 | employeeNumber: string;
5 | jobTitle: string;
6 | status: string;
7 | employmentHistoryStatus: string;
8 | fullName1: string;
9 | address1?: string;
10 | address2?: string;
11 | birthday?: string;
12 | bestEmail: string;
13 | workEmail: string;
14 | workPhone?: string;
15 | city?: string;
16 | country?: string;
17 | department?: string;
18 | ethnicity?: string;
19 | firstName?: string;
20 | gender?: string;
21 | middleName?: string;
22 | mobilePhone?: string;
23 | zipcode?: string;
24 | supervisor?: string;
25 | // managerId
26 | supervisorId?: string;
27 | supervisorEId?: string;
28 | supervisorEmail?: string;
29 | payRate?: string;
30 | payFrequency?: string;
31 | hireDate?: string;
32 | terminationDate?: string;
33 | lastName?: string;
34 | }
35 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/firehydrant/teams.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {FireHydrantConverter} from './common';
5 | import {Team} from './models';
6 |
7 | export class Teams extends FireHydrantConverter {
8 | readonly destinationModels: ReadonlyArray = ['ims_Team'];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | const source = this.streamName.source;
15 | const team = record.record.data as Team;
16 |
17 | return [
18 | {
19 | model: 'ims_Team',
20 | record: {
21 | uid: team.id,
22 | name: team.name,
23 | url: undefined,
24 | source,
25 | },
26 | },
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/opsgenie/teams.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {OpsGenieConverter} from './common';
5 | import {Team} from './models';
6 |
7 | export class Teams extends OpsGenieConverter {
8 | readonly destinationModels: ReadonlyArray = ['ims_Team'];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | const source = this.streamName.source;
15 | const team = record.record.data as Team;
16 |
17 | return [
18 | {
19 | model: 'ims_Team',
20 | record: {
21 | uid: team.id,
22 | name: team.name,
23 | url: team.links.web,
24 | source,
25 | },
26 | },
27 | ];
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/pagerduty/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__pagerduty__incident_log_entries"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__pagerduty__incidents"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__pagerduty__priorities_resource"
18 | },
19 | "destination_sync_mode": "append"
20 | },
21 | {
22 | "stream": {
23 | "name": "mytestsource__pagerduty__users"
24 | },
25 | "destination_sync_mode": "append"
26 | },
27 | {
28 | "stream": {
29 | "name": "mytestsource__pagerduty__something_else"
30 | },
31 | "destination_sync_mode": "append"
32 | }
33 | ]
34 | }
35 |
--------------------------------------------------------------------------------
/sources/victorops-source/src/streams/teams.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Team, Victorops, VictoropsConfig} from '../victorops';
10 |
11 | export class Teams extends AirbyteStreamBase {
12 | constructor(readonly config: VictoropsConfig, logger: AirbyteLogger) {
13 | super(logger);
14 | }
15 |
16 | getJsonSchema(): Dictionary {
17 | return require('../../resources/schemas/teams.json');
18 | }
19 | get primaryKey(): StreamKey {
20 | return 'slug';
21 | }
22 |
23 | async *readRecords(
24 | syncMode: SyncMode,
25 | cursorField?: string[],
26 | streamSlice?: Team,
27 | streamState?: Dictionary
28 | ): AsyncGenerator {
29 | yield* Victorops.instance(this.config, this.logger).getTeams();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/backlog/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {BacklogConverter} from './common';
5 | import {User} from './models';
6 |
7 | export class Users extends BacklogConverter {
8 | readonly destinationModels: ReadonlyArray = ['tms_User'];
9 |
10 | async convert(
11 | record: AirbyteRecord,
12 | ctx: StreamContext
13 | ): Promise> {
14 | const source = this.streamName.source;
15 | const user = record.record.data as User;
16 | return [
17 | {
18 | model: 'tms_User',
19 | record: {
20 | uid: String(user.id),
21 | name: user.name,
22 | emailAddress: user.mailAddress,
23 | source,
24 | },
25 | },
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/sources/victorops-source/src/streams/users.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {User, Victorops, VictoropsConfig, VictoropsState} from '../victorops';
10 |
11 | export class Users extends AirbyteStreamBase {
12 | constructor(readonly config: VictoropsConfig, logger: AirbyteLogger) {
13 | super(logger);
14 | }
15 |
16 | getJsonSchema(): Dictionary {
17 | return require('../../resources/schemas/users.json');
18 | }
19 | get primaryKey(): StreamKey {
20 | return 'username';
21 | }
22 |
23 | async *readRecords(
24 | syncMode: SyncMode,
25 | cursorField?: string[],
26 | streamSlice?: User,
27 | streamState?: VictoropsState
28 | ): AsyncGenerator {
29 | yield* Victorops.instance(this.config, this.logger).getUsers();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/sources/squadcast-source/test_files/services.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "619cb17408e88c8a8acdf395",
4 | "name": "Example Service",
5 | "slug": "example-service",
6 | "email": "452959c568f99df7042d1a9a2ab8446d76f00847@devcube.incidents.squadcast.com",
7 | "escalation_policy_id": "619cb17408e88c8a8acdf394",
8 | "organization_id": "619cb174c80d2600080df0d7",
9 | "api_key": "452959c568f99df7042d1a9a2ab8446d76f00847",
10 | "description": "On-Boarding Example Service",
11 | "depends": null,
12 | "owner": {
13 | "id": "619cb17408e88c8a8acdf393",
14 | "type": "team"
15 | },
16 | "access_control": null,
17 | "on_maintenance": false,
18 | "escalation_policy": {
19 | "id": "619cb17408e88c8a8acdf394",
20 | "name": "Example Escalation Policy",
21 | "description": "On-Boarding Example Escalation Policy",
22 | "slug": "example-escalation-policy"
23 | }
24 | }
25 | ]
26 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/destination-runner.ts:
--------------------------------------------------------------------------------
1 | import {Command} from 'commander';
2 | import {AirbyteDestinationRunner, AirbyteLogger} from 'faros-airbyte-cdk';
3 |
4 | import {Converter} from './converters/converter';
5 | import {ConverterRegistry} from './converters/converter-registry';
6 | import {FarosDestination} from './destination';
7 |
8 | /** Faros destination runner. */
9 | export class FarosDestinationRunner extends AirbyteDestinationRunner {
10 | readonly program: Command;
11 |
12 | constructor() {
13 | const logger = new AirbyteLogger();
14 | const destination = new FarosDestination(logger);
15 | super(logger, destination);
16 | this.program = super.mainCommand();
17 | }
18 |
19 | /**
20 | * Register converters for custom streams
21 | */
22 | registerConverters(...converters: ReadonlyArray): void {
23 | converters.forEach(ConverterRegistry.addConverter);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/sources/buildkite-source/test_files/pipelines_input.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "node": {
4 | "id": "UGlwZWxpbmUtLS01ZjBhZmM1MC04YTcxLTQyMzUtYTE0Ny00ZmY4YmU5ZTM4Njg=",
5 | "organization": {
6 | "slug": "devcube"
7 | },
8 | "uuid": "5f0afc50-8a71-4235-a147-4ff8be9e3868",
9 | "name": "Kelvin test",
10 | "slug": "kelvin-test",
11 | "url": "https://buildkite.com/devcube/kelvin-test",
12 | "createdAt": "2021-12-20T03:21:28.048Z",
13 | "description": null,
14 | "cursor":"ktkhMjAyMS0xMi0yMCAwMzoyMToyOC4wNDgxMDUwMDAgVVRD2SQ1ZjBhZmM1MC04YTcxLTQyMzUtYTE0Ny00ZmY4YmU5ZTM4Njg=",
15 | "repository": {
16 | "url": "git@github.com:huongtn/ECHTMen.git",
17 | "provider": {
18 | "name": "GitHub"
19 | }
20 | }
21 | }
22 | }
23 | ]
24 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/shortcut/members.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {ShortcutConverter} from './common';
5 | import {Member} from './models';
6 | export class Members extends ShortcutConverter {
7 | readonly destinationModels: ReadonlyArray = ['tms_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data as Member;
15 | return [
16 | {
17 | model: 'tms_User',
18 | record: {
19 | uid: String(user.id),
20 | name: user.profile.name,
21 | emailAddress: user.profile.email_address,
22 | source,
23 | },
24 | },
25 | ];
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/sources/backlog-source/resources/schemas/users.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-04/schema#",
3 | "type": "object",
4 | "properties": {
5 | "id": {
6 | "type": "number"
7 | },
8 | "userId": {
9 | "type": "string"
10 | },
11 | "name": {
12 | "type": "string"
13 | },
14 | "roleType": {
15 | "type": "number"
16 | },
17 | "lang": {
18 | "type": ["string","null"]
19 | },
20 | "mailAddress": {
21 | "type": "string"
22 | },
23 | "nulabAccount": {
24 | "type": ["object","null"],
25 | "properties": {
26 | "nulabId": {
27 | "type": ["string","null"]
28 | },
29 | "name": {
30 | "type": ["string","null"]
31 | },
32 | "uniqueId": {
33 | "type": ["string","null"]
34 | }
35 | }
36 | },
37 | "keyword": {
38 | "type": "string"
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/bamboohr/models.ts:
--------------------------------------------------------------------------------
1 | export interface User {
2 | id: string;
3 | employeeNumber: string;
4 | jobTitle: string;
5 | status: string;
6 | employmentHistoryStatus: string;
7 | fullName1: string;
8 | address1?: string;
9 | address2?: string;
10 | birthday?: string;
11 | bestEmail: string;
12 | workEmail: string;
13 | workPhone?: string;
14 | city?: string;
15 | state?: string;
16 | stateCode?: string;
17 | country?: string;
18 | department?: string;
19 | ethnicity?: string;
20 | firstName?: string;
21 | gender?: string;
22 | middleName?: string;
23 | mobilePhone?: string;
24 | zipcode?: string;
25 | supervisor?: string;
26 | // managerId
27 | supervisorId?: string;
28 | supervisorEId?: string;
29 | supervisorEmail?: string;
30 | payRate?: string;
31 | payFrequency?: string;
32 | hireDate?: string;
33 | terminationDate?: string;
34 | lastName?: string;
35 | }
36 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/squadcast/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {SquadcastConverter, User} from './common';
5 |
6 | export class Users extends SquadcastConverter {
7 | readonly destinationModels: ReadonlyArray = ['ims_User'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const user = record.record.data as User;
15 |
16 | const username = `${user.first_name} ${user.last_name}`;
17 |
18 | return [
19 | {
20 | model: 'ims_User',
21 | record: {
22 | uid: user.id,
23 | email: user.email,
24 | name: username,
25 | source,
26 | },
27 | },
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/jira/board_issues.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {JiraConverter} from './common';
5 |
6 | export class BoardIssues extends JiraConverter {
7 | readonly destinationModels: ReadonlyArray = [
8 | 'tms_TaskBoardRelationship',
9 | ];
10 |
11 | async convert(
12 | record: AirbyteRecord,
13 | ctx: StreamContext
14 | ): Promise> {
15 | if (!this.useBoardOwnership(ctx)) return [];
16 | const issue = record.record.data;
17 | const source = this.streamName.source;
18 | return [
19 | {
20 | model: 'tms_TaskBoardRelationship',
21 | record: {
22 | task: {uid: issue.key, source},
23 | board: {uid: String(issue.boardId), source},
24 | },
25 | },
26 | ];
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/okta_faros/users.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {Users as OktaUsers} from '../okta/users';
5 | import {OktaFarosConverter} from './common';
6 |
7 | /**
8 | * This converter is identical to OktaUsers for Okta community source.
9 | * It is here to support the Okta source we developed at Faros.
10 | */
11 | export class Users extends OktaFarosConverter {
12 | private alias = new OktaUsers();
13 |
14 | readonly destinationModels: ReadonlyArray =
15 | this.alias.destinationModels;
16 |
17 | id(record: AirbyteRecord): any {
18 | return this.alias.id(record);
19 | }
20 |
21 | async convert(
22 | record: AirbyteRecord,
23 | ctx: StreamContext
24 | ): Promise> {
25 | return this.alias.convert(record, ctx);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/sources/shortcut-source/test_files/members.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "role": "owner",
4 | "entity_type": "member",
5 | "disabled": false,
6 | "state": "full",
7 | "updated_at": "2021-12-07T14:09:40Z",
8 | "created_without_invite": false,
9 | "group_ids": [
10 | "61af6b25-a7f5-46c4-8803-13ab5ff5cd32"
11 | ],
12 | "id": "61af6b25-0b86-4afa-adf1-c3ea4ba0982c",
13 | "profile": {
14 | "entity_type": "profile",
15 | "deactivated": false,
16 | "two_factor_auth_activated": false,
17 | "mention_name": "kelvintran",
18 | "name": "Kelvin Tran",
19 | "gravatar_hash": "f98c99e3cd53ece58face0377bc238f0",
20 | "id": "61af6b25-8f22-42d9-85ba-8d4220f86f97",
21 | "display_icon": null,
22 | "email_address": "huongkstn@gmail.com"
23 | },
24 | "created_at": "2021-12-07T14:09:40Z"
25 | }
26 | ]
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/okta_faros/groups.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {Groups as OktaGroups} from '../okta/groups';
5 | import {OktaFarosConverter} from './common';
6 |
7 | /**
8 | * This converter is identical to OktaGroups for Okta community source.
9 | * It is here to support the Okta source we developed at Faros.
10 | */
11 | export class Groups extends OktaFarosConverter {
12 | private alias = new OktaGroups();
13 |
14 | readonly destinationModels: ReadonlyArray =
15 | this.alias.destinationModels;
16 |
17 | id(record: AirbyteRecord): any {
18 | return this.alias.id(record);
19 | }
20 |
21 | async convert(
22 | record: AirbyteRecord,
23 | ctx: StreamContext
24 | ): Promise> {
25 | return this.alias.convert(record, ctx);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/victorops/teams.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {VictorOpsConverter} from './common';
5 |
6 | export class Teams extends VictorOpsConverter {
7 | readonly destinationModels: ReadonlyArray = ['ims_Team'];
8 |
9 | id(record: AirbyteRecord): any {
10 | return record?.record?.data?.slug;
11 | }
12 |
13 | async convert(
14 | record: AirbyteRecord,
15 | ctx: StreamContext
16 | ): Promise> {
17 | const source = this.streamName.source;
18 | const team = record.record.data;
19 |
20 | return [
21 | {
22 | model: 'ims_Team',
23 | record: {
24 | uid: team.slug,
25 | name: team.name,
26 | url: team._selfUrl,
27 | source,
28 | },
29 | },
30 | ];
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/sources/backlog-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: backlog-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | issues: ["lastUpdatedAt"]
25 |
--------------------------------------------------------------------------------
/sources/docker-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: docker-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | tags: [ "lastCreatedAt" ]
25 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: gitlab-ci-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | pipelines: [ "cutoff" ]
25 |
--------------------------------------------------------------------------------
/sources/victorops-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: victorops-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | incidents: [ "cutoff" ]
25 |
--------------------------------------------------------------------------------
/sources/buildkite-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: buildkite-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | builds: ["lastCreatedAt"]
25 |
--------------------------------------------------------------------------------
/sources/circleci-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: circleci-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | pipelines: [ "lastUpdatedAt" ]
25 |
--------------------------------------------------------------------------------
/sources/harness-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: harness-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | executions: [ "lastEndedAt" ]
25 |
--------------------------------------------------------------------------------
/sources/shortcut-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: shortcut-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | iterations: ["lastUpdatedAt"]
25 |
--------------------------------------------------------------------------------
/sources/agileaccelerator-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: agileaccelerator-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | works: [ "cutoff" ]
25 |
--------------------------------------------------------------------------------
/sources/backlog-source/test_files/users.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": 319076,
4 | "userId": "64kfUlnZKJ",
5 | "name": "Hướng Trần Ngọc",
6 | "roleType": 1,
7 | "lang": "en",
8 | "mailAddress": "huongkstn@gmail.com",
9 | "nulabAccount": {
10 | "nulabId": "vgoiBUrAEkKt99RytjfQb968FlrBblq9SBuxbdIC5Fdezsv5t3",
11 | "name": "Hướng Trần Ngọc",
12 | "uniqueId": "huongkstn"
13 | },
14 | "keyword": "Hướng Trần Ngọc Hướng Trần Ngọc"
15 | },
16 | {
17 | "id": 319270,
18 | "userId": "*EwHbgb48dL",
19 | "name": "yenhh8",
20 | "roleType": 2,
21 | "lang": null,
22 | "mailAddress": "yenhh8@gmail.com",
23 | "nulabAccount": {
24 | "nulabId": "xaQqGyCdHzChG15NfoXMH9cI1TDZfnLonhD2aIib8PiKBuLAvB",
25 | "name": null,
26 | "uniqueId": null
27 | },
28 | "keyword": "yenhh8 yenhh8"
29 | }
30 | ]
31 |
--------------------------------------------------------------------------------
/sources/firehydrant-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: firehydrant-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | incidents: ["lastCreatedAt"]
25 |
--------------------------------------------------------------------------------
/sources/squadcast-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: squadcast-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | incidents: [ "lastUpdatedAt" ]
25 |
--------------------------------------------------------------------------------
/sources/example-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: example-source
2 | tests:
3 | spec:
4 | - config_path: "test_files/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "test_files/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "test_files/config.json"
13 | basic_read:
14 | - config_path: "test_files/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "test_files/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "test_files/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | builds: [ "cutoff" ]
25 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/github/projects.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {GitHubCommon, GitHubConverter} from './common';
5 |
6 | export class Projects extends GitHubConverter {
7 | readonly destinationModels: ReadonlyArray = [
8 | 'tms_Project',
9 | 'tms_TaskBoard',
10 | 'tms_TaskBoardProjectRelationship',
11 | ];
12 |
13 | async convert(
14 | record: AirbyteRecord,
15 | ctx: StreamContext
16 | ): Promise> {
17 | const source = this.streamName.source;
18 | const project = record.record.data;
19 |
20 | const res = GitHubCommon.tms_ProjectBoard_with_TaskBoard(
21 | {uid: `${project.id}`, source},
22 | project.name,
23 | project.body,
24 | project.created_at,
25 | project.updated_at
26 | );
27 |
28 | return res;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/sources/azureactivedirectory-source/test_files/full_configured_catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "users",
6 | "json_schema": {},
7 | "supported_sync_modes": [
8 | "full_refresh"
9 | ],
10 | "source_defined_cursor": true,
11 | "source_defined_primary_key": [
12 | [
13 | "uid"
14 | ]
15 | ]
16 | },
17 | "sync_mode": "full_refresh",
18 | "destination_sync_mode": "overwrite"
19 | },
20 | {
21 | "stream": {
22 | "name": "groups",
23 | "json_schema": {},
24 | "supported_sync_modes": [
25 | "full_refresh"
26 | ],
27 | "source_defined_cursor": true,
28 | "source_defined_primary_key": [
29 | [
30 | "uid"
31 | ]
32 | ]
33 | },
34 | "sync_mode": "full_refresh",
35 | "destination_sync_mode": "overwrite"
36 | }
37 | ]
38 | }
39 |
--------------------------------------------------------------------------------
/sources/phabricator-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: phabricator-source
2 | tests:
3 | spec:
4 | - config_path: "test_files/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "test_files/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "test_files/config.json"
13 | basic_read:
14 | - config_path: "test_files/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "test_files/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "test_files/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | builds: [ "cutoff" ]
25 |
--------------------------------------------------------------------------------
/sources/shortcut-source/src/streams/members.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Member, Shortcut, ShortcutConfig} from '../shortcut';
10 | export class Members extends AirbyteStreamBase {
11 | constructor(
12 | private readonly config: ShortcutConfig,
13 | protected readonly logger: AirbyteLogger
14 | ) {
15 | super(logger);
16 | }
17 | getJsonSchema(): Dictionary {
18 | return require('../../resources/schemas/members.json');
19 | }
20 | get primaryKey(): StreamKey {
21 | return ['id'];
22 | }
23 | async *readRecords(
24 | syncMode: SyncMode,
25 | cursorField?: string[],
26 | streamSlice?: Dictionary,
27 | streamState?: Dictionary
28 | ): AsyncGenerator {
29 | const shortcut = await Shortcut.instance(this.config);
30 | yield* shortcut.getMembers();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/sources/shortcut-source/src/streams/projects.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Project, Shortcut, ShortcutConfig} from '../shortcut';
10 | export class Projects extends AirbyteStreamBase {
11 | constructor(
12 | private readonly config: ShortcutConfig,
13 | protected readonly logger: AirbyteLogger
14 | ) {
15 | super(logger);
16 | }
17 | getJsonSchema(): Dictionary {
18 | return require('../../resources/schemas/projects.json');
19 | }
20 | get primaryKey(): StreamKey {
21 | return ['id'];
22 | }
23 | async *readRecords(
24 | syncMode: SyncMode,
25 | cursorField?: string[],
26 | streamSlice?: Dictionary,
27 | streamState?: Dictionary
28 | ): AsyncGenerator {
29 | const shortcut = await Shortcut.instance(this.config);
30 | yield* shortcut.getProjects();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/sources/bamboohr-source/src/streams/users.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {BambooHR, BambooHRConfig} from '../bamboohr';
10 | import {User} from '../models';
11 |
12 | export class Users extends AirbyteStreamBase {
13 | constructor(
14 | private readonly config: BambooHRConfig,
15 | protected readonly logger: AirbyteLogger
16 | ) {
17 | super(logger);
18 | }
19 |
20 | getJsonSchema(): Dictionary {
21 | return require('../../resources/schemas/users.json');
22 | }
23 | get primaryKey(): StreamKey {
24 | return 'id';
25 | }
26 |
27 | async *readRecords(
28 | syncMode: SyncMode,
29 | cursorField?: string[],
30 | streamSlice?: Dictionary
31 | ): AsyncGenerator {
32 | const bambooHR = await BambooHR.instance(this.config, this.logger);
33 | yield* bambooHR.getUsers();
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/sources/bitbucket-source/resources/schemas/workspaces.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json-schema.org/draft-07/schema",
3 | "type": "object",
4 | "properties": {
5 | "uuid": {
6 | "type": "string",
7 | "format": "uuid"
8 | },
9 | "links": {
10 | "type": "object",
11 | "properties": {
12 | "ownersUrl": {
13 | "type": "string",
14 | "format": "uri"
15 | },
16 | "repositoriesUrl": {
17 | "type": "string",
18 | "format": "uri"
19 | },
20 | "htmlUrl": {
21 | "type": "string",
22 | "format": "uri"
23 | }
24 | }
25 | },
26 | "createdOn": {
27 | "type": "string",
28 | "format": "date-time"
29 | },
30 | "type": {
31 | "type": "string"
32 | },
33 | "slug": {
34 | "type": "string"
35 | },
36 | "isPrivate": {
37 | "type": "boolean"
38 | },
39 | "name": {
40 | "type": "string"
41 | }
42 | }
43 | }
--------------------------------------------------------------------------------
/sources/jenkins-source/test_files/jobs.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "_class": "hudson.model.FreeStyleProject",
4 | "fullName": "Faros-test-job",
5 | "name": "Faros-test-job",
6 | "url": "http://localhost:8080/job/Faros-test-job",
7 | "allBuilds": [
8 | {
9 | "building": false,
10 | "id": "3",
11 | "number": 3,
12 | "url": "http://localhost:8080/job/Faros-test-job/3",
13 | "fullDisplayName": "Faros-test-job #3"
14 | },
15 | {
16 | "building": false,
17 | "id": "2",
18 | "number": 2,
19 | "url": "http://localhost:8080/job/Faros-test-job/2",
20 | "fullDisplayName": "Faros-test-job #2"
21 | },
22 | {
23 | "building": false,
24 | "id": "1",
25 | "number": 1,
26 | "url": "http://localhost:8080/job/Faros-test-job/1",
27 | "fullDisplayName": "Faros-test-job #1"
28 | }
29 | ],
30 | "lastCompletedBuild": {
31 | "number": 3
32 | }
33 | }
34 | ]
35 |
--------------------------------------------------------------------------------
/sources/shortcut-source/src/streams/stories.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {ExtendStory, Shortcut, ShortcutConfig} from '../shortcut';
10 |
11 | export class Stories extends AirbyteStreamBase {
12 | constructor(
13 | private readonly config: ShortcutConfig,
14 | protected readonly logger: AirbyteLogger
15 | ) {
16 | super(logger);
17 | }
18 | getJsonSchema(): Dictionary {
19 | return require('../../resources/schemas/stories.json');
20 | }
21 | get primaryKey(): StreamKey {
22 | return ['id'];
23 | }
24 | async *readRecords(
25 | syncMode: SyncMode,
26 | cursorField?: string[],
27 | streamSlice?: Dictionary,
28 | streamState?: Dictionary
29 | ): AsyncGenerator {
30 | const shortcut = await Shortcut.instance(this.config);
31 | yield* shortcut.getStories();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/sources/azure-repos-source/src/streams/users.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {AzureRepo, AzureRepoConfig} from '../azure-repos';
10 | import {User} from '../models';
11 |
12 | export class Users extends AirbyteStreamBase {
13 | constructor(
14 | private readonly config: AzureRepoConfig,
15 | protected readonly logger: AirbyteLogger
16 | ) {
17 | super(logger);
18 | }
19 |
20 | getJsonSchema(): Dictionary {
21 | return require('../../resources/schemas/users.json');
22 | }
23 | get primaryKey(): StreamKey {
24 | return 'principalName';
25 | }
26 |
27 | async *readRecords(
28 | syncMode: SyncMode,
29 | cursorField?: string[],
30 | streamSlice?: Dictionary
31 | ): AsyncGenerator {
32 | const azureRepo = await AzureRepo.instance(this.config);
33 | yield* azureRepo.getUsers();
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/sources/backlog-source/src/streams/users.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Backlog, BacklogConfig} from '../backlog';
10 | import {User} from '../models';
11 |
12 | export class Users extends AirbyteStreamBase {
13 | constructor(
14 | private readonly config: BacklogConfig,
15 | protected readonly logger: AirbyteLogger
16 | ) {
17 | super(logger);
18 | }
19 |
20 | getJsonSchema(): Dictionary {
21 | return require('../../resources/schemas/users.json');
22 | }
23 |
24 | get primaryKey(): StreamKey {
25 | return 'id';
26 | }
27 |
28 | async *readRecords(
29 | syncMode: SyncMode,
30 | cursorField?: string[],
31 | streamSlice?: Dictionary
32 | ): AsyncGenerator {
33 | const backlog = await Backlog.instance(this.config, this.logger);
34 | yield* backlog.getUsers();
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/sources/pagerduty-source/src/streams/prioritiesResource.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Pagerduty, PagerdutyConfig, Priority} from '../pagerduty';
10 |
11 | export class PrioritiesResource extends AirbyteStreamBase {
12 | constructor(readonly config: PagerdutyConfig, logger: AirbyteLogger) {
13 | super(logger);
14 | }
15 |
16 | getJsonSchema(): Dictionary {
17 | return require('../../resources/schemas/prioritiesResource.json');
18 | }
19 | get primaryKey(): StreamKey {
20 | return 'id';
21 | }
22 |
23 | async *readRecords(
24 | syncMode: SyncMode,
25 | cursorField?: string[],
26 | streamSlice?: Priority,
27 | streamState?: Dictionary
28 | ): AsyncGenerator {
29 | const pagerduty = Pagerduty.instance(this.config, this.logger);
30 |
31 | yield* pagerduty.getPrioritiesResource();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/buildkite/organizations.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {BuildkiteConverter, Organization} from './common';
5 |
6 | export class Organizations extends BuildkiteConverter {
7 | readonly destinationModels: ReadonlyArray = [
8 | 'cicd_Organization',
9 | ];
10 |
11 | async convert(
12 | record: AirbyteRecord,
13 | ctx: StreamContext
14 | ): Promise> {
15 | const source = this.streamName.source;
16 | const organization = record.record.data as Organization;
17 | return [
18 | {
19 | model: 'cicd_Organization',
20 | record: {
21 | uid: organization.slug,
22 | name: organization.name,
23 | slug: organization.slug,
24 | url: organization.web_url,
25 | source,
26 | },
27 | },
28 | ];
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/test/resources/asana/catalog.json:
--------------------------------------------------------------------------------
1 | {
2 | "streams": [
3 | {
4 | "stream": {
5 | "name": "mytestsource__asana__users"
6 | },
7 | "destination_sync_mode": "append"
8 | },
9 | {
10 | "stream": {
11 | "name": "mytestsource__asana__projects"
12 | },
13 | "destination_sync_mode": "append"
14 | },
15 | {
16 | "stream": {
17 | "name": "mytestsource__asana__sections"
18 | },
19 | "destination_sync_mode": "append"
20 | },
21 | {
22 | "stream": {
23 | "name": "mytestsource__asana__tasks"
24 | },
25 | "destination_sync_mode": "append"
26 | },
27 | {
28 | "stream": {
29 | "name": "mytestsource__asana__stories"
30 | },
31 | "destination_sync_mode": "append"
32 | },
33 | {
34 | "stream": {
35 | "name": "mytestsource__asana__something_else"
36 | },
37 | "destination_sync_mode": "append"
38 | }
39 | ]
40 | }
41 |
--------------------------------------------------------------------------------
/sources/statuspage-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: statuspage-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | incidents: [ "cutoff" ]
25 | incident_updates: [ "cutoff" ]
26 |
--------------------------------------------------------------------------------
/sources/azurepipeline-source/acceptance-test-config.yml:
--------------------------------------------------------------------------------
1 | connector_image: azurepipeline-source
2 | tests:
3 | spec:
4 | - config_path: "secrets/config.json"
5 | spec_path: "resources/spec.json"
6 | connection:
7 | - config_path: "secrets/config.json"
8 | status: "succeed"
9 | - config_path: "test_files/invalid_config.json"
10 | status: "failed"
11 | discovery:
12 | - config_path: "secrets/config.json"
13 | basic_read:
14 | - config_path: "secrets/config.json"
15 | configured_catalog_path: "test_files/full_configured_catalog.json"
16 | full_refresh:
17 | - config_path: "secrets/config.json"
18 | configured_catalog_path: "test_files/full_configured_catalog.json"
19 | incremental:
20 | - config_path: "secrets/config.json"
21 | configured_catalog_path: "test_files/incremental_configured_catalog.json"
22 | future_state_path: "test_files/abnormal_state.json"
23 | cursor_paths:
24 | builds: ["lastQueueTime"]
25 | releases: ["lastCreatedOn"]
26 |
--------------------------------------------------------------------------------
/sources/gitlab-ci-source/src/streams/groups.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteStreamBase, StreamKey, SyncMode} from 'faros-airbyte-cdk';
2 | import {AirbyteLogger} from 'faros-airbyte-cdk/lib';
3 | import {Dictionary} from 'ts-essentials';
4 |
5 | import {Gitlab, GitlabConfig, Group} from '../gitlab';
6 |
7 | export class Groups extends AirbyteStreamBase {
8 | constructor(readonly config: GitlabConfig, readonly logger: AirbyteLogger) {
9 | super(logger);
10 | }
11 |
12 | getJsonSchema(): Dictionary {
13 | return require('../../resources/schemas/groups.json');
14 | }
15 |
16 | get primaryKey(): StreamKey {
17 | return 'id';
18 | }
19 |
20 | async *readRecords(
21 | syncMode: SyncMode,
22 | cursorField?: string[],
23 | streamSlice?: Dictionary,
24 | streamState?: Dictionary
25 | ): AsyncGenerator {
26 | const gitlab = Gitlab.instance(this.config, this.logger);
27 |
28 | yield* gitlab.getGroups(this.config.groupName, this.config.projects);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/sources/shortcut-source/src/streams/epics.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Epic, Shortcut, ShortcutConfig} from '../shortcut';
10 |
11 | export class Epics extends AirbyteStreamBase {
12 | constructor(
13 | private readonly config: ShortcutConfig,
14 | protected readonly logger: AirbyteLogger,
15 | protected readonly projectId?: number
16 | ) {
17 | super(logger);
18 | }
19 |
20 | getJsonSchema(): Dictionary {
21 | return require('../../resources/schemas/epics.json');
22 | }
23 |
24 | get primaryKey(): StreamKey {
25 | return ['id'];
26 | }
27 |
28 | async *readRecords(
29 | syncMode: SyncMode,
30 | cursorField?: string[],
31 | streamState?: Dictionary
32 | ): AsyncGenerator {
33 | const shortcut = await Shortcut.instance(this.config);
34 | yield* shortcut.getEpics(this.projectId);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/sources/victorops-source/test_files/teams.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "_selfUrl": "/api-public/v1/team/team-Z3scfG2gh0qF3QsL",
4 | "_membersUrl": "/api-public/v1/team/team-Z3scfG2gh0qF3QsL/members",
5 | "_policiesUrl": "/api-public/v1/team/team-Z3scfG2gh0qF3QsL/policies",
6 | "_adminsUrl": "/api-public/v1/team/team-Z3scfG2gh0qF3QsL/admins",
7 | "name": "Example",
8 | "slug": "team-Z3scfG2gh0qF3QsL",
9 | "memberCount": 1,
10 | "version": 1,
11 | "isDefaultTeam": false,
12 | "description": "Example team."
13 | },
14 | {
15 | "_selfUrl": "/api-public/v1/team/team-JsxJ4dtL2oX4SkEx",
16 | "_membersUrl": "/api-public/v1/team/team-JsxJ4dtL2oX4SkEx/members",
17 | "_policiesUrl": "/api-public/v1/team/team-JsxJ4dtL2oX4SkEx/policies",
18 | "_adminsUrl": "/api-public/v1/team/team-JsxJ4dtL2oX4SkEx/admins",
19 | "name": "Faros",
20 | "slug": "team-JsxJ4dtL2oX4SkEx",
21 | "memberCount": 1,
22 | "version": 1,
23 | "isDefaultTeam": false,
24 | "description": "team"
25 | }
26 | ]
27 |
--------------------------------------------------------------------------------
/sources/buildkite-source/src/streams/pipelines.ts:
--------------------------------------------------------------------------------
1 | import {
2 | AirbyteLogger,
3 | AirbyteStreamBase,
4 | StreamKey,
5 | SyncMode,
6 | } from 'faros-airbyte-cdk';
7 | import {Dictionary} from 'ts-essentials';
8 |
9 | import {Buildkite, BuildkiteConfig, Pipeline} from '../buildkite/buildkite';
10 | export class Pipelines extends AirbyteStreamBase {
11 | constructor(
12 | private readonly config: BuildkiteConfig,
13 | protected readonly logger: AirbyteLogger
14 | ) {
15 | super(logger);
16 | }
17 |
18 | getJsonSchema(): Dictionary {
19 | return require('../../resources/schemas/pipelines.json');
20 | }
21 | get primaryKey(): StreamKey {
22 | return 'id';
23 | }
24 | async *readRecords(
25 | syncMode: SyncMode,
26 | cursorField?: string[],
27 | streamSlice?: Dictionary,
28 | streamState?: Dictionary
29 | ): AsyncGenerator {
30 | const buildkite = Buildkite.instance(this.config, this.logger);
31 | yield* buildkite.getPipelines();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/destinations/airbyte-faros-destination/src/converters/github/branches.ts:
--------------------------------------------------------------------------------
1 | import {AirbyteRecord} from 'faros-airbyte-cdk';
2 |
3 | import {DestinationModel, DestinationRecord, StreamContext} from '../converter';
4 | import {GitHubCommon, GitHubConverter} from './common';
5 |
6 | export class Branches extends GitHubConverter {
7 | readonly destinationModels: ReadonlyArray = ['vcs_Branch'];
8 |
9 | async convert(
10 | record: AirbyteRecord,
11 | ctx: StreamContext
12 | ): Promise> {
13 | const source = this.streamName.source;
14 | const branch = record.record.data;
15 |
16 | const repository = GitHubCommon.parseRepositoryKey(
17 | branch.repository,
18 | source
19 | );
20 |
21 | if (!repository) return [];
22 |
23 | return [
24 | {
25 | model: 'vcs_Branch',
26 | record: {
27 | name: branch.name,
28 | uid: branch.name,
29 | repository,
30 | },
31 | },
32 | ];
33 | }
34 | }
35 |
--------------------------------------------------------------------------------