@commandable/mcp 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +10 -0
- package/README.md +34 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +7 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/credentialManager.d.ts +19 -0
- package/dist/cli/credentialManager.d.ts.map +1 -0
- package/dist/cli/credentialManager.js +81 -0
- package/dist/cli/credentialManager.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +77 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/setup.d.ts +3 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +194 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/crypto/encryption.d.ts +3 -0
- package/dist/crypto/encryption.d.ts.map +1 -0
- package/dist/crypto/encryption.js +29 -0
- package/dist/crypto/encryption.js.map +1 -0
- package/dist/db/client.d.ts +22 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +43 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/credentialStore.d.ts +13 -0
- package/dist/db/credentialStore.d.ts.map +1 -0
- package/dist/db/credentialStore.js +57 -0
- package/dist/db/credentialStore.js.map +1 -0
- package/dist/db/integrationStore.d.ts +5 -0
- package/dist/db/integrationStore.d.ts.map +1 -0
- package/dist/db/integrationStore.js +65 -0
- package/dist/db/integrationStore.js.map +1 -0
- package/dist/db/migrate.d.ts +3 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +88 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/schema.d.ts +911 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +73 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/errors/httpError.d.ts +6 -0
- package/dist/errors/httpError.d.ts.map +1 -0
- package/dist/errors/httpError.js +11 -0
- package/dist/errors/httpError.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/actionsFactory.d.ts +12 -0
- package/dist/integrations/actionsFactory.d.ts.map +1 -0
- package/dist/integrations/actionsFactory.js +68 -0
- package/dist/integrations/actionsFactory.js.map +1 -0
- package/dist/integrations/catalog.d.ts +9 -0
- package/dist/integrations/catalog.d.ts.map +1 -0
- package/dist/integrations/catalog.js +80 -0
- package/dist/integrations/catalog.js.map +1 -0
- package/dist/integrations/dataLoader.d.ts +47 -0
- package/dist/integrations/dataLoader.d.ts.map +1 -0
- package/dist/integrations/dataLoader.js +126 -0
- package/dist/integrations/dataLoader.js.map +1 -0
- package/dist/integrations/getIntegration.d.ts +11 -0
- package/dist/integrations/getIntegration.d.ts.map +1 -0
- package/dist/integrations/getIntegration.js +22 -0
- package/dist/integrations/getIntegration.js.map +1 -0
- package/dist/integrations/googleServiceAccount.d.ts +6 -0
- package/dist/integrations/googleServiceAccount.d.ts.map +1 -0
- package/dist/integrations/googleServiceAccount.js +54 -0
- package/dist/integrations/googleServiceAccount.js.map +1 -0
- package/dist/integrations/providerRegistry.d.ts +2 -0
- package/dist/integrations/providerRegistry.d.ts.map +1 -0
- package/dist/integrations/providerRegistry.js +50 -0
- package/dist/integrations/providerRegistry.js.map +1 -0
- package/dist/integrations/proxy.d.ts +16 -0
- package/dist/integrations/proxy.d.ts.map +1 -0
- package/dist/integrations/proxy.js +331 -0
- package/dist/integrations/proxy.js.map +1 -0
- package/dist/integrations/sandbox.d.ts +7 -0
- package/dist/integrations/sandbox.d.ts.map +1 -0
- package/dist/integrations/sandbox.js +210 -0
- package/dist/integrations/sandbox.js.map +1 -0
- package/dist/integrations/tools.d.ts +3 -0
- package/dist/integrations/tools.d.ts.map +1 -0
- package/dist/integrations/tools.js +70 -0
- package/dist/integrations/tools.js.map +1 -0
- package/dist/mcp/server.d.ts +15 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +50 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/toolAdapter.d.ts +17 -0
- package/dist/mcp/toolAdapter.d.ts.map +1 -0
- package/dist/mcp/toolAdapter.js +18 -0
- package/dist/mcp/toolAdapter.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/integration-data/README.md +52 -0
- package/integration-data/airtable/credentials.json +20 -0
- package/integration-data/airtable/credentials_hint.md +4 -0
- package/integration-data/airtable/handlers/create_record.js +12 -0
- package/integration-data/airtable/handlers/delete_record.js +7 -0
- package/integration-data/airtable/handlers/get_record.js +4 -0
- package/integration-data/airtable/handlers/get_table_schema.js +6 -0
- package/integration-data/airtable/handlers/list_bases.js +4 -0
- package/integration-data/airtable/handlers/list_records.js +25 -0
- package/integration-data/airtable/handlers/list_table_fields.js +6 -0
- package/integration-data/airtable/handlers/list_tables.js +4 -0
- package/integration-data/airtable/handlers/list_views.js +6 -0
- package/integration-data/airtable/handlers/search_records.js +6 -0
- package/integration-data/airtable/handlers/update_record.js +11 -0
- package/integration-data/airtable/manifest.json +83 -0
- package/integration-data/airtable/schemas/create_record.json +12 -0
- package/integration-data/airtable/schemas/delete_record.json +11 -0
- package/integration-data/airtable/schemas/empty.json +6 -0
- package/integration-data/airtable/schemas/get_record.json +11 -0
- package/integration-data/airtable/schemas/id_base.json +9 -0
- package/integration-data/airtable/schemas/id_base_table.json +10 -0
- package/integration-data/airtable/schemas/list_records.json +26 -0
- package/integration-data/airtable/schemas/search_records.json +12 -0
- package/integration-data/airtable/schemas/update_record.json +13 -0
- package/integration-data/github/credentials.json +20 -0
- package/integration-data/github/credentials_hint.md +7 -0
- package/integration-data/github/handlers/add_labels_to_issue.js +12 -0
- package/integration-data/github/handlers/close_issue.js +5 -0
- package/integration-data/github/handlers/comment_on_issue.js +5 -0
- package/integration-data/github/handlers/create_branch.js +33 -0
- package/integration-data/github/handlers/create_commit.js +91 -0
- package/integration-data/github/handlers/create_issue.js +10 -0
- package/integration-data/github/handlers/create_or_update_file.js +21 -0
- package/integration-data/github/handlers/create_pull_request.js +16 -0
- package/integration-data/github/handlers/create_repo.js +11 -0
- package/integration-data/github/handlers/delete_repo.js +6 -0
- package/integration-data/github/handlers/get_issue.js +4 -0
- package/integration-data/github/handlers/get_repo.js +4 -0
- package/integration-data/github/handlers/list_branches.js +4 -0
- package/integration-data/github/handlers/list_commits.js +12 -0
- package/integration-data/github/handlers/list_issues.js +12 -0
- package/integration-data/github/handlers/list_pull_requests.js +8 -0
- package/integration-data/github/handlers/list_repos_install.js +4 -0
- package/integration-data/github/handlers/list_repos_user.js +4 -0
- package/integration-data/github/handlers/merge_pull_request.js +14 -0
- package/integration-data/github/handlers/update_issue.js +15 -0
- package/integration-data/github/manifest.json +26 -0
- package/integration-data/github/schemas/add_labels_to_issue.json +12 -0
- package/integration-data/github/schemas/close_issue.json +10 -0
- package/integration-data/github/schemas/comment_on_issue.json +11 -0
- package/integration-data/github/schemas/create_branch.json +12 -0
- package/integration-data/github/schemas/create_commit.json +25 -0
- package/integration-data/github/schemas/create_issue.json +13 -0
- package/integration-data/github/schemas/create_or_update_file.json +15 -0
- package/integration-data/github/schemas/create_pull_request.json +15 -0
- package/integration-data/github/schemas/create_repo.json +12 -0
- package/integration-data/github/schemas/delete_repo.json +10 -0
- package/integration-data/github/schemas/empty.json +5 -0
- package/integration-data/github/schemas/get_issue.json +10 -0
- package/integration-data/github/schemas/get_repo.json +9 -0
- package/integration-data/github/schemas/list_commits.json +12 -0
- package/integration-data/github/schemas/list_issues.json +12 -0
- package/integration-data/github/schemas/list_pull_requests.json +10 -0
- package/integration-data/github/schemas/merge_pull_request.json +14 -0
- package/integration-data/github/schemas/owner_repo.json +9 -0
- package/integration-data/github/schemas/update_issue.json +15 -0
- package/integration-data/google-calendar/credentials.json +36 -0
- package/integration-data/google-calendar/credentials_hint.md +9 -0
- package/integration-data/google-calendar/handlers/create_event.js +6 -0
- package/integration-data/google-calendar/handlers/delete_acl.js +6 -0
- package/integration-data/google-calendar/handlers/delete_event.js +7 -0
- package/integration-data/google-calendar/handlers/freebusy_query.js +4 -0
- package/integration-data/google-calendar/handlers/get_acl.js +5 -0
- package/integration-data/google-calendar/handlers/get_calendar.js +4 -0
- package/integration-data/google-calendar/handlers/get_event.js +5 -0
- package/integration-data/google-calendar/handlers/insert_acl.js +6 -0
- package/integration-data/google-calendar/handlers/list_acl.js +5 -0
- package/integration-data/google-calendar/handlers/list_calendars.js +4 -0
- package/integration-data/google-calendar/handlers/list_colors.js +4 -0
- package/integration-data/google-calendar/handlers/list_events.js +21 -0
- package/integration-data/google-calendar/handlers/list_settings.js +4 -0
- package/integration-data/google-calendar/handlers/move_event.js +6 -0
- package/integration-data/google-calendar/handlers/patch_event.js +5 -0
- package/integration-data/google-calendar/handlers/quick_add.js +6 -0
- package/integration-data/google-calendar/handlers/update_acl.js +7 -0
- package/integration-data/google-calendar/handlers/update_event.js +5 -0
- package/integration-data/google-calendar/manifest.json +26 -0
- package/integration-data/google-calendar/schemas/create_event.json +34 -0
- package/integration-data/google-calendar/schemas/delete_acl.json +9 -0
- package/integration-data/google-calendar/schemas/empty.json +1 -0
- package/integration-data/google-calendar/schemas/freebusy_query.json +13 -0
- package/integration-data/google-calendar/schemas/get_acl.json +9 -0
- package/integration-data/google-calendar/schemas/id_calendar.json +8 -0
- package/integration-data/google-calendar/schemas/id_calendar_event.json +9 -0
- package/integration-data/google-calendar/schemas/insert_acl.json +18 -0
- package/integration-data/google-calendar/schemas/list_events.json +15 -0
- package/integration-data/google-calendar/schemas/move_event.json +10 -0
- package/integration-data/google-calendar/schemas/patch_event.json +10 -0
- package/integration-data/google-calendar/schemas/quick_add.json +9 -0
- package/integration-data/google-calendar/schemas/update_acl.json +10 -0
- package/integration-data/google-calendar/schemas/update_event.json +10 -0
- package/integration-data/google-docs/credentials.json +36 -0
- package/integration-data/google-docs/credentials_hint.md +9 -0
- package/integration-data/google-docs/handlers/append_text.js +12 -0
- package/integration-data/google-docs/handlers/batch_update.js +13 -0
- package/integration-data/google-docs/handlers/create_document.js +9 -0
- package/integration-data/google-docs/handlers/delete_first_match.js +50 -0
- package/integration-data/google-docs/handlers/get_document.js +12 -0
- package/integration-data/google-docs/handlers/get_document_structured.js +6 -0
- package/integration-data/google-docs/handlers/get_document_text.js +17 -0
- package/integration-data/google-docs/handlers/insert_inline_image_after_first_match.js +41 -0
- package/integration-data/google-docs/handlers/insert_page_break_after_first_match.js +49 -0
- package/integration-data/google-docs/handlers/insert_table_after_first_match.js +49 -0
- package/integration-data/google-docs/handlers/insert_text_after_first_match.js +51 -0
- package/integration-data/google-docs/handlers/replace_all_text.js +8 -0
- package/integration-data/google-docs/handlers/style_first_match.js +42 -0
- package/integration-data/google-docs/handlers/update_document_style.js +8 -0
- package/integration-data/google-docs/handlers/update_paragraph_style_for_first_match.js +48 -0
- package/integration-data/google-docs/manifest.json +58 -0
- package/integration-data/google-docs/schemas/append_text.json +10 -0
- package/integration-data/google-docs/schemas/apply_text_style.json +13 -0
- package/integration-data/google-docs/schemas/batch_update.json +16 -0
- package/integration-data/google-docs/schemas/create_document.json +8 -0
- package/integration-data/google-docs/schemas/delete_content_range.json +11 -0
- package/integration-data/google-docs/schemas/delete_first_match.json +10 -0
- package/integration-data/google-docs/schemas/get_document.json +11 -0
- package/integration-data/google-docs/schemas/get_document_structured.json +9 -0
- package/integration-data/google-docs/schemas/get_document_text.json +9 -0
- package/integration-data/google-docs/schemas/insert_inline_image.json +12 -0
- package/integration-data/google-docs/schemas/insert_inline_image_after_first_match.json +13 -0
- package/integration-data/google-docs/schemas/insert_page_break.json +10 -0
- package/integration-data/google-docs/schemas/insert_page_break_after_first_match.json +11 -0
- package/integration-data/google-docs/schemas/insert_table.json +12 -0
- package/integration-data/google-docs/schemas/insert_table_after_first_match.json +13 -0
- package/integration-data/google-docs/schemas/insert_text_after_first_match.json +12 -0
- package/integration-data/google-docs/schemas/insert_text_at.json +11 -0
- package/integration-data/google-docs/schemas/replace_all_text.json +12 -0
- package/integration-data/google-docs/schemas/style_first_match.json +12 -0
- package/integration-data/google-docs/schemas/update_document_style.json +11 -0
- package/integration-data/google-docs/schemas/update_paragraph_style.json +13 -0
- package/integration-data/google-docs/schemas/update_paragraph_style_for_first_match.json +12 -0
- package/integration-data/google-sheet/credentials.json +36 -0
- package/integration-data/google-sheet/credentials_hint.md +9 -0
- package/integration-data/google-sheet/handlers/append_values.js +18 -0
- package/integration-data/google-sheet/handlers/batch_clear_values.js +6 -0
- package/integration-data/google-sheet/handlers/batch_clear_values_by_data_filter.js +6 -0
- package/integration-data/google-sheet/handlers/batch_get_values.js +16 -0
- package/integration-data/google-sheet/handlers/batch_update.js +14 -0
- package/integration-data/google-sheet/handlers/batch_update_values.js +16 -0
- package/integration-data/google-sheet/handlers/batch_update_values_by_data_filter.js +16 -0
- package/integration-data/google-sheet/handlers/clear_values.js +6 -0
- package/integration-data/google-sheet/handlers/copy_to_spreadsheet.js +6 -0
- package/integration-data/google-sheet/handlers/create_spreadsheet.js +5 -0
- package/integration-data/google-sheet/handlers/get_developer_metadata.js +6 -0
- package/integration-data/google-sheet/handlers/get_spreadsheet.js +12 -0
- package/integration-data/google-sheet/handlers/get_spreadsheet_by_data_filter.js +10 -0
- package/integration-data/google-sheet/handlers/get_values.js +14 -0
- package/integration-data/google-sheet/handlers/get_values_by_data_filter.js +14 -0
- package/integration-data/google-sheet/handlers/search_developer_metadata.js +7 -0
- package/integration-data/google-sheet/handlers/update_values.js +16 -0
- package/integration-data/google-sheet/manifest.json +125 -0
- package/integration-data/google-sheet/schemas/append_values.json +16 -0
- package/integration-data/google-sheet/schemas/batch_clear_values.json +10 -0
- package/integration-data/google-sheet/schemas/batch_clear_values_by_data_filter.json +10 -0
- package/integration-data/google-sheet/schemas/batch_get_values.json +13 -0
- package/integration-data/google-sheet/schemas/batch_update.json +13 -0
- package/integration-data/google-sheet/schemas/batch_update_values.json +25 -0
- package/integration-data/google-sheet/schemas/batch_update_values_by_data_filter.json +25 -0
- package/integration-data/google-sheet/schemas/clear_values.json +10 -0
- package/integration-data/google-sheet/schemas/copy_to_spreadsheet.json +11 -0
- package/integration-data/google-sheet/schemas/create_spreadsheet.json +11 -0
- package/integration-data/google-sheet/schemas/get_developer_metadata.json +10 -0
- package/integration-data/google-sheet/schemas/get_spreadsheet.json +15 -0
- package/integration-data/google-sheet/schemas/get_spreadsheet_by_data_filter.json +11 -0
- package/integration-data/google-sheet/schemas/get_values.json +13 -0
- package/integration-data/google-sheet/schemas/get_values_by_data_filter.json +17 -0
- package/integration-data/google-sheet/schemas/search_developer_metadata.json +14 -0
- package/integration-data/google-sheet/schemas/update_values.json +15 -0
- package/integration-data/google-slides/credentials.json +36 -0
- package/integration-data/google-slides/credentials_hint.md +9 -0
- package/integration-data/google-slides/handlers/append_text_to_title_of_first_slide.js +17 -0
- package/integration-data/google-slides/handlers/batch_update.js +15 -0
- package/integration-data/google-slides/handlers/create_presentation.js +8 -0
- package/integration-data/google-slides/handlers/create_slide_after_first_match.js +20 -0
- package/integration-data/google-slides/handlers/get_page_thumbnail.js +12 -0
- package/integration-data/google-slides/handlers/get_presentation.js +6 -0
- package/integration-data/google-slides/handlers/insert_image_after_first_match.js +19 -0
- package/integration-data/google-slides/handlers/insert_shape_after_first_match.js +21 -0
- package/integration-data/google-slides/handlers/replace_text_first_match.js +9 -0
- package/integration-data/google-slides/handlers/set_background_color_for_slide_index.js +15 -0
- package/integration-data/google-slides/handlers/style_text_first_match.js +48 -0
- package/integration-data/google-slides/manifest.json +41 -0
- package/integration-data/google-slides/schemas/append_text_to_title_of_first_slide.json +11 -0
- package/integration-data/google-slides/schemas/batch_update.json +13 -0
- package/integration-data/google-slides/schemas/create_presentation.json +8 -0
- package/integration-data/google-slides/schemas/create_slide_after_first_match.json +11 -0
- package/integration-data/google-slides/schemas/get_page_thumbnail.json +12 -0
- package/integration-data/google-slides/schemas/get_presentation.json +9 -0
- package/integration-data/google-slides/schemas/insert_image_after_first_match.json +13 -0
- package/integration-data/google-slides/schemas/insert_shape_after_first_match.json +13 -0
- package/integration-data/google-slides/schemas/replace_text_first_match.json +12 -0
- package/integration-data/google-slides/schemas/set_background_color_for_slide_index.json +11 -0
- package/integration-data/google-slides/schemas/style_text_first_match.json +12 -0
- package/integration-data/new_integration_prompt.md +41 -0
- package/integration-data/notion/credentials.json +21 -0
- package/integration-data/notion/credentials_hint.md +5 -0
- package/integration-data/notion/handlers/append_block_children.js +7 -0
- package/integration-data/notion/handlers/create_comment.js +10 -0
- package/integration-data/notion/handlers/create_database.js +11 -0
- package/integration-data/notion/handlers/create_page.js +13 -0
- package/integration-data/notion/handlers/delete_block.js +8 -0
- package/integration-data/notion/handlers/get_me.js +4 -0
- package/integration-data/notion/handlers/list_block_children.js +10 -0
- package/integration-data/notion/handlers/list_comments.js +14 -0
- package/integration-data/notion/handlers/list_users.js +10 -0
- package/integration-data/notion/handlers/query_database.js +10 -0
- package/integration-data/notion/handlers/retrieve_block.js +4 -0
- package/integration-data/notion/handlers/retrieve_database.js +4 -0
- package/integration-data/notion/handlers/retrieve_page.js +4 -0
- package/integration-data/notion/handlers/retrieve_page_property_item.js +10 -0
- package/integration-data/notion/handlers/retrieve_user.js +4 -0
- package/integration-data/notion/handlers/search.js +11 -0
- package/integration-data/notion/handlers/update_block.js +7 -0
- package/integration-data/notion/handlers/update_database.js +10 -0
- package/integration-data/notion/handlers/update_page_properties.js +10 -0
- package/integration-data/notion/manifest.json +139 -0
- package/integration-data/notion/prompt.md +26 -0
- package/integration-data/notion/schemas/append_block_children.json +10 -0
- package/integration-data/notion/schemas/create_comment.json +18 -0
- package/integration-data/notion/schemas/create_database.json +18 -0
- package/integration-data/notion/schemas/create_page.json +22 -0
- package/integration-data/notion/schemas/delete_block.json +9 -0
- package/integration-data/notion/schemas/empty.json +6 -0
- package/integration-data/notion/schemas/id_block.json +9 -0
- package/integration-data/notion/schemas/id_database.json +9 -0
- package/integration-data/notion/schemas/id_page.json +9 -0
- package/integration-data/notion/schemas/id_user.json +9 -0
- package/integration-data/notion/schemas/list_block_children.json +11 -0
- package/integration-data/notion/schemas/list_comments.json +15 -0
- package/integration-data/notion/schemas/list_users.json +9 -0
- package/integration-data/notion/schemas/query_database.json +13 -0
- package/integration-data/notion/schemas/retrieve_page_property_item.json +12 -0
- package/integration-data/notion/schemas/search.json +27 -0
- package/integration-data/notion/schemas/update_block.json +10 -0
- package/integration-data/notion/schemas/update_database.json +13 -0
- package/integration-data/notion/schemas/update_page_properties.json +13 -0
- package/integration-data/trello/credentials.json +26 -0
- package/integration-data/trello/credentials_hint.md +4 -0
- package/integration-data/trello/handlers/add_checklist_to_card.js +5 -0
- package/integration-data/trello/handlers/add_member_to_card.js +5 -0
- package/integration-data/trello/handlers/archive_list.js +5 -0
- package/integration-data/trello/handlers/create_card.js +13 -0
- package/integration-data/trello/handlers/create_list.js +7 -0
- package/integration-data/trello/handlers/delete_card.js +9 -0
- package/integration-data/trello/handlers/get_board.js +4 -0
- package/integration-data/trello/handlers/get_board_cards.js +4 -0
- package/integration-data/trello/handlers/get_board_custom_fields.js +4 -0
- package/integration-data/trello/handlers/get_board_labels.js +4 -0
- package/integration-data/trello/handlers/get_board_lists.js +4 -0
- package/integration-data/trello/handlers/get_board_members.js +4 -0
- package/integration-data/trello/handlers/get_board_memberships.js +4 -0
- package/integration-data/trello/handlers/get_card.js +4 -0
- package/integration-data/trello/handlers/get_card_actions.js +4 -0
- package/integration-data/trello/handlers/get_card_attachments.js +4 -0
- package/integration-data/trello/handlers/get_card_checklists.js +4 -0
- package/integration-data/trello/handlers/get_card_custom_field_items.js +4 -0
- package/integration-data/trello/handlers/get_card_members.js +4 -0
- package/integration-data/trello/handlers/get_list.js +4 -0
- package/integration-data/trello/handlers/get_list_cards.js +4 -0
- package/integration-data/trello/handlers/get_member.js +4 -0
- package/integration-data/trello/handlers/get_member_boards.js +4 -0
- package/integration-data/trello/handlers/get_member_organizations.js +4 -0
- package/integration-data/trello/handlers/get_organization.js +4 -0
- package/integration-data/trello/handlers/get_organization_boards.js +4 -0
- package/integration-data/trello/handlers/move_card_to_list.js +5 -0
- package/integration-data/trello/handlers/remove_member_from_card.js +9 -0
- package/integration-data/trello/handlers/search.js +5 -0
- package/integration-data/trello/handlers/update_card.js +19 -0
- package/integration-data/trello/handlers/update_list.js +11 -0
- package/integration-data/trello/manifest.json +231 -0
- package/integration-data/trello/schemas/add_checklist_to_card.json +10 -0
- package/integration-data/trello/schemas/add_member_to_card.json +10 -0
- package/integration-data/trello/schemas/archive_list.json +9 -0
- package/integration-data/trello/schemas/create_card.json +13 -0
- package/integration-data/trello/schemas/create_list.json +11 -0
- package/integration-data/trello/schemas/delete_card.json +9 -0
- package/integration-data/trello/schemas/display_trello_cards.json +45 -0
- package/integration-data/trello/schemas/empty.json +5 -0
- package/integration-data/trello/schemas/get_member.json +5 -0
- package/integration-data/trello/schemas/id_board.json +8 -0
- package/integration-data/trello/schemas/id_card.json +8 -0
- package/integration-data/trello/schemas/id_list.json +8 -0
- package/integration-data/trello/schemas/id_org.json +8 -0
- package/integration-data/trello/schemas/move_card_to_list.json +10 -0
- package/integration-data/trello/schemas/remove_member_from_card.json +10 -0
- package/integration-data/trello/schemas/search.json +8 -0
- package/integration-data/trello/schemas/update_card.json +16 -0
- package/integration-data/trello/schemas/update_list.json +12 -0
- package/package.json +61 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { JWT } from 'google-auth-library';
|
|
2
|
+
const cache = new Map();
|
|
3
|
+
function cacheKey(args) {
|
|
4
|
+
// Keep key stable but avoid storing the entire JSON as a Map key.
|
|
5
|
+
// client_email is a stable identifier and not secret by itself.
|
|
6
|
+
let email = 'unknown';
|
|
7
|
+
try {
|
|
8
|
+
const parsed = JSON.parse(args.serviceAccountJson || '{}');
|
|
9
|
+
if (typeof parsed?.client_email === 'string')
|
|
10
|
+
email = parsed.client_email;
|
|
11
|
+
}
|
|
12
|
+
catch { }
|
|
13
|
+
const scopesKey = [...args.scopes].sort().join(' ');
|
|
14
|
+
const subjectKey = args.subject || '';
|
|
15
|
+
return `${email}::${subjectKey}::${scopesKey}`;
|
|
16
|
+
}
|
|
17
|
+
export async function getGoogleAccessToken(args) {
|
|
18
|
+
if (!args.serviceAccountJson)
|
|
19
|
+
throw new Error('Missing serviceAccountJson');
|
|
20
|
+
if (!Array.isArray(args.scopes) || !args.scopes.length)
|
|
21
|
+
throw new Error('Missing scopes');
|
|
22
|
+
const key = cacheKey(args);
|
|
23
|
+
const existing = cache.get(key);
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
if (existing && existing.expiresAtMs - now > 60_000)
|
|
26
|
+
return existing.token;
|
|
27
|
+
let parsed;
|
|
28
|
+
try {
|
|
29
|
+
parsed = JSON.parse(args.serviceAccountJson);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new Error('serviceAccountJson must be valid JSON');
|
|
33
|
+
}
|
|
34
|
+
const clientEmail = parsed?.client_email;
|
|
35
|
+
const privateKey = parsed?.private_key;
|
|
36
|
+
if (typeof clientEmail !== 'string' || !clientEmail.trim())
|
|
37
|
+
throw new Error('serviceAccountJson is missing client_email');
|
|
38
|
+
if (typeof privateKey !== 'string' || !privateKey.trim())
|
|
39
|
+
throw new Error('serviceAccountJson is missing private_key');
|
|
40
|
+
const jwt = new JWT({
|
|
41
|
+
email: clientEmail,
|
|
42
|
+
key: privateKey,
|
|
43
|
+
scopes: args.scopes,
|
|
44
|
+
subject: args.subject,
|
|
45
|
+
});
|
|
46
|
+
const res = await jwt.authorize();
|
|
47
|
+
const token = res?.access_token;
|
|
48
|
+
if (!token)
|
|
49
|
+
throw new Error('Failed to mint Google access token');
|
|
50
|
+
const expiresAtMs = typeof res.expiry_date === 'number' ? res.expiry_date : (now + 55 * 60_000);
|
|
51
|
+
cache.set(key, { token, expiresAtMs });
|
|
52
|
+
return token;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=googleServiceAccount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleServiceAccount.js","sourceRoot":"","sources":["../../src/integrations/googleServiceAccount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerRegistry.d.ts","sourceRoot":"","sources":["../../src/integrations/providerRegistry.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAgDzC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export const PROVIDERS = {
|
|
2
|
+
'http': {
|
|
3
|
+
baseUrl: '',
|
|
4
|
+
makeAuth: () => ({}),
|
|
5
|
+
},
|
|
6
|
+
'trello': {
|
|
7
|
+
baseUrl: 'https://api.trello.com/1',
|
|
8
|
+
makeAuth: (token, apiKey) => ({ key: apiKey, token }),
|
|
9
|
+
},
|
|
10
|
+
'slack': {
|
|
11
|
+
baseUrl: 'https://slack.com/api',
|
|
12
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
13
|
+
},
|
|
14
|
+
'airtable': {
|
|
15
|
+
baseUrl: 'https://api.airtable.com/v0',
|
|
16
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
17
|
+
},
|
|
18
|
+
'github': {
|
|
19
|
+
baseUrl: 'https://api.github.com',
|
|
20
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
21
|
+
},
|
|
22
|
+
'notion': {
|
|
23
|
+
baseUrl: 'https://api.notion.com/v1',
|
|
24
|
+
makeAuth: (token) => ({
|
|
25
|
+
'Authorization': `Bearer ${token}`,
|
|
26
|
+
'Notion-Version': '2022-06-28',
|
|
27
|
+
}),
|
|
28
|
+
},
|
|
29
|
+
'google-calendar': {
|
|
30
|
+
baseUrl: 'https://www.googleapis.com/calendar/v3',
|
|
31
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
32
|
+
},
|
|
33
|
+
'google-sheet': {
|
|
34
|
+
baseUrl: 'https://sheets.googleapis.com/v4',
|
|
35
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
36
|
+
},
|
|
37
|
+
'google-docs': {
|
|
38
|
+
baseUrl: 'https://docs.googleapis.com/v1',
|
|
39
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
40
|
+
},
|
|
41
|
+
'google-slides': {
|
|
42
|
+
baseUrl: 'https://slides.googleapis.com/v1',
|
|
43
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
44
|
+
},
|
|
45
|
+
'jira': {
|
|
46
|
+
baseUrl: (sub) => `https://api.atlassian.com/ex/jira/${sub}`,
|
|
47
|
+
makeAuth: (token) => ({ Authorization: `Bearer ${token}` }),
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=providerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerRegistry.js","sourceRoot":"","sources":["../../src/integrations/providerRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACrB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,0BAA0B;QACnC,QAAQ,EAAE,CAAC,KAAa,EAAE,MAAc,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;KACtE;IACD,OAAO,EAAE;QACP,OAAO,EAAE,uBAAuB;QAChC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,UAAU,EAAE;QACV,OAAO,EAAE,6BAA6B;QACtC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,wBAAwB;QACjC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,2BAA2B;QACpC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;YAC5B,eAAe,EAAE,UAAU,KAAK,EAAE;YAClC,gBAAgB,EAAE,YAAY;SAC/B,CAAC;KACH;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,wCAAwC;QACjD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,cAAc,EAAE;QACd,OAAO,EAAE,kCAAkC;QAC3C,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,aAAa,EAAE;QACb,OAAO,EAAE,gCAAgC;QACzC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,eAAe,EAAE;QACf,OAAO,EAAE,kCAAkC;QAC3C,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;IACD,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,qCAAqC,GAAG,EAAE;QACpE,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC;KACpE;CACF,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IntegrationData } from '../types.js';
|
|
2
|
+
export interface CredentialStore {
|
|
3
|
+
getCredentials: (spaceId: string, credentialId: string) => Promise<Record<string, string> | null>;
|
|
4
|
+
}
|
|
5
|
+
export interface IntegrationProxyOptions {
|
|
6
|
+
managedOAuthSecretKey?: string;
|
|
7
|
+
managedOAuthBaseUrl?: string;
|
|
8
|
+
trelloApiKey?: string;
|
|
9
|
+
credentialStore?: CredentialStore;
|
|
10
|
+
}
|
|
11
|
+
export declare class IntegrationProxy {
|
|
12
|
+
private readonly opts;
|
|
13
|
+
constructor(opts?: IntegrationProxyOptions);
|
|
14
|
+
call(integration: IntegrationData, path: string, init?: RequestInit): Promise<Response>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/integrations/proxy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;CAClG;AAED,MAAM,WAAW,uBAAuB;IAEtC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAE5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,uBAA4B;IAEzD,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAiWlG"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { HttpError } from '../errors/httpError.js';
|
|
3
|
+
import { PROVIDERS } from './providerRegistry.js';
|
|
4
|
+
import { loadIntegrationCredentialConfig } from './dataLoader.js';
|
|
5
|
+
import { getGoogleAccessToken } from './googleServiceAccount.js';
|
|
6
|
+
export class IntegrationProxy {
|
|
7
|
+
opts;
|
|
8
|
+
constructor(opts = {}) {
|
|
9
|
+
this.opts = opts;
|
|
10
|
+
}
|
|
11
|
+
async call(integration, path, init = {}) {
|
|
12
|
+
const { type: provider, connectionId } = integration;
|
|
13
|
+
if (!provider || !path)
|
|
14
|
+
throw new HttpError(400, 'provider and path are required.');
|
|
15
|
+
const joinWithoutDuplicateSegments = (baseUrl, rawPath) => {
|
|
16
|
+
let pathOnly = rawPath || '';
|
|
17
|
+
let queryPart = '';
|
|
18
|
+
const qIndex = pathOnly.indexOf('?');
|
|
19
|
+
if (qIndex >= 0) {
|
|
20
|
+
queryPart = pathOnly.slice(qIndex + 1);
|
|
21
|
+
pathOnly = pathOnly.slice(0, qIndex);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const base = new URL(baseUrl);
|
|
25
|
+
const baseSegs = base.pathname.split('/').filter(Boolean);
|
|
26
|
+
const pathSegs = (pathOnly || '/').split('/').filter(Boolean);
|
|
27
|
+
let overlap = 0;
|
|
28
|
+
const maxK = Math.min(baseSegs.length, pathSegs.length);
|
|
29
|
+
for (let k = maxK; k >= 1; k--) {
|
|
30
|
+
let ok = true;
|
|
31
|
+
for (let i = 0; i < k; i++) {
|
|
32
|
+
if (baseSegs[baseSegs.length - k + i] !== pathSegs[i]) {
|
|
33
|
+
ok = false;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (ok) {
|
|
38
|
+
overlap = k;
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const normalizedPath = `/${[...baseSegs, ...pathSegs.slice(overlap)].join('/')}`;
|
|
43
|
+
const baseOrigin = base.origin;
|
|
44
|
+
const urlNoQuery = `${baseOrigin}${normalizedPath}`;
|
|
45
|
+
return queryPart ? `${urlNoQuery}?${queryPart}` : urlNoQuery;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
const cleanedBase = baseUrl.replace(/\/+$/, '');
|
|
49
|
+
const cleanedPath = (`/${(pathOnly || '').replace(/^\/+/, '')}`);
|
|
50
|
+
const baseParts = cleanedBase.split('/').filter(Boolean);
|
|
51
|
+
const pathParts = cleanedPath.split('/').filter(Boolean);
|
|
52
|
+
let overlap = 0;
|
|
53
|
+
const maxK = Math.min(baseParts.length, pathParts.length);
|
|
54
|
+
for (let k = maxK; k >= 1; k--) {
|
|
55
|
+
let ok = true;
|
|
56
|
+
for (let i = 0; i < k; i++) {
|
|
57
|
+
if (baseParts[baseParts.length - k + i] !== pathParts[i]) {
|
|
58
|
+
ok = false;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (ok) {
|
|
63
|
+
overlap = k;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const joined = `/${[...baseParts, ...pathParts.slice(overlap)].join('/')}`;
|
|
68
|
+
return queryPart ? `${joined}?${queryPart}` : joined;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
if (provider === 'http') {
|
|
72
|
+
const cfg = integration.config || {};
|
|
73
|
+
const baseUrl = cfg.baseUrl;
|
|
74
|
+
if (!baseUrl)
|
|
75
|
+
throw new HttpError(400, 'HTTP integration requires a baseUrl in its config.');
|
|
76
|
+
const authType = cfg.authType || 'none';
|
|
77
|
+
const preparedInit = { ...init };
|
|
78
|
+
if (preparedInit.body !== undefined && typeof preparedInit.body !== 'string') {
|
|
79
|
+
preparedInit.body = JSON.stringify(preparedInit.body);
|
|
80
|
+
preparedInit.headers = {
|
|
81
|
+
'Content-Type': 'application/json',
|
|
82
|
+
...preparedInit.headers,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const authHeaders = {};
|
|
86
|
+
const authQuery = new URLSearchParams();
|
|
87
|
+
if (authType === 'api_key_header' && cfg.apiKeyHeaderName && cfg.apiKey) {
|
|
88
|
+
authHeaders[cfg.apiKeyHeaderName] = cfg.apiKey;
|
|
89
|
+
}
|
|
90
|
+
else if (authType === 'api_key_query' && cfg.apiKeyQueryParam && cfg.apiKey) {
|
|
91
|
+
authQuery.set(cfg.apiKeyQueryParam, cfg.apiKey);
|
|
92
|
+
}
|
|
93
|
+
else if (authType === 'basic' && cfg.basicUsername !== undefined && cfg.basicPassword !== undefined) {
|
|
94
|
+
const token = Buffer.from(`${cfg.basicUsername}:${cfg.basicPassword}`).toString('base64');
|
|
95
|
+
authHeaders.Authorization = `Basic ${token}`;
|
|
96
|
+
}
|
|
97
|
+
else if (authType === 'custom') {
|
|
98
|
+
if (cfg.customHeaders)
|
|
99
|
+
Object.assign(authHeaders, cfg.customHeaders);
|
|
100
|
+
if (cfg.customQuery) {
|
|
101
|
+
for (const [k, v] of Object.entries(cfg.customQuery))
|
|
102
|
+
authQuery.set(k, v);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const authQueryString = authQuery.toString();
|
|
106
|
+
let finalUrl = joinWithoutDuplicateSegments(baseUrl, path);
|
|
107
|
+
if (authQueryString)
|
|
108
|
+
finalUrl = finalUrl + (finalUrl.includes('?') ? '&' : '?') + authQueryString;
|
|
109
|
+
const response = await fetch(finalUrl, {
|
|
110
|
+
...preparedInit,
|
|
111
|
+
method: preparedInit.method || 'GET',
|
|
112
|
+
headers: {
|
|
113
|
+
...preparedInit.headers,
|
|
114
|
+
...authHeaders,
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
const contentType = response.headers.get('content-type') || '';
|
|
119
|
+
let bodyText = '';
|
|
120
|
+
try {
|
|
121
|
+
bodyText = contentType.includes('json') ? JSON.stringify(await response.json()) : await response.text();
|
|
122
|
+
}
|
|
123
|
+
catch { }
|
|
124
|
+
const redactedUrl = cfg.apiKey ? finalUrl.replace(cfg.apiKey, '***') : finalUrl;
|
|
125
|
+
throw new HttpError(response.status, 'Failed to proxy request to http integration.', {
|
|
126
|
+
status: response.status,
|
|
127
|
+
url: redactedUrl,
|
|
128
|
+
contentType,
|
|
129
|
+
body: bodyText?.slice(0, 4000),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return response;
|
|
133
|
+
}
|
|
134
|
+
const usesCredentials = integration.connectionMethod === 'credentials';
|
|
135
|
+
if (usesCredentials) {
|
|
136
|
+
if (!this.opts.credentialStore)
|
|
137
|
+
throw new HttpError(500, 'Credential storage is not configured.');
|
|
138
|
+
const spaceId = integration.spaceId;
|
|
139
|
+
if (!spaceId)
|
|
140
|
+
throw new HttpError(400, 'spaceId is required for credentials-based integrations.');
|
|
141
|
+
const credentialId = integration.credentialId;
|
|
142
|
+
if (!credentialId)
|
|
143
|
+
throw new HttpError(400, 'credentialId is required for credentials-based integrations.');
|
|
144
|
+
const credCfg = loadIntegrationCredentialConfig(provider);
|
|
145
|
+
if (!credCfg)
|
|
146
|
+
throw new HttpError(501, `Provider '${provider}' does not support credentials-based auth yet.`);
|
|
147
|
+
const creds = await this.opts.credentialStore.getCredentials(spaceId, credentialId);
|
|
148
|
+
if (!creds)
|
|
149
|
+
throw new HttpError(400, 'No credentials are configured for this integration.');
|
|
150
|
+
if (provider.startsWith('google-')) {
|
|
151
|
+
const maybeToken = creds.token;
|
|
152
|
+
const serviceAccountJson = creds.serviceAccountJson;
|
|
153
|
+
if (!maybeToken && !serviceAccountJson) {
|
|
154
|
+
throw new HttpError(400, `Google integration '${provider}' requires either a 'token' or 'serviceAccountJson' credential.`);
|
|
155
|
+
}
|
|
156
|
+
if (!maybeToken && serviceAccountJson) {
|
|
157
|
+
const subject = typeof creds.subject === 'string' ? creds.subject : undefined;
|
|
158
|
+
const rawScopes = creds.scopes;
|
|
159
|
+
const scopesFromCreds = Array.isArray(rawScopes)
|
|
160
|
+
? rawScopes.map((s) => String(s)).filter(Boolean)
|
|
161
|
+
: (typeof rawScopes === 'string'
|
|
162
|
+
? rawScopes.split(/[,\s]+/g).map(s => s.trim()).filter(Boolean)
|
|
163
|
+
: []);
|
|
164
|
+
const defaultScopes = {
|
|
165
|
+
'google-sheet': ['https://www.googleapis.com/auth/spreadsheets'],
|
|
166
|
+
'google-docs': ['https://www.googleapis.com/auth/documents', 'https://www.googleapis.com/auth/drive'],
|
|
167
|
+
'google-slides': ['https://www.googleapis.com/auth/presentations', 'https://www.googleapis.com/auth/drive'],
|
|
168
|
+
'google-calendar': ['https://www.googleapis.com/auth/calendar'],
|
|
169
|
+
};
|
|
170
|
+
const scopes = scopesFromCreds.length ? scopesFromCreds : (defaultScopes[provider] || []);
|
|
171
|
+
if (!scopes.length)
|
|
172
|
+
throw new HttpError(400, `Missing OAuth scopes for Google integration '${provider}'.`);
|
|
173
|
+
const token = await getGoogleAccessToken({ serviceAccountJson, scopes, subject });
|
|
174
|
+
creds.token = token;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const resolveTemplate = (template) => {
|
|
178
|
+
return String(template).replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g, (_m, key) => {
|
|
179
|
+
const v = creds[key];
|
|
180
|
+
if (v === undefined || v === null)
|
|
181
|
+
throw new HttpError(400, `Missing credential field '${key}'.`);
|
|
182
|
+
return String(v);
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
const resolvedHeaders = {};
|
|
186
|
+
const resolvedQuery = new URLSearchParams();
|
|
187
|
+
for (const [k, v] of Object.entries(credCfg.injection?.headers || {}))
|
|
188
|
+
resolvedHeaders[k] = resolveTemplate(v);
|
|
189
|
+
for (const [k, v] of Object.entries(credCfg.injection?.query || {}))
|
|
190
|
+
resolvedQuery.set(k, resolveTemplate(v));
|
|
191
|
+
const providerCfg = PROVIDERS[provider];
|
|
192
|
+
if (!providerCfg)
|
|
193
|
+
throw new HttpError(501, `Provider '${provider}' is not configured in the server proxy.`);
|
|
194
|
+
const baseUrl = typeof providerCfg.baseUrl === 'function' ? providerCfg.baseUrl( /* todo */) : providerCfg.baseUrl;
|
|
195
|
+
let finalUrl = joinWithoutDuplicateSegments(baseUrl, path);
|
|
196
|
+
const queryString = resolvedQuery.toString();
|
|
197
|
+
if (queryString)
|
|
198
|
+
finalUrl = finalUrl + (finalUrl.includes('?') ? '&' : '?') + queryString;
|
|
199
|
+
const preparedInit = { ...init };
|
|
200
|
+
if (preparedInit.body !== undefined && typeof preparedInit.body !== 'string') {
|
|
201
|
+
preparedInit.body = JSON.stringify(preparedInit.body);
|
|
202
|
+
preparedInit.headers = {
|
|
203
|
+
'Content-Type': 'application/json',
|
|
204
|
+
...preparedInit.headers,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const redact = (s) => {
|
|
208
|
+
let out = s;
|
|
209
|
+
for (const val of Object.values(creds)) {
|
|
210
|
+
if (typeof val === 'string' && val.length)
|
|
211
|
+
out = out.split(val).join('***');
|
|
212
|
+
}
|
|
213
|
+
return out;
|
|
214
|
+
};
|
|
215
|
+
const response = await fetch(finalUrl, {
|
|
216
|
+
...preparedInit,
|
|
217
|
+
method: preparedInit.method || 'GET',
|
|
218
|
+
headers: {
|
|
219
|
+
...preparedInit.headers,
|
|
220
|
+
...resolvedHeaders,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
if (!response.ok) {
|
|
224
|
+
const contentType = response.headers.get('content-type') || '';
|
|
225
|
+
let bodyText = '';
|
|
226
|
+
try {
|
|
227
|
+
bodyText = contentType.includes('json') ? JSON.stringify(await response.json()) : await response.text();
|
|
228
|
+
}
|
|
229
|
+
catch { }
|
|
230
|
+
throw new HttpError(response.status, `Failed to proxy request to ${provider}.`, {
|
|
231
|
+
status: response.status,
|
|
232
|
+
url: redact(finalUrl),
|
|
233
|
+
contentType,
|
|
234
|
+
body: bodyText?.slice(0, 4000),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return response;
|
|
238
|
+
}
|
|
239
|
+
// Managed OAuth branch: used by hosted deployments / CI.
|
|
240
|
+
if (!connectionId)
|
|
241
|
+
throw new HttpError(400, 'connectionId is required for non-http providers.');
|
|
242
|
+
if (!this.opts.managedOAuthBaseUrl || !this.opts.managedOAuthSecretKey)
|
|
243
|
+
throw new HttpError(501, 'Managed OAuth is not configured for this server.');
|
|
244
|
+
let managedConnection;
|
|
245
|
+
try {
|
|
246
|
+
const managedUrl = `${this.opts.managedOAuthBaseUrl}/connection/${encodeURIComponent(connectionId)}?provider_config_key=${encodeURIComponent(provider)}`;
|
|
247
|
+
const resp = await fetch(managedUrl, {
|
|
248
|
+
headers: { Authorization: `Bearer ${this.opts.managedOAuthSecretKey}` },
|
|
249
|
+
});
|
|
250
|
+
if (!resp.ok)
|
|
251
|
+
throw new Error(`Managed OAuth connection lookup failed (${resp.status})`);
|
|
252
|
+
managedConnection = await resp.json();
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
console.error('Failed to fetch connection details from managed OAuth gateway:', error);
|
|
256
|
+
throw new HttpError(502, 'Failed to retrieve connection details from managed OAuth gateway.');
|
|
257
|
+
}
|
|
258
|
+
const providerId = provider;
|
|
259
|
+
const providerCfg = PROVIDERS[providerId];
|
|
260
|
+
const creds = managedConnection.credentials || {};
|
|
261
|
+
const userAccessToken = creds.access_token || creds.oauth_token || creds.token;
|
|
262
|
+
if (!providerCfg)
|
|
263
|
+
throw new HttpError(501, `Provider '${providerId}' is not configured in the server proxy.`);
|
|
264
|
+
const baseUrl = typeof providerCfg.baseUrl === 'function' ? providerCfg.baseUrl( /* todo */) : providerCfg.baseUrl;
|
|
265
|
+
const finalUrl = joinWithoutDuplicateSegments(baseUrl, path);
|
|
266
|
+
try {
|
|
267
|
+
const preparedInit = { ...init };
|
|
268
|
+
if (preparedInit.body !== undefined && typeof preparedInit.body !== 'string') {
|
|
269
|
+
preparedInit.body = JSON.stringify(preparedInit.body);
|
|
270
|
+
preparedInit.headers = {
|
|
271
|
+
'Content-Type': 'application/json',
|
|
272
|
+
...preparedInit.headers,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
if (providerId === 'trello') {
|
|
276
|
+
if (!this.opts.trelloApiKey)
|
|
277
|
+
throw new HttpError(500, 'Trello API key is not configured.');
|
|
278
|
+
const queryParams = new URLSearchParams({
|
|
279
|
+
...providerCfg.makeAuth(userAccessToken, this.opts.trelloApiKey),
|
|
280
|
+
}).toString();
|
|
281
|
+
const urlWithAuth = finalUrl + (finalUrl.includes('?') ? '&' : '?') + queryParams;
|
|
282
|
+
const response = await fetch(urlWithAuth, { ...preparedInit, method: preparedInit.method || 'GET' });
|
|
283
|
+
if (!response.ok) {
|
|
284
|
+
const contentType = response.headers.get('content-type') || '';
|
|
285
|
+
let bodyText = '';
|
|
286
|
+
try {
|
|
287
|
+
bodyText = contentType.includes('json') ? JSON.stringify(await response.json()) : await response.text();
|
|
288
|
+
}
|
|
289
|
+
catch { }
|
|
290
|
+
throw new HttpError(response.status, `Failed to proxy request to ${providerId}.`, {
|
|
291
|
+
status: response.status,
|
|
292
|
+
url: urlWithAuth,
|
|
293
|
+
contentType,
|
|
294
|
+
body: bodyText?.slice(0, 4000),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return response;
|
|
298
|
+
}
|
|
299
|
+
const response = await fetch(finalUrl, {
|
|
300
|
+
...preparedInit,
|
|
301
|
+
method: preparedInit.method || 'GET',
|
|
302
|
+
headers: {
|
|
303
|
+
...preparedInit.headers,
|
|
304
|
+
...providerCfg.makeAuth(userAccessToken),
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
if (!response.ok) {
|
|
308
|
+
const contentType = response.headers.get('content-type') || '';
|
|
309
|
+
let bodyText = '';
|
|
310
|
+
try {
|
|
311
|
+
bodyText = contentType.includes('json') ? JSON.stringify(await response.json()) : await response.text();
|
|
312
|
+
}
|
|
313
|
+
catch { }
|
|
314
|
+
throw new HttpError(response.status, `Failed to proxy request to ${providerId}.`, {
|
|
315
|
+
status: response.status,
|
|
316
|
+
url: finalUrl,
|
|
317
|
+
contentType,
|
|
318
|
+
body: bodyText?.slice(0, 4000),
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
return response;
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
console.error(`Error proxying request to ${providerId}:`, error);
|
|
325
|
+
if (error && typeof error === 'object' && 'statusCode' in error)
|
|
326
|
+
throw error;
|
|
327
|
+
throw new HttpError(500, `Failed to proxy request to ${providerId}.`, error?.message);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/integrations/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function loadWorkflowModule(source: string, getIntegration?: Function): Promise<any>;
|
|
2
|
+
export declare function createSafeHandlerFromString(handlerString: string, getIntegration: Function): (args: any) => Promise<{
|
|
3
|
+
success: boolean;
|
|
4
|
+
result: any;
|
|
5
|
+
logs: string[];
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/integrations/sandbox.ts"],"names":[],"mappings":"AAiBA,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAkFhG;AAED,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,QAAQ,GACvB,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAyE3E"}
|