--- "$schema": "http://json-schema.org/draft-06/schema#" title: Connector Builder #TODO type: object description: Connector Builder structs #TODO properties: version: "$ref": "#/definitions/Version" streams: "$ref": "#/definitions/Streams" check: "$ref": "#/definitions/ConnectionChecker" definitions: "$options": type: object additionalProperties: true ConnectionChecker: type: object anyOf: - "$ref": "#/definitions/CheckStream" CheckStream: type: object additionalProperties: true required: - stream_names properties: "$options": "$ref": "#/definitions/$options" stream_names: type: array items: type: string Version: type: string description: "connector definition version" Streams: type: array items: "$ref": "#/definitions/Stream" Stream: type: object additionalProperties: true required: - name - retriever properties: "$options": "$ref": "#/definitions/$options" name: type: string primary_key: "$ref": "#/definitions/PrimaryKey" retriever: "$ref": "#/definitions/Retriever" stream_cursor_field: type: string transformations: "$ref": "#/definitions/RecordTransformation" checkpoint_interval: type: integer PrimaryKey: type: string Retriever: type: object anyOf: - "$ref": "#/definitions/SimpleRetriever" SimpleRetriever: type: object additionalProperties: true required: - name - requester - record_selector properties: "$options": "$ref": "#/definitions/$options" name: type: string primary_key: "$ref": "#/definitions/PrimaryKey" requester: "$ref": "#/definitions/Requester" record_selector: "$ref": "#/definitions/HttpSelector" paginator: "$ref": "#/definitions/Paginator" stream_slicer: "$ref": "#/definitions/StreamSlicer" Requester: type: object anyOf: - "$ref": "#/definitions/HttpRequester" HttpRequester: type: object additionalProperties: true required: - name - url_base - path properties: "$options": "$ref": "#/definitions/$options" name: type: string url_base: type: string description: "base url" path: type: string description: "path" http_method: "$ref": "#/definitions/HttpMethod" default: "GET" request_options_provider: "$ref": "#/definitions/RequestOptionsProvider" authenticator: "$ref": "#/definitions/Authenticator" error_handler: "$ref": "#/definitions/ErrorHandler" HttpMethod: type: string enum: - GET - POST RequestOptionsProvider: type: object anyOf: - "$ref": "#/definitions/InterpolatedRequestOptionsProvider" InterpolatedRequestOptionsProvider: type: object additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" request_parameters: "$ref": "#/definitions/RequestInput" request_headers: "$ref": "#/definitions/RequestInput" request_body_data: "$ref": "#/definitions/RequestInput" request_body_json: "$ref": "#/definitions/RequestInput" RequestInput: type: object additionalProperties: true Authenticator: type: object description: "Authenticator type" anyOf: - "$ref": "#/definitions/OAuth" - "$ref": "#/definitions/ApiKeyAuthenticator" - "$ref": "#/definitions/BearerAuthenticator" - "$ref": "#/definitions/BasicHttpAuthenticator" ApiKeyAuthenticator: type: object additionalProperties: true required: - header - api_token properties: "$options": "$ref": "#/definitions/$options" header: type: string api_token: type: string BearerAuthenticator: type: object additionalProperties: true required: - api_token properties: "$options": "$ref": "#/definitions/$options" api_token: type: string BasicHttpAuthenticator: type: object additionalProperties: true required: - username properties: "$options": "$ref": "#/definitions/$options" username: type: string password: type: string OAuth: type: object additionalProperties: true required: - token_refresh_endpoint - client_id - client_secret - refresh_token - access_token_name - expires_in_name properties: "$options": "$ref": "#/definitions/$options" token_refresh_endpoint: type: string client_id: type: string client_secret: type: string refresh_token: type: string scopes: type: array items: type: string default: [] token_expiry_date: type: string access_token_name: type: string default: "access_token" expires_in_name: type: string default: "expires_in" refresh_request_body: type: object grant_type: type: string default: "refresh_token" Paginator: type: object anyOf: - "$ref": "#/definitions/DefaultPaginator" - "$ref": "#/definitions/NoPagination" DefaultPaginator: type: object additionalProperties: true required: - page_token_option - pagination_strategy - url_base properties: "$options": "$ref": "#/definitions/$options" page_size: type: integer page_size_option: "$ref": "#/definitions/RequestOption" page_token_option: "$ref": "#/definitions/RequestOption" pagination_strategy: "$ref": "#/definitions/PaginationStrategy" url_base: type: string NoPagination: type: object additionalProperties: true RequestOption: type: object additionalProperties: true required: - inject_into properties: inject_into: "$ref": "#/definitions/RequestOptionType" field_name: type: string RequestOptionType: type: string enum: - request_parameter - header - path - body_data - body_json PaginationStrategy: type: object anyOf: - "$ref": "#/definitions/CursorPagination" - "$ref": "#/definitions/OffsetIncrement" - "$ref": "#/definitions/PageIncrement" CursorPagination: type: object additionalProperties: true required: - cursor_value properties: "$options": "$ref": "#/definitions/$options" cursor_value: type: string stop_condition: type: string page_size: type: integer OffsetIncrement: type: object additionalProperties: true required: - page_size properties: "$options": "$ref": "#/definitions/$options" page_size: type: integer PageIncrement: type: object additionalProperties: true required: - page_size properties: "$options": "$ref": "#/definitions/$options" page_size: type: integer HttpSelector: type: object anyOf: - "$ref": "#/definitions/RecordSelector" RecordSelector: type: object required: - extractor properties: "$options": "$ref": "#/definitions/$options" extractor: "$ref": "#/definitions/RecordExtractor" record_filter: "$ref": "#/definitions/RecordFilter" RecordExtractor: type: object anyOf: - "$ref": "#/definitions/DpathExtractor" DpathExtractor: type: object additionalProperties: true required: - field_pointer properties: "$options": "$ref": "#/definitions/$options" field_pointer: type: array items: type: string RecordFilter: type: object additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" condition: type: string StreamSlicer: type: object anyOf: - "$ref": "#/definitions/DatetimeStreamSlicer" - "$ref": "#/definitions/ListStreamSlicer" - "$ref": "#/definitions/CartesianProductStreamSlicer" - "$ref": "#/definitions/SubstreamSlicer" - "$ref": "#/definitions/SingleSlice" SingleSlice: type: object additionalProperties: true SubstreamSlicer: type: object required: - parent_stream_configs additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" parent_stream_configs: type: array items: "$ref": "#/definitions/ParentStreamConfig" ParentStreamConfig: type: object required: - stream - parent_key - stream_slice_field additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" stream: "$ref": "#/definitions/Stream" parent_key: type: string stream_slice_field: type: string request_option: "$ref": "#/definitions/RequestOption" CartesianProductStreamSlicer: type: object required: - stream_slicers additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" stream_slicers: type: array items: "$ref": "#/definitions/StreamSlicer" ListStreamSlicer: type: object required: - slice_values - cursor_field additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" slice_values: type: array items: type: string cursor_field: type: string request_option: "$ref": "#/definitions/RequestOption" DatetimeStreamSlicer: type: object required: - start_datetime - end_datetime - step - cursor_field - datetime_format additional_properties: false properties: "$options": "$ref": "#/definitions/$options" start_datetime: "$ref": "#/definitions/MinMaxDatetime" end_datetime: "$ref": "#/definitions/MinMaxDatetime" step: type: string cursor_field: type: string datetime_format: type: string start_time_option: "$ref": "#/definitions/RequestOption" end_time_option: "$ref": "#/definitions/RequestOption" stream_state_field_start: type: string stream_state_field_end: type: string lookback_window: type: string MinMaxDatetime: type: object required: - datetime additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" datetime: type: string datetime_format: type: string min_datetime: type: string max_datetime: type: string ErrorHandler: type: object description: "Error handler" anyOf: - "$ref": "#/definitions/DefaultErrorHandler" - "$ref": "#/definitions/CompositeErrorHandler" DefaultErrorHandler: type: object required: - max_retries additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" response_filters: type: array items: "$ref": "#/definitions/HttpResponseFilter" max_retries: type: integer default: 5 backoff_strategies: type: array items: "$ref": "#/definitions/BackoffStrategy" default: [] CompositeErrorHandler: type: object required: - error_handlers additionalProperties: "$options": "$ref": "#/definitions/$options" error_handlers: type: array items: "$ref": "#/definitions/ErrorHandler" HttpResponseFilter: type: object required: - action additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" action: "$ref": "#/definitions/ResponseAction" http_codes: type: array items: type: integer default: [] error_message_contains: type: string predicate: type: string ResponseAction: type: string enum: - SUCCESS - FAIL - IGNORE - RETRY BackoffStrategy: type: object anyOf: - "$ref": "#/definitions/ExponentialBackoff" - "$ref": "#/definitions/ConstantBackoff" - "$ref": "#/definitions/WaitTimeFromHeader" - "$ref": "#/definitions/WaitUntilTimeFromHeader" ExponentialBackoff: type: object additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" factor: type: integer default: 5 ConstantBackoff: type: object additionalProperties: true required: - backoff_time_in_seconds properties: "$options": "$ref": "#/definitions/$options" backoff_time_in_seconds: type: number WaitTimeFromHeader: type: object additionalProperties: true required: - header properties: "$options": "$ref": "#/definitions/$options" header: type: string regex: type: string WaitUntilTimeFromHeader: type: object additionalProperties: true required: - header properties: "$options": "$ref": "#/definitions/$options" header: type: string regex: type: string min_wait: type: number RecordTransformation: type: object anyOf: - "$ref": "#/definitions/AddFields" - "$ref": "#/definitions/RemoveFields" AddFields: type: object required: - fields additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" fields: type: array items: "$ref": "#/definitions/AddedFieldDefinition" AddedFieldDefinition: type: object required: - path - value additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" path: "$ref": "#/definitions/FieldPointer" value: type: string FieldPointer: type: array items: type: string RemoveFields: type: object required: - field_pointers additionalProperties: true properties: "$options": "$ref": "#/definitions/$options" field_pointers: type: array items: "$ref": "#/definitions/FieldPointer"