From cff6f4f0d8b8aae2de43d5af7317543a098fe9a5 Mon Sep 17 00:00:00 2001 From: Natik Gadzhi Date: Thu, 19 Sep 2024 16:46:31 -0700 Subject: [PATCH] Submission for source-basecamp from Connector Builder --- .../connectors/source-basecamp/README.md | 33 + .../acceptance-test-config.yml | 17 + .../connectors/source-basecamp/icon.svg | 3 + .../connectors/source-basecamp/manifest.yaml | 1525 +++++++++++++++++ .../connectors/source-basecamp/metadata.yaml | 35 + docs/integrations/sources/basecamp.md | 33 + 6 files changed, 1646 insertions(+) create mode 100644 airbyte-integrations/connectors/source-basecamp/README.md create mode 100644 airbyte-integrations/connectors/source-basecamp/acceptance-test-config.yml create mode 100644 airbyte-integrations/connectors/source-basecamp/icon.svg create mode 100644 airbyte-integrations/connectors/source-basecamp/manifest.yaml create mode 100644 airbyte-integrations/connectors/source-basecamp/metadata.yaml create mode 100644 docs/integrations/sources/basecamp.md diff --git a/airbyte-integrations/connectors/source-basecamp/README.md b/airbyte-integrations/connectors/source-basecamp/README.md new file mode 100644 index 000000000000..9084f1063f13 --- /dev/null +++ b/airbyte-integrations/connectors/source-basecamp/README.md @@ -0,0 +1,33 @@ +# Basecamp +This directory contains the manifest-only connector for `source-basecamp`. + +A connector for Basecamp project management thing. + +## Usage +There are multiple ways to use this connector: +- You can use this connector as any other connector in Airbyte Marketplace. +- You can load this connector in `pyairbyte` using `get_source`! +- You can open this connector in Connector Builder, edit it, and publish to your workspaces. + +Please refer to the manifest-only connector documentation for more details. + +## Local Development +We recommend you use the Connector Builder to edit this connector. + +But, if you want to develop this connector locally, you can use the following steps. + +### Environment Setup +You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci). + +### Build +This will create a dev image (`source-basecamp:dev`) that you can use to test the connector locally. +```bash +airbyte-ci connectors --name=source-basecamp build +``` + +### Test +This will run the acceptance tests for the connector. +```bash +airbyte-ci connectors --name=source-basecamp test +``` + diff --git a/airbyte-integrations/connectors/source-basecamp/acceptance-test-config.yml b/airbyte-integrations/connectors/source-basecamp/acceptance-test-config.yml new file mode 100644 index 000000000000..a19083f9a06e --- /dev/null +++ b/airbyte-integrations/connectors/source-basecamp/acceptance-test-config.yml @@ -0,0 +1,17 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-basecamp:dev +acceptance_tests: + spec: + tests: + - spec_path: "manifest.yaml" + connection: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + discovery: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + basic_read: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + incremental: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + full_refresh: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" diff --git a/airbyte-integrations/connectors/source-basecamp/icon.svg b/airbyte-integrations/connectors/source-basecamp/icon.svg new file mode 100644 index 000000000000..cf5618012c9a --- /dev/null +++ b/airbyte-integrations/connectors/source-basecamp/icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-basecamp/manifest.yaml b/airbyte-integrations/connectors/source-basecamp/manifest.yaml new file mode 100644 index 000000000000..91201ca9ff3d --- /dev/null +++ b/airbyte-integrations/connectors/source-basecamp/manifest.yaml @@ -0,0 +1,1525 @@ +version: 4.6.2 + +type: DeclarativeSource + +description: A connector for Basecamp project management thing. + +check: + type: CheckStream + stream_names: + - projects + +definitions: + streams: + projects: + type: DeclarativeStream + name: projects + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: projects.json + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + stop_condition: "{{ not headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/projects" + schedules: + type: DeclarativeStream + name: schedules + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: projects/{{stream_partition.project_id}}.json + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: + - dock + - "*" + record_filter: + type: RecordFilter + condition: "{{ record.name == \"schedule\" }}" + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + stop_condition: "{{ not headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - type: ParentStreamConfig + parent_key: id + partition_field: project_id + stream: + $ref: "#/definitions/streams/projects" + transformations: + - type: AddFields + fields: + - path: + - project_id + value: "{{ stream_partition.project_id }}" + - type: AddFields + fields: + - path: + - substream_data + value: >- + {{ { "project_id": record["project_id"], "schedule_id": + record["id"] } }} + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/schedules" + schedule_entries: + type: DeclarativeStream + name: schedule_entries + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: >- + buckets/{{stream_partition.parent.project_id}}/schedules/{{stream_partition.parent.schedule_id}}/entries.json + http_method: GET + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + stop_condition: "{{ not headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - type: ParentStreamConfig + parent_key: substream_data + partition_field: parent + stream: + $ref: "#/definitions/streams/schedules" + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/schedule_entries" + todos: + type: DeclarativeStream + name: todos + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: projects/recordings.json + http_method: GET + request_parameters: + type: Todo + sort: updated_at + direction: desc + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + stop_condition: "{{ not headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + datetime_format: "%Y-%m-%dT%H:%M:%S.%fZ" + start_datetime: + type: MinMaxDatetime + datetime: "{{ config[\"start_date\"] }}" + datetime_format: "%Y-%m-%dT%H:%M:%SZ" + is_data_feed: true + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/todos" + messages: + type: DeclarativeStream + name: messages + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: projects/recordings.json + http_method: GET + request_parameters: + type: Message + sort: updated_at + direction: desc + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + stop_condition: "{{ not headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + datetime_format: "%Y-%m-%dT%H:%M:%S.%fZ" + start_datetime: + type: MinMaxDatetime + datetime: "{{ config[\"start_date\"] }}" + datetime_format: "%Y-%m-%dT%H:%M:%SZ" + is_data_feed: true + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/messages" + question_answers: + type: DeclarativeStream + name: question_answers + primary_key: + - id + retriever: + type: SimpleRetriever + requester: + $ref: "#/definitions/base_requester" + path: projects/recordings.json + http_method: GET + request_parameters: + type: Question::Answer + sort: updated_at + direction: desc + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + stop_condition: "{{ not headers.get(\"link\", {}).get(\"next\", {}).get(\"url\", {}) }}" + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + datetime_format: "%Y-%m-%dT%H:%M:%S.%fZ" + start_datetime: + type: MinMaxDatetime + datetime: "{{ config[\"start_date\"] }}" + datetime_format: "%Y-%m-%dT%H:%M:%SZ" + is_data_feed: true + schema_loader: + type: InlineSchemaLoader + schema: + $ref: "#/schemas/question_answers" + base_requester: + type: HttpRequester + url_base: https://3.basecampapi.com/{{config["account_id"]}}/ + authenticator: + type: OAuthAuthenticator + client_id: "{{ config[\"client_id\"] }}" + grant_type: refresh_token + client_secret: "{{ config[\"client_secret\"] }}" + refresh_token: "{{ config[\"client_refresh_token_2\"] }}" + refresh_request_body: + type: refresh + refresh_token: "{{ config[\"client_refresh_token_2\"] }}" + token_refresh_endpoint: https://launchpad.37signals.com/authorization/token + +streams: + - $ref: "#/definitions/streams/projects" + - $ref: "#/definitions/streams/schedules" + - $ref: "#/definitions/streams/schedule_entries" + - $ref: "#/definitions/streams/todos" + - $ref: "#/definitions/streams/messages" + - $ref: "#/definitions/streams/question_answers" + +spec: + type: Spec + connection_specification: + type: object + $schema: http://json-schema.org/draft-07/schema# + required: + - account_id + - start_date + - client_id + - client_secret + - client_refresh_token_2 + properties: + account_id: + type: number + order: 0 + title: Account ID + start_date: + type: string + order: 1 + title: Start date + format: date-time + pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ + client_id: + type: string + order: 2 + title: Client ID + airbyte_secret: true + client_secret: + type: string + order: 3 + title: Client secret + airbyte_secret: true + client_refresh_token_2: + type: string + order: 4 + title: Refresh token + airbyte_secret: true + additionalProperties: true + +metadata: + autoImportSchema: + projects: true + schedules: true + schedule_entries: true + todos: true + messages: true + question_answers: true + testedStreams: + projects: + hasRecords: true + streamHash: 7ab6083f8eb5d614b381551faaeb2963f910f721 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + schedules: + hasRecords: true + streamHash: de546d703b8eee318d1ccba525d3a25b6df7641a + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + schedule_entries: + hasRecords: true + streamHash: cf8768b12f2e3a6fadb8cee91aefa3e3728972b2 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + todos: + streamHash: 6138a7d9c6463f0ac32e767a85d24835a41c64f1 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + messages: + hasRecords: true + streamHash: ac228d32888b728c80ae692b835f2a556a869d25 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + question_answers: + streamHash: ec57855eb9dbfe5198e72fd0fa48b9f9b4d2aa43 + hasResponse: true + responsesAreSuccessful: true + hasRecords: true + primaryKeysArePresent: true + primaryKeysAreUnique: true + assist: {} + +schemas: + projects: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + description: + type: + - string + - "null" + app_url: + type: + - string + - "null" + bookmark_url: + type: + - string + - "null" + bookmarked: + type: + - boolean + - "null" + clients_enabled: + type: + - boolean + - "null" + created_at: + type: + - string + - "null" + dock: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + app_url: + type: + - string + - "null" + enabled: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + position: + type: + - number + - "null" + title: + type: + - string + - "null" + url: + type: + - string + - "null" + id: + type: number + last_needle_color: + type: + - string + - "null" + last_needle_position: + type: + - number + - "null" + name: + type: + - string + - "null" + purpose: + type: + - string + - "null" + status: + type: + - string + - "null" + timesheet_enabled: + type: + - boolean + - "null" + updated_at: + type: + - string + - "null" + url: + type: + - string + - "null" + required: + - id + schedules: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + app_url: + type: + - string + - "null" + enabled: + type: + - boolean + - "null" + id: + type: number + name: + type: + - string + - "null" + position: + type: + - number + - "null" + project_id: + type: + - number + - "null" + substream_data: + type: + - object + - "null" + properties: + project_id: + type: + - number + - "null" + schedule_id: + type: + - number + - "null" + title: + type: + - string + - "null" + url: + type: + - string + - "null" + required: + - id + schedule_entries: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + type: + type: + - string + - "null" + description: + type: + - string + - "null" + all_day: + type: + - boolean + - "null" + app_url: + type: + - string + - "null" + bookmark_url: + type: + - string + - "null" + bucket: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + comments_count: + type: + - number + - "null" + comments_url: + type: + - string + - "null" + created_at: + type: + - string + - "null" + creator: + type: + - object + - "null" + properties: + admin: + type: + - boolean + - "null" + attachable_sgid: + type: + - string + - "null" + avatar_url: + type: + - string + - "null" + can_access_timesheet: + type: + - boolean + - "null" + can_manage_people: + type: + - boolean + - "null" + can_manage_projects: + type: + - boolean + - "null" + can_ping: + type: + - boolean + - "null" + client: + type: + - boolean + - "null" + company: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + email_address: + type: + - string + - "null" + employee: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + owner: + type: + - boolean + - "null" + personable_type: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + ends_at: + type: + - string + - "null" + id: + type: number + inherits_status: + type: + - boolean + - "null" + parent: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + app_url: + type: + - string + - "null" + id: + type: + - number + - "null" + title: + type: + - string + - "null" + url: + type: + - string + - "null" + participants: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + admin: + type: + - boolean + - "null" + attachable_sgid: + type: + - string + - "null" + avatar_url: + type: + - string + - "null" + can_access_timesheet: + type: + - boolean + - "null" + can_manage_people: + type: + - boolean + - "null" + can_manage_projects: + type: + - boolean + - "null" + can_ping: + type: + - boolean + - "null" + client: + type: + - boolean + - "null" + company: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + email_address: + type: + - string + - "null" + employee: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + owner: + type: + - boolean + - "null" + personable_type: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + starts_at: + type: + - string + - "null" + status: + type: + - string + - "null" + subscription_url: + type: + - string + - "null" + summary: + type: + - string + - "null" + title: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + url: + type: + - string + - "null" + visible_to_clients: + type: + - boolean + - "null" + required: + - id + todos: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + type: + type: + - string + - "null" + description: + type: + - string + - "null" + app_url: + type: + - string + - "null" + assignees: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + admin: + type: + - boolean + - "null" + attachable_sgid: + type: + - string + - "null" + avatar_url: + type: + - string + - "null" + can_access_timesheet: + type: + - boolean + - "null" + can_manage_people: + type: + - boolean + - "null" + can_manage_projects: + type: + - boolean + - "null" + can_ping: + type: + - boolean + - "null" + client: + type: + - boolean + - "null" + company: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + email_address: + type: + - string + - "null" + employee: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + owner: + type: + - boolean + - "null" + personable_type: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + bookmark_url: + type: + - string + - "null" + bucket: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + comments_count: + type: + - number + - "null" + comments_url: + type: + - string + - "null" + completed: + type: + - boolean + - "null" + completion_subscribers: + type: + - array + - "null" + completion_url: + type: + - string + - "null" + content: + type: + - string + - "null" + created_at: + type: + - string + - "null" + creator: + type: + - object + - "null" + properties: + admin: + type: + - boolean + - "null" + attachable_sgid: + type: + - string + - "null" + avatar_url: + type: + - string + - "null" + can_access_timesheet: + type: + - boolean + - "null" + can_manage_people: + type: + - boolean + - "null" + can_manage_projects: + type: + - boolean + - "null" + can_ping: + type: + - boolean + - "null" + client: + type: + - boolean + - "null" + company: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + email_address: + type: + - string + - "null" + employee: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + owner: + type: + - boolean + - "null" + personable_type: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + due_on: + type: + - string + - "null" + id: + type: number + inherits_status: + type: + - boolean + - "null" + parent: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + app_url: + type: + - string + - "null" + id: + type: + - number + - "null" + title: + type: + - string + - "null" + url: + type: + - string + - "null" + position: + type: + - number + - "null" + status: + type: + - string + - "null" + subscription_url: + type: + - string + - "null" + title: + type: + - string + - "null" + updated_at: + type: string + url: + type: + - string + - "null" + visible_to_clients: + type: + - boolean + - "null" + required: + - id + - updated_at + messages: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + type: + type: + - string + - "null" + app_url: + type: + - string + - "null" + bookmark_url: + type: + - string + - "null" + bucket: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + comments_count: + type: + - number + - "null" + comments_url: + type: + - string + - "null" + content: + type: + - string + - "null" + created_at: + type: + - string + - "null" + creator: + type: + - object + - "null" + properties: + admin: + type: + - boolean + - "null" + attachable_sgid: + type: + - string + - "null" + avatar_url: + type: + - string + - "null" + can_access_timesheet: + type: + - boolean + - "null" + can_manage_people: + type: + - boolean + - "null" + can_manage_projects: + type: + - boolean + - "null" + can_ping: + type: + - boolean + - "null" + client: + type: + - boolean + - "null" + company: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + email_address: + type: + - string + - "null" + employee: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + owner: + type: + - boolean + - "null" + personable_type: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + id: + type: number + inherits_status: + type: + - boolean + - "null" + parent: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + app_url: + type: + - string + - "null" + id: + type: + - number + - "null" + title: + type: + - string + - "null" + url: + type: + - string + - "null" + status: + type: + - string + - "null" + subject: + type: + - string + - "null" + subscription_url: + type: + - string + - "null" + title: + type: + - string + - "null" + updated_at: + type: string + url: + type: + - string + - "null" + visible_to_clients: + type: + - boolean + - "null" + required: + - id + - updated_at + question_answers: + type: object + $schema: http://json-schema.org/schema# + additionalProperties: true + properties: + type: + type: + - string + - "null" + app_url: + type: + - string + - "null" + bookmark_url: + type: + - string + - "null" + bucket: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + comments_count: + type: + - number + - "null" + comments_url: + type: + - string + - "null" + content: + type: + - string + - "null" + created_at: + type: + - string + - "null" + creator: + type: + - object + - "null" + properties: + admin: + type: + - boolean + - "null" + attachable_sgid: + type: + - string + - "null" + avatar_url: + type: + - string + - "null" + can_access_timesheet: + type: + - boolean + - "null" + can_manage_people: + type: + - boolean + - "null" + can_manage_projects: + type: + - boolean + - "null" + can_ping: + type: + - boolean + - "null" + client: + type: + - boolean + - "null" + company: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + email_address: + type: + - string + - "null" + employee: + type: + - boolean + - "null" + id: + type: + - number + - "null" + name: + type: + - string + - "null" + owner: + type: + - boolean + - "null" + personable_type: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + updated_at: + type: + - string + - "null" + group_on: + type: + - string + - "null" + id: + type: number + inherits_status: + type: + - boolean + - "null" + parent: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + app_url: + type: + - string + - "null" + id: + type: + - number + - "null" + title: + type: + - string + - "null" + url: + type: + - string + - "null" + status: + type: + - string + - "null" + subscription_url: + type: + - string + - "null" + title: + type: + - string + - "null" + updated_at: + type: string + url: + type: + - string + - "null" + visible_to_clients: + type: + - boolean + - "null" + required: + - id + - updated_at diff --git a/airbyte-integrations/connectors/source-basecamp/metadata.yaml b/airbyte-integrations/connectors/source-basecamp/metadata.yaml new file mode 100644 index 000000000000..3713ea70b92c --- /dev/null +++ b/airbyte-integrations/connectors/source-basecamp/metadata.yaml @@ -0,0 +1,35 @@ +metadataSpecVersion: "1.0" +data: + allowedHosts: + hosts: + - "*" + registryOverrides: + oss: + enabled: true + cloud: + enabled: true + remoteRegistries: + pypi: + enabled: false + packageName: airbyte-source-basecamp + connectorBuildOptions: + baseImage: docker.io/airbyte/source-declarative-manifest:4.6.2@sha256:f5fcd3d4703b7590b6166a7853c5ed1686731607cd30a159a8c24e2fe2c1ee98 + connectorSubtype: api + connectorType: source + definitionId: 0abc340d-772c-4fa1-8d1d-ebf3be72ab51 + dockerImageTag: 0.0.1 + dockerRepository: airbyte/source-basecamp + githubIssueLabel: source-basecamp + icon: icon.svg + license: MIT + name: Basecamp + releaseDate: 2024-09-19 + releaseStage: alpha + supportLevel: community + documentationUrl: https://docs.airbyte.com/integrations/sources/basecamp + tags: + - language:manifest-only + - cdk:low-code + ab_internal: + ql: 100 + sl: 100 diff --git a/docs/integrations/sources/basecamp.md b/docs/integrations/sources/basecamp.md new file mode 100644 index 000000000000..ade65ec590b3 --- /dev/null +++ b/docs/integrations/sources/basecamp.md @@ -0,0 +1,33 @@ +# Basecamp +A connector for Basecamp project management thing. + +## Configuration + +| Input | Type | Description | Default Value | +|-------|------|-------------|---------------| +| `account_id` | `number` | Account ID. | | +| `start_date` | `string` | Start date. | | +| `client_id` | `string` | Client ID. | | +| `client_secret` | `string` | Client secret. | | +| `client_refresh_token_2` | `string` | Refresh token. | | + +## Streams +| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental | +|-------------|-------------|------------|---------------------|----------------------| +| projects | id | DefaultPaginator | ✅ | ❌ | +| schedules | id | DefaultPaginator | ✅ | ❌ | +| schedule_entries | id | DefaultPaginator | ✅ | ❌ | +| todos | id | DefaultPaginator | ✅ | ✅ | +| messages | id | DefaultPaginator | ✅ | ✅ | +| question_answers | id | DefaultPaginator | ✅ | ✅ | + +## Changelog + +
+ Expand to review + +| Version | Date | Subject | +|------------------|------------|----------------| +| 0.0.1 | 2024-09-19 | Initial release by [@natikgadzhi](https://github.com/natikgadzhi) via Connector Builder| + +
\ No newline at end of file