@hasna/connectors 1.3.2 → 1.3.5
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/bin/index.js +2123 -248
- package/bin/mcp.js +1722 -176
- package/bin/serve.js +1252 -128
- package/connectors/connect-aiagenttool/src/api/client.ts +18 -205
- package/connectors/connect-aiagenttool/src/api/index.ts +32 -43
- package/connectors/connect-aiagenttool/src/types/index.ts +7 -233
- package/connectors/connect-airbrake/src/api/client.ts +25 -208
- package/connectors/connect-airbrake/src/api/index.ts +31 -44
- package/connectors/connect-airbrake/src/types/index.ts +10 -233
- package/connectors/connect-airnow/src/api/client.ts +16 -204
- package/connectors/connect-airnow/src/api/index.ts +32 -43
- package/connectors/connect-airnow/src/types/index.ts +5 -233
- package/connectors/connect-airtop/src/api/client.ts +18 -205
- package/connectors/connect-airtop/src/api/index.ts +35 -41
- package/connectors/connect-airtop/src/types/index.ts +9 -233
- package/connectors/connect-aitableai/src/api/client.ts +18 -205
- package/connectors/connect-aitableai/src/api/index.ts +35 -43
- package/connectors/connect-aitableai/src/types/index.ts +10 -233
- package/connectors/connect-alchemy/src/api/client.ts +33 -207
- package/connectors/connect-alchemy/src/api/index.ts +38 -44
- package/connectors/connect-alchemy/src/types/index.ts +13 -235
- package/connectors/connect-alerty/src/api/client.ts +18 -205
- package/connectors/connect-alerty/src/api/index.ts +29 -44
- package/connectors/connect-alerty/src/types/index.ts +9 -233
- package/connectors/connect-alienvault/src/api/client.ts +18 -205
- package/connectors/connect-alienvault/src/api/index.ts +34 -44
- package/connectors/connect-alienvault/src/types/index.ts +9 -233
- package/connectors/connect-alphamoon/src/api/client.ts +19 -206
- package/connectors/connect-alphamoon/src/api/index.ts +30 -42
- package/connectors/connect-alphamoon/src/types/index.ts +10 -233
- package/connectors/connect-alttextai/src/api/client.ts +18 -205
- package/connectors/connect-alttextai/src/api/index.ts +20 -43
- package/connectors/connect-alttextai/src/types/index.ts +7 -233
- package/connectors/connect-amadeus/src/api/client.ts +2 -2
- package/connectors/connect-amilia/src/api/client.ts +26 -211
- package/connectors/connect-amilia/src/api/index.ts +27 -44
- package/connectors/connect-amilia/src/types/index.ts +9 -233
- package/connectors/connect-amqpsender/src/api/client.ts +35 -212
- package/connectors/connect-amqpsender/src/api/index.ts +35 -42
- package/connectors/connect-amqpsender/src/types/index.ts +8 -233
- package/connectors/connect-announcekit/src/api/client.ts +19 -206
- package/connectors/connect-announcekit/src/api/index.ts +30 -43
- package/connectors/connect-announcekit/src/types/index.ts +8 -233
- package/connectors/connect-anthropic/src/api/messages.ts +2 -2
- package/connectors/connect-apiary/src/api/client.ts +19 -206
- package/connectors/connect-apiary/src/api/index.ts +23 -44
- package/connectors/connect-apiary/src/types/index.ts +9 -233
- package/connectors/connect-apiflash/src/api/client.ts +19 -204
- package/connectors/connect-apiflash/src/api/index.ts +48 -43
- package/connectors/connect-apiflash/src/types/index.ts +29 -235
- package/connectors/connect-apitemplateio/src/api/client.ts +18 -205
- package/connectors/connect-apitemplateio/src/api/index.ts +27 -43
- package/connectors/connect-apitemplateio/src/types/index.ts +8 -233
- package/connectors/connect-apptivegrid/src/api/client.ts +19 -205
- package/connectors/connect-apptivegrid/src/api/index.ts +32 -43
- package/connectors/connect-apptivegrid/src/types/index.ts +9 -233
- package/connectors/connect-arxiv/CLAUDE.md +80 -0
- package/connectors/connect-arxiv/package.json +23 -0
- package/connectors/connect-arxiv/src/api/client.ts +203 -0
- package/connectors/connect-arxiv/src/api/index.ts +47 -0
- package/connectors/connect-arxiv/src/cli/index.ts +229 -0
- package/connectors/connect-arxiv/src/index.ts +4 -0
- package/connectors/connect-arxiv/src/types/index.ts +40 -0
- package/connectors/connect-arxiv/src/utils/config.ts +71 -0
- package/connectors/connect-arxiv/src/utils/output.ts +28 -0
- package/connectors/connect-arxiv/tsconfig.json +16 -0
- package/connectors/connect-auth0/src/api/client.ts +20 -206
- package/connectors/connect-auth0/src/api/index.ts +47 -45
- package/connectors/connect-auth0/src/types/index.ts +9 -233
- package/connectors/connect-autom/src/api/client.ts +18 -205
- package/connectors/connect-autom/src/api/index.ts +33 -43
- package/connectors/connect-autom/src/types/index.ts +8 -233
- package/connectors/connect-automizy/src/api/client.ts +19 -206
- package/connectors/connect-automizy/src/api/index.ts +37 -45
- package/connectors/connect-automizy/src/types/index.ts +10 -233
- package/connectors/connect-autopilot/src/api/client.ts +18 -205
- package/connectors/connect-autopilot/src/api/index.ts +34 -42
- package/connectors/connect-autopilot/src/types/index.ts +8 -233
- package/connectors/connect-azureaisearchvectorstore/src/api/client.ts +21 -204
- package/connectors/connect-azureaisearchvectorstore/src/api/index.ts +31 -41
- package/connectors/connect-azureaisearchvectorstore/src/types/index.ts +9 -233
- package/connectors/connect-azurecosmosdb/src/api/client.ts +32 -204
- package/connectors/connect-azurecosmosdb/src/api/index.ts +42 -43
- package/connectors/connect-azurecosmosdb/src/types/index.ts +9 -233
- package/connectors/connect-botstar/src/api/client.ts +19 -206
- package/connectors/connect-botstar/src/api/index.ts +36 -43
- package/connectors/connect-botstar/src/types/index.ts +9 -233
- package/connectors/connect-brandsight/bun.lock +32 -0
- package/connectors/connect-brandsight/package.json +9 -11
- package/connectors/connect-brandsight/src/api/brandsight.test.ts +324 -0
- package/connectors/connect-brandsight/src/api/client.ts +48 -144
- package/connectors/connect-brandsight/src/api/index.ts +25 -21
- package/connectors/connect-brandsight/src/api/intelligence.ts +82 -0
- package/connectors/connect-brandsight/src/api/monitoring.ts +93 -0
- package/connectors/connect-brandsight/src/cli/index.ts +83 -587
- package/connectors/connect-brandsight/src/index.ts +20 -5
- package/connectors/connect-brandsight/src/types/index.ts +33 -148
- package/connectors/connect-brandsight/src/utils/config.ts +93 -165
- package/connectors/connect-brandsight/tsconfig.json +9 -22
- package/connectors/connect-breezyhr/src/api/client.ts +19 -206
- package/connectors/connect-breezyhr/src/api/index.ts +40 -41
- package/connectors/connect-breezyhr/src/types/index.ts +9 -233
- package/connectors/connect-browseai/src/api/client.ts +18 -205
- package/connectors/connect-browseai/src/api/index.ts +22 -43
- package/connectors/connect-browseai/src/types/index.ts +6 -233
- package/connectors/connect-browserless/src/api/client.ts +20 -203
- package/connectors/connect-browserless/src/api/index.ts +32 -43
- package/connectors/connect-browserless/src/types/index.ts +8 -233
- package/connectors/connect-browserstack/src/api/client.ts +19 -206
- package/connectors/connect-browserstack/src/api/index.ts +28 -43
- package/connectors/connect-browserstack/src/types/index.ts +8 -233
- package/connectors/connect-bugbug/src/api/client.ts +18 -205
- package/connectors/connect-bugbug/src/api/index.ts +27 -42
- package/connectors/connect-bugbug/src/types/index.ts +9 -233
- package/connectors/connect-bugherd/src/api/client.ts +24 -211
- package/connectors/connect-bugherd/src/api/index.ts +33 -43
- package/connectors/connect-bugherd/src/types/index.ts +8 -233
- package/connectors/connect-bugreplay/src/api/client.ts +18 -205
- package/connectors/connect-bugreplay/src/api/index.ts +24 -43
- package/connectors/connect-bugreplay/src/types/index.ts +7 -233
- package/connectors/connect-buildkite/src/api/client.ts +19 -206
- package/connectors/connect-buildkite/src/api/index.ts +37 -43
- package/connectors/connect-buildkite/src/types/index.ts +8 -233
- package/connectors/connect-bunnycdn/src/api/client.ts +18 -207
- package/connectors/connect-bunnycdn/src/api/index.ts +29 -44
- package/connectors/connect-bunnycdn/src/types/index.ts +7 -233
- package/connectors/connect-carbonblack/src/api/client.ts +19 -205
- package/connectors/connect-carbonblack/src/api/index.ts +34 -43
- package/connectors/connect-carbonblack/src/types/index.ts +9 -233
- package/connectors/connect-chargify/src/api/client.ts +21 -204
- package/connectors/connect-chargify/src/api/index.ts +49 -42
- package/connectors/connect-chargify/src/types/index.ts +8 -233
- package/connectors/connect-chatling/src/api/client.ts +18 -205
- package/connectors/connect-chatling/src/api/index.ts +35 -42
- package/connectors/connect-chatling/src/types/index.ts +8 -233
- package/connectors/connect-chekhub/src/api/client.ts +19 -206
- package/connectors/connect-chekhub/src/api/index.ts +33 -44
- package/connectors/connect-chekhub/src/types/index.ts +9 -233
- package/connectors/connect-chromavectorstore/src/api/client.ts +28 -206
- package/connectors/connect-chromavectorstore/src/api/index.ts +41 -44
- package/connectors/connect-chromavectorstore/src/types/index.ts +7 -233
- package/connectors/connect-ciscoumbrella/src/api/client.ts +24 -207
- package/connectors/connect-ciscoumbrella/src/api/index.ts +33 -43
- package/connectors/connect-ciscoumbrella/src/types/index.ts +8 -233
- package/connectors/connect-clicksendsms/src/api/client.ts +19 -206
- package/connectors/connect-clicksendsms/src/api/index.ts +32 -43
- package/connectors/connect-clicksendsms/src/types/index.ts +9 -233
- package/connectors/connect-cloudboost/src/api/client.ts +23 -208
- package/connectors/connect-cloudboost/src/api/index.ts +36 -43
- package/connectors/connect-cloudboost/src/types/index.ts +9 -233
- package/connectors/connect-cloudlayer/src/api/client.ts +20 -209
- package/connectors/connect-cloudlayer/src/api/index.ts +25 -42
- package/connectors/connect-cloudlayer/src/types/index.ts +8 -233
- package/connectors/connect-cody/src/api/client.ts +19 -205
- package/connectors/connect-cody/src/api/index.ts +23 -42
- package/connectors/connect-cody/src/types/index.ts +6 -233
- package/connectors/connect-confluent/src/api/client.ts +21 -205
- package/connectors/connect-confluent/src/api/index.ts +36 -43
- package/connectors/connect-confluent/src/types/index.ts +9 -233
- package/connectors/connect-convertapi/src/api/client.ts +17 -205
- package/connectors/connect-convertapi/src/api/index.ts +20 -44
- package/connectors/connect-convertapi/src/types/index.ts +7 -233
- package/connectors/connect-copper/src/api/client.ts +20 -205
- package/connectors/connect-copper/src/api/index.ts +38 -42
- package/connectors/connect-copper/src/types/index.ts +8 -233
- package/connectors/connect-cortex/src/api/client.ts +19 -206
- package/connectors/connect-cortex/src/api/index.ts +33 -43
- package/connectors/connect-cortex/src/types/index.ts +10 -233
- package/connectors/connect-craftdraft/src/api/client.ts +18 -205
- package/connectors/connect-craftdraft/src/api/index.ts +27 -43
- package/connectors/connect-craftdraft/src/types/index.ts +7 -233
- package/connectors/connect-crisp/src/api/client.ts +24 -207
- package/connectors/connect-crisp/src/api/index.ts +34 -42
- package/connectors/connect-crisp/src/types/index.ts +7 -233
- package/connectors/connect-crossmint/src/api/client.ts +20 -208
- package/connectors/connect-crossmint/src/api/index.ts +29 -43
- package/connectors/connect-crossmint/src/types/index.ts +7 -233
- package/connectors/connect-crowddev/src/api/client.ts +18 -204
- package/connectors/connect-crowddev/src/api/index.ts +23 -43
- package/connectors/connect-crowddev/src/types/index.ts +8 -233
- package/connectors/connect-crowdpower/src/api/client.ts +18 -205
- package/connectors/connect-crowdpower/src/api/index.ts +28 -44
- package/connectors/connect-crowdpower/src/types/index.ts +9 -233
- package/connectors/connect-cryptolens/src/api/client.ts +20 -211
- package/connectors/connect-cryptolens/src/api/index.ts +34 -44
- package/connectors/connect-cryptolens/src/types/index.ts +7 -233
- package/connectors/connect-customerio/src/api/client.ts +37 -211
- package/connectors/connect-customerio/src/api/index.ts +34 -44
- package/connectors/connect-customerio/src/types/index.ts +9 -233
- package/connectors/connect-daffy/src/api/client.ts +18 -205
- package/connectors/connect-daffy/src/api/index.ts +25 -42
- package/connectors/connect-daffy/src/types/index.ts +8 -233
- package/connectors/connect-datasoap/src/api/client.ts +18 -205
- package/connectors/connect-datasoap/src/api/index.ts +28 -42
- package/connectors/connect-datasoap/src/types/index.ts +8 -233
- package/connectors/connect-dayschedule/src/api/client.ts +18 -205
- package/connectors/connect-dayschedule/src/api/index.ts +25 -43
- package/connectors/connect-dayschedule/src/types/index.ts +8 -233
- package/connectors/connect-deepl/src/api/client.ts +46 -185
- package/connectors/connect-deepl/src/api/index.ts +18 -40
- package/connectors/connect-deepl/src/api/translate.ts +98 -0
- package/connectors/connect-deepl/src/types/index.ts +33 -217
- package/connectors/connect-demio/src/api/client.ts +19 -204
- package/connectors/connect-demio/src/api/index.ts +29 -42
- package/connectors/connect-demio/src/types/index.ts +7 -233
- package/connectors/connect-dhl/src/api/client.ts +22 -201
- package/connectors/connect-dhl/src/api/index.ts +23 -42
- package/connectors/connect-dhl/src/types/index.ts +10 -233
- package/connectors/connect-docsbotai/src/api/client.ts +21 -206
- package/connectors/connect-docsbotai/src/api/index.ts +55 -39
- package/connectors/connect-docsbotai/src/types/index.ts +7 -233
- package/connectors/connect-drift/src/api/client.ts +19 -203
- package/connectors/connect-drift/src/api/index.ts +41 -42
- package/connectors/connect-drift/src/types/index.ts +7 -233
- package/connectors/connect-dropcontact/src/api/client.ts +21 -209
- package/connectors/connect-dropcontact/src/api/index.ts +23 -42
- package/connectors/connect-dropcontact/src/types/index.ts +8 -233
- package/connectors/connect-eartho/src/api/client.ts +21 -206
- package/connectors/connect-eartho/src/api/index.ts +24 -44
- package/connectors/connect-eartho/src/types/index.ts +6 -233
- package/connectors/connect-echowin/src/api/client.ts +18 -205
- package/connectors/connect-echowin/src/api/index.ts +29 -43
- package/connectors/connect-echowin/src/types/index.ts +8 -233
- package/connectors/connect-ecwid/src/api/client.ts +20 -205
- package/connectors/connect-ecwid/src/api/index.ts +36 -42
- package/connectors/connect-ecwid/src/types/index.ts +9 -233
- package/connectors/connect-elasticsearch/src/api/client.ts +29 -204
- package/connectors/connect-elasticsearch/src/api/index.ts +40 -41
- package/connectors/connect-elasticsearch/src/types/index.ts +9 -233
- package/connectors/connect-emelia/src/api/client.ts +23 -199
- package/connectors/connect-emelia/src/api/index.ts +60 -41
- package/connectors/connect-emelia/src/types/index.ts +24 -220
- package/connectors/connect-engati/src/api/client.ts +20 -205
- package/connectors/connect-engati/src/api/index.ts +31 -42
- package/connectors/connect-engati/src/types/index.ts +9 -233
- package/connectors/connect-erpnext/src/api/client.ts +21 -204
- package/connectors/connect-erpnext/src/api/index.ts +34 -43
- package/connectors/connect-erpnext/src/types/index.ts +6 -233
- package/connectors/connect-evervault/src/api/client.ts +22 -211
- package/connectors/connect-evervault/src/api/index.ts +28 -42
- package/connectors/connect-evervault/src/types/index.ts +9 -233
- package/connectors/connect-faros/src/api/client.ts +18 -204
- package/connectors/connect-faros/src/api/index.ts +31 -43
- package/connectors/connect-faros/src/types/index.ts +9 -233
- package/connectors/connect-fastbots/src/api/client.ts +18 -205
- package/connectors/connect-fastbots/src/api/index.ts +31 -42
- package/connectors/connect-fastbots/src/types/index.ts +8 -233
- package/connectors/connect-flagship/src/api/client.ts +24 -209
- package/connectors/connect-flagship/src/api/index.ts +24 -42
- package/connectors/connect-flagship/src/types/index.ts +7 -233
- package/connectors/connect-float/src/api/client.ts +19 -206
- package/connectors/connect-float/src/api/index.ts +38 -42
- package/connectors/connect-float/src/types/index.ts +9 -233
- package/connectors/connect-flotiq/src/api/client.ts +18 -205
- package/connectors/connect-flotiq/src/api/index.ts +38 -42
- package/connectors/connect-flotiq/src/types/index.ts +9 -233
- package/connectors/connect-formcarry/src/api/client.ts +20 -210
- package/connectors/connect-formcarry/src/api/index.ts +25 -46
- package/connectors/connect-formcarry/src/types/index.ts +5 -235
- package/connectors/connect-formdesk/src/api/client.ts +19 -204
- package/connectors/connect-formdesk/src/api/index.ts +23 -44
- package/connectors/connect-formdesk/src/types/index.ts +7 -233
- package/connectors/connect-formsonfire/src/api/client.ts +18 -205
- package/connectors/connect-formsonfire/src/api/index.ts +21 -44
- package/connectors/connect-formsonfire/src/types/index.ts +8 -233
- package/connectors/connect-fortinetfortigate/src/api/client.ts +19 -205
- package/connectors/connect-fortinetfortigate/src/api/index.ts +33 -43
- package/connectors/connect-fortinetfortigate/src/types/index.ts +8 -233
- package/connectors/connect-freedictionary/src/api/client.ts +11 -205
- package/connectors/connect-freedictionary/src/api/index.ts +29 -42
- package/connectors/connect-freedictionary/src/types/index.ts +5 -233
- package/connectors/connect-freshworkscrm/src/api/client.ts +18 -204
- package/connectors/connect-freshworkscrm/src/api/index.ts +41 -41
- package/connectors/connect-freshworkscrm/src/types/index.ts +8 -233
- package/connectors/connect-fusioo/src/api/client.ts +19 -206
- package/connectors/connect-fusioo/src/api/index.ts +29 -43
- package/connectors/connect-fusioo/src/types/index.ts +8 -233
- package/connectors/connect-genderapi/src/api/client.ts +14 -205
- package/connectors/connect-genderapi/src/api/index.ts +23 -42
- package/connectors/connect-genderapi/src/types/index.ts +5 -233
- package/connectors/connect-ghost/src/api/client.ts +45 -211
- package/connectors/connect-ghost/src/api/index.ts +38 -43
- package/connectors/connect-ghost/src/types/index.ts +9 -233
- package/connectors/connect-gitea/src/api/client.ts +19 -205
- package/connectors/connect-gitea/src/api/index.ts +39 -43
- package/connectors/connect-gitea/src/types/index.ts +9 -233
- package/connectors/connect-github/src/api/client.ts +11 -0
- package/connectors/connect-github/src/api/commits.ts +169 -0
- package/connectors/connect-github/src/api/index.ts +12 -0
- package/connectors/connect-github/src/api/releases.ts +158 -0
- package/connectors/connect-github/src/api/workflows.ts +169 -0
- package/connectors/connect-github/src/types/index.ts +190 -0
- package/connectors/connect-gmail/src/cli/index.ts +3 -32
- package/connectors/connect-godaddy/package.json +4 -1
- package/connectors/connect-godaddy/src/api/client.ts +16 -49
- package/connectors/connect-godaddy/src/api/dns.ts +65 -0
- package/connectors/connect-godaddy/src/api/domains.ts +51 -0
- package/connectors/connect-godaddy/src/api/godaddy.test.ts +623 -0
- package/connectors/connect-godaddy/src/api/index.ts +57 -32
- package/connectors/connect-godaddy/src/cli/index.ts +200 -57
- package/connectors/connect-godaddy/src/index.ts +10 -66
- package/connectors/connect-godaddy/src/types/index.ts +87 -121
- package/connectors/connect-godaddy/src/utils/config.ts +16 -153
- package/connectors/connect-googleads/src/api/adGroups.ts +3 -3
- package/connectors/connect-googleads/src/api/ads.ts +3 -3
- package/connectors/connect-googleads/src/api/campaigns.ts +4 -4
- package/connectors/connect-googleads/src/api/client.ts +1 -1
- package/connectors/connect-googleads/src/api/keywords.ts +6 -6
- package/connectors/connect-googlebigquery/src/api/client.ts +24 -204
- package/connectors/connect-googlebigquery/src/api/index.ts +39 -42
- package/connectors/connect-googlebigquery/src/types/index.ts +8 -233
- package/connectors/connect-googletranslate/src/api/client.ts +20 -204
- package/connectors/connect-googletranslate/src/api/index.ts +22 -43
- package/connectors/connect-googletranslate/src/types/index.ts +9 -233
- package/connectors/connect-gotowebinar/src/api/client.ts +24 -207
- package/connectors/connect-gotowebinar/src/api/index.ts +36 -43
- package/connectors/connect-gotowebinar/src/types/index.ts +7 -233
- package/connectors/connect-gptea/src/api/client.ts +20 -209
- package/connectors/connect-gptea/src/api/index.ts +23 -42
- package/connectors/connect-gptea/src/types/index.ts +6 -233
- package/connectors/connect-grain/src/api/client.ts +19 -206
- package/connectors/connect-grain/src/api/index.ts +29 -43
- package/connectors/connect-grain/src/types/index.ts +8 -233
- package/connectors/connect-grist/src/api/client.ts +18 -204
- package/connectors/connect-grist/src/api/index.ts +27 -43
- package/connectors/connect-grist/src/types/index.ts +10 -233
- package/connectors/connect-handwrytten/src/api/client.ts +18 -205
- package/connectors/connect-handwrytten/src/api/index.ts +23 -43
- package/connectors/connect-handwrytten/src/types/index.ts +8 -233
- package/connectors/connect-harrypotterapi/src/api/client.ts +9 -206
- package/connectors/connect-harrypotterapi/src/api/index.ts +15 -45
- package/connectors/connect-harrypotterapi/src/types/index.ts +5 -233
- package/connectors/connect-helcim/src/api/client.ts +20 -210
- package/connectors/connect-helcim/src/api/index.ts +38 -43
- package/connectors/connect-helcim/src/types/index.ts +15 -228
- package/connectors/connect-heysummit/src/api/client.ts +22 -209
- package/connectors/connect-heysummit/src/api/index.ts +23 -44
- package/connectors/connect-heysummit/src/types/index.ts +8 -233
- package/connectors/connect-hubplanner/src/api/client.ts +18 -205
- package/connectors/connect-hubplanner/src/api/index.ts +33 -42
- package/connectors/connect-hubplanner/src/types/index.ts +8 -233
- package/connectors/connect-huggingface/src/api/client.ts +5 -0
- package/connectors/connect-huggingface/src/api/datasets.ts +73 -0
- package/connectors/connect-huggingface/src/api/index.ts +17 -19
- package/connectors/connect-huggingface/src/api/inference.ts +199 -0
- package/connectors/connect-huggingface/src/api/models.ts +66 -0
- package/connectors/connect-huggingface/src/api/spaces.ts +42 -0
- package/connectors/connect-huggingface/src/cli/index.ts +148 -36
- package/connectors/connect-hunter/src/api/client.ts +14 -205
- package/connectors/connect-hunter/src/api/index.ts +25 -42
- package/connectors/connect-hunter/src/types/index.ts +8 -233
- package/connectors/connect-hybridanalysis/src/api/client.ts +24 -204
- package/connectors/connect-hybridanalysis/src/api/index.ts +24 -43
- package/connectors/connect-hybridanalysis/src/types/index.ts +7 -233
- package/connectors/connect-ideta/src/api/client.ts +18 -205
- package/connectors/connect-ideta/src/api/index.ts +25 -42
- package/connectors/connect-ideta/src/types/index.ts +8 -233
- package/connectors/connect-invoiced/src/api/client.ts +19 -208
- package/connectors/connect-invoiced/src/api/index.ts +22 -49
- package/connectors/connect-invoiced/src/types/index.ts +5 -237
- package/connectors/connect-ip2location/src/api/client.ts +14 -205
- package/connectors/connect-ip2location/src/api/index.ts +20 -43
- package/connectors/connect-ip2location/src/types/index.ts +5 -233
- package/connectors/connect-ipinfo/src/api/client.ts +16 -206
- package/connectors/connect-ipinfo/src/api/index.ts +21 -47
- package/connectors/connect-ipinfo/src/types/index.ts +6 -233
- package/connectors/connect-jasper/src/api/client.ts +18 -202
- package/connectors/connect-jasper/src/api/index.ts +41 -43
- package/connectors/connect-jasper/src/types/index.ts +7 -233
- package/connectors/connect-jenkins/src/api/client.ts +25 -205
- package/connectors/connect-jenkins/src/api/index.ts +38 -43
- package/connectors/connect-jenkins/src/types/index.ts +8 -233
- package/connectors/connect-jinaai/src/api/client.ts +21 -204
- package/connectors/connect-jinaai/src/api/index.ts +23 -42
- package/connectors/connect-jinaai/src/types/index.ts +9 -233
- package/connectors/connect-jira/src/api/client.ts +57 -0
- package/connectors/connect-jira/src/api/index.ts +22 -63
- package/connectors/connect-kafka/src/api/client.ts +27 -206
- package/connectors/connect-kafka/src/api/index.ts +29 -42
- package/connectors/connect-kafka/src/types/index.ts +9 -233
- package/connectors/connect-kaggle/src/api/client.ts +15 -205
- package/connectors/connect-kaggle/src/api/index.ts +27 -43
- package/connectors/connect-kaggle/src/types/index.ts +7 -233
- package/connectors/connect-kanbantool/src/api/client.ts +19 -205
- package/connectors/connect-kanbantool/src/api/index.ts +34 -43
- package/connectors/connect-kanbantool/src/types/index.ts +8 -233
- package/connectors/connect-keygen/src/api/client.ts +19 -205
- package/connectors/connect-keygen/src/api/index.ts +33 -43
- package/connectors/connect-keygen/src/types/index.ts +8 -233
- package/connectors/connect-kibana/src/api/client.ts +24 -204
- package/connectors/connect-kibana/src/api/index.ts +36 -42
- package/connectors/connect-kibana/src/types/index.ts +9 -233
- package/connectors/connect-lambdatest/src/api/client.ts +19 -206
- package/connectors/connect-lambdatest/src/api/index.ts +29 -44
- package/connectors/connect-lambdatest/src/types/index.ts +8 -233
- package/connectors/connect-laposta/src/api/client.ts +19 -206
- package/connectors/connect-laposta/src/api/index.ts +39 -42
- package/connectors/connect-laposta/src/types/index.ts +8 -233
- package/connectors/connect-launch27/src/api/client.ts +18 -207
- package/connectors/connect-launch27/src/api/index.ts +31 -42
- package/connectors/connect-launch27/src/types/index.ts +7 -233
- package/connectors/connect-leadboxer/src/api/client.ts +18 -205
- package/connectors/connect-leadboxer/src/api/index.ts +20 -44
- package/connectors/connect-leadboxer/src/types/index.ts +7 -233
- package/connectors/connect-leadpops/src/api/client.ts +18 -205
- package/connectors/connect-leadpops/src/api/index.ts +25 -45
- package/connectors/connect-leadpops/src/types/index.ts +7 -233
- package/connectors/connect-lighthouse/src/api/client.ts +18 -205
- package/connectors/connect-lighthouse/src/api/index.ts +33 -41
- package/connectors/connect-lighthouse/src/types/index.ts +9 -233
- package/connectors/connect-limego/src/api/client.ts +18 -205
- package/connectors/connect-limego/src/api/index.ts +25 -44
- package/connectors/connect-limego/src/types/index.ts +8 -233
- package/connectors/connect-line/src/api/client.ts +23 -205
- package/connectors/connect-line/src/api/index.ts +34 -44
- package/connectors/connect-line/src/types/index.ts +9 -233
- package/connectors/connect-linear/src/api/comments.ts +148 -0
- package/connectors/connect-linear/src/api/index.ts +8 -0
- package/connectors/connect-linear/src/api/states.ts +88 -0
- package/connectors/connect-linear/src/types/index.ts +68 -0
- package/connectors/connect-lingvanex/src/api/client.ts +19 -209
- package/connectors/connect-lingvanex/src/api/index.ts +24 -42
- package/connectors/connect-lingvanex/src/types/index.ts +7 -233
- package/connectors/connect-liveagent/src/api/client.ts +18 -204
- package/connectors/connect-liveagent/src/api/index.ts +34 -42
- package/connectors/connect-liveagent/src/types/index.ts +9 -233
- package/connectors/connect-loginradius/src/api/client.ts +23 -202
- package/connectors/connect-loginradius/src/api/index.ts +35 -43
- package/connectors/connect-loginradius/src/types/index.ts +9 -233
- package/connectors/connect-mailerlite/src/api/client.ts +18 -205
- package/connectors/connect-mailerlite/src/api/index.ts +35 -42
- package/connectors/connect-mailerlite/src/types/index.ts +9 -233
- package/connectors/connect-mailgun/src/api/client.ts +29 -201
- package/connectors/connect-mailgun/src/api/index.ts +37 -43
- package/connectors/connect-mailgun/src/types/index.ts +10 -233
- package/connectors/connect-malcore/src/api/client.ts +18 -205
- package/connectors/connect-malcore/src/api/index.ts +30 -43
- package/connectors/connect-malcore/src/types/index.ts +7 -233
- package/connectors/connect-marketplacer/src/api/client.ts +18 -204
- package/connectors/connect-marketplacer/src/api/index.ts +30 -44
- package/connectors/connect-marketplacer/src/types/index.ts +9 -233
- package/connectors/connect-matrix/src/api/client.ts +21 -204
- package/connectors/connect-matrix/src/api/index.ts +34 -41
- package/connectors/connect-matrix/src/types/index.ts +10 -233
- package/connectors/connect-mattermost/src/api/client.ts +19 -205
- package/connectors/connect-mattermost/src/api/index.ts +34 -42
- package/connectors/connect-mattermost/src/types/index.ts +8 -233
- package/connectors/connect-mem/src/api/client.ts +18 -205
- package/connectors/connect-mem/src/api/index.ts +20 -43
- package/connectors/connect-mem/src/types/index.ts +6 -233
- package/connectors/connect-mercury/CLAUDE.md +0 -1
- package/connectors/connect-microsoftentraid/src/api/client.ts +21 -205
- package/connectors/connect-microsoftentraid/src/api/index.ts +29 -44
- package/connectors/connect-microsoftentraid/src/types/index.ts +8 -233
- package/connectors/connect-microsoftentraidazureactivedirectory/src/api/client.ts +21 -205
- package/connectors/connect-microsoftentraidazureactivedirectory/src/api/index.ts +37 -44
- package/connectors/connect-microsoftentraidazureactivedirectory/src/types/index.ts +10 -233
- package/connectors/connect-microsoftgraphsecurity/src/api/client.ts +21 -205
- package/connectors/connect-microsoftgraphsecurity/src/api/index.ts +28 -43
- package/connectors/connect-microsoftgraphsecurity/src/types/index.ts +8 -233
- package/connectors/connect-microsoftonedrive/src/api/client.ts +21 -205
- package/connectors/connect-microsoftonedrive/src/api/index.ts +41 -41
- package/connectors/connect-microsoftonedrive/src/types/index.ts +8 -233
- package/connectors/connect-microsofttodo/src/api/client.ts +21 -205
- package/connectors/connect-microsofttodo/src/api/index.ts +35 -43
- package/connectors/connect-microsofttodo/src/types/index.ts +6 -233
- package/connectors/connect-miestro/src/api/client.ts +18 -205
- package/connectors/connect-miestro/src/api/index.ts +30 -43
- package/connectors/connect-miestro/src/types/index.ts +8 -233
- package/connectors/connect-miro/src/api/client.ts +19 -206
- package/connectors/connect-miro/src/api/index.ts +32 -41
- package/connectors/connect-miro/src/types/index.ts +10 -233
- package/connectors/connect-missive/src/api/client.ts +19 -206
- package/connectors/connect-missive/src/api/index.ts +35 -42
- package/connectors/connect-missive/src/types/index.ts +13 -235
- package/connectors/connect-mist/src/api/client.ts +19 -205
- package/connectors/connect-mist/src/api/index.ts +24 -43
- package/connectors/connect-mist/src/types/index.ts +8 -233
- package/connectors/connect-mistral/src/api/chat.ts +2 -1
- package/connectors/connect-mistral/src/api/embeddings.ts +2 -1
- package/connectors/connect-monday/src/api/index.ts +120 -1
- package/connectors/connect-moonmail/src/api/client.ts +18 -205
- package/connectors/connect-moonmail/src/api/index.ts +31 -43
- package/connectors/connect-moonmail/src/types/index.ts +7 -233
- package/connectors/connect-mxtoolbox/src/api/client.ts +15 -204
- package/connectors/connect-mxtoolbox/src/api/index.ts +25 -45
- package/connectors/connect-mxtoolbox/src/types/index.ts +10 -233
- package/connectors/connect-myaskai/src/api/client.ts +18 -205
- package/connectors/connect-myaskai/src/api/index.ts +28 -42
- package/connectors/connect-myaskai/src/types/index.ts +7 -233
- package/connectors/connect-myphoner/src/api/client.ts +18 -205
- package/connectors/connect-myphoner/src/api/index.ts +30 -43
- package/connectors/connect-myphoner/src/types/index.ts +8 -233
- package/connectors/connect-namecheap/bin/index.js +3119 -0
- package/connectors/{connect-yousign → connect-namecheap}/bun.lock +3 -3
- package/connectors/connect-namecheap/dist/index.js +431 -0
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/bun/README.md +1 -1
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/bun/package.json +3 -3
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/bun.d.ts +239 -8
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/executables.mdx +10 -10
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/fullstack.mdx +13 -13
- package/connectors/connect-namecheap/node_modules/bun-types/docs/guides/http/sse.mdx +91 -0
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/bun-apis.mdx +2 -1
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/bunfig.mdx +11 -0
- package/connectors/connect-namecheap/node_modules/bun-types/docs/runtime/cron.mdx +358 -0
- package/connectors/connect-namecheap/node_modules/bun-types/docs/runtime/csrf.mdx +171 -0
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/hashing.mdx +1 -1
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/server.mdx +34 -7
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/json5.mdx +1 -1
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/markdown.mdx +53 -16
- package/connectors/connect-namecheap/node_modules/bun-types/docs/runtime/toml.mdx +238 -0
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/yaml.mdx +3 -2
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/configuration.mdx +54 -0
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/package.json +1 -1
- package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/s3.d.ts +19 -0
- package/connectors/{connect-yousign → connect-namecheap}/package.json +12 -12
- package/connectors/connect-namecheap/src/api/client.ts +82 -0
- package/connectors/connect-namecheap/src/api/dns.ts +74 -0
- package/connectors/connect-namecheap/src/api/domains.ts +119 -0
- package/connectors/connect-namecheap/src/api/index.ts +67 -0
- package/connectors/connect-namecheap/src/api/namecheap.test.ts +549 -0
- package/connectors/connect-namecheap/src/cli/index.ts +389 -0
- package/connectors/connect-namecheap/src/index.ts +32 -0
- package/connectors/connect-namecheap/src/types/index.ts +84 -0
- package/connectors/connect-namecheap/src/utils/config.ts +205 -0
- package/connectors/connect-namecheap/src/utils/output.ts +119 -0
- package/connectors/connect-namecheap/src/utils/xml.ts +82 -0
- package/connectors/connect-nanonetsocr/src/api/client.ts +19 -206
- package/connectors/connect-nanonetsocr/src/api/index.ts +22 -42
- package/connectors/connect-nanonetsocr/src/types/index.ts +8 -233
- package/connectors/connect-nocodb/src/api/client.ts +22 -208
- package/connectors/connect-nocodb/src/api/index.ts +40 -42
- package/connectors/connect-nocodb/src/types/index.ts +10 -233
- package/connectors/connect-npm/src/api/client.ts +22 -203
- package/connectors/connect-npm/src/api/index.ts +24 -43
- package/connectors/connect-npm/src/types/index.ts +8 -233
- package/connectors/connect-nuclia/src/api/client.ts +19 -205
- package/connectors/connect-nuclia/src/api/index.ts +32 -43
- package/connectors/connect-nuclia/src/types/index.ts +8 -233
- package/connectors/connect-nyota/src/api/client.ts +18 -205
- package/connectors/connect-nyota/src/api/index.ts +24 -43
- package/connectors/connect-nyota/src/types/index.ts +8 -233
- package/connectors/connect-offalerts/src/api/client.ts +18 -205
- package/connectors/connect-offalerts/src/api/index.ts +25 -44
- package/connectors/connect-offalerts/src/types/index.ts +7 -233
- package/connectors/connect-okta/src/api/client.ts +21 -204
- package/connectors/connect-okta/src/api/index.ts +40 -42
- package/connectors/connect-okta/src/types/index.ts +10 -233
- package/connectors/connect-omnimind/src/api/client.ts +18 -205
- package/connectors/connect-omnimind/src/api/index.ts +31 -43
- package/connectors/connect-omnimind/src/types/index.ts +7 -233
- package/connectors/connect-on2air/src/api/client.ts +18 -205
- package/connectors/connect-on2air/src/api/index.ts +26 -44
- package/connectors/connect-on2air/src/types/index.ts +7 -233
- package/connectors/connect-oneai/src/api/client.ts +19 -209
- package/connectors/connect-oneai/src/api/index.ts +36 -39
- package/connectors/connect-oneai/src/types/index.ts +7 -233
- package/connectors/connect-onesimpleapi/src/api/client.ts +17 -204
- package/connectors/connect-onesimpleapi/src/api/index.ts +30 -43
- package/connectors/connect-onesimpleapi/src/types/index.ts +8 -233
- package/connectors/connect-openai/src/api/chat.ts +2 -2
- package/connectors/connect-openai/src/api/images.ts +52 -8
- package/connectors/connect-openai/src/types/index.ts +0 -10
- package/connectors/connect-ortto/src/api/client.ts +19 -204
- package/connectors/connect-ortto/src/api/index.ts +28 -44
- package/connectors/connect-ortto/src/types/index.ts +9 -233
- package/connectors/connect-oura/src/api/client.ts +16 -205
- package/connectors/connect-oura/src/api/index.ts +25 -42
- package/connectors/connect-oura/src/types/index.ts +9 -233
- package/connectors/connect-papyrs/src/api/client.ts +18 -204
- package/connectors/connect-papyrs/src/api/index.ts +30 -43
- package/connectors/connect-papyrs/src/types/index.ts +8 -233
- package/connectors/connect-paymo/src/api/client.ts +19 -206
- package/connectors/connect-paymo/src/api/index.ts +34 -43
- package/connectors/connect-paymo/src/types/index.ts +9 -233
- package/connectors/connect-personalai/src/api/client.ts +18 -205
- package/connectors/connect-personalai/src/api/index.ts +26 -43
- package/connectors/connect-personalai/src/types/index.ts +8 -233
- package/connectors/connect-phantombuster/src/api/client.ts +18 -205
- package/connectors/connect-phantombuster/src/api/index.ts +28 -43
- package/connectors/connect-phantombuster/src/types/index.ts +6 -233
- package/connectors/connect-planyoonlinebooking/src/api/client.ts +19 -209
- package/connectors/connect-planyoonlinebooking/src/api/index.ts +34 -43
- package/connectors/connect-planyoonlinebooking/src/types/index.ts +8 -233
- package/connectors/connect-plivo/src/api/client.ts +22 -208
- package/connectors/connect-plivo/src/api/index.ts +32 -44
- package/connectors/connect-plivo/src/types/index.ts +9 -233
- package/connectors/connect-posthog/src/api/client.ts +22 -205
- package/connectors/connect-posthog/src/api/index.ts +65 -39
- package/connectors/connect-posthog/src/types/index.ts +8 -233
- package/connectors/connect-practitest/src/api/client.ts +19 -206
- package/connectors/connect-practitest/src/api/index.ts +36 -40
- package/connectors/connect-practitest/src/types/index.ts +9 -233
- package/connectors/connect-predisai/src/api/client.ts +18 -205
- package/connectors/connect-predisai/src/api/index.ts +25 -43
- package/connectors/connect-predisai/src/types/index.ts +7 -233
- package/connectors/connect-prodia/src/api/client.ts +18 -205
- package/connectors/connect-prodia/src/api/index.ts +26 -43
- package/connectors/connect-prodia/src/types/index.ts +7 -233
- package/connectors/connect-profitwell/src/api/client.ts +18 -205
- package/connectors/connect-profitwell/src/api/index.ts +28 -44
- package/connectors/connect-profitwell/src/types/index.ts +7 -233
- package/connectors/connect-projectbubbleproprofsproject/src/api/client.ts +18 -205
- package/connectors/connect-projectbubbleproprofsproject/src/api/index.ts +32 -43
- package/connectors/connect-projectbubbleproprofsproject/src/types/index.ts +8 -233
- package/connectors/connect-pulsetic/src/api/client.ts +18 -205
- package/connectors/connect-pulsetic/src/api/index.ts +25 -43
- package/connectors/connect-pulsetic/src/types/index.ts +8 -233
- package/connectors/connect-pusher/src/api/client.ts +36 -205
- package/connectors/connect-pusher/src/api/index.ts +29 -41
- package/connectors/connect-pusher/src/types/index.ts +8 -233
- package/connectors/connect-pushover/src/api/client.ts +24 -207
- package/connectors/connect-pushover/src/api/index.ts +27 -46
- package/connectors/connect-pushover/src/types/index.ts +5 -237
- package/connectors/connect-qualys/src/api/client.ts +21 -205
- package/connectors/connect-qualys/src/api/index.ts +35 -42
- package/connectors/connect-qualys/src/types/index.ts +8 -233
- package/connectors/connect-quentn/src/api/client.ts +18 -204
- package/connectors/connect-quentn/src/api/index.ts +35 -44
- package/connectors/connect-quentn/src/types/index.ts +9 -233
- package/connectors/connect-questdb/src/api/client.ts +22 -204
- package/connectors/connect-questdb/src/api/index.ts +35 -43
- package/connectors/connect-questdb/src/types/index.ts +7 -233
- package/connectors/connect-quintadb/src/api/client.ts +21 -207
- package/connectors/connect-quintadb/src/api/index.ts +32 -43
- package/connectors/connect-quintadb/src/types/index.ts +6 -233
- package/connectors/connect-rapid7insightvm/src/api/client.ts +19 -205
- package/connectors/connect-rapid7insightvm/src/api/index.ts +34 -42
- package/connectors/connect-rapid7insightvm/src/types/index.ts +9 -233
- package/connectors/connect-raventools/src/api/client.ts +20 -209
- package/connectors/connect-raventools/src/api/index.ts +24 -44
- package/connectors/connect-raventools/src/types/index.ts +8 -233
- package/connectors/connect-rdstationcrm/src/api/client.ts +20 -206
- package/connectors/connect-rdstationcrm/src/api/index.ts +34 -43
- package/connectors/connect-rdstationcrm/src/types/index.ts +9 -233
- package/connectors/connect-realphonevalidation/src/api/client.ts +15 -205
- package/connectors/connect-realphonevalidation/src/api/index.ts +21 -43
- package/connectors/connect-realphonevalidation/src/types/index.ts +5 -233
- package/connectors/connect-recharge/src/api/client.ts +19 -206
- package/connectors/connect-recharge/src/api/index.ts +35 -42
- package/connectors/connect-recharge/src/types/index.ts +10 -233
- package/connectors/connect-relevanceai/src/api/client.ts +21 -204
- package/connectors/connect-relevanceai/src/api/index.ts +28 -41
- package/connectors/connect-relevanceai/src/types/index.ts +8 -233
- package/connectors/connect-relinkurlshortener/src/api/client.ts +18 -205
- package/connectors/connect-relinkurlshortener/src/api/index.ts +25 -44
- package/connectors/connect-relinkurlshortener/src/types/index.ts +6 -233
- package/connectors/connect-reply/src/api/client.ts +18 -205
- package/connectors/connect-reply/src/api/index.ts +31 -44
- package/connectors/connect-reply/src/types/index.ts +9 -233
- package/connectors/connect-ritekit/src/api/client.ts +15 -206
- package/connectors/connect-ritekit/src/api/index.ts +32 -43
- package/connectors/connect-ritekit/src/types/index.ts +7 -233
- package/connectors/connect-rocketchat/src/api/client.ts +20 -205
- package/connectors/connect-rocketchat/src/api/index.ts +39 -41
- package/connectors/connect-rocketchat/src/types/index.ts +8 -233
- package/connectors/connect-rundeck/src/api/client.ts +20 -205
- package/connectors/connect-rundeck/src/api/index.ts +30 -43
- package/connectors/connect-rundeck/src/types/index.ts +8 -233
- package/connectors/connect-salesforce/src/api/client.ts +49 -0
- package/connectors/connect-salesforce/src/api/index.ts +18 -15
- package/connectors/connect-samsungsmartthings/src/api/client.ts +19 -206
- package/connectors/connect-samsungsmartthings/src/api/index.ts +26 -44
- package/connectors/connect-samsungsmartthings/src/types/index.ts +10 -233
- package/connectors/connect-scrapeitcloud/src/api/client.ts +18 -205
- package/connectors/connect-scrapeitcloud/src/api/index.ts +22 -43
- package/connectors/connect-scrapeitcloud/src/types/index.ts +7 -233
- package/connectors/connect-seamlessai/src/api/client.ts +18 -205
- package/connectors/connect-seamlessai/src/api/index.ts +28 -43
- package/connectors/connect-seamlessai/src/types/index.ts +8 -233
- package/connectors/connect-sekoia/src/api/client.ts +18 -205
- package/connectors/connect-sekoia/src/api/index.ts +31 -41
- package/connectors/connect-sekoia/src/types/index.ts +9 -233
- package/connectors/connect-sellix/src/api/client.ts +18 -205
- package/connectors/connect-sellix/src/api/index.ts +32 -42
- package/connectors/connect-sellix/src/types/index.ts +10 -233
- package/connectors/connect-servicenow/src/api/client.ts +21 -204
- package/connectors/connect-servicenow/src/api/index.ts +45 -41
- package/connectors/connect-servicenow/src/types/index.ts +9 -233
- package/connectors/connect-shopify/src/api/products.ts +79 -2
- package/connectors/connect-shuffler/src/api/client.ts +18 -204
- package/connectors/connect-shuffler/src/api/index.ts +29 -44
- package/connectors/connect-shuffler/src/types/index.ts +8 -233
- package/connectors/connect-signaturit/src/api/client.ts +19 -205
- package/connectors/connect-signaturit/src/api/index.ts +30 -42
- package/connectors/connect-signaturit/src/types/index.ts +10 -233
- package/connectors/connect-simplehash/src/api/client.ts +14 -204
- package/connectors/connect-simplehash/src/api/index.ts +29 -43
- package/connectors/connect-simplehash/src/types/index.ts +7 -233
- package/connectors/connect-simplelocalize/src/api/client.ts +18 -205
- package/connectors/connect-simplelocalize/src/api/index.ts +33 -42
- package/connectors/connect-simplelocalize/src/types/index.ts +13 -235
- package/connectors/connect-sitespeakai/src/api/client.ts +18 -205
- package/connectors/connect-sitespeakai/src/api/index.ts +29 -41
- package/connectors/connect-sitespeakai/src/types/index.ts +8 -233
- package/connectors/connect-smaily/src/api/client.ts +19 -205
- package/connectors/connect-smaily/src/api/index.ts +29 -44
- package/connectors/connect-smaily/src/types/index.ts +8 -233
- package/connectors/connect-snatchbot/src/api/client.ts +19 -206
- package/connectors/connect-snatchbot/src/api/index.ts +25 -42
- package/connectors/connect-snatchbot/src/types/index.ts +8 -233
- package/connectors/connect-solvedata/src/api/client.ts +18 -205
- package/connectors/connect-solvedata/src/api/index.ts +26 -43
- package/connectors/connect-solvedata/src/types/index.ts +7 -233
- package/connectors/connect-specter/src/api/client.ts +24 -209
- package/connectors/connect-specter/src/api/index.ts +27 -43
- package/connectors/connect-specter/src/types/index.ts +10 -233
- package/connectors/connect-spike/src/api/client.ts +18 -205
- package/connectors/connect-spike/src/api/index.ts +28 -45
- package/connectors/connect-spike/src/types/index.ts +8 -233
- package/connectors/connect-sportsdata/src/api/client.ts +14 -206
- package/connectors/connect-sportsdata/src/api/index.ts +32 -46
- package/connectors/connect-sportsdata/src/types/index.ts +8 -233
- package/connectors/connect-sslmatecertspotterapi/src/api/client.ts +15 -204
- package/connectors/connect-sslmatecertspotterapi/src/api/index.ts +23 -43
- package/connectors/connect-sslmatecertspotterapi/src/types/index.ts +5 -233
- package/connectors/connect-starton/src/api/client.ts +18 -205
- package/connectors/connect-starton/src/api/index.ts +34 -42
- package/connectors/connect-starton/src/types/index.ts +8 -233
- package/connectors/connect-statuscake/src/api/client.ts +18 -205
- package/connectors/connect-statuscake/src/api/index.ts +30 -44
- package/connectors/connect-statuscake/src/types/index.ts +9 -233
- package/connectors/connect-strapi/src/api/client.ts +21 -204
- package/connectors/connect-strapi/src/api/index.ts +38 -42
- package/connectors/connect-strapi/src/types/index.ts +9 -233
- package/connectors/connect-supernormal/src/api/client.ts +18 -205
- package/connectors/connect-supernormal/src/api/index.ts +28 -43
- package/connectors/connect-supernormal/src/types/index.ts +8 -233
- package/connectors/connect-supportivekoala/src/api/client.ts +18 -205
- package/connectors/connect-supportivekoala/src/api/index.ts +21 -43
- package/connectors/connect-supportivekoala/src/types/index.ts +7 -233
- package/connectors/connect-surveysparrow/src/api/client.ts +20 -210
- package/connectors/connect-surveysparrow/src/api/index.ts +39 -42
- package/connectors/connect-surveysparrow/src/types/index.ts +7 -233
- package/connectors/connect-swagup/src/api/client.ts +18 -205
- package/connectors/connect-swagup/src/api/index.ts +30 -42
- package/connectors/connect-swagup/src/types/index.ts +8 -233
- package/connectors/connect-switchboard/src/api/client.ts +18 -205
- package/connectors/connect-switchboard/src/api/index.ts +27 -43
- package/connectors/connect-switchboard/src/types/index.ts +7 -233
- package/connectors/connect-syncly/src/api/client.ts +18 -205
- package/connectors/connect-syncly/src/api/index.ts +21 -44
- package/connectors/connect-syncly/src/types/index.ts +8 -233
- package/connectors/connect-syncromsp/src/api/client.ts +19 -204
- package/connectors/connect-syncromsp/src/api/index.ts +35 -42
- package/connectors/connect-syncromsp/src/types/index.ts +8 -233
- package/connectors/connect-talentlms/src/api/client.ts +19 -205
- package/connectors/connect-talentlms/src/api/index.ts +30 -42
- package/connectors/connect-talentlms/src/types/index.ts +8 -233
- package/connectors/connect-tdameritrade/src/api/client.ts +22 -205
- package/connectors/connect-tdameritrade/src/api/index.ts +32 -41
- package/connectors/connect-tdameritrade/src/types/index.ts +9 -233
- package/connectors/connect-teamdeck/src/api/client.ts +20 -210
- package/connectors/connect-teamdeck/src/api/index.ts +39 -41
- package/connectors/connect-teamdeck/src/types/index.ts +8 -233
- package/connectors/connect-teamgate/src/api/client.ts +21 -206
- package/connectors/connect-teamgate/src/api/index.ts +37 -43
- package/connectors/connect-teamgate/src/types/index.ts +9 -233
- package/connectors/connect-teamup/src/api/client.ts +24 -209
- package/connectors/connect-teamup/src/api/index.ts +25 -45
- package/connectors/connect-teamup/src/types/index.ts +6 -233
- package/connectors/connect-testmonitor/src/api/client.ts +19 -205
- package/connectors/connect-testmonitor/src/api/index.ts +38 -42
- package/connectors/connect-testmonitor/src/types/index.ts +8 -233
- package/connectors/connect-textcortexai/src/api/client.ts +18 -205
- package/connectors/connect-textcortexai/src/api/index.ts +33 -43
- package/connectors/connect-textcortexai/src/types/index.ts +7 -233
- package/connectors/connect-textmagic/src/api/client.ts +20 -205
- package/connectors/connect-textmagic/src/api/index.ts +34 -43
- package/connectors/connect-textmagic/src/types/index.ts +9 -233
- package/connectors/connect-thankster/src/api/client.ts +18 -205
- package/connectors/connect-thankster/src/api/index.ts +27 -43
- package/connectors/connect-thankster/src/types/index.ts +8 -233
- package/connectors/connect-thecustomerfactor/src/api/client.ts +18 -205
- package/connectors/connect-thecustomerfactor/src/api/index.ts +34 -42
- package/connectors/connect-thecustomerfactor/src/types/index.ts +7 -233
- package/connectors/connect-theleap/src/api/client.ts +18 -205
- package/connectors/connect-theleap/src/api/index.ts +23 -43
- package/connectors/connect-theleap/src/types/index.ts +6 -233
- package/connectors/connect-thoughtfulgpt/src/api/client.ts +18 -205
- package/connectors/connect-thoughtfulgpt/src/api/index.ts +22 -44
- package/connectors/connect-thoughtfulgpt/src/types/index.ts +7 -233
- package/connectors/connect-tilda/src/api/client.ts +18 -206
- package/connectors/connect-tilda/src/api/index.ts +22 -46
- package/connectors/connect-tilda/src/types/index.ts +7 -233
- package/connectors/connect-tisanelabs/src/api/client.ts +13 -206
- package/connectors/connect-tisanelabs/src/api/index.ts +26 -41
- package/connectors/connect-tisanelabs/src/types/index.ts +8 -233
- package/connectors/connect-trackvia/src/api/client.ts +22 -206
- package/connectors/connect-trackvia/src/api/index.ts +35 -43
- package/connectors/connect-trackvia/src/types/index.ts +9 -233
- package/connectors/connect-travisci/src/api/client.ts +19 -205
- package/connectors/connect-travisci/src/api/index.ts +28 -43
- package/connectors/connect-travisci/src/types/index.ts +7 -233
- package/connectors/connect-turbohire/src/api/client.ts +18 -205
- package/connectors/connect-turbohire/src/api/index.ts +34 -42
- package/connectors/connect-turbohire/src/types/index.ts +8 -233
- package/connectors/connect-tuskr/src/api/client.ts +19 -206
- package/connectors/connect-tuskr/src/api/index.ts +37 -42
- package/connectors/connect-tuskr/src/types/index.ts +8 -233
- package/connectors/connect-unisender/src/api/client.ts +19 -209
- package/connectors/connect-unisender/src/api/index.ts +37 -42
- package/connectors/connect-unisender/src/types/index.ts +10 -233
- package/connectors/connect-uproc/src/api/client.ts +18 -205
- package/connectors/connect-uproc/src/api/index.ts +25 -43
- package/connectors/connect-uproc/src/types/index.ts +7 -233
- package/connectors/connect-uptimerobot/src/api/client.ts +22 -208
- package/connectors/connect-uptimerobot/src/api/index.ts +43 -39
- package/connectors/connect-uptimerobot/src/types/index.ts +8 -233
- package/connectors/connect-uservoice/src/api/client.ts +19 -205
- package/connectors/connect-uservoice/src/api/index.ts +31 -43
- package/connectors/connect-uservoice/src/types/index.ts +13 -235
- package/connectors/connect-verifalia/src/api/client.ts +20 -206
- package/connectors/connect-verifalia/src/api/index.ts +31 -41
- package/connectors/connect-verifalia/src/types/index.ts +6 -233
- package/connectors/connect-virustotal/src/api/client.ts +21 -204
- package/connectors/connect-virustotal/src/api/index.ts +27 -42
- package/connectors/connect-virustotal/src/types/index.ts +8 -233
- package/connectors/connect-vivifyscrum/src/api/client.ts +19 -206
- package/connectors/connect-vivifyscrum/src/api/index.ts +28 -44
- package/connectors/connect-vivifyscrum/src/types/index.ts +9 -233
- package/connectors/connect-voicit/src/api/client.ts +18 -205
- package/connectors/connect-voicit/src/api/index.ts +19 -45
- package/connectors/connect-voicit/src/types/index.ts +7 -233
- package/connectors/connect-vowel/src/api/client.ts +18 -205
- package/connectors/connect-vowel/src/api/index.ts +22 -44
- package/connectors/connect-vowel/src/types/index.ts +8 -233
- package/connectors/connect-watchsignals/src/api/client.ts +15 -205
- package/connectors/connect-watchsignals/src/api/index.ts +24 -42
- package/connectors/connect-watchsignals/src/types/index.ts +8 -233
- package/connectors/connect-wavelineextract/src/api/client.ts +18 -205
- package/connectors/connect-wavelineextract/src/api/index.ts +21 -45
- package/connectors/connect-wavelineextract/src/types/index.ts +6 -233
- package/connectors/connect-webinarjam/src/api/client.ts +15 -206
- package/connectors/connect-webinarjam/src/api/index.ts +18 -44
- package/connectors/connect-webinarjam/src/types/index.ts +6 -233
- package/connectors/connect-wikipedia/src/api/client.ts +22 -202
- package/connectors/connect-wikipedia/src/api/index.ts +49 -43
- package/connectors/connect-wikipedia/src/types/index.ts +22 -228
- package/connectors/connect-wubookratechecker/src/api/client.ts +14 -204
- package/connectors/connect-wubookratechecker/src/api/index.ts +18 -46
- package/connectors/connect-wubookratechecker/src/types/index.ts +6 -233
- package/connectors/connect-x/src/api/oauth.ts +28 -58
- package/connectors/connect-xai/src/api/chat.ts +2 -1
- package/connectors/connect-yodiz/src/api/client.ts +20 -205
- package/connectors/connect-yodiz/src/api/index.ts +36 -41
- package/connectors/connect-yodiz/src/types/index.ts +8 -233
- package/connectors/connect-yourls/src/api/client.ts +25 -211
- package/connectors/connect-yourls/src/api/index.ts +33 -41
- package/connectors/connect-yourls/src/types/index.ts +7 -233
- package/connectors/connect-zammad/src/api/client.ts +19 -208
- package/connectors/connect-zammad/src/api/index.ts +32 -44
- package/connectors/connect-zammad/src/types/index.ts +8 -233
- package/connectors/connect-zohobooks/src/api/client.ts +21 -205
- package/connectors/connect-zohobooks/src/api/index.ts +36 -42
- package/connectors/connect-zohobooks/src/types/index.ts +10 -233
- package/connectors/connect-zohocrm/src/api/client.ts +21 -204
- package/connectors/connect-zohocrm/src/api/index.ts +36 -41
- package/connectors/connect-zohocrm/src/types/index.ts +10 -233
- package/connectors/connect-zohoworkdrive/src/api/client.ts +24 -206
- package/connectors/connect-zohoworkdrive/src/api/index.ts +31 -42
- package/connectors/connect-zohoworkdrive/src/types/index.ts +7 -233
- package/connectors/connect-zoom/src/api/users.ts +95 -1
- package/connectors/connect-zulip/src/api/client.ts +22 -206
- package/connectors/connect-zulip/src/api/index.ts +35 -44
- package/connectors/connect-zulip/src/types/index.ts +7 -233
- package/dashboard/dist/assets/index-DmR_QNtT.css +1 -0
- package/dashboard/dist/assets/index-Dp-apHbC.js +284 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/db/agents.d.ts +38 -0
- package/dist/db/agents.test.d.ts +1 -0
- package/dist/db/database.d.ts +7 -0
- package/dist/db/jobs.d.ts +53 -0
- package/dist/db/jobs.test.d.ts +1 -0
- package/dist/db/locks.d.ts +59 -0
- package/dist/db/locks.test.d.ts +1 -0
- package/dist/db/promotions.d.ts +5 -0
- package/dist/db/promotions.test.d.ts +1 -0
- package/dist/db/rate.d.ts +57 -0
- package/dist/db/rate.test.d.ts +1 -0
- package/dist/db/usage.d.ts +17 -0
- package/dist/db/usage.test.d.ts +1 -0
- package/dist/db/workflows.d.ts +26 -0
- package/dist/db/workflows.test.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +319 -22
- package/dist/lib/fuzzy.d.ts +16 -0
- package/dist/lib/fuzzy.test.d.ts +1 -0
- package/dist/lib/installer.d.ts +6 -7
- package/dist/lib/llm.d.ts +38 -0
- package/dist/lib/llm.test.d.ts +1 -0
- package/dist/lib/lock.d.ts +22 -0
- package/dist/lib/lock.test.d.ts +1 -0
- package/dist/lib/registry.d.ts +22 -1
- package/dist/lib/scheduler.d.ts +20 -0
- package/dist/lib/scheduler.test.d.ts +1 -0
- package/dist/lib/strip.d.ts +20 -0
- package/dist/lib/strip.test.d.ts +1 -0
- package/dist/lib/synonyms.d.ts +12 -0
- package/dist/lib/synonyms.test.d.ts +1 -0
- package/dist/lib/workflow-runner.d.ts +22 -0
- package/dist/server/auth.d.ts +4 -2
- package/package.json +2 -1
- package/connectors/connect-godaddy/src/api/example.ts +0 -48
- package/connectors/connect-godaddy/src/utils/auth.ts +0 -274
- package/connectors/connect-godaddy/src/utils/bulk.ts +0 -212
- package/connectors/connect-godaddy/src/utils/settings.ts +0 -114
- package/connectors/connect-godaddy/src/utils/storage.ts +0 -198
- package/connectors/connect-huggingface/src/api/example.ts +0 -48
- package/connectors/connect-yousign/CLAUDE.md +0 -48
- package/connectors/connect-yousign/src/api/client.ts +0 -119
- package/connectors/connect-yousign/src/api/index.ts +0 -221
- package/connectors/connect-yousign/src/cli/index.ts +0 -555
- package/connectors/connect-yousign/src/index.ts +0 -21
- package/connectors/connect-yousign/src/types/index.ts +0 -275
- package/connectors/connect-yousign/src/utils/config.ts +0 -121
- package/dashboard/dist/assets/index-CSlS3oNV.css +0 -1
- package/dashboard/dist/assets/index-sSIkMXYs.js +0 -284
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/bun/LICENSE +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/bun/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/LICENSE +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/README.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/assert/strict.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/assert.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/async_hooks.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/buffer.buffer.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/buffer.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/child_process.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/cluster.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/compatibility/iterators.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/console.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/constants.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/crypto.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/dgram.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/diagnostics_channel.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/dns/promises.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/dns.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/domain.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/events.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/fs/promises.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/fs.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/globals.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/globals.typedarray.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/http.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/http2.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/https.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/inspector/promises.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/inspector.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/inspector.generated.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/module.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/net.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/os.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/package.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/path/posix.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/path/win32.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/path.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/perf_hooks.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/process.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/punycode.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/querystring.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/quic.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/readline/promises.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/readline.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/repl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/sea.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/sqlite.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/stream/consumers.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/stream/promises.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/stream/web.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/stream.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/string_decoder.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/test/reporters.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/test.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/timers/promises.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/timers.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/tls.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/trace_events.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/ts5.6/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/ts5.7/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/tty.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/url.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/util/types.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/util.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/v8.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/vm.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/wasi.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/blob.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/console.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/crypto.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/domexception.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/encoding.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/events.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/fetch.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/importmeta.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/messaging.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/navigator.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/performance.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/storage.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/streams.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/timers.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/web-globals/url.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/worker_threads.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/@types/node/zlib.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/CLAUDE.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/README.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/bun.ns.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/bundle.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/deprecated.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/devserver.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/README.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/bytecode.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/css.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/esbuild.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/hot-reloading.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/html-static.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/index.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/loaders.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/macros.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/minifier.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/plugins.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/bundler/standalone-html.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/feedback.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/arraybuffer-to-array.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/arraybuffer-to-blob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/arraybuffer-to-buffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/arraybuffer-to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/arraybuffer-to-typedarray.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/blob-to-arraybuffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/blob-to-dataview.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/blob-to-stream.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/blob-to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/blob-to-typedarray.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/buffer-to-arraybuffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/buffer-to-blob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/buffer-to-readablestream.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/buffer-to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/buffer-to-typedarray.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/dataview-to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/typedarray-to-arraybuffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/typedarray-to-blob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/typedarray-to-buffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/typedarray-to-dataview.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/typedarray-to-readablestream.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/binary/typedarray-to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/deployment/aws-lambda.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/deployment/digital-ocean.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/deployment/google-cloud-run.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/deployment/railway.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/deployment/render.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/deployment/vercel.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/astro.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/discordjs.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/docker.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/drizzle.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/elysia.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/express.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/gel.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/hono.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/mongoose.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/neon-drizzle.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/neon-serverless-postgres.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/nextjs.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/nuxt.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/pm2.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/prisma-postgres.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/prisma.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/qwik.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/react.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/remix.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/sentry.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/solidstart.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/ssr-react.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/stric.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/sveltekit.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/systemd.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/tanstack-start.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/upstash.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/ecosystem/vite.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/html-rewriter/extract-links.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/html-rewriter/extract-social-meta.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/cluster.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/fetch-unix.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/fetch.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/file-uploads.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/hot.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/proxy.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/server.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/simple.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/stream-file.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/stream-iterator.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/stream-node-streams-in-bun.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/http/tls.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/index.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/add-dev.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/add-git.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/add-optional.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/add-peer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/add-tarball.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/add.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/azure-artifacts.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/cicd.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/custom-registry.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/from-npm-install-to-bun-install.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/git-diff-bun-lockfile.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/jfrog-artifactory.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/npm-alias.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/registry-scope.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/trusted.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/workspaces.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/install/yarnlock.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/argv.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/ctrl-c.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/ipc.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/nanoseconds.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/os-signals.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/spawn-stderr.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/spawn-stdout.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/spawn.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/process/stdin.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/arraybuffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/buffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/exists.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/json.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/mime.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/stream.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/uint8array.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/read-file/watch.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/build-time-constants.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/cicd.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/codesign-macos-executable.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/define-constant.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/delete-directory.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/delete-file.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/heap-snapshot.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/import-html.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/import-json.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/import-json5.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/import-toml.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/import-yaml.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/read-env.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/set-env.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/shell.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/timezone.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/tsconfig-paths.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/typescript.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/vscode-debugger.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/runtime/web-debugger.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/node-readable-to-arraybuffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/node-readable-to-blob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/node-readable-to-json.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/node-readable-to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/node-readable-to-uint8array.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-array.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-arraybuffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-blob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-buffer.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-json.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-string.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/streams/to-typedarray.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/bail.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/concurrent-test-glob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/coverage-threshold.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/coverage.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/happy-dom.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/migrate-from-jest.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/mock-clock.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/mock-functions.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/rerun-each.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/run-tests.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/skip-tests.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/snapshot.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/spy-on.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/svelte-test.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/testing-library.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/timeout.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/todo-tests.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/update-snapshots.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/test/watch-mode.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/base64.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/deep-equals.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/deflate.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/detect-bun.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/entrypoint.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/escape-html.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/file-url-to-path.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/gzip.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/hash-a-password.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/import-meta-dir.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/import-meta-file.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/import-meta-path.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/javascript-uuid.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/main.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/path-to-file-url.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/sleep.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/upgrade.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/version.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/util/which-path-to-executable-bin.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/websocket/compression.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/websocket/context.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/websocket/pubsub.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/websocket/simple.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/append.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/basic.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/blob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/cat.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/file-cp.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/filesink.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/response.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/stdout.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/stream.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/guides/write-file/unlink.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/index.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/installation.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/bunx.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/catalogs.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/add.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/audit.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/info.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/install.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/link.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/outdated.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/patch.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/pm.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/publish.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/remove.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/update.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/cli/why.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/filter.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/global-cache.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/isolated-installs.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/lifecycle.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/lockfile.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/npmrc.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/overrides.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/scopes-registries.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/security-scanner-api.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/pm/workspaces.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/benchmarking.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/bindgen.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/building-windows.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/contributing.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/feedback.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/license.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/project/roadmap.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/quickstart.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/archive.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/auto-install.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/binary-data.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/c-compiler.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/child-process.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/color.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/console.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/cookies.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/debugger.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/environment-variables.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/ffi.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/file-io.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/file-system-router.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/file-types.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/glob.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/globals.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/html-rewriter.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/cookies.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/error-handling.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/metrics.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/routing.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/tls.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/http/websockets.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/index.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/jsonl.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/jsx.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/module-resolution.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/networking/dns.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/networking/fetch.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/networking/tcp.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/networking/udp.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/node-api.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/nodejs-compat.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/plugins.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/redis.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/repl.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/s3.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/secrets.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/semver.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/shell.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/sql.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/sqlite.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/streams.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/templating/create.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/templating/init.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/transpiler.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/typescript.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/utils.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/watch-mode.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/web-apis.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/runtime/workers.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/add.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/build.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/bunx.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/feedback.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/init.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/install.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/link.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/outdated.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/patch.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/publish.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/remove.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/run.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/test.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/snippets/cli/update.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/code-coverage.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/dates-times.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/discovery.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/dom.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/index.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/lifecycle.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/mocks.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/reporters.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/runtime-behavior.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/snapshots.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/test/writing-tests.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/docs/typescript.mdx +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/extensions.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/fetch.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/ffi.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/globals.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/html-rewriter.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/jsc.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/jsx.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/overrides.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/redis.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/security.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/serve.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/shell.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/sql.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/sqlite.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/test-globals.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/test.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/vendor/expect-type/branding.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/vendor/expect-type/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/vendor/expect-type/messages.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/vendor/expect-type/overloads.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/vendor/expect-type/utils.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/bun-types/wasm.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/license +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/package.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/readme.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/index.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/utilities.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/vendor/ansi-styles/index.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/vendor/supports-color/browser.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/vendor/supports-color/browser.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/vendor/supports-color/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/chalk/source/vendor/supports-color/index.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/LICENSE +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/Readme.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/esm.mjs +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/index.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/lib/argument.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/lib/command.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/lib/error.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/lib/help.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/lib/option.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/lib/suggestSimilar.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/package-support.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/package.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/typings/esm.d.mts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/commander/typings/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/LICENSE.txt +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/README.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/SECURITY.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/ThirdPartyNoticeText.txt +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/bin/tsc +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/bin/tsserver +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/_tsc.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/_tsserver.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/_typingsInstaller.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.decorators.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.dom.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2016.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2021.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2023.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es5.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.es6.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.scripthost.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.webworker.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/tsc.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/tsserver.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/tsserverlibrary.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/typesMap.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/typescript.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/typescript.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/typingsInstaller.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/watchGuard.js +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/typescript/package.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/LICENSE +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/README.md +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/agent.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/api.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/balanced-pool.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/cache-interceptor.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/cache.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/client-stats.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/client.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/connector.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/content-type.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/cookies.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/diagnostics-channel.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/dispatcher.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/env-http-proxy-agent.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/errors.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/eventsource.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/fetch.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/formdata.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/global-dispatcher.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/global-origin.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/h2c-client.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/handlers.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/header.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/index.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/interceptors.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/mock-agent.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/mock-call-history.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/mock-client.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/mock-errors.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/mock-interceptor.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/mock-pool.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/package.json +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/patch.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/pool-stats.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/pool.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/proxy-agent.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/readable.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/retry-agent.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/retry-handler.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/round-robin-pool.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/snapshot-agent.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/util.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/utility.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/webidl.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/node_modules/undici-types/websocket.d.ts +0 -0
- /package/connectors/{connect-yousign → connect-namecheap}/tsconfig.json +0 -0
package/bin/index.js
CHANGED
|
@@ -4,6 +4,7 @@ var __create = Object.create;
|
|
|
4
4
|
var __getProtoOf = Object.getPrototypeOf;
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
9
|
var __toESM = (mod, isNodeMode, target) => {
|
|
9
10
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
@@ -16,6 +17,20 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
16
17
|
});
|
|
17
18
|
return to;
|
|
18
19
|
};
|
|
20
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
21
|
+
var __toCommonJS = (from) => {
|
|
22
|
+
var entry = __moduleCache.get(from), desc;
|
|
23
|
+
if (entry)
|
|
24
|
+
return entry;
|
|
25
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
26
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
27
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
28
|
+
get: () => from[key],
|
|
29
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
30
|
+
}));
|
|
31
|
+
__moduleCache.set(from, entry);
|
|
32
|
+
return entry;
|
|
33
|
+
};
|
|
19
34
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
20
35
|
var __export = (target, all) => {
|
|
21
36
|
for (var name in all)
|
|
@@ -1868,16 +1883,820 @@ var require_commander = __commonJS((exports) => {
|
|
|
1868
1883
|
exports.InvalidOptionArgumentError = InvalidArgumentError;
|
|
1869
1884
|
});
|
|
1870
1885
|
|
|
1886
|
+
// src/lib/llm.ts
|
|
1887
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
1888
|
+
import { join } from "path";
|
|
1889
|
+
import { homedir } from "os";
|
|
1890
|
+
function getLlmConfigPath() {
|
|
1891
|
+
return join(homedir(), ".connectors", "llm.json");
|
|
1892
|
+
}
|
|
1893
|
+
function getLlmConfig() {
|
|
1894
|
+
const path = getLlmConfigPath();
|
|
1895
|
+
if (!existsSync(path))
|
|
1896
|
+
return null;
|
|
1897
|
+
try {
|
|
1898
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
1899
|
+
} catch {
|
|
1900
|
+
return null;
|
|
1901
|
+
}
|
|
1902
|
+
}
|
|
1903
|
+
function saveLlmConfig(config) {
|
|
1904
|
+
const dir = join(homedir(), ".connectors");
|
|
1905
|
+
mkdirSync(dir, { recursive: true });
|
|
1906
|
+
writeFileSync(getLlmConfigPath(), JSON.stringify(config, null, 2));
|
|
1907
|
+
}
|
|
1908
|
+
function setLlmStrip(enabled) {
|
|
1909
|
+
const config = getLlmConfig();
|
|
1910
|
+
if (!config)
|
|
1911
|
+
throw new Error("No LLM config found. Run: connectors llm set --provider <provider> --key <key>");
|
|
1912
|
+
saveLlmConfig({ ...config, strip: enabled });
|
|
1913
|
+
}
|
|
1914
|
+
function maskKey(key) {
|
|
1915
|
+
if (key.length <= 8)
|
|
1916
|
+
return "***";
|
|
1917
|
+
return key.slice(0, 8) + "***";
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
class LLMClient {
|
|
1921
|
+
config;
|
|
1922
|
+
constructor(config) {
|
|
1923
|
+
this.config = config;
|
|
1924
|
+
}
|
|
1925
|
+
static fromConfig() {
|
|
1926
|
+
const config = getLlmConfig();
|
|
1927
|
+
if (!config)
|
|
1928
|
+
return null;
|
|
1929
|
+
return new LLMClient(config);
|
|
1930
|
+
}
|
|
1931
|
+
async complete(prompt, content) {
|
|
1932
|
+
const start = Date.now();
|
|
1933
|
+
const { provider, model, api_key } = this.config;
|
|
1934
|
+
if (provider === "anthropic") {
|
|
1935
|
+
return this._anthropicComplete(prompt, content, start);
|
|
1936
|
+
}
|
|
1937
|
+
const baseUrl = PROVIDER_BASE_URLS[provider];
|
|
1938
|
+
const response = await fetch(`${baseUrl}/chat/completions`, {
|
|
1939
|
+
method: "POST",
|
|
1940
|
+
headers: {
|
|
1941
|
+
"Content-Type": "application/json",
|
|
1942
|
+
Authorization: `Bearer ${api_key}`
|
|
1943
|
+
},
|
|
1944
|
+
body: JSON.stringify({
|
|
1945
|
+
model,
|
|
1946
|
+
messages: [
|
|
1947
|
+
{ role: "system", content: prompt },
|
|
1948
|
+
{ role: "user", content }
|
|
1949
|
+
],
|
|
1950
|
+
temperature: 0,
|
|
1951
|
+
max_tokens: 4096
|
|
1952
|
+
})
|
|
1953
|
+
});
|
|
1954
|
+
if (!response.ok) {
|
|
1955
|
+
const error = await response.text();
|
|
1956
|
+
throw new Error(`LLM request failed (${provider} ${response.status}): ${error}`);
|
|
1957
|
+
}
|
|
1958
|
+
const data = await response.json();
|
|
1959
|
+
return {
|
|
1960
|
+
content: data.choices[0].message.content,
|
|
1961
|
+
provider,
|
|
1962
|
+
model,
|
|
1963
|
+
latency_ms: Date.now() - start
|
|
1964
|
+
};
|
|
1965
|
+
}
|
|
1966
|
+
async _anthropicComplete(prompt, content, start) {
|
|
1967
|
+
const { model, api_key } = this.config;
|
|
1968
|
+
const response = await fetch("https://api.anthropic.com/v1/messages", {
|
|
1969
|
+
method: "POST",
|
|
1970
|
+
headers: {
|
|
1971
|
+
"Content-Type": "application/json",
|
|
1972
|
+
"x-api-key": api_key,
|
|
1973
|
+
"anthropic-version": "2023-06-01"
|
|
1974
|
+
},
|
|
1975
|
+
body: JSON.stringify({
|
|
1976
|
+
model,
|
|
1977
|
+
system: prompt,
|
|
1978
|
+
messages: [{ role: "user", content }],
|
|
1979
|
+
max_tokens: 4096
|
|
1980
|
+
})
|
|
1981
|
+
});
|
|
1982
|
+
if (!response.ok) {
|
|
1983
|
+
const error = await response.text();
|
|
1984
|
+
throw new Error(`LLM request failed (anthropic ${response.status}): ${error}`);
|
|
1985
|
+
}
|
|
1986
|
+
const data = await response.json();
|
|
1987
|
+
return {
|
|
1988
|
+
content: data.content[0].text,
|
|
1989
|
+
provider: "anthropic",
|
|
1990
|
+
model,
|
|
1991
|
+
latency_ms: Date.now() - start
|
|
1992
|
+
};
|
|
1993
|
+
}
|
|
1994
|
+
}
|
|
1995
|
+
var PROVIDER_BASE_URLS, PROVIDER_DEFAULTS;
|
|
1996
|
+
var init_llm = __esm(() => {
|
|
1997
|
+
PROVIDER_BASE_URLS = {
|
|
1998
|
+
cerebras: "https://api.cerebras.ai/v1",
|
|
1999
|
+
groq: "https://api.groq.com/openai/v1",
|
|
2000
|
+
openai: "https://api.openai.com/v1"
|
|
2001
|
+
};
|
|
2002
|
+
PROVIDER_DEFAULTS = {
|
|
2003
|
+
cerebras: { model: "qwen-3-32b" },
|
|
2004
|
+
groq: { model: "llama-3.3-70b-versatile" },
|
|
2005
|
+
openai: { model: "gpt-4o-mini" },
|
|
2006
|
+
anthropic: { model: "claude-haiku-4-5-20251001" }
|
|
2007
|
+
};
|
|
2008
|
+
});
|
|
2009
|
+
|
|
2010
|
+
// src/db/database.ts
|
|
2011
|
+
var exports_database = {};
|
|
2012
|
+
__export(exports_database, {
|
|
2013
|
+
shortUuid: () => shortUuid,
|
|
2014
|
+
now: () => now,
|
|
2015
|
+
getDatabase: () => getDatabase,
|
|
2016
|
+
closeDatabase: () => closeDatabase
|
|
2017
|
+
});
|
|
2018
|
+
import { Database } from "bun:sqlite";
|
|
2019
|
+
import { join as join2 } from "path";
|
|
2020
|
+
import { homedir as homedir2 } from "os";
|
|
2021
|
+
import { mkdirSync as mkdirSync2 } from "fs";
|
|
2022
|
+
function getDatabase(path) {
|
|
2023
|
+
if (_db)
|
|
2024
|
+
return _db;
|
|
2025
|
+
const dbPath = path ?? DB_PATH;
|
|
2026
|
+
mkdirSync2(join2(dbPath, ".."), { recursive: true });
|
|
2027
|
+
_db = new Database(dbPath);
|
|
2028
|
+
_db.run("PRAGMA journal_mode = WAL");
|
|
2029
|
+
migrate(_db);
|
|
2030
|
+
return _db;
|
|
2031
|
+
}
|
|
2032
|
+
function closeDatabase() {
|
|
2033
|
+
_db?.close();
|
|
2034
|
+
_db = null;
|
|
2035
|
+
}
|
|
2036
|
+
function now() {
|
|
2037
|
+
return new Date().toISOString();
|
|
2038
|
+
}
|
|
2039
|
+
function shortUuid() {
|
|
2040
|
+
return crypto.randomUUID().slice(0, 8);
|
|
2041
|
+
}
|
|
2042
|
+
function migrate(db) {
|
|
2043
|
+
db.run(`
|
|
2044
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
2045
|
+
id TEXT PRIMARY KEY,
|
|
2046
|
+
name TEXT UNIQUE NOT NULL,
|
|
2047
|
+
session_id TEXT,
|
|
2048
|
+
role TEXT NOT NULL DEFAULT 'agent',
|
|
2049
|
+
last_seen_at TEXT NOT NULL,
|
|
2050
|
+
created_at TEXT NOT NULL
|
|
2051
|
+
)
|
|
2052
|
+
`);
|
|
2053
|
+
db.run(`
|
|
2054
|
+
CREATE TABLE IF NOT EXISTS resource_locks (
|
|
2055
|
+
id TEXT PRIMARY KEY,
|
|
2056
|
+
resource_type TEXT NOT NULL CHECK(resource_type IN ('connector', 'agent', 'profile', 'token')),
|
|
2057
|
+
resource_id TEXT NOT NULL,
|
|
2058
|
+
agent_id TEXT NOT NULL,
|
|
2059
|
+
lock_type TEXT NOT NULL DEFAULT 'exclusive' CHECK(lock_type IN ('advisory', 'exclusive')),
|
|
2060
|
+
locked_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
2061
|
+
expires_at TEXT NOT NULL
|
|
2062
|
+
)
|
|
2063
|
+
`);
|
|
2064
|
+
db.run(`
|
|
2065
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_resource_locks_exclusive
|
|
2066
|
+
ON resource_locks(resource_type, resource_id)
|
|
2067
|
+
WHERE lock_type = 'exclusive'
|
|
2068
|
+
`);
|
|
2069
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_resource_locks_agent ON resource_locks(agent_id)`);
|
|
2070
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_resource_locks_expires ON resource_locks(expires_at)`);
|
|
2071
|
+
db.run(`
|
|
2072
|
+
CREATE TABLE IF NOT EXISTS connector_rate_usage (
|
|
2073
|
+
agent_id TEXT NOT NULL,
|
|
2074
|
+
connector TEXT NOT NULL,
|
|
2075
|
+
window_start TEXT NOT NULL,
|
|
2076
|
+
call_count INTEGER NOT NULL DEFAULT 0,
|
|
2077
|
+
PRIMARY KEY (agent_id, connector, window_start)
|
|
2078
|
+
)
|
|
2079
|
+
`);
|
|
2080
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_rate_usage_window ON connector_rate_usage(connector, window_start)`);
|
|
2081
|
+
db.run(`
|
|
2082
|
+
CREATE TABLE IF NOT EXISTS connector_jobs (
|
|
2083
|
+
id TEXT PRIMARY KEY,
|
|
2084
|
+
name TEXT UNIQUE NOT NULL,
|
|
2085
|
+
connector TEXT NOT NULL,
|
|
2086
|
+
command TEXT NOT NULL,
|
|
2087
|
+
args TEXT NOT NULL DEFAULT '[]',
|
|
2088
|
+
cron TEXT NOT NULL,
|
|
2089
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
2090
|
+
strip INTEGER NOT NULL DEFAULT 0,
|
|
2091
|
+
created_at TEXT NOT NULL,
|
|
2092
|
+
last_run_at TEXT
|
|
2093
|
+
)
|
|
2094
|
+
`);
|
|
2095
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_jobs_enabled ON connector_jobs(enabled)`);
|
|
2096
|
+
db.run(`
|
|
2097
|
+
CREATE TABLE IF NOT EXISTS connector_job_runs (
|
|
2098
|
+
id TEXT PRIMARY KEY,
|
|
2099
|
+
job_id TEXT NOT NULL REFERENCES connector_jobs(id) ON DELETE CASCADE,
|
|
2100
|
+
started_at TEXT NOT NULL,
|
|
2101
|
+
finished_at TEXT,
|
|
2102
|
+
exit_code INTEGER,
|
|
2103
|
+
raw_output TEXT,
|
|
2104
|
+
stripped_output TEXT
|
|
2105
|
+
)
|
|
2106
|
+
`);
|
|
2107
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_job_runs_job ON connector_job_runs(job_id, started_at DESC)`);
|
|
2108
|
+
db.run(`
|
|
2109
|
+
CREATE TABLE IF NOT EXISTS connector_workflows (
|
|
2110
|
+
id TEXT PRIMARY KEY,
|
|
2111
|
+
name TEXT UNIQUE NOT NULL,
|
|
2112
|
+
steps TEXT NOT NULL DEFAULT '[]',
|
|
2113
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
2114
|
+
created_at TEXT NOT NULL
|
|
2115
|
+
)
|
|
2116
|
+
`);
|
|
2117
|
+
db.run(`
|
|
2118
|
+
CREATE TABLE IF NOT EXISTS connector_usage (
|
|
2119
|
+
id TEXT PRIMARY KEY,
|
|
2120
|
+
connector TEXT NOT NULL,
|
|
2121
|
+
action TEXT NOT NULL,
|
|
2122
|
+
agent_id TEXT,
|
|
2123
|
+
timestamp TEXT NOT NULL
|
|
2124
|
+
)
|
|
2125
|
+
`);
|
|
2126
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_usage_connector ON connector_usage(connector, timestamp DESC)`);
|
|
2127
|
+
db.run(`
|
|
2128
|
+
CREATE TABLE IF NOT EXISTS connector_promotions (
|
|
2129
|
+
connector TEXT UNIQUE NOT NULL,
|
|
2130
|
+
promoted_at TEXT NOT NULL
|
|
2131
|
+
)
|
|
2132
|
+
`);
|
|
2133
|
+
}
|
|
2134
|
+
var DB_DIR, DB_PATH, _db = null;
|
|
2135
|
+
var init_database = __esm(() => {
|
|
2136
|
+
DB_DIR = join2(homedir2(), ".connectors");
|
|
2137
|
+
DB_PATH = join2(DB_DIR, "connectors.db");
|
|
2138
|
+
});
|
|
2139
|
+
|
|
2140
|
+
// src/db/jobs.ts
|
|
2141
|
+
function rowToJob(row) {
|
|
2142
|
+
return {
|
|
2143
|
+
...row,
|
|
2144
|
+
args: JSON.parse(row.args || "[]"),
|
|
2145
|
+
enabled: row.enabled === 1,
|
|
2146
|
+
strip: row.strip === 1
|
|
2147
|
+
};
|
|
2148
|
+
}
|
|
2149
|
+
function createJob(input, db) {
|
|
2150
|
+
const d = db ?? getDatabase();
|
|
2151
|
+
const id = shortUuid();
|
|
2152
|
+
const ts = now();
|
|
2153
|
+
d.run("INSERT INTO connector_jobs (id, name, connector, command, args, cron, enabled, strip, created_at) VALUES (?, ?, ?, ?, ?, ?, 1, ?, ?)", [id, input.name, input.connector, input.command, JSON.stringify(input.args ?? []), input.cron, input.strip ? 1 : 0, ts]);
|
|
2154
|
+
return getJob(id, d);
|
|
2155
|
+
}
|
|
2156
|
+
function getJob(id, db) {
|
|
2157
|
+
const d = db ?? getDatabase();
|
|
2158
|
+
const row = d.query("SELECT * FROM connector_jobs WHERE id = ?").get(id);
|
|
2159
|
+
return row ? rowToJob(row) : null;
|
|
2160
|
+
}
|
|
2161
|
+
function getJobByName(name, db) {
|
|
2162
|
+
const d = db ?? getDatabase();
|
|
2163
|
+
const row = d.query("SELECT * FROM connector_jobs WHERE name = ?").get(name);
|
|
2164
|
+
return row ? rowToJob(row) : null;
|
|
2165
|
+
}
|
|
2166
|
+
function listJobs(db) {
|
|
2167
|
+
const d = db ?? getDatabase();
|
|
2168
|
+
return d.query("SELECT * FROM connector_jobs ORDER BY name").all().map(rowToJob);
|
|
2169
|
+
}
|
|
2170
|
+
function listEnabledJobs(db) {
|
|
2171
|
+
const d = db ?? getDatabase();
|
|
2172
|
+
return d.query("SELECT * FROM connector_jobs WHERE enabled = 1").all().map(rowToJob);
|
|
2173
|
+
}
|
|
2174
|
+
function updateJob(id, input, db) {
|
|
2175
|
+
const d = db ?? getDatabase();
|
|
2176
|
+
const sets = [];
|
|
2177
|
+
const params = [];
|
|
2178
|
+
if (input.name !== undefined) {
|
|
2179
|
+
sets.push("name = ?");
|
|
2180
|
+
params.push(input.name);
|
|
2181
|
+
}
|
|
2182
|
+
if (input.connector !== undefined) {
|
|
2183
|
+
sets.push("connector = ?");
|
|
2184
|
+
params.push(input.connector);
|
|
2185
|
+
}
|
|
2186
|
+
if (input.command !== undefined) {
|
|
2187
|
+
sets.push("command = ?");
|
|
2188
|
+
params.push(input.command);
|
|
2189
|
+
}
|
|
2190
|
+
if (input.args !== undefined) {
|
|
2191
|
+
sets.push("args = ?");
|
|
2192
|
+
params.push(JSON.stringify(input.args));
|
|
2193
|
+
}
|
|
2194
|
+
if (input.cron !== undefined) {
|
|
2195
|
+
sets.push("cron = ?");
|
|
2196
|
+
params.push(input.cron);
|
|
2197
|
+
}
|
|
2198
|
+
if (input.enabled !== undefined) {
|
|
2199
|
+
sets.push("enabled = ?");
|
|
2200
|
+
params.push(input.enabled ? 1 : 0);
|
|
2201
|
+
}
|
|
2202
|
+
if (input.strip !== undefined) {
|
|
2203
|
+
sets.push("strip = ?");
|
|
2204
|
+
params.push(input.strip ? 1 : 0);
|
|
2205
|
+
}
|
|
2206
|
+
if (sets.length === 0)
|
|
2207
|
+
return getJob(id, d);
|
|
2208
|
+
params.push(id);
|
|
2209
|
+
d.run(`UPDATE connector_jobs SET ${sets.join(", ")} WHERE id = ?`, params);
|
|
2210
|
+
return getJob(id, d);
|
|
2211
|
+
}
|
|
2212
|
+
function deleteJob(id, db) {
|
|
2213
|
+
const d = db ?? getDatabase();
|
|
2214
|
+
return d.run("DELETE FROM connector_jobs WHERE id = ?", [id]).changes > 0;
|
|
2215
|
+
}
|
|
2216
|
+
function touchJobLastRun(id, db) {
|
|
2217
|
+
const d = db ?? getDatabase();
|
|
2218
|
+
d.run("UPDATE connector_jobs SET last_run_at = ? WHERE id = ?", [now(), id]);
|
|
2219
|
+
}
|
|
2220
|
+
function createJobRun(jobId, db) {
|
|
2221
|
+
const d = db ?? getDatabase();
|
|
2222
|
+
const id = shortUuid();
|
|
2223
|
+
const ts = now();
|
|
2224
|
+
d.run("INSERT INTO connector_job_runs (id, job_id, started_at) VALUES (?, ?, ?)", [id, jobId, ts]);
|
|
2225
|
+
return { id, job_id: jobId, started_at: ts, finished_at: null, exit_code: null, raw_output: null, stripped_output: null };
|
|
2226
|
+
}
|
|
2227
|
+
function finishJobRun(id, result, db) {
|
|
2228
|
+
const d = db ?? getDatabase();
|
|
2229
|
+
d.run("UPDATE connector_job_runs SET finished_at = ?, exit_code = ?, raw_output = ?, stripped_output = ? WHERE id = ?", [now(), result.exit_code, result.raw_output, result.stripped_output ?? null, id]);
|
|
2230
|
+
}
|
|
2231
|
+
function listJobRuns(jobId, limit = 20, db) {
|
|
2232
|
+
const d = db ?? getDatabase();
|
|
2233
|
+
return d.query("SELECT * FROM connector_job_runs WHERE job_id = ? ORDER BY started_at DESC LIMIT ?").all(jobId, limit);
|
|
2234
|
+
}
|
|
2235
|
+
var init_jobs = __esm(() => {
|
|
2236
|
+
init_database();
|
|
2237
|
+
});
|
|
2238
|
+
|
|
2239
|
+
// src/db/workflows.ts
|
|
2240
|
+
function rowToWorkflow(row) {
|
|
2241
|
+
return {
|
|
2242
|
+
...row,
|
|
2243
|
+
steps: JSON.parse(row.steps || "[]"),
|
|
2244
|
+
enabled: row.enabled === 1
|
|
2245
|
+
};
|
|
2246
|
+
}
|
|
2247
|
+
function createWorkflow(input, db) {
|
|
2248
|
+
const d = db ?? getDatabase();
|
|
2249
|
+
const id = shortUuid();
|
|
2250
|
+
d.run("INSERT INTO connector_workflows (id, name, steps, enabled, created_at) VALUES (?, ?, ?, 1, ?)", [id, input.name, JSON.stringify(input.steps), now()]);
|
|
2251
|
+
return getWorkflow(id, d);
|
|
2252
|
+
}
|
|
2253
|
+
function getWorkflow(id, db) {
|
|
2254
|
+
const d = db ?? getDatabase();
|
|
2255
|
+
const row = d.query("SELECT * FROM connector_workflows WHERE id = ?").get(id);
|
|
2256
|
+
return row ? rowToWorkflow(row) : null;
|
|
2257
|
+
}
|
|
2258
|
+
function getWorkflowByName(name, db) {
|
|
2259
|
+
const d = db ?? getDatabase();
|
|
2260
|
+
const row = d.query("SELECT * FROM connector_workflows WHERE name = ?").get(name);
|
|
2261
|
+
return row ? rowToWorkflow(row) : null;
|
|
2262
|
+
}
|
|
2263
|
+
function listWorkflows(db) {
|
|
2264
|
+
const d = db ?? getDatabase();
|
|
2265
|
+
return d.query("SELECT * FROM connector_workflows ORDER BY name").all().map(rowToWorkflow);
|
|
2266
|
+
}
|
|
2267
|
+
function deleteWorkflow(id, db) {
|
|
2268
|
+
const d = db ?? getDatabase();
|
|
2269
|
+
return d.run("DELETE FROM connector_workflows WHERE id = ?", [id]).changes > 0;
|
|
2270
|
+
}
|
|
2271
|
+
var init_workflows = __esm(() => {
|
|
2272
|
+
init_database();
|
|
2273
|
+
});
|
|
2274
|
+
|
|
2275
|
+
// src/lib/strip.ts
|
|
2276
|
+
async function maybeStrip(output, _type = "json") {
|
|
2277
|
+
const config = getLlmConfig();
|
|
2278
|
+
if (!config?.strip)
|
|
2279
|
+
return output;
|
|
2280
|
+
if (!output || output.trim().length === 0)
|
|
2281
|
+
return output;
|
|
2282
|
+
const client = LLMClient.fromConfig();
|
|
2283
|
+
if (!client)
|
|
2284
|
+
return output;
|
|
2285
|
+
try {
|
|
2286
|
+
const result = await client.complete(STRIP_PROMPT, output);
|
|
2287
|
+
return result.content.trim();
|
|
2288
|
+
} catch {
|
|
2289
|
+
return output;
|
|
2290
|
+
}
|
|
2291
|
+
}
|
|
2292
|
+
var STRIP_PROMPT = `You are a data extraction assistant. Your job is to take raw API output and return ONLY the essential, structured data.
|
|
2293
|
+
|
|
2294
|
+
Rules:
|
|
2295
|
+
- Return valid JSON only (no markdown, no explanation)
|
|
2296
|
+
- Remove pagination metadata, rate limit headers, empty fields, null values
|
|
2297
|
+
- Keep all meaningful data fields
|
|
2298
|
+
- If the input is already minimal, return it unchanged
|
|
2299
|
+
- If input is not JSON, extract key facts as a JSON object
|
|
2300
|
+
- Never truncate actual data values`;
|
|
2301
|
+
var init_strip = __esm(() => {
|
|
2302
|
+
init_llm();
|
|
2303
|
+
});
|
|
2304
|
+
|
|
2305
|
+
// src/lib/scheduler.ts
|
|
2306
|
+
var exports_scheduler = {};
|
|
2307
|
+
__export(exports_scheduler, {
|
|
2308
|
+
triggerJob: () => triggerJob,
|
|
2309
|
+
stopScheduler: () => stopScheduler,
|
|
2310
|
+
startScheduler: () => startScheduler
|
|
2311
|
+
});
|
|
2312
|
+
import { spawn } from "child_process";
|
|
2313
|
+
function cronMatches(cron, d) {
|
|
2314
|
+
const parts = cron.trim().split(/\s+/);
|
|
2315
|
+
if (parts.length !== 5)
|
|
2316
|
+
return false;
|
|
2317
|
+
const [min, hour, dom, mon, dow] = parts;
|
|
2318
|
+
function matches(field, value, min_v, max_v) {
|
|
2319
|
+
if (field === "*")
|
|
2320
|
+
return true;
|
|
2321
|
+
if (field.startsWith("*/")) {
|
|
2322
|
+
const step = parseInt(field.slice(2));
|
|
2323
|
+
return value % step === 0;
|
|
2324
|
+
}
|
|
2325
|
+
if (field.includes("-")) {
|
|
2326
|
+
const [a, b] = field.split("-").map(Number);
|
|
2327
|
+
return value >= a && value <= b;
|
|
2328
|
+
}
|
|
2329
|
+
if (field.includes(",")) {
|
|
2330
|
+
return field.split(",").map(Number).includes(value);
|
|
2331
|
+
}
|
|
2332
|
+
return parseInt(field) === value;
|
|
2333
|
+
}
|
|
2334
|
+
return matches(min, d.getMinutes(), 0, 59) && matches(hour, d.getHours(), 0, 23) && matches(dom, d.getDate(), 1, 31) && matches(mon, d.getMonth() + 1, 1, 12) && matches(dow, d.getDay(), 0, 6);
|
|
2335
|
+
}
|
|
2336
|
+
async function runConnectorCommand(connector, command, args) {
|
|
2337
|
+
return new Promise((resolve) => {
|
|
2338
|
+
const cmdArgs = [connector, command, ...args, "--format", "json"];
|
|
2339
|
+
const proc = spawn("connectors", ["run", ...cmdArgs], { shell: false });
|
|
2340
|
+
let output = "";
|
|
2341
|
+
proc.stdout.on("data", (d) => {
|
|
2342
|
+
output += d.toString();
|
|
2343
|
+
});
|
|
2344
|
+
proc.stderr.on("data", (d) => {
|
|
2345
|
+
output += d.toString();
|
|
2346
|
+
});
|
|
2347
|
+
proc.on("close", (code) => resolve({ exitCode: code ?? 1, output }));
|
|
2348
|
+
proc.on("error", () => resolve({ exitCode: 1, output: `Failed to spawn connectors run` }));
|
|
2349
|
+
setTimeout(() => {
|
|
2350
|
+
proc.kill();
|
|
2351
|
+
resolve({ exitCode: 124, output: output + `
|
|
2352
|
+
[timeout]` });
|
|
2353
|
+
}, 60000);
|
|
2354
|
+
});
|
|
2355
|
+
}
|
|
2356
|
+
async function executeJob(job, db) {
|
|
2357
|
+
const run = createJobRun(job.id, db);
|
|
2358
|
+
try {
|
|
2359
|
+
const { exitCode, output } = await runConnectorCommand(job.connector, job.command, job.args);
|
|
2360
|
+
const stripped = job.strip ? await maybeStrip(output) : undefined;
|
|
2361
|
+
finishJobRun(run.id, { exit_code: exitCode, raw_output: output, stripped_output: stripped }, db);
|
|
2362
|
+
touchJobLastRun(job.id, db);
|
|
2363
|
+
} catch (e) {
|
|
2364
|
+
finishJobRun(run.id, { exit_code: 1, raw_output: String(e) }, db);
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2367
|
+
function startScheduler(db) {
|
|
2368
|
+
if (_interval)
|
|
2369
|
+
return;
|
|
2370
|
+
_interval = setInterval(async () => {
|
|
2371
|
+
const now2 = new Date;
|
|
2372
|
+
const currentMinute = now2.getMinutes() + now2.getHours() * 60;
|
|
2373
|
+
if (currentMinute === _lastCheckedMinute)
|
|
2374
|
+
return;
|
|
2375
|
+
_lastCheckedMinute = currentMinute;
|
|
2376
|
+
const jobs = listEnabledJobs(db);
|
|
2377
|
+
for (const job of jobs) {
|
|
2378
|
+
if (cronMatches(job.cron, now2)) {
|
|
2379
|
+
executeJob(job, db).catch(() => {});
|
|
2380
|
+
}
|
|
2381
|
+
}
|
|
2382
|
+
}, 30000);
|
|
2383
|
+
}
|
|
2384
|
+
function stopScheduler() {
|
|
2385
|
+
if (_interval) {
|
|
2386
|
+
clearInterval(_interval);
|
|
2387
|
+
_interval = null;
|
|
2388
|
+
_lastCheckedMinute = -1;
|
|
2389
|
+
}
|
|
2390
|
+
}
|
|
2391
|
+
async function triggerJob(job, db) {
|
|
2392
|
+
const run = createJobRun(job.id, db);
|
|
2393
|
+
const { exitCode, output } = await runConnectorCommand(job.connector, job.command, job.args);
|
|
2394
|
+
const stripped = job.strip ? await maybeStrip(output) : undefined;
|
|
2395
|
+
finishJobRun(run.id, { exit_code: exitCode, raw_output: output, stripped_output: stripped }, db);
|
|
2396
|
+
touchJobLastRun(job.id, db);
|
|
2397
|
+
return { run_id: run.id, exit_code: exitCode, output: stripped ?? output };
|
|
2398
|
+
}
|
|
2399
|
+
var _interval = null, _lastCheckedMinute = -1;
|
|
2400
|
+
var init_scheduler = __esm(() => {
|
|
2401
|
+
init_jobs();
|
|
2402
|
+
init_strip();
|
|
2403
|
+
});
|
|
2404
|
+
|
|
2405
|
+
// src/lib/workflow-runner.ts
|
|
2406
|
+
import { spawn as spawn2 } from "child_process";
|
|
2407
|
+
async function runStep(step, previousOutput) {
|
|
2408
|
+
return new Promise((resolve) => {
|
|
2409
|
+
const args = [...step.args ?? []];
|
|
2410
|
+
if (previousOutput && previousOutput.trim()) {
|
|
2411
|
+
args.push("--input", previousOutput.trim().slice(0, 4096));
|
|
2412
|
+
}
|
|
2413
|
+
const cmdArgs = ["run", step.connector, step.command, ...args, "--format", "json"];
|
|
2414
|
+
const proc = spawn2("connectors", cmdArgs, { shell: false });
|
|
2415
|
+
let output = "";
|
|
2416
|
+
proc.stdout.on("data", (d) => {
|
|
2417
|
+
output += d.toString();
|
|
2418
|
+
});
|
|
2419
|
+
proc.stderr.on("data", (d) => {
|
|
2420
|
+
output += d.toString();
|
|
2421
|
+
});
|
|
2422
|
+
proc.on("close", (code) => resolve({ exitCode: code ?? 1, output }));
|
|
2423
|
+
proc.on("error", () => resolve({ exitCode: 1, output: "Failed to spawn connectors" }));
|
|
2424
|
+
setTimeout(() => {
|
|
2425
|
+
proc.kill();
|
|
2426
|
+
resolve({ exitCode: 124, output: output + `
|
|
2427
|
+
[timeout]` });
|
|
2428
|
+
}, 60000);
|
|
2429
|
+
});
|
|
2430
|
+
}
|
|
2431
|
+
async function runWorkflow(workflow) {
|
|
2432
|
+
const results = [];
|
|
2433
|
+
let previousOutput;
|
|
2434
|
+
let success = true;
|
|
2435
|
+
for (let i = 0;i < workflow.steps.length; i++) {
|
|
2436
|
+
const step = workflow.steps[i];
|
|
2437
|
+
const { exitCode, output } = await runStep(step, previousOutput);
|
|
2438
|
+
const stripped = await maybeStrip(output);
|
|
2439
|
+
results.push({ step: i + 1, connector: step.connector, command: step.command, exit_code: exitCode, output: stripped });
|
|
2440
|
+
if (exitCode !== 0) {
|
|
2441
|
+
success = false;
|
|
2442
|
+
break;
|
|
2443
|
+
}
|
|
2444
|
+
previousOutput = stripped;
|
|
2445
|
+
}
|
|
2446
|
+
return {
|
|
2447
|
+
workflow_id: workflow.id,
|
|
2448
|
+
workflow_name: workflow.name,
|
|
2449
|
+
steps: results,
|
|
2450
|
+
success,
|
|
2451
|
+
final_output: results[results.length - 1]?.output ?? ""
|
|
2452
|
+
};
|
|
2453
|
+
}
|
|
2454
|
+
var init_workflow_runner = __esm(() => {
|
|
2455
|
+
init_strip();
|
|
2456
|
+
});
|
|
2457
|
+
|
|
2458
|
+
// src/lib/fuzzy.ts
|
|
2459
|
+
function levenshtein(a, b) {
|
|
2460
|
+
const m = a.length;
|
|
2461
|
+
const n = b.length;
|
|
2462
|
+
if (m === 0)
|
|
2463
|
+
return n;
|
|
2464
|
+
if (n === 0)
|
|
2465
|
+
return m;
|
|
2466
|
+
let prev = new Array(n + 1);
|
|
2467
|
+
let curr = new Array(n + 1);
|
|
2468
|
+
for (let j = 0;j <= n; j++)
|
|
2469
|
+
prev[j] = j;
|
|
2470
|
+
for (let i = 1;i <= m; i++) {
|
|
2471
|
+
curr[0] = i;
|
|
2472
|
+
for (let j = 1;j <= n; j++) {
|
|
2473
|
+
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
2474
|
+
curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost);
|
|
2475
|
+
}
|
|
2476
|
+
[prev, curr] = [curr, prev];
|
|
2477
|
+
}
|
|
2478
|
+
return prev[n];
|
|
2479
|
+
}
|
|
2480
|
+
function bestFuzzyScore(token, candidates, maxDistance = 2) {
|
|
2481
|
+
if (token.length < 3)
|
|
2482
|
+
return 0;
|
|
2483
|
+
let bestDist = maxDistance + 1;
|
|
2484
|
+
for (const c of candidates) {
|
|
2485
|
+
if (Math.abs(token.length - c.length) > maxDistance)
|
|
2486
|
+
continue;
|
|
2487
|
+
const d = levenshtein(token, c);
|
|
2488
|
+
if (d < bestDist)
|
|
2489
|
+
bestDist = d;
|
|
2490
|
+
if (d === 0)
|
|
2491
|
+
return maxDistance + 1;
|
|
2492
|
+
}
|
|
2493
|
+
if (bestDist > maxDistance)
|
|
2494
|
+
return 0;
|
|
2495
|
+
return maxDistance - bestDist + 1;
|
|
2496
|
+
}
|
|
2497
|
+
|
|
2498
|
+
// src/lib/synonyms.ts
|
|
2499
|
+
function expandQuery(tokens) {
|
|
2500
|
+
const synonyms = new Set;
|
|
2501
|
+
for (const token of tokens) {
|
|
2502
|
+
const matches = SYNONYM_MAP[token];
|
|
2503
|
+
if (matches) {
|
|
2504
|
+
for (const syn of matches) {
|
|
2505
|
+
if (!tokens.includes(syn))
|
|
2506
|
+
synonyms.add(syn);
|
|
2507
|
+
}
|
|
2508
|
+
}
|
|
2509
|
+
for (const [key, values] of Object.entries(SYNONYM_MAP)) {
|
|
2510
|
+
if (values.includes(token) && !tokens.includes(key)) {
|
|
2511
|
+
synonyms.add(key);
|
|
2512
|
+
}
|
|
2513
|
+
}
|
|
2514
|
+
}
|
|
2515
|
+
return { original: tokens, expanded: [...synonyms] };
|
|
2516
|
+
}
|
|
2517
|
+
var SYNONYM_MAP;
|
|
2518
|
+
var init_synonyms = __esm(() => {
|
|
2519
|
+
SYNONYM_MAP = {
|
|
2520
|
+
email: ["smtp", "mail", "inbox", "resend", "ses"],
|
|
2521
|
+
chat: ["messaging", "im", "slack", "discord", "teams"],
|
|
2522
|
+
sms: ["text", "twilio", "messaging"],
|
|
2523
|
+
payment: ["billing", "invoicing", "commerce", "checkout", "stripe"],
|
|
2524
|
+
payments: ["billing", "invoicing", "commerce", "checkout", "stripe"],
|
|
2525
|
+
ecommerce: ["shop", "store", "commerce", "shopify"],
|
|
2526
|
+
finance: ["banking", "accounting", "invoicing"],
|
|
2527
|
+
crypto: ["blockchain", "web3", "wallet"],
|
|
2528
|
+
ai: ["llm", "ml", "model", "gpt", "claude", "anthropic", "openai"],
|
|
2529
|
+
llm: ["ai", "model", "gpt", "claude"],
|
|
2530
|
+
auth: ["oauth", "sso", "login", "identity", "authentication"],
|
|
2531
|
+
database: ["db", "sql", "nosql", "postgres", "mongo", "supabase"],
|
|
2532
|
+
deploy: ["hosting", "infrastructure", "ci", "cd", "vercel"],
|
|
2533
|
+
storage: ["files", "drive", "s3", "bucket", "upload"],
|
|
2534
|
+
cloud: ["aws", "gcp", "azure", "infrastructure"],
|
|
2535
|
+
api: ["rest", "graphql", "endpoint", "webhook"],
|
|
2536
|
+
monitoring: ["logs", "observability", "alerting", "datadog", "sentry"],
|
|
2537
|
+
ci: ["cd", "deploy", "pipeline", "github", "actions"],
|
|
2538
|
+
crm: ["sales", "leads", "contacts", "hubspot", "salesforce"],
|
|
2539
|
+
analytics: ["data", "metrics", "tracking", "mixpanel", "amplitude"],
|
|
2540
|
+
project: ["task", "issue", "board", "jira", "linear", "asana"],
|
|
2541
|
+
docs: ["documentation", "wiki", "notion", "confluence"],
|
|
2542
|
+
design: ["figma", "sketch", "ui", "ux"],
|
|
2543
|
+
security: ["auth", "encryption", "compliance", "vault"]
|
|
2544
|
+
};
|
|
2545
|
+
});
|
|
2546
|
+
|
|
1871
2547
|
// src/lib/registry.ts
|
|
1872
|
-
import { existsSync, readFileSync } from "fs";
|
|
1873
|
-
import { join, dirname } from "path";
|
|
2548
|
+
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
|
|
2549
|
+
import { join as join3, dirname } from "path";
|
|
1874
2550
|
import { fileURLToPath } from "url";
|
|
1875
2551
|
function getConnectorsByCategory(category) {
|
|
1876
2552
|
return CONNECTORS.filter((c) => c.category === category);
|
|
1877
2553
|
}
|
|
1878
|
-
function searchConnectors(query) {
|
|
1879
|
-
const
|
|
1880
|
-
|
|
2554
|
+
function searchConnectors(query, context) {
|
|
2555
|
+
const tokens = query.toLowerCase().trim().split(/\s+/).filter(Boolean);
|
|
2556
|
+
if (tokens.length === 0)
|
|
2557
|
+
return [];
|
|
2558
|
+
const limit = context?.limit ?? 20;
|
|
2559
|
+
const installed = new Set(context?.installed ?? []);
|
|
2560
|
+
const promoted = new Set(context?.promoted ?? []);
|
|
2561
|
+
const usage = context?.usage ?? new Map;
|
|
2562
|
+
const results = [];
|
|
2563
|
+
for (const c of CONNECTORS) {
|
|
2564
|
+
const nameLow = c.name.toLowerCase();
|
|
2565
|
+
const displayLow = c.displayName.toLowerCase();
|
|
2566
|
+
const descLow = c.description.toLowerCase();
|
|
2567
|
+
const tagsLow = c.tags.map((t) => t.toLowerCase());
|
|
2568
|
+
let score = 0;
|
|
2569
|
+
const matchReasons = [];
|
|
2570
|
+
let allTokensMatch = true;
|
|
2571
|
+
for (const token of tokens) {
|
|
2572
|
+
let tokenMatched = false;
|
|
2573
|
+
if (nameLow === token) {
|
|
2574
|
+
score += 100;
|
|
2575
|
+
matchReasons.push(`name="${token}"`);
|
|
2576
|
+
tokenMatched = true;
|
|
2577
|
+
} else if (nameLow.includes(token)) {
|
|
2578
|
+
score += 10;
|
|
2579
|
+
matchReasons.push(`name~${token}`);
|
|
2580
|
+
tokenMatched = true;
|
|
2581
|
+
}
|
|
2582
|
+
if (tagsLow.includes(token)) {
|
|
2583
|
+
score += 8;
|
|
2584
|
+
if (!tokenMatched)
|
|
2585
|
+
matchReasons.push(`tag="${token}"`);
|
|
2586
|
+
tokenMatched = true;
|
|
2587
|
+
} else if (tagsLow.some((t) => t.includes(token))) {
|
|
2588
|
+
score += 5;
|
|
2589
|
+
if (!tokenMatched)
|
|
2590
|
+
matchReasons.push(`tag~${token}`);
|
|
2591
|
+
tokenMatched = true;
|
|
2592
|
+
}
|
|
2593
|
+
if (displayLow.includes(token)) {
|
|
2594
|
+
score += 3;
|
|
2595
|
+
if (!tokenMatched)
|
|
2596
|
+
matchReasons.push(`display~${token}`);
|
|
2597
|
+
tokenMatched = true;
|
|
2598
|
+
}
|
|
2599
|
+
if (descLow.includes(token)) {
|
|
2600
|
+
score += 1;
|
|
2601
|
+
if (!tokenMatched)
|
|
2602
|
+
matchReasons.push(`desc~${token}`);
|
|
2603
|
+
tokenMatched = true;
|
|
2604
|
+
}
|
|
2605
|
+
if (!tokenMatched && token.length >= 3) {
|
|
2606
|
+
const nameFuzzy = bestFuzzyScore(token, [nameLow], 1);
|
|
2607
|
+
if (nameFuzzy > 0) {
|
|
2608
|
+
score += nameFuzzy * 6;
|
|
2609
|
+
matchReasons.push(`fuzzy:name\u2248${token}`);
|
|
2610
|
+
tokenMatched = true;
|
|
2611
|
+
}
|
|
2612
|
+
if (!tokenMatched) {
|
|
2613
|
+
const tagFuzzy = bestFuzzyScore(token, tagsLow, 2);
|
|
2614
|
+
if (tagFuzzy > 0) {
|
|
2615
|
+
score += tagFuzzy * 3;
|
|
2616
|
+
matchReasons.push(`fuzzy:tag\u2248${token}`);
|
|
2617
|
+
tokenMatched = true;
|
|
2618
|
+
}
|
|
2619
|
+
}
|
|
2620
|
+
if (!tokenMatched) {
|
|
2621
|
+
const displayFuzzy = bestFuzzyScore(token, [displayLow], 2);
|
|
2622
|
+
if (displayFuzzy > 0) {
|
|
2623
|
+
score += displayFuzzy * 2;
|
|
2624
|
+
matchReasons.push(`fuzzy:display\u2248${token}`);
|
|
2625
|
+
tokenMatched = true;
|
|
2626
|
+
}
|
|
2627
|
+
}
|
|
2628
|
+
}
|
|
2629
|
+
if (!tokenMatched) {
|
|
2630
|
+
allTokensMatch = false;
|
|
2631
|
+
break;
|
|
2632
|
+
}
|
|
2633
|
+
}
|
|
2634
|
+
if (!allTokensMatch)
|
|
2635
|
+
continue;
|
|
2636
|
+
const badges = [];
|
|
2637
|
+
if (installed.has(c.name)) {
|
|
2638
|
+
score += 50;
|
|
2639
|
+
badges.push("installed");
|
|
2640
|
+
}
|
|
2641
|
+
if (promoted.has(c.name)) {
|
|
2642
|
+
score += 30;
|
|
2643
|
+
badges.push("promoted");
|
|
2644
|
+
}
|
|
2645
|
+
const usageCount = usage.get(c.name) ?? 0;
|
|
2646
|
+
if (usageCount > 0) {
|
|
2647
|
+
score += Math.min(usageCount * 2, 40);
|
|
2648
|
+
if (usageCount >= 5)
|
|
2649
|
+
badges.push("hot");
|
|
2650
|
+
}
|
|
2651
|
+
results.push({ ...c, score, matchReasons, badges });
|
|
2652
|
+
}
|
|
2653
|
+
const matchedNames = new Set(results.map((r) => r.name));
|
|
2654
|
+
if (results.length < limit) {
|
|
2655
|
+
const { expanded } = expandQuery(tokens);
|
|
2656
|
+
if (expanded.length > 0) {
|
|
2657
|
+
for (const c of CONNECTORS) {
|
|
2658
|
+
if (matchedNames.has(c.name))
|
|
2659
|
+
continue;
|
|
2660
|
+
const nameLow2 = c.name.toLowerCase();
|
|
2661
|
+
const tagsLow2 = c.tags.map((t) => t.toLowerCase());
|
|
2662
|
+
const descLow2 = c.description.toLowerCase();
|
|
2663
|
+
let synScore = 0;
|
|
2664
|
+
const synReasons = [];
|
|
2665
|
+
for (const syn of expanded) {
|
|
2666
|
+
if (nameLow2.includes(syn)) {
|
|
2667
|
+
synScore += 2;
|
|
2668
|
+
synReasons.push(`syn:name~${syn}`);
|
|
2669
|
+
} else if (tagsLow2.some((t) => t.includes(syn))) {
|
|
2670
|
+
synScore += 1;
|
|
2671
|
+
synReasons.push(`syn:tag~${syn}`);
|
|
2672
|
+
} else if (descLow2.includes(syn)) {
|
|
2673
|
+
synScore += 1;
|
|
2674
|
+
synReasons.push(`syn:desc~${syn}`);
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
if (synScore > 0) {
|
|
2678
|
+
const badges = [];
|
|
2679
|
+
if (installed.has(c.name)) {
|
|
2680
|
+
synScore += 50;
|
|
2681
|
+
badges.push("installed");
|
|
2682
|
+
}
|
|
2683
|
+
if (promoted.has(c.name)) {
|
|
2684
|
+
synScore += 30;
|
|
2685
|
+
badges.push("promoted");
|
|
2686
|
+
}
|
|
2687
|
+
const usageCount = usage.get(c.name) ?? 0;
|
|
2688
|
+
if (usageCount > 0) {
|
|
2689
|
+
synScore += Math.min(usageCount * 2, 40);
|
|
2690
|
+
if (usageCount >= 5)
|
|
2691
|
+
badges.push("hot");
|
|
2692
|
+
}
|
|
2693
|
+
results.push({ ...c, score: synScore, matchReasons: synReasons, badges });
|
|
2694
|
+
}
|
|
2695
|
+
}
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
results.sort((a, b) => b.score - a.score);
|
|
2699
|
+
return results.slice(0, limit);
|
|
1881
2700
|
}
|
|
1882
2701
|
function getConnector(name) {
|
|
1883
2702
|
return CONNECTORS.find((c) => c.name === name);
|
|
@@ -1888,17 +2707,17 @@ function loadConnectorVersions() {
|
|
|
1888
2707
|
versionsLoaded = true;
|
|
1889
2708
|
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
1890
2709
|
const candidates = [
|
|
1891
|
-
|
|
1892
|
-
|
|
2710
|
+
join3(thisDir, "..", "connectors"),
|
|
2711
|
+
join3(thisDir, "..", "..", "connectors")
|
|
1893
2712
|
];
|
|
1894
|
-
const connectorsDir = candidates.find((d) =>
|
|
2713
|
+
const connectorsDir = candidates.find((d) => existsSync2(d));
|
|
1895
2714
|
if (!connectorsDir)
|
|
1896
2715
|
return;
|
|
1897
2716
|
for (const connector of CONNECTORS) {
|
|
1898
2717
|
try {
|
|
1899
|
-
const pkgPath =
|
|
1900
|
-
if (
|
|
1901
|
-
const pkg = JSON.parse(
|
|
2718
|
+
const pkgPath = join3(connectorsDir, `connect-${connector.name}`, "package.json");
|
|
2719
|
+
if (existsSync2(pkgPath)) {
|
|
2720
|
+
const pkg = JSON.parse(readFileSync2(pkgPath, "utf-8"));
|
|
1902
2721
|
connector.version = pkg.version || "0.0.0";
|
|
1903
2722
|
}
|
|
1904
2723
|
} catch {}
|
|
@@ -1906,6 +2725,7 @@ function loadConnectorVersions() {
|
|
|
1906
2725
|
}
|
|
1907
2726
|
var CATEGORIES, CONNECTORS, versionsLoaded = false;
|
|
1908
2727
|
var init_registry = __esm(() => {
|
|
2728
|
+
init_synonyms();
|
|
1909
2729
|
CATEGORIES = [
|
|
1910
2730
|
"AI & ML",
|
|
1911
2731
|
"Developer Tools",
|
|
@@ -2311,6 +3131,13 @@ var init_registry = __esm(() => {
|
|
|
2311
3131
|
category: "Data & Analytics",
|
|
2312
3132
|
tags: ["weather", "data"]
|
|
2313
3133
|
},
|
|
3134
|
+
{
|
|
3135
|
+
name: "arxiv",
|
|
3136
|
+
displayName: "arXiv",
|
|
3137
|
+
description: "Research paper search and retrieval",
|
|
3138
|
+
category: "Data & Analytics",
|
|
3139
|
+
tags: ["research", "papers", "academic"]
|
|
3140
|
+
},
|
|
2314
3141
|
{
|
|
2315
3142
|
name: "brandsight",
|
|
2316
3143
|
displayName: "Brandsight",
|
|
@@ -6791,13 +7618,6 @@ var init_registry = __esm(() => {
|
|
|
6791
7618
|
category: "Business Tools",
|
|
6792
7619
|
tags: ["e-signature", "contracts", "digital", "documents", "legal"]
|
|
6793
7620
|
},
|
|
6794
|
-
{
|
|
6795
|
-
name: "yousign",
|
|
6796
|
-
displayName: "Yousign",
|
|
6797
|
-
description: "eIDAS-compliant electronic signature API for EU workflows",
|
|
6798
|
-
category: "Business Tools",
|
|
6799
|
-
tags: ["e-signature", "eidas", "contracts", "documents", "legal", "eu"]
|
|
6800
|
-
},
|
|
6801
7621
|
{
|
|
6802
7622
|
name: "signl4",
|
|
6803
7623
|
displayName: "SIGNL4",
|
|
@@ -9471,23 +10291,28 @@ var require_cli_spinners = __commonJS((exports, module) => {
|
|
|
9471
10291
|
});
|
|
9472
10292
|
|
|
9473
10293
|
// src/lib/installer.ts
|
|
9474
|
-
import { existsSync as
|
|
9475
|
-
import {
|
|
10294
|
+
import { existsSync as existsSync3, cpSync, mkdirSync as mkdirSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync2, readdirSync, statSync, rmSync } from "fs";
|
|
10295
|
+
import { homedir as homedir3 } from "os";
|
|
10296
|
+
import { join as join4, dirname as dirname2 } from "path";
|
|
9476
10297
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
9477
10298
|
function resolveConnectorsDir() {
|
|
9478
|
-
const fromBin =
|
|
9479
|
-
if (
|
|
10299
|
+
const fromBin = join4(__dirname2, "..", "connectors");
|
|
10300
|
+
if (existsSync3(fromBin))
|
|
9480
10301
|
return fromBin;
|
|
9481
|
-
const fromSrc =
|
|
9482
|
-
if (
|
|
10302
|
+
const fromSrc = join4(__dirname2, "..", "..", "connectors");
|
|
10303
|
+
if (existsSync3(fromSrc))
|
|
9483
10304
|
return fromSrc;
|
|
9484
10305
|
return fromBin;
|
|
9485
10306
|
}
|
|
9486
10307
|
function getConnectorPath(name) {
|
|
9487
10308
|
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
9488
|
-
return
|
|
10309
|
+
return join4(CONNECTORS_DIR, connectorName);
|
|
10310
|
+
}
|
|
10311
|
+
function connectorExists(name) {
|
|
10312
|
+
return existsSync3(getConnectorPath(name));
|
|
9489
10313
|
}
|
|
9490
10314
|
function installConnector(name, options = {}) {
|
|
10315
|
+
const { targetDir = process.cwd(), overwrite = false } = options;
|
|
9491
10316
|
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
9492
10317
|
return {
|
|
9493
10318
|
connector: name,
|
|
@@ -9495,35 +10320,91 @@ function installConnector(name, options = {}) {
|
|
|
9495
10320
|
error: `Invalid connector name '${name}'`
|
|
9496
10321
|
};
|
|
9497
10322
|
}
|
|
10323
|
+
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
9498
10324
|
const sourcePath = getConnectorPath(name);
|
|
9499
|
-
|
|
10325
|
+
const destDir = join4(targetDir, ".connectors");
|
|
10326
|
+
const destPath = join4(destDir, connectorName);
|
|
10327
|
+
if (!existsSync3(sourcePath)) {
|
|
9500
10328
|
return {
|
|
9501
10329
|
connector: name,
|
|
9502
10330
|
success: false,
|
|
9503
10331
|
error: `Connector '${name}' not found`
|
|
9504
10332
|
};
|
|
9505
10333
|
}
|
|
9506
|
-
|
|
9507
|
-
|
|
9508
|
-
|
|
9509
|
-
|
|
9510
|
-
|
|
10334
|
+
if (existsSync3(destPath) && !overwrite) {
|
|
10335
|
+
return {
|
|
10336
|
+
connector: name,
|
|
10337
|
+
success: false,
|
|
10338
|
+
error: `Already installed. Use --overwrite to replace.`,
|
|
10339
|
+
path: destPath
|
|
10340
|
+
};
|
|
10341
|
+
}
|
|
10342
|
+
try {
|
|
10343
|
+
if (!existsSync3(destDir)) {
|
|
10344
|
+
mkdirSync3(destDir, { recursive: true });
|
|
10345
|
+
}
|
|
10346
|
+
cpSync(sourcePath, destPath, { recursive: true });
|
|
10347
|
+
const homeCredDir = join4(homedir3(), ".connectors", connectorName);
|
|
10348
|
+
if (existsSync3(homeCredDir)) {
|
|
10349
|
+
const filesToCopy = ["credentials.json", "current_profile"];
|
|
10350
|
+
for (const file of filesToCopy) {
|
|
10351
|
+
const src = join4(homeCredDir, file);
|
|
10352
|
+
if (existsSync3(src)) {
|
|
10353
|
+
cpSync(src, join4(destPath, file));
|
|
10354
|
+
}
|
|
10355
|
+
}
|
|
10356
|
+
const profilesDir = join4(homeCredDir, "profiles");
|
|
10357
|
+
if (existsSync3(profilesDir)) {
|
|
10358
|
+
cpSync(profilesDir, join4(destPath, "profiles"), { recursive: true });
|
|
10359
|
+
}
|
|
10360
|
+
}
|
|
10361
|
+
updateConnectorsIndex(destDir);
|
|
10362
|
+
return {
|
|
10363
|
+
connector: name,
|
|
10364
|
+
success: true,
|
|
10365
|
+
path: destPath
|
|
10366
|
+
};
|
|
10367
|
+
} catch (error) {
|
|
10368
|
+
return {
|
|
10369
|
+
connector: name,
|
|
10370
|
+
success: false,
|
|
10371
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
10372
|
+
};
|
|
10373
|
+
}
|
|
9511
10374
|
}
|
|
9512
|
-
function
|
|
9513
|
-
|
|
10375
|
+
function updateConnectorsIndex(connectorsDir) {
|
|
10376
|
+
const indexPath = join4(connectorsDir, "index.ts");
|
|
10377
|
+
const connectors = readdirSync(connectorsDir).filter((f) => f.startsWith("connect-") && !f.includes("."));
|
|
10378
|
+
const exports = connectors.map((c) => {
|
|
10379
|
+
const name = c.replace("connect-", "");
|
|
10380
|
+
return `export * as ${name} from './${c}/src/index.js';`;
|
|
10381
|
+
}).join(`
|
|
10382
|
+
`);
|
|
10383
|
+
const content = `/**
|
|
10384
|
+
* Auto-generated index of installed connectors
|
|
10385
|
+
* Do not edit manually - run 'connectors install' to update
|
|
10386
|
+
*/
|
|
10387
|
+
|
|
10388
|
+
${exports}
|
|
10389
|
+
`;
|
|
10390
|
+
writeFileSync2(indexPath, content);
|
|
10391
|
+
}
|
|
10392
|
+
function getInstalledConnectors(targetDir = process.cwd()) {
|
|
10393
|
+
const connectorsDir = join4(targetDir, ".connectors");
|
|
10394
|
+
if (!existsSync3(connectorsDir)) {
|
|
9514
10395
|
return [];
|
|
9515
10396
|
}
|
|
9516
|
-
return readdirSync(
|
|
9517
|
-
const fullPath =
|
|
10397
|
+
return readdirSync(connectorsDir).filter((f) => {
|
|
10398
|
+
const fullPath = join4(connectorsDir, f);
|
|
9518
10399
|
return f.startsWith("connect-") && statSync(fullPath).isDirectory();
|
|
9519
10400
|
}).map((f) => f.replace("connect-", ""));
|
|
9520
10401
|
}
|
|
9521
10402
|
function getConnectorDocs(name) {
|
|
9522
10403
|
const connectorPath = getConnectorPath(name);
|
|
9523
|
-
const claudeMdPath =
|
|
9524
|
-
if (!
|
|
10404
|
+
const claudeMdPath = join4(connectorPath, "CLAUDE.md");
|
|
10405
|
+
if (!existsSync3(claudeMdPath))
|
|
9525
10406
|
return null;
|
|
9526
|
-
const raw =
|
|
10407
|
+
const raw = readFileSync3(claudeMdPath, "utf-8");
|
|
9527
10408
|
return {
|
|
9528
10409
|
overview: extractSection(raw, "Project Overview"),
|
|
9529
10410
|
auth: extractSection(raw, "Authentication"),
|
|
@@ -9560,8 +10441,16 @@ function parseEnvVarsTable(section) {
|
|
|
9560
10441
|
}
|
|
9561
10442
|
return vars;
|
|
9562
10443
|
}
|
|
9563
|
-
function removeConnector(name) {
|
|
9564
|
-
|
|
10444
|
+
function removeConnector(name, targetDir = process.cwd()) {
|
|
10445
|
+
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
10446
|
+
const connectorsDir = join4(targetDir, ".connectors");
|
|
10447
|
+
const connectorPath = join4(connectorsDir, connectorName);
|
|
10448
|
+
if (!existsSync3(connectorPath)) {
|
|
10449
|
+
return false;
|
|
10450
|
+
}
|
|
10451
|
+
rmSync(connectorPath, { recursive: true });
|
|
10452
|
+
updateConnectorsIndex(connectorsDir);
|
|
10453
|
+
return true;
|
|
9565
10454
|
}
|
|
9566
10455
|
var __dirname2, CONNECTORS_DIR;
|
|
9567
10456
|
var init_installer = __esm(() => {
|
|
@@ -9569,11 +10458,77 @@ var init_installer = __esm(() => {
|
|
|
9569
10458
|
CONNECTORS_DIR = resolveConnectorsDir();
|
|
9570
10459
|
});
|
|
9571
10460
|
|
|
10461
|
+
// src/lib/lock.ts
|
|
10462
|
+
import { openSync, closeSync, unlinkSync, existsSync as existsSync4, statSync as statSync2 } from "fs";
|
|
10463
|
+
import { join as join5 } from "path";
|
|
10464
|
+
import { homedir as homedir4 } from "os";
|
|
10465
|
+
import { mkdirSync as mkdirSync4 } from "fs";
|
|
10466
|
+
function lockPath(connector) {
|
|
10467
|
+
const dir = join5(homedir4(), ".connectors", `connect-${connector}`);
|
|
10468
|
+
mkdirSync4(dir, { recursive: true });
|
|
10469
|
+
return join5(dir, ".write.lock");
|
|
10470
|
+
}
|
|
10471
|
+
function isStale(path) {
|
|
10472
|
+
try {
|
|
10473
|
+
const stat = statSync2(path);
|
|
10474
|
+
return Date.now() - stat.mtimeMs > STALE_LOCK_MS;
|
|
10475
|
+
} catch {
|
|
10476
|
+
return false;
|
|
10477
|
+
}
|
|
10478
|
+
}
|
|
10479
|
+
function tryAcquire(path) {
|
|
10480
|
+
if (existsSync4(path) && isStale(path)) {
|
|
10481
|
+
try {
|
|
10482
|
+
unlinkSync(path);
|
|
10483
|
+
} catch {}
|
|
10484
|
+
}
|
|
10485
|
+
try {
|
|
10486
|
+
const fd = openSync(path, "wx");
|
|
10487
|
+
closeSync(fd);
|
|
10488
|
+
return true;
|
|
10489
|
+
} catch (e) {
|
|
10490
|
+
if (e.code === "EEXIST")
|
|
10491
|
+
return false;
|
|
10492
|
+
throw e;
|
|
10493
|
+
}
|
|
10494
|
+
}
|
|
10495
|
+
function release(path) {
|
|
10496
|
+
try {
|
|
10497
|
+
unlinkSync(path);
|
|
10498
|
+
} catch {}
|
|
10499
|
+
}
|
|
10500
|
+
async function withWriteLock(connector, fn) {
|
|
10501
|
+
const path = lockPath(connector);
|
|
10502
|
+
const deadline = Date.now() + LOCK_TIMEOUT_MS;
|
|
10503
|
+
while (Date.now() < deadline) {
|
|
10504
|
+
if (tryAcquire(path)) {
|
|
10505
|
+
try {
|
|
10506
|
+
return await fn();
|
|
10507
|
+
} finally {
|
|
10508
|
+
release(path);
|
|
10509
|
+
}
|
|
10510
|
+
}
|
|
10511
|
+
await new Promise((resolve) => setTimeout(resolve, LOCK_RETRY_MS));
|
|
10512
|
+
}
|
|
10513
|
+
throw new LockTimeoutError(connector);
|
|
10514
|
+
}
|
|
10515
|
+
var LOCK_TIMEOUT_MS = 5000, LOCK_RETRY_MS = 100, STALE_LOCK_MS = 30000, LockTimeoutError;
|
|
10516
|
+
var init_lock = __esm(() => {
|
|
10517
|
+
LockTimeoutError = class LockTimeoutError extends Error {
|
|
10518
|
+
connector;
|
|
10519
|
+
constructor(connector) {
|
|
10520
|
+
super(`Could not acquire write lock for connector "${connector}" within ${LOCK_TIMEOUT_MS}ms. Another agent may be writing. Try again shortly.`);
|
|
10521
|
+
this.connector = connector;
|
|
10522
|
+
this.name = "LockTimeoutError";
|
|
10523
|
+
}
|
|
10524
|
+
};
|
|
10525
|
+
});
|
|
10526
|
+
|
|
9572
10527
|
// src/server/auth.ts
|
|
9573
|
-
import { existsSync as
|
|
10528
|
+
import { existsSync as existsSync5, readFileSync as readFileSync4, writeFileSync as writeFileSync3, mkdirSync as mkdirSync5, readdirSync as readdirSync2, rmSync as rmSync2, statSync as statSync3 } from "fs";
|
|
9574
10529
|
import { randomBytes } from "crypto";
|
|
9575
|
-
import { homedir } from "os";
|
|
9576
|
-
import { join as
|
|
10530
|
+
import { homedir as homedir5 } from "os";
|
|
10531
|
+
import { join as join6 } from "path";
|
|
9577
10532
|
function getAuthType(name) {
|
|
9578
10533
|
const docs = getConnectorDocs(name);
|
|
9579
10534
|
if (!docs?.auth)
|
|
@@ -9587,14 +10542,14 @@ function getAuthType(name) {
|
|
|
9587
10542
|
}
|
|
9588
10543
|
function getConnectorConfigDir(name) {
|
|
9589
10544
|
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
9590
|
-
return
|
|
10545
|
+
return join6(homedir5(), ".connectors", connectorName);
|
|
9591
10546
|
}
|
|
9592
10547
|
function getCurrentProfile(name) {
|
|
9593
10548
|
const configDir = getConnectorConfigDir(name);
|
|
9594
|
-
const currentProfileFile =
|
|
9595
|
-
if (
|
|
10549
|
+
const currentProfileFile = join6(configDir, "current_profile");
|
|
10550
|
+
if (existsSync5(currentProfileFile)) {
|
|
9596
10551
|
try {
|
|
9597
|
-
return
|
|
10552
|
+
return readFileSync4(currentProfileFile, "utf-8").trim() || "default";
|
|
9598
10553
|
} catch {
|
|
9599
10554
|
return "default";
|
|
9600
10555
|
}
|
|
@@ -9606,16 +10561,16 @@ function loadProfileConfig(name) {
|
|
|
9606
10561
|
const profile = getCurrentProfile(name);
|
|
9607
10562
|
let flatConfig = {};
|
|
9608
10563
|
let dirConfig = {};
|
|
9609
|
-
const profileFile =
|
|
9610
|
-
if (
|
|
10564
|
+
const profileFile = join6(configDir, "profiles", `${profile}.json`);
|
|
10565
|
+
if (existsSync5(profileFile)) {
|
|
9611
10566
|
try {
|
|
9612
|
-
flatConfig = JSON.parse(
|
|
10567
|
+
flatConfig = JSON.parse(readFileSync4(profileFile, "utf-8"));
|
|
9613
10568
|
} catch {}
|
|
9614
10569
|
}
|
|
9615
|
-
const profileDirConfig =
|
|
9616
|
-
if (
|
|
10570
|
+
const profileDirConfig = join6(configDir, "profiles", profile, "config.json");
|
|
10571
|
+
if (existsSync5(profileDirConfig)) {
|
|
9617
10572
|
try {
|
|
9618
|
-
dirConfig = JSON.parse(
|
|
10573
|
+
dirConfig = JSON.parse(readFileSync4(profileDirConfig, "utf-8"));
|
|
9619
10574
|
} catch {}
|
|
9620
10575
|
}
|
|
9621
10576
|
if (Object.keys(flatConfig).length === 0 && Object.keys(dirConfig).length === 0) {
|
|
@@ -9626,14 +10581,24 @@ function loadProfileConfig(name) {
|
|
|
9626
10581
|
function loadTokens(name) {
|
|
9627
10582
|
const configDir = getConnectorConfigDir(name);
|
|
9628
10583
|
const profile = getCurrentProfile(name);
|
|
9629
|
-
const tokensFile =
|
|
9630
|
-
if (
|
|
10584
|
+
const tokensFile = join6(configDir, "profiles", profile, "tokens.json");
|
|
10585
|
+
if (existsSync5(tokensFile)) {
|
|
9631
10586
|
try {
|
|
9632
|
-
return JSON.parse(
|
|
10587
|
+
return JSON.parse(readFileSync4(tokensFile, "utf-8"));
|
|
9633
10588
|
} catch {
|
|
9634
10589
|
return null;
|
|
9635
10590
|
}
|
|
9636
10591
|
}
|
|
10592
|
+
const profileConfig = loadProfileConfig(name);
|
|
10593
|
+
if (profileConfig.refreshToken || profileConfig.accessToken) {
|
|
10594
|
+
return {
|
|
10595
|
+
accessToken: profileConfig.accessToken ?? "",
|
|
10596
|
+
refreshToken: profileConfig.refreshToken,
|
|
10597
|
+
expiresAt: profileConfig.expiresAt ?? 0,
|
|
10598
|
+
tokenType: profileConfig.tokenType,
|
|
10599
|
+
scope: profileConfig.scope
|
|
10600
|
+
};
|
|
10601
|
+
}
|
|
9637
10602
|
return null;
|
|
9638
10603
|
}
|
|
9639
10604
|
function getAuthStatus(name) {
|
|
@@ -9678,48 +10643,51 @@ function getEnvVars(name) {
|
|
|
9678
10643
|
const docs = getConnectorDocs(name);
|
|
9679
10644
|
return docs?.envVars || [];
|
|
9680
10645
|
}
|
|
9681
|
-
function saveApiKey(name, key, field) {
|
|
10646
|
+
async function saveApiKey(name, key, field) {
|
|
10647
|
+
return withWriteLock(name, () => _saveApiKey(name, key, field));
|
|
10648
|
+
}
|
|
10649
|
+
function _saveApiKey(name, key, field) {
|
|
9682
10650
|
const configDir = getConnectorConfigDir(name);
|
|
9683
10651
|
const profile = getCurrentProfile(name);
|
|
9684
10652
|
const keyField = field || guessKeyField(name);
|
|
9685
10653
|
if (keyField === "clientId" || keyField === "clientSecret") {
|
|
9686
|
-
const credentialsFile =
|
|
9687
|
-
|
|
10654
|
+
const credentialsFile = join6(configDir, "credentials.json");
|
|
10655
|
+
mkdirSync5(configDir, { recursive: true });
|
|
9688
10656
|
let creds = {};
|
|
9689
|
-
if (
|
|
10657
|
+
if (existsSync5(credentialsFile)) {
|
|
9690
10658
|
try {
|
|
9691
|
-
creds = JSON.parse(
|
|
10659
|
+
creds = JSON.parse(readFileSync4(credentialsFile, "utf-8"));
|
|
9692
10660
|
} catch {}
|
|
9693
10661
|
}
|
|
9694
10662
|
creds[keyField] = key;
|
|
9695
|
-
|
|
10663
|
+
writeFileSync3(credentialsFile, JSON.stringify(creds, null, 2));
|
|
9696
10664
|
return;
|
|
9697
10665
|
}
|
|
9698
|
-
const profileFile =
|
|
9699
|
-
const profileDir =
|
|
9700
|
-
if (
|
|
10666
|
+
const profileFile = join6(configDir, "profiles", `${profile}.json`);
|
|
10667
|
+
const profileDir = join6(configDir, "profiles", profile);
|
|
10668
|
+
if (existsSync5(profileFile)) {
|
|
9701
10669
|
let config = {};
|
|
9702
10670
|
try {
|
|
9703
|
-
config = JSON.parse(
|
|
10671
|
+
config = JSON.parse(readFileSync4(profileFile, "utf-8"));
|
|
9704
10672
|
} catch {}
|
|
9705
10673
|
config[keyField] = key;
|
|
9706
|
-
|
|
10674
|
+
writeFileSync3(profileFile, JSON.stringify(config, null, 2));
|
|
9707
10675
|
return;
|
|
9708
10676
|
}
|
|
9709
|
-
if (
|
|
9710
|
-
const configFile =
|
|
10677
|
+
if (existsSync5(profileDir)) {
|
|
10678
|
+
const configFile = join6(profileDir, "config.json");
|
|
9711
10679
|
let config = {};
|
|
9712
|
-
if (
|
|
10680
|
+
if (existsSync5(configFile)) {
|
|
9713
10681
|
try {
|
|
9714
|
-
config = JSON.parse(
|
|
10682
|
+
config = JSON.parse(readFileSync4(configFile, "utf-8"));
|
|
9715
10683
|
} catch {}
|
|
9716
10684
|
}
|
|
9717
10685
|
config[keyField] = key;
|
|
9718
|
-
|
|
10686
|
+
writeFileSync3(configFile, JSON.stringify(config, null, 2));
|
|
9719
10687
|
return;
|
|
9720
10688
|
}
|
|
9721
|
-
|
|
9722
|
-
|
|
10689
|
+
mkdirSync5(profileDir, { recursive: true });
|
|
10690
|
+
writeFileSync3(join6(profileDir, "config.json"), JSON.stringify({ [keyField]: key }, null, 2));
|
|
9723
10691
|
}
|
|
9724
10692
|
function guessKeyField(name) {
|
|
9725
10693
|
const docs = getConnectorDocs(name);
|
|
@@ -9737,10 +10705,10 @@ function guessKeyField(name) {
|
|
|
9737
10705
|
}
|
|
9738
10706
|
function getOAuthConfig(name) {
|
|
9739
10707
|
const configDir = getConnectorConfigDir(name);
|
|
9740
|
-
const credentialsFile =
|
|
9741
|
-
if (
|
|
10708
|
+
const credentialsFile = join6(configDir, "credentials.json");
|
|
10709
|
+
if (existsSync5(credentialsFile)) {
|
|
9742
10710
|
try {
|
|
9743
|
-
const creds = JSON.parse(
|
|
10711
|
+
const creds = JSON.parse(readFileSync4(credentialsFile, "utf-8"));
|
|
9744
10712
|
return { clientId: creds.clientId, clientSecret: creds.clientSecret };
|
|
9745
10713
|
} catch {}
|
|
9746
10714
|
}
|
|
@@ -9819,12 +10787,15 @@ async function exchangeOAuthCode(name, code, redirectUri) {
|
|
|
9819
10787
|
function saveOAuthTokens(name, tokens) {
|
|
9820
10788
|
const configDir = getConnectorConfigDir(name);
|
|
9821
10789
|
const profile = getCurrentProfile(name);
|
|
9822
|
-
const profileDir =
|
|
9823
|
-
|
|
9824
|
-
const tokensFile =
|
|
9825
|
-
|
|
10790
|
+
const profileDir = join6(configDir, "profiles", profile);
|
|
10791
|
+
mkdirSync5(profileDir, { recursive: true });
|
|
10792
|
+
const tokensFile = join6(profileDir, "tokens.json");
|
|
10793
|
+
writeFileSync3(tokensFile, JSON.stringify(tokens, null, 2), { mode: 384 });
|
|
9826
10794
|
}
|
|
9827
10795
|
async function refreshOAuthToken(name) {
|
|
10796
|
+
return withWriteLock(name, () => _refreshOAuthToken(name));
|
|
10797
|
+
}
|
|
10798
|
+
async function _refreshOAuthToken(name) {
|
|
9828
10799
|
const oauthConfig = getOAuthConfig(name);
|
|
9829
10800
|
const currentTokens = loadTokens(name);
|
|
9830
10801
|
if (!oauthConfig.clientId || !oauthConfig.clientSecret) {
|
|
@@ -9861,15 +10832,15 @@ async function refreshOAuthToken(name) {
|
|
|
9861
10832
|
}
|
|
9862
10833
|
function listProfiles(name) {
|
|
9863
10834
|
const configDir = getConnectorConfigDir(name);
|
|
9864
|
-
const profilesDir =
|
|
9865
|
-
if (!
|
|
10835
|
+
const profilesDir = join6(configDir, "profiles");
|
|
10836
|
+
if (!existsSync5(profilesDir))
|
|
9866
10837
|
return ["default"];
|
|
9867
10838
|
const seen = new Set;
|
|
9868
10839
|
try {
|
|
9869
10840
|
const entries = readdirSync2(profilesDir);
|
|
9870
10841
|
for (const entry of entries) {
|
|
9871
|
-
const fullPath =
|
|
9872
|
-
const stat =
|
|
10842
|
+
const fullPath = join6(profilesDir, entry);
|
|
10843
|
+
const stat = statSync3(fullPath);
|
|
9873
10844
|
if (stat.isDirectory()) {
|
|
9874
10845
|
seen.add(entry);
|
|
9875
10846
|
} else if (entry.endsWith(".json")) {
|
|
@@ -9882,25 +10853,25 @@ function listProfiles(name) {
|
|
|
9882
10853
|
}
|
|
9883
10854
|
function switchProfile(name, profile) {
|
|
9884
10855
|
const configDir = getConnectorConfigDir(name);
|
|
9885
|
-
|
|
9886
|
-
|
|
10856
|
+
mkdirSync5(configDir, { recursive: true });
|
|
10857
|
+
writeFileSync3(join6(configDir, "current_profile"), profile);
|
|
9887
10858
|
}
|
|
9888
10859
|
function deleteProfile(name, profile) {
|
|
9889
10860
|
if (profile === "default")
|
|
9890
10861
|
return false;
|
|
9891
10862
|
const configDir = getConnectorConfigDir(name);
|
|
9892
|
-
const profilesDir =
|
|
9893
|
-
const profileFile =
|
|
9894
|
-
if (
|
|
9895
|
-
|
|
10863
|
+
const profilesDir = join6(configDir, "profiles");
|
|
10864
|
+
const profileFile = join6(profilesDir, `${profile}.json`);
|
|
10865
|
+
if (existsSync5(profileFile)) {
|
|
10866
|
+
rmSync2(profileFile);
|
|
9896
10867
|
if (getCurrentProfile(name) === profile) {
|
|
9897
10868
|
switchProfile(name, "default");
|
|
9898
10869
|
}
|
|
9899
10870
|
return true;
|
|
9900
10871
|
}
|
|
9901
|
-
const profileDir =
|
|
9902
|
-
if (
|
|
9903
|
-
|
|
10872
|
+
const profileDir = join6(profilesDir, profile);
|
|
10873
|
+
if (existsSync5(profileDir)) {
|
|
10874
|
+
rmSync2(profileDir, { recursive: true });
|
|
9904
10875
|
if (getCurrentProfile(name) === profile) {
|
|
9905
10876
|
switchProfile(name, "default");
|
|
9906
10877
|
}
|
|
@@ -9911,6 +10882,7 @@ function deleteProfile(name, profile) {
|
|
|
9911
10882
|
var FETCH_TIMEOUT = 1e4, oauthStateStore, GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth", GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token", GOOGLE_SCOPES;
|
|
9912
10883
|
var init_auth = __esm(() => {
|
|
9913
10884
|
init_installer();
|
|
10885
|
+
init_lock();
|
|
9914
10886
|
oauthStateStore = new Map;
|
|
9915
10887
|
GOOGLE_SCOPES = {
|
|
9916
10888
|
gmail: [
|
|
@@ -9952,15 +10924,222 @@ var init_auth = __esm(() => {
|
|
|
9952
10924
|
};
|
|
9953
10925
|
});
|
|
9954
10926
|
|
|
10927
|
+
// src/db/promotions.ts
|
|
10928
|
+
var exports_promotions = {};
|
|
10929
|
+
__export(exports_promotions, {
|
|
10930
|
+
promoteConnector: () => promoteConnector,
|
|
10931
|
+
isPromoted: () => isPromoted,
|
|
10932
|
+
getPromotedConnectors: () => getPromotedConnectors,
|
|
10933
|
+
demoteConnector: () => demoteConnector
|
|
10934
|
+
});
|
|
10935
|
+
function promoteConnector(name, db) {
|
|
10936
|
+
const d = db ?? getDatabase();
|
|
10937
|
+
d.run("INSERT OR REPLACE INTO connector_promotions (connector, promoted_at) VALUES (?, ?)", [name, now()]);
|
|
10938
|
+
}
|
|
10939
|
+
function demoteConnector(name, db) {
|
|
10940
|
+
const d = db ?? getDatabase();
|
|
10941
|
+
return d.run("DELETE FROM connector_promotions WHERE connector = ?", [name]).changes > 0;
|
|
10942
|
+
}
|
|
10943
|
+
function getPromotedConnectors(db) {
|
|
10944
|
+
const d = db ?? getDatabase();
|
|
10945
|
+
return d.query("SELECT connector FROM connector_promotions ORDER BY promoted_at DESC").all().map((r) => r.connector);
|
|
10946
|
+
}
|
|
10947
|
+
function isPromoted(name, db) {
|
|
10948
|
+
const d = db ?? getDatabase();
|
|
10949
|
+
const row = d.query("SELECT 1 FROM connector_promotions WHERE connector = ?").get(name);
|
|
10950
|
+
return !!row;
|
|
10951
|
+
}
|
|
10952
|
+
var init_promotions = __esm(() => {
|
|
10953
|
+
init_database();
|
|
10954
|
+
});
|
|
10955
|
+
|
|
10956
|
+
// src/db/usage.ts
|
|
10957
|
+
var exports_usage = {};
|
|
10958
|
+
__export(exports_usage, {
|
|
10959
|
+
logUsage: () => logUsage,
|
|
10960
|
+
getUsageStats: () => getUsageStats,
|
|
10961
|
+
getUsageMap: () => getUsageMap,
|
|
10962
|
+
getTopConnectors: () => getTopConnectors,
|
|
10963
|
+
cleanOldUsage: () => cleanOldUsage
|
|
10964
|
+
});
|
|
10965
|
+
function logUsage(connector, action, agentId, db) {
|
|
10966
|
+
const d = db ?? getDatabase();
|
|
10967
|
+
d.run("INSERT INTO connector_usage (id, connector, action, agent_id, timestamp) VALUES (?, ?, ?, ?, ?)", [shortUuid(), connector, action, agentId ?? null, now()]);
|
|
10968
|
+
}
|
|
10969
|
+
function getUsageStats(connector, db) {
|
|
10970
|
+
const d = db ?? getDatabase();
|
|
10971
|
+
const total = d.query("SELECT COUNT(*) as c FROM connector_usage WHERE connector = ?").get(connector).c;
|
|
10972
|
+
const d7 = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
|
|
10973
|
+
const last7d = d.query("SELECT COUNT(*) as c FROM connector_usage WHERE connector = ? AND timestamp > ?").get(connector, d7).c;
|
|
10974
|
+
const d1 = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
|
|
10975
|
+
const last24h = d.query("SELECT COUNT(*) as c FROM connector_usage WHERE connector = ? AND timestamp > ?").get(connector, d1).c;
|
|
10976
|
+
return { connector, total, last7d, last24h };
|
|
10977
|
+
}
|
|
10978
|
+
function getTopConnectors(limit = 10, days = 7, db) {
|
|
10979
|
+
const d = db ?? getDatabase();
|
|
10980
|
+
const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
10981
|
+
return d.query("SELECT connector, COUNT(*) as count FROM connector_usage WHERE timestamp > ? GROUP BY connector ORDER BY count DESC LIMIT ?").all(since, limit);
|
|
10982
|
+
}
|
|
10983
|
+
function getUsageMap(days = 7, db) {
|
|
10984
|
+
const top = getTopConnectors(100, days, db);
|
|
10985
|
+
return new Map(top.map((t) => [t.connector, t.count]));
|
|
10986
|
+
}
|
|
10987
|
+
function cleanOldUsage(days = 30, db) {
|
|
10988
|
+
const d = db ?? getDatabase();
|
|
10989
|
+
const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
10990
|
+
return d.run("DELETE FROM connector_usage WHERE timestamp < ?", [cutoff]).changes;
|
|
10991
|
+
}
|
|
10992
|
+
var init_usage = __esm(() => {
|
|
10993
|
+
init_database();
|
|
10994
|
+
});
|
|
10995
|
+
|
|
10996
|
+
// src/db/agents.ts
|
|
10997
|
+
function shortUuid2() {
|
|
10998
|
+
return crypto.randomUUID().slice(0, 8);
|
|
10999
|
+
}
|
|
11000
|
+
function isAgentConflict(result) {
|
|
11001
|
+
return result.conflict === true;
|
|
11002
|
+
}
|
|
11003
|
+
function registerAgent(input, db) {
|
|
11004
|
+
const d = db ?? getDatabase();
|
|
11005
|
+
const normalizedName = input.name.trim().toLowerCase();
|
|
11006
|
+
const existing = getAgentByName(normalizedName, d);
|
|
11007
|
+
if (existing) {
|
|
11008
|
+
const lastSeenMs = new Date(existing.last_seen_at).getTime();
|
|
11009
|
+
const isActive = Date.now() - lastSeenMs < AGENT_ACTIVE_WINDOW_MS;
|
|
11010
|
+
const sameSession = input.session_id && existing.session_id && input.session_id === existing.session_id;
|
|
11011
|
+
const differentSession = input.session_id && existing.session_id && input.session_id !== existing.session_id;
|
|
11012
|
+
if (isActive && differentSession) {
|
|
11013
|
+
const minutesAgo = Math.round((Date.now() - lastSeenMs) / 60000);
|
|
11014
|
+
return {
|
|
11015
|
+
conflict: true,
|
|
11016
|
+
existing_id: existing.id,
|
|
11017
|
+
existing_name: existing.name,
|
|
11018
|
+
last_seen_at: existing.last_seen_at,
|
|
11019
|
+
session_hint: existing.session_id ? existing.session_id.slice(0, 8) : null,
|
|
11020
|
+
working_dir: null,
|
|
11021
|
+
message: `Agent "${normalizedName}" is already active (last seen ${minutesAgo}m ago). Pass session_id="${existing.session_id}" to reclaim it, or choose a different name.`
|
|
11022
|
+
};
|
|
11023
|
+
}
|
|
11024
|
+
const updates = ["last_seen_at = ?"];
|
|
11025
|
+
const params = [now()];
|
|
11026
|
+
if (input.session_id && !sameSession) {
|
|
11027
|
+
updates.push("session_id = ?");
|
|
11028
|
+
params.push(input.session_id);
|
|
11029
|
+
}
|
|
11030
|
+
params.push(existing.id);
|
|
11031
|
+
d.run(`UPDATE agents SET ${updates.join(", ")} WHERE id = ?`, params);
|
|
11032
|
+
return getAgent(existing.id, d);
|
|
11033
|
+
}
|
|
11034
|
+
const id = shortUuid2();
|
|
11035
|
+
const ts = now();
|
|
11036
|
+
d.run(`INSERT INTO agents (id, name, session_id, role, last_seen_at, created_at)
|
|
11037
|
+
VALUES (?, ?, ?, ?, ?, ?)`, [id, normalizedName, input.session_id ?? null, input.role ?? "agent", ts, ts]);
|
|
11038
|
+
return getAgent(id, d);
|
|
11039
|
+
}
|
|
11040
|
+
function getAgent(id, db) {
|
|
11041
|
+
const d = db ?? getDatabase();
|
|
11042
|
+
return d.query("SELECT * FROM agents WHERE id = ?").get(id);
|
|
11043
|
+
}
|
|
11044
|
+
function getAgentByName(name, db) {
|
|
11045
|
+
const d = db ?? getDatabase();
|
|
11046
|
+
return d.query("SELECT * FROM agents WHERE LOWER(name) = ?").get(name.trim().toLowerCase());
|
|
11047
|
+
}
|
|
11048
|
+
function listAgents(db) {
|
|
11049
|
+
const d = db ?? getDatabase();
|
|
11050
|
+
return d.query("SELECT * FROM agents ORDER BY name").all();
|
|
11051
|
+
}
|
|
11052
|
+
function deleteAgent(id, db) {
|
|
11053
|
+
const d = db ?? getDatabase();
|
|
11054
|
+
return d.run("DELETE FROM agents WHERE id = ?", [id]).changes > 0;
|
|
11055
|
+
}
|
|
11056
|
+
var AGENT_ACTIVE_WINDOW_MS;
|
|
11057
|
+
var init_agents = __esm(() => {
|
|
11058
|
+
init_database();
|
|
11059
|
+
AGENT_ACTIVE_WINDOW_MS = 30 * 60 * 1000;
|
|
11060
|
+
});
|
|
11061
|
+
|
|
11062
|
+
// src/db/rate.ts
|
|
11063
|
+
function ensureRateTable(db) {
|
|
11064
|
+
db.run(`
|
|
11065
|
+
CREATE TABLE IF NOT EXISTS connector_rate_usage (
|
|
11066
|
+
agent_id TEXT NOT NULL,
|
|
11067
|
+
connector TEXT NOT NULL,
|
|
11068
|
+
window_start TEXT NOT NULL,
|
|
11069
|
+
call_count INTEGER NOT NULL DEFAULT 0,
|
|
11070
|
+
PRIMARY KEY (agent_id, connector, window_start)
|
|
11071
|
+
)
|
|
11072
|
+
`);
|
|
11073
|
+
db.run(`CREATE INDEX IF NOT EXISTS idx_rate_usage_window ON connector_rate_usage(connector, window_start)`);
|
|
11074
|
+
}
|
|
11075
|
+
function countActiveAgents(db) {
|
|
11076
|
+
const cutoff = new Date(Date.now() - AGENT_ACTIVE_WINDOW_MS2).toISOString();
|
|
11077
|
+
const row = db.query("SELECT COUNT(*) as count FROM agents WHERE last_seen_at > ?").get(cutoff);
|
|
11078
|
+
return Math.max(1, row?.count ?? 1);
|
|
11079
|
+
}
|
|
11080
|
+
function currentWindowStart() {
|
|
11081
|
+
const now3 = Date.now();
|
|
11082
|
+
const windowMs = WINDOW_SECONDS * 1000;
|
|
11083
|
+
return new Date(Math.floor(now3 / windowMs) * windowMs).toISOString();
|
|
11084
|
+
}
|
|
11085
|
+
function checkRateBudget(agentId, connector, connectorLimit, consume = true, db) {
|
|
11086
|
+
const d = db ?? getDatabase();
|
|
11087
|
+
ensureRateTable(d);
|
|
11088
|
+
const activeAgents = countActiveAgents(d);
|
|
11089
|
+
const budget = Math.max(1, Math.floor(connectorLimit / activeAgents));
|
|
11090
|
+
const windowStart = currentWindowStart();
|
|
11091
|
+
const windowMs = WINDOW_SECONDS * 1000;
|
|
11092
|
+
const windowEnd = new Date(Math.floor(Date.now() / windowMs) * windowMs + windowMs);
|
|
11093
|
+
const windowResetsIn = windowEnd.getTime() - Date.now();
|
|
11094
|
+
const row = d.query("SELECT call_count FROM connector_rate_usage WHERE agent_id = ? AND connector = ? AND window_start = ?").get(agentId, connector, windowStart);
|
|
11095
|
+
const used = row?.call_count ?? 0;
|
|
11096
|
+
if (used >= budget) {
|
|
11097
|
+
return {
|
|
11098
|
+
exceeded: true,
|
|
11099
|
+
connector,
|
|
11100
|
+
agent_id: agentId,
|
|
11101
|
+
budget,
|
|
11102
|
+
used,
|
|
11103
|
+
active_agents: activeAgents,
|
|
11104
|
+
window_resets_in_ms: windowResetsIn,
|
|
11105
|
+
message: `Rate budget exceeded for "${connector}" (${used}/${budget} calls used, ${activeAgents} active agent${activeAgents === 1 ? "" : "s"} sharing limit of ${connectorLimit}/min). Resets in ${Math.ceil(windowResetsIn / 1000)}s.`
|
|
11106
|
+
};
|
|
11107
|
+
}
|
|
11108
|
+
if (consume) {
|
|
11109
|
+
d.run(`INSERT INTO connector_rate_usage (agent_id, connector, window_start, call_count)
|
|
11110
|
+
VALUES (?, ?, ?, 1)
|
|
11111
|
+
ON CONFLICT(agent_id, connector, window_start) DO UPDATE SET call_count = call_count + 1`, [agentId, connector, windowStart]);
|
|
11112
|
+
}
|
|
11113
|
+
return {
|
|
11114
|
+
connector,
|
|
11115
|
+
agent_id: agentId,
|
|
11116
|
+
limit: connectorLimit,
|
|
11117
|
+
active_agents: activeAgents,
|
|
11118
|
+
budget,
|
|
11119
|
+
used: consume ? used + 1 : used,
|
|
11120
|
+
remaining: consume ? budget - used - 1 : budget - used,
|
|
11121
|
+
window_start: windowStart,
|
|
11122
|
+
window_resets_in_ms: windowResetsIn
|
|
11123
|
+
};
|
|
11124
|
+
}
|
|
11125
|
+
function getRateBudget(agentId, connector, connectorLimit, db) {
|
|
11126
|
+
return checkRateBudget(agentId, connector, connectorLimit, false, db);
|
|
11127
|
+
}
|
|
11128
|
+
var AGENT_ACTIVE_WINDOW_MS2, WINDOW_SECONDS = 60;
|
|
11129
|
+
var init_rate = __esm(() => {
|
|
11130
|
+
init_database();
|
|
11131
|
+
AGENT_ACTIVE_WINDOW_MS2 = 30 * 60 * 1000;
|
|
11132
|
+
});
|
|
11133
|
+
|
|
9955
11134
|
// src/server/serve.ts
|
|
9956
11135
|
var exports_serve = {};
|
|
9957
11136
|
__export(exports_serve, {
|
|
9958
11137
|
startServer: () => startServer
|
|
9959
11138
|
});
|
|
9960
|
-
import { existsSync as
|
|
9961
|
-
import { join as
|
|
11139
|
+
import { existsSync as existsSync7, readdirSync as readdirSync3, readFileSync as readFileSync5, writeFileSync as writeFileSync4, mkdirSync as mkdirSync6 } from "fs";
|
|
11140
|
+
import { join as join8, dirname as dirname4, extname, basename } from "path";
|
|
9962
11141
|
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
9963
|
-
import { homedir as
|
|
11142
|
+
import { homedir as homedir6 } from "os";
|
|
9964
11143
|
function logActivity(action, connector, detail) {
|
|
9965
11144
|
activityLog.unshift({ action, connector, timestamp: Date.now(), detail });
|
|
9966
11145
|
if (activityLog.length > MAX_ACTIVITY_LOG) {
|
|
@@ -9971,20 +11150,20 @@ function resolveDashboardDir() {
|
|
|
9971
11150
|
const candidates = [];
|
|
9972
11151
|
try {
|
|
9973
11152
|
const scriptDir = dirname4(fileURLToPath4(import.meta.url));
|
|
9974
|
-
candidates.push(
|
|
9975
|
-
candidates.push(
|
|
11153
|
+
candidates.push(join8(scriptDir, "..", "dashboard", "dist"));
|
|
11154
|
+
candidates.push(join8(scriptDir, "..", "..", "dashboard", "dist"));
|
|
9976
11155
|
} catch {}
|
|
9977
11156
|
if (process.argv[1]) {
|
|
9978
11157
|
const mainDir = dirname4(process.argv[1]);
|
|
9979
|
-
candidates.push(
|
|
9980
|
-
candidates.push(
|
|
11158
|
+
candidates.push(join8(mainDir, "..", "dashboard", "dist"));
|
|
11159
|
+
candidates.push(join8(mainDir, "..", "..", "dashboard", "dist"));
|
|
9981
11160
|
}
|
|
9982
|
-
candidates.push(
|
|
11161
|
+
candidates.push(join8(process.cwd(), "dashboard", "dist"));
|
|
9983
11162
|
for (const candidate of candidates) {
|
|
9984
|
-
if (
|
|
11163
|
+
if (existsSync7(candidate))
|
|
9985
11164
|
return candidate;
|
|
9986
11165
|
}
|
|
9987
|
-
return
|
|
11166
|
+
return join8(process.cwd(), "dashboard", "dist");
|
|
9988
11167
|
}
|
|
9989
11168
|
function json(data, status = 200, port) {
|
|
9990
11169
|
return new Response(JSON.stringify(data), {
|
|
@@ -9996,6 +11175,18 @@ function json(data, status = 200, port) {
|
|
|
9996
11175
|
}
|
|
9997
11176
|
});
|
|
9998
11177
|
}
|
|
11178
|
+
async function jsonStripped(data, status = 200, port) {
|
|
11179
|
+
const raw = JSON.stringify(data);
|
|
11180
|
+
const body = await maybeStrip(raw);
|
|
11181
|
+
return new Response(body, {
|
|
11182
|
+
status,
|
|
11183
|
+
headers: {
|
|
11184
|
+
"Content-Type": "application/json",
|
|
11185
|
+
"Access-Control-Allow-Origin": port ? `http://localhost:${port}` : "*",
|
|
11186
|
+
...SECURITY_HEADERS
|
|
11187
|
+
}
|
|
11188
|
+
});
|
|
11189
|
+
}
|
|
9999
11190
|
function htmlResponse(content, status = 200) {
|
|
10000
11191
|
return new Response(content, {
|
|
10001
11192
|
status,
|
|
@@ -10057,7 +11248,7 @@ function oauthPage(type, title, message, hint, extra) {
|
|
|
10057
11248
|
</body></html>`;
|
|
10058
11249
|
}
|
|
10059
11250
|
function serveStaticFile(filePath) {
|
|
10060
|
-
if (!
|
|
11251
|
+
if (!existsSync7(filePath))
|
|
10061
11252
|
return null;
|
|
10062
11253
|
const ext = extname(filePath);
|
|
10063
11254
|
const contentType = MIME_TYPES[ext] || "application/octet-stream";
|
|
@@ -10081,7 +11272,7 @@ async function startServer(requestedPort, options) {
|
|
|
10081
11272
|
const shouldOpen = options?.open ?? true;
|
|
10082
11273
|
loadConnectorVersions();
|
|
10083
11274
|
const dashboardDir = resolveDashboardDir();
|
|
10084
|
-
const dashboardExists =
|
|
11275
|
+
const dashboardExists = existsSync7(dashboardDir);
|
|
10085
11276
|
if (!dashboardExists) {
|
|
10086
11277
|
console.error(`
|
|
10087
11278
|
Dashboard not found at: ${dashboardDir}`);
|
|
@@ -10110,10 +11301,10 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10110
11301
|
const fields = fieldsParam ? new Set(fieldsParam.split(",").map((f) => f.trim())) : null;
|
|
10111
11302
|
const data = getAllConnectorsWithAuth();
|
|
10112
11303
|
if (compact) {
|
|
10113
|
-
return
|
|
11304
|
+
return jsonStripped(data.map((c) => ({ name: c.name, category: c.category, installed: c.installed })), 200, port);
|
|
10114
11305
|
}
|
|
10115
11306
|
if (fields) {
|
|
10116
|
-
return
|
|
11307
|
+
return jsonStripped(data.map((c) => {
|
|
10117
11308
|
const out = {};
|
|
10118
11309
|
for (const f of fields) {
|
|
10119
11310
|
if (f in c)
|
|
@@ -10122,7 +11313,7 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10122
11313
|
return out;
|
|
10123
11314
|
}), 200, port);
|
|
10124
11315
|
}
|
|
10125
|
-
return
|
|
11316
|
+
return jsonStripped(data, 200, port);
|
|
10126
11317
|
}
|
|
10127
11318
|
const singleMatch = path.match(/^\/api\/connectors\/([^/]+)$/);
|
|
10128
11319
|
if (singleMatch && method === "GET") {
|
|
@@ -10156,7 +11347,7 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10156
11347
|
const body = await req.json();
|
|
10157
11348
|
if (!body.key)
|
|
10158
11349
|
return json({ error: "Missing 'key' in request body" }, 400, port);
|
|
10159
|
-
saveApiKey(name, body.key, body.field);
|
|
11350
|
+
await saveApiKey(name, body.key, body.field);
|
|
10160
11351
|
logActivity("key_saved", name, body.field ? `Field: ${body.field}` : undefined);
|
|
10161
11352
|
return json({ success: true }, 200, port);
|
|
10162
11353
|
} catch (e) {
|
|
@@ -10201,7 +11392,10 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10201
11392
|
if (!isValidConnectorName(name))
|
|
10202
11393
|
return json({ error: "Invalid connector name" }, 400, port);
|
|
10203
11394
|
try {
|
|
10204
|
-
removeConnector(name);
|
|
11395
|
+
const removed = removeConnector(name);
|
|
11396
|
+
if (!removed) {
|
|
11397
|
+
return json({ error: `Connector '${name}' is not installed` }, 404, port);
|
|
11398
|
+
}
|
|
10205
11399
|
logActivity("uninstalled", name);
|
|
10206
11400
|
return json({ success: true, name }, 200, port);
|
|
10207
11401
|
} catch (e) {
|
|
@@ -10227,6 +11421,167 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10227
11421
|
if (path === "/api/activity" && method === "GET") {
|
|
10228
11422
|
return json(activityLog, 200, port);
|
|
10229
11423
|
}
|
|
11424
|
+
if (path === "/api/hot" && method === "GET") {
|
|
11425
|
+
const { getTopConnectors: getTopConnectors2 } = await Promise.resolve().then(() => (init_usage(), exports_usage));
|
|
11426
|
+
const { getPromotedConnectors: getPromotedConnectors2 } = await Promise.resolve().then(() => (init_promotions(), exports_promotions));
|
|
11427
|
+
const limit = parseInt(url2.searchParams.get("limit") || "10", 10);
|
|
11428
|
+
const days = parseInt(url2.searchParams.get("days") || "7", 10);
|
|
11429
|
+
const db = getDatabase2();
|
|
11430
|
+
const top = getTopConnectors2(limit, days, db);
|
|
11431
|
+
const promoted = new Set(getPromotedConnectors2(db));
|
|
11432
|
+
return json(top.map((t) => ({ ...t, promoted: promoted.has(t.connector) })), 200, port);
|
|
11433
|
+
}
|
|
11434
|
+
const promoteMatch = path.match(/^\/api\/connectors\/([^/]+)\/promote$/);
|
|
11435
|
+
if (promoteMatch && method === "POST") {
|
|
11436
|
+
const name = promoteMatch[1];
|
|
11437
|
+
if (!getConnector(name))
|
|
11438
|
+
return json({ error: "Connector not found" }, 404, port);
|
|
11439
|
+
const { promoteConnector: promoteConnector2 } = await Promise.resolve().then(() => (init_promotions(), exports_promotions));
|
|
11440
|
+
promoteConnector2(name, getDatabase2());
|
|
11441
|
+
return json({ success: true, connector: name }, 200, port);
|
|
11442
|
+
}
|
|
11443
|
+
if (promoteMatch && method === "DELETE") {
|
|
11444
|
+
const { demoteConnector: demoteConnector2 } = await Promise.resolve().then(() => (init_promotions(), exports_promotions));
|
|
11445
|
+
const removed = demoteConnector2(promoteMatch[1], getDatabase2());
|
|
11446
|
+
return json({ success: removed, connector: promoteMatch[1] }, 200, port);
|
|
11447
|
+
}
|
|
11448
|
+
if (path === "/api/llm" && method === "GET") {
|
|
11449
|
+
const config = getLlmConfig();
|
|
11450
|
+
if (!config)
|
|
11451
|
+
return json({ configured: false }, 200, port);
|
|
11452
|
+
return json({ configured: true, provider: config.provider, model: config.model, key: maskKey(config.api_key), strip: config.strip }, 200, port);
|
|
11453
|
+
}
|
|
11454
|
+
if (path === "/api/llm" && method === "POST") {
|
|
11455
|
+
const body = await req.json().catch(() => ({}));
|
|
11456
|
+
const validProviders = ["cerebras", "groq", "openai", "anthropic"];
|
|
11457
|
+
const provider = body.provider;
|
|
11458
|
+
if (!provider || !validProviders.includes(provider))
|
|
11459
|
+
return json({ error: "provider must be one of: " + validProviders.join(", ") }, 400, port);
|
|
11460
|
+
const api_key = body.api_key;
|
|
11461
|
+
if (!api_key)
|
|
11462
|
+
return json({ error: "api_key is required" }, 400, port);
|
|
11463
|
+
const model = body.model || getLlmConfig()?.model || "qwen-3-32b";
|
|
11464
|
+
const strip = typeof body.strip === "boolean" ? body.strip : getLlmConfig()?.strip ?? false;
|
|
11465
|
+
saveLlmConfig({ provider, model, api_key, strip });
|
|
11466
|
+
return json({ success: true, provider, model, strip }, 200, port);
|
|
11467
|
+
}
|
|
11468
|
+
if (path === "/api/llm/test" && method === "POST") {
|
|
11469
|
+
const config = getLlmConfig();
|
|
11470
|
+
if (!config)
|
|
11471
|
+
return json({ error: "No LLM configured" }, 400, port);
|
|
11472
|
+
try {
|
|
11473
|
+
const client = new LLMClient(config);
|
|
11474
|
+
const result = await client.complete('Respond with exactly: {"status":"ok"}', "ping");
|
|
11475
|
+
return json({ success: true, provider: result.provider, model: result.model, latency_ms: result.latency_ms, response: result.content }, 200, port);
|
|
11476
|
+
} catch (e) {
|
|
11477
|
+
return json({ success: false, error: e instanceof Error ? e.message : String(e) }, 500, port);
|
|
11478
|
+
}
|
|
11479
|
+
}
|
|
11480
|
+
if (path === "/api/jobs" && method === "GET") {
|
|
11481
|
+
return json(listJobs(getDatabase2()), 200, port);
|
|
11482
|
+
}
|
|
11483
|
+
if (path === "/api/jobs" && method === "POST") {
|
|
11484
|
+
const body = await req.json().catch(() => ({}));
|
|
11485
|
+
if (!body.name || !body.connector || !body.command || !body.cron)
|
|
11486
|
+
return json({ error: "name, connector, command, cron required" }, 400, port);
|
|
11487
|
+
const job = createJob({ name: body.name, connector: body.connector, command: body.command, args: body.args ?? [], cron: body.cron, strip: !!body.strip }, getDatabase2());
|
|
11488
|
+
return json(job, 201, port);
|
|
11489
|
+
}
|
|
11490
|
+
const jobMatch = path.match(/^\/api\/jobs\/([^/]+)$/);
|
|
11491
|
+
if (jobMatch) {
|
|
11492
|
+
const db = getDatabase2();
|
|
11493
|
+
const job = getJobByName(jobMatch[1]) ?? getDatabase2().query("SELECT * FROM connector_jobs WHERE id = ?").get(jobMatch[1]);
|
|
11494
|
+
if (!job && method !== "DELETE")
|
|
11495
|
+
return json({ error: "Job not found" }, 404, port);
|
|
11496
|
+
if (method === "GET")
|
|
11497
|
+
return json(listJobRuns(job.id, 20, db), 200, port);
|
|
11498
|
+
if (method === "DELETE") {
|
|
11499
|
+
const j = getJobByName(jobMatch[1], db);
|
|
11500
|
+
if (!j)
|
|
11501
|
+
return json({ error: "Job not found" }, 404, port);
|
|
11502
|
+
deleteJob(j.id, db);
|
|
11503
|
+
return json({ success: true }, 200, port);
|
|
11504
|
+
}
|
|
11505
|
+
if (method === "PATCH") {
|
|
11506
|
+
const body = await req.json().catch(() => ({}));
|
|
11507
|
+
const j = getJobByName(jobMatch[1], db);
|
|
11508
|
+
const updated = updateJob(j.id, { enabled: typeof body.enabled === "boolean" ? body.enabled : undefined, strip: typeof body.strip === "boolean" ? body.strip : undefined }, db);
|
|
11509
|
+
return json(updated, 200, port);
|
|
11510
|
+
}
|
|
11511
|
+
}
|
|
11512
|
+
const jobRunMatch = path.match(/^\/api\/jobs\/([^/]+)\/run$/);
|
|
11513
|
+
if (jobRunMatch && method === "POST") {
|
|
11514
|
+
const db = getDatabase2();
|
|
11515
|
+
const job = getJobByName(jobRunMatch[1], db);
|
|
11516
|
+
if (!job)
|
|
11517
|
+
return json({ error: "Job not found" }, 404, port);
|
|
11518
|
+
const result = await triggerJob(job, db);
|
|
11519
|
+
return json(result, 200, port);
|
|
11520
|
+
}
|
|
11521
|
+
if (path === "/api/workflows" && method === "GET") {
|
|
11522
|
+
return json(listWorkflows(getDatabase2()), 200, port);
|
|
11523
|
+
}
|
|
11524
|
+
if (path === "/api/workflows" && method === "POST") {
|
|
11525
|
+
const body = await req.json().catch(() => ({}));
|
|
11526
|
+
if (!body.name || !body.steps)
|
|
11527
|
+
return json({ error: "name and steps required" }, 400, port);
|
|
11528
|
+
const wf = createWorkflow({ name: body.name, steps: body.steps }, getDatabase2());
|
|
11529
|
+
return json(wf, 201, port);
|
|
11530
|
+
}
|
|
11531
|
+
const wfMatch = path.match(/^\/api\/workflows\/([^/]+)$/);
|
|
11532
|
+
if (wfMatch) {
|
|
11533
|
+
const db = getDatabase2();
|
|
11534
|
+
const wf = getWorkflowByName(wfMatch[1], db);
|
|
11535
|
+
if (!wf)
|
|
11536
|
+
return json({ error: "Workflow not found" }, 404, port);
|
|
11537
|
+
if (method === "GET")
|
|
11538
|
+
return json(wf, 200, port);
|
|
11539
|
+
if (method === "DELETE") {
|
|
11540
|
+
deleteWorkflow(wf.id, db);
|
|
11541
|
+
return json({ success: true }, 200, port);
|
|
11542
|
+
}
|
|
11543
|
+
}
|
|
11544
|
+
const wfRunMatch = path.match(/^\/api\/workflows\/([^/]+)\/run$/);
|
|
11545
|
+
if (wfRunMatch && method === "POST") {
|
|
11546
|
+
const wf = getWorkflowByName(wfRunMatch[1], getDatabase2());
|
|
11547
|
+
if (!wf)
|
|
11548
|
+
return json({ error: "Workflow not found" }, 404, port);
|
|
11549
|
+
const result = await runWorkflow(wf);
|
|
11550
|
+
return json(result, 200, port);
|
|
11551
|
+
}
|
|
11552
|
+
if (path === "/api/agents" && method === "GET") {
|
|
11553
|
+
return json(listAgents(), 200, port);
|
|
11554
|
+
}
|
|
11555
|
+
if (path === "/api/agents/register" && method === "POST") {
|
|
11556
|
+
const body = await req.json().catch(() => ({}));
|
|
11557
|
+
const name = typeof body.name === "string" ? body.name : null;
|
|
11558
|
+
if (!name)
|
|
11559
|
+
return json({ error: "name is required" }, 400, port);
|
|
11560
|
+
const result = registerAgent({
|
|
11561
|
+
name,
|
|
11562
|
+
session_id: typeof body.session_id === "string" ? body.session_id : undefined,
|
|
11563
|
+
role: typeof body.role === "string" ? body.role : undefined
|
|
11564
|
+
});
|
|
11565
|
+
if (isAgentConflict(result))
|
|
11566
|
+
return json(result, 409, port);
|
|
11567
|
+
return json(result, 200, port);
|
|
11568
|
+
}
|
|
11569
|
+
if (path.startsWith("/api/agents/") && method === "DELETE") {
|
|
11570
|
+
const agentName = path.slice("/api/agents/".length);
|
|
11571
|
+
const agent = getAgentByName(agentName);
|
|
11572
|
+
if (!agent)
|
|
11573
|
+
return json({ error: "Agent not found" }, 404, port);
|
|
11574
|
+
deleteAgent(agent.id);
|
|
11575
|
+
return json({ success: true }, 200, port);
|
|
11576
|
+
}
|
|
11577
|
+
const rateMatch = path.match(/^\/api\/rate\/([^/]+)\/([^/]+)$/);
|
|
11578
|
+
if (rateMatch && method === "GET") {
|
|
11579
|
+
const [, agentId, connector] = rateMatch;
|
|
11580
|
+
const limit = parseInt(url2.searchParams.get("limit") || "60", 10);
|
|
11581
|
+
const consume = url2.searchParams.get("consume") === "true";
|
|
11582
|
+
const result = consume ? checkRateBudget(agentId, connector, limit) : getRateBudget(agentId, connector, limit);
|
|
11583
|
+
return json(result, 200, port);
|
|
11584
|
+
}
|
|
10230
11585
|
const profilesMatch = path.match(/^\/api\/connectors\/([^/]+)\/profiles$/);
|
|
10231
11586
|
if (profilesMatch && method === "GET") {
|
|
10232
11587
|
const name = profilesMatch[1];
|
|
@@ -10234,12 +11589,12 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10234
11589
|
return json({ error: "Invalid connector name" }, 400, port);
|
|
10235
11590
|
try {
|
|
10236
11591
|
const profiles = listProfiles(name);
|
|
10237
|
-
const configDir =
|
|
10238
|
-
const currentProfileFile =
|
|
11592
|
+
const configDir = join8(homedir6(), ".connectors", name.startsWith("connect-") ? name : `connect-${name}`);
|
|
11593
|
+
const currentProfileFile = join8(configDir, "current_profile");
|
|
10239
11594
|
let current = "default";
|
|
10240
|
-
if (
|
|
11595
|
+
if (existsSync7(currentProfileFile)) {
|
|
10241
11596
|
try {
|
|
10242
|
-
current =
|
|
11597
|
+
current = readFileSync5(currentProfileFile, "utf-8").trim() || "default";
|
|
10243
11598
|
} catch {}
|
|
10244
11599
|
}
|
|
10245
11600
|
return json({ current, profiles }, 200, port);
|
|
@@ -10286,16 +11641,16 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10286
11641
|
}
|
|
10287
11642
|
if (path === "/api/export" && method === "GET") {
|
|
10288
11643
|
try {
|
|
10289
|
-
const connectDir =
|
|
11644
|
+
const connectDir = join8(homedir6(), ".connectors");
|
|
10290
11645
|
const result = {};
|
|
10291
|
-
if (
|
|
11646
|
+
if (existsSync7(connectDir)) {
|
|
10292
11647
|
const entries = readdirSync3(connectDir, { withFileTypes: true });
|
|
10293
11648
|
for (const entry of entries) {
|
|
10294
11649
|
if (!entry.isDirectory() || !entry.name.startsWith("connect-"))
|
|
10295
11650
|
continue;
|
|
10296
11651
|
const connectorName = entry.name.replace(/^connect-/, "");
|
|
10297
|
-
const profilesDir =
|
|
10298
|
-
if (!
|
|
11652
|
+
const profilesDir = join8(connectDir, entry.name, "profiles");
|
|
11653
|
+
if (!existsSync7(profilesDir))
|
|
10299
11654
|
continue;
|
|
10300
11655
|
const profiles = {};
|
|
10301
11656
|
const profileEntries = readdirSync3(profilesDir, { withFileTypes: true });
|
|
@@ -10303,15 +11658,15 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10303
11658
|
if (pEntry.isFile() && pEntry.name.endsWith(".json")) {
|
|
10304
11659
|
const profileName = basename(pEntry.name, ".json");
|
|
10305
11660
|
try {
|
|
10306
|
-
const config = JSON.parse(
|
|
11661
|
+
const config = JSON.parse(readFileSync5(join8(profilesDir, pEntry.name), "utf-8"));
|
|
10307
11662
|
profiles[profileName] = config;
|
|
10308
11663
|
} catch {}
|
|
10309
11664
|
}
|
|
10310
11665
|
if (pEntry.isDirectory()) {
|
|
10311
|
-
const configPath =
|
|
10312
|
-
if (
|
|
11666
|
+
const configPath = join8(profilesDir, pEntry.name, "config.json");
|
|
11667
|
+
if (existsSync7(configPath)) {
|
|
10313
11668
|
try {
|
|
10314
|
-
const config = JSON.parse(
|
|
11669
|
+
const config = JSON.parse(readFileSync5(configPath, "utf-8"));
|
|
10315
11670
|
profiles[pEntry.name] = config;
|
|
10316
11671
|
} catch {}
|
|
10317
11672
|
}
|
|
@@ -10346,20 +11701,20 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10346
11701
|
return json({ error: "Invalid import format: missing 'connectors' object" }, 400, port);
|
|
10347
11702
|
}
|
|
10348
11703
|
let imported = 0;
|
|
10349
|
-
const connectDir =
|
|
11704
|
+
const connectDir = join8(homedir6(), ".connectors");
|
|
10350
11705
|
for (const [connectorName, data] of Object.entries(body.connectors)) {
|
|
10351
11706
|
if (!isValidConnectorName(connectorName))
|
|
10352
11707
|
continue;
|
|
10353
11708
|
if (!data.profiles || typeof data.profiles !== "object")
|
|
10354
11709
|
continue;
|
|
10355
|
-
const connectorDir =
|
|
10356
|
-
const profilesDir =
|
|
11710
|
+
const connectorDir = join8(connectDir, `connect-${connectorName}`);
|
|
11711
|
+
const profilesDir = join8(connectorDir, "profiles");
|
|
10357
11712
|
for (const [profileName, config] of Object.entries(data.profiles)) {
|
|
10358
11713
|
if (!config || typeof config !== "object")
|
|
10359
11714
|
continue;
|
|
10360
|
-
|
|
10361
|
-
const profileFile =
|
|
10362
|
-
|
|
11715
|
+
mkdirSync6(profilesDir, { recursive: true });
|
|
11716
|
+
const profileFile = join8(profilesDir, `${profileName}.json`);
|
|
11717
|
+
writeFileSync4(profileFile, JSON.stringify(config, null, 2));
|
|
10363
11718
|
imported++;
|
|
10364
11719
|
}
|
|
10365
11720
|
}
|
|
@@ -10414,12 +11769,12 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10414
11769
|
}
|
|
10415
11770
|
if (dashboardExists && (method === "GET" || method === "HEAD")) {
|
|
10416
11771
|
if (path !== "/") {
|
|
10417
|
-
const filePath =
|
|
11772
|
+
const filePath = join8(dashboardDir, path);
|
|
10418
11773
|
const res2 = serveStaticFile(filePath);
|
|
10419
11774
|
if (res2)
|
|
10420
11775
|
return res2;
|
|
10421
11776
|
}
|
|
10422
|
-
const indexPath =
|
|
11777
|
+
const indexPath = join8(dashboardDir, "index.html");
|
|
10423
11778
|
const res = serveStaticFile(indexPath);
|
|
10424
11779
|
if (res)
|
|
10425
11780
|
return res;
|
|
@@ -10433,6 +11788,9 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10433
11788
|
};
|
|
10434
11789
|
process.on("SIGINT", shutdown);
|
|
10435
11790
|
process.on("SIGTERM", shutdown);
|
|
11791
|
+
const { startScheduler: startScheduler2 } = await Promise.resolve().then(() => (init_scheduler(), exports_scheduler));
|
|
11792
|
+
const { getDatabase: getDatabase2 } = await Promise.resolve().then(() => (init_database(), exports_database));
|
|
11793
|
+
startScheduler2(getDatabase2());
|
|
10436
11794
|
const url = `http://localhost:${port}`;
|
|
10437
11795
|
console.log(`Connectors Dashboard running at ${url}`);
|
|
10438
11796
|
if (shouldOpen) {
|
|
@@ -10445,6 +11803,14 @@ Dashboard not found at: ${dashboardDir}`);
|
|
|
10445
11803
|
}
|
|
10446
11804
|
var activityLog, MAX_ACTIVITY_LOG = 100, MIME_TYPES, SECURITY_HEADERS, MAX_BODY_SIZE;
|
|
10447
11805
|
var init_serve = __esm(() => {
|
|
11806
|
+
init_agents();
|
|
11807
|
+
init_rate();
|
|
11808
|
+
init_strip();
|
|
11809
|
+
init_llm();
|
|
11810
|
+
init_jobs();
|
|
11811
|
+
init_workflows();
|
|
11812
|
+
init_scheduler();
|
|
11813
|
+
init_workflow_runner();
|
|
10448
11814
|
init_registry();
|
|
10449
11815
|
init_installer();
|
|
10450
11816
|
init_auth();
|
|
@@ -10489,6 +11855,101 @@ var {
|
|
|
10489
11855
|
|
|
10490
11856
|
// src/cli/index.tsx
|
|
10491
11857
|
import chalk2 from "chalk";
|
|
11858
|
+
// package.json
|
|
11859
|
+
var package_default = {
|
|
11860
|
+
name: "@hasna/connectors",
|
|
11861
|
+
version: "1.3.5",
|
|
11862
|
+
description: "Open source connector library - Install API connectors with a single command",
|
|
11863
|
+
type: "module",
|
|
11864
|
+
bin: {
|
|
11865
|
+
connectors: "./bin/index.js",
|
|
11866
|
+
"connectors-mcp": "./bin/mcp.js",
|
|
11867
|
+
"connectors-serve": "./bin/serve.js"
|
|
11868
|
+
},
|
|
11869
|
+
files: [
|
|
11870
|
+
"bin/",
|
|
11871
|
+
"dist/",
|
|
11872
|
+
"dashboard/dist/",
|
|
11873
|
+
"connectors/",
|
|
11874
|
+
"README.md"
|
|
11875
|
+
],
|
|
11876
|
+
exports: {
|
|
11877
|
+
".": {
|
|
11878
|
+
import: "./dist/index.js",
|
|
11879
|
+
types: "./dist/index.d.ts"
|
|
11880
|
+
}
|
|
11881
|
+
},
|
|
11882
|
+
main: "./dist/index.js",
|
|
11883
|
+
types: "./dist/index.d.ts",
|
|
11884
|
+
scripts: {
|
|
11885
|
+
build: "cd dashboard && bun run build && cd .. && bun build ./src/cli/index.tsx --outdir ./bin --target bun --external ink --external react --external chalk --external conf && bun build ./src/mcp/index.ts --outfile ./bin/mcp.js --target bun && bun build ./src/server/index.ts --outfile ./bin/serve.js --target bun && bun build ./src/index.ts --outdir ./dist --target bun && tsc --emitDeclarationOnly --outDir ./dist",
|
|
11886
|
+
"build:dashboard": "cd dashboard && bun run build",
|
|
11887
|
+
postinstall: '[ "$SKIP_DASHBOARD" = "1" ] || [ ! -f dashboard/package.json ] || [ -d dashboard/node_modules ] || (cd dashboard && bun install)',
|
|
11888
|
+
dev: "bun run ./src/cli/index.tsx",
|
|
11889
|
+
typecheck: "tsc --noEmit",
|
|
11890
|
+
test: "bun test",
|
|
11891
|
+
"sdk:build": "cd sdk && bun run build",
|
|
11892
|
+
prepublishOnly: "bun test && bun run build"
|
|
11893
|
+
},
|
|
11894
|
+
keywords: [
|
|
11895
|
+
"connectors",
|
|
11896
|
+
"api",
|
|
11897
|
+
"cli",
|
|
11898
|
+
"typescript",
|
|
11899
|
+
"bun",
|
|
11900
|
+
"figma",
|
|
11901
|
+
"stripe",
|
|
11902
|
+
"github",
|
|
11903
|
+
"openai",
|
|
11904
|
+
"mcp",
|
|
11905
|
+
"model-context-protocol"
|
|
11906
|
+
],
|
|
11907
|
+
author: "Hasna",
|
|
11908
|
+
license: "Apache-2.0",
|
|
11909
|
+
devDependencies: {
|
|
11910
|
+
"@types/bun": "latest",
|
|
11911
|
+
"@types/react": "^18.2.0",
|
|
11912
|
+
"ink-testing-library": "^4.0.0",
|
|
11913
|
+
typescript: "^5"
|
|
11914
|
+
},
|
|
11915
|
+
dependencies: {
|
|
11916
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
11917
|
+
chalk: "^5.3.0",
|
|
11918
|
+
commander: "^12.1.0",
|
|
11919
|
+
conf: "^13.0.1",
|
|
11920
|
+
"fast-xml-parser": "^5.5.3",
|
|
11921
|
+
ink: "^5.0.1",
|
|
11922
|
+
"ink-select-input": "^6.0.0",
|
|
11923
|
+
"ink-spinner": "^5.0.0",
|
|
11924
|
+
"ink-text-input": "^6.0.0",
|
|
11925
|
+
open: "^11.0.0",
|
|
11926
|
+
react: "^18.2.0",
|
|
11927
|
+
zod: "3"
|
|
11928
|
+
},
|
|
11929
|
+
engines: {
|
|
11930
|
+
bun: ">=1.0.0"
|
|
11931
|
+
},
|
|
11932
|
+
publishConfig: {
|
|
11933
|
+
registry: "https://registry.npmjs.org",
|
|
11934
|
+
access: "public"
|
|
11935
|
+
},
|
|
11936
|
+
repository: {
|
|
11937
|
+
type: "git",
|
|
11938
|
+
url: "git+https://github.com/hasna/connectors.git"
|
|
11939
|
+
},
|
|
11940
|
+
homepage: "https://github.com/hasna/connectors#readme",
|
|
11941
|
+
bugs: {
|
|
11942
|
+
url: "https://github.com/hasna/connectors/issues"
|
|
11943
|
+
}
|
|
11944
|
+
};
|
|
11945
|
+
|
|
11946
|
+
// src/cli/index.tsx
|
|
11947
|
+
init_llm();
|
|
11948
|
+
init_jobs();
|
|
11949
|
+
init_workflows();
|
|
11950
|
+
init_scheduler();
|
|
11951
|
+
init_workflow_runner();
|
|
11952
|
+
init_database();
|
|
10492
11953
|
|
|
10493
11954
|
// src/cli/components/App.tsx
|
|
10494
11955
|
import { useState as useState7 } from "react";
|
|
@@ -11962,9 +13423,9 @@ function App({ initialConnectors, overwrite = false }) {
|
|
|
11962
13423
|
init_registry();
|
|
11963
13424
|
init_installer();
|
|
11964
13425
|
init_auth();
|
|
11965
|
-
import { readdirSync as readdirSync4, existsSync as
|
|
11966
|
-
import { homedir as
|
|
11967
|
-
import { join as
|
|
13426
|
+
import { readdirSync as readdirSync4, existsSync as existsSync8, statSync as statSync4, readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdirSync as mkdirSync7 } from "fs";
|
|
13427
|
+
import { homedir as homedir7 } from "os";
|
|
13428
|
+
import { join as join9, relative } from "path";
|
|
11968
13429
|
|
|
11969
13430
|
// src/lib/test-endpoints.ts
|
|
11970
13431
|
var TEST_ENDPOINTS = {
|
|
@@ -12165,17 +13626,17 @@ var TEST_ENDPOINTS = {
|
|
|
12165
13626
|
import { createInterface } from "readline";
|
|
12166
13627
|
|
|
12167
13628
|
// src/lib/runner.ts
|
|
12168
|
-
import { existsSync as
|
|
12169
|
-
import { join as
|
|
13629
|
+
import { existsSync as existsSync6 } from "fs";
|
|
13630
|
+
import { join as join7, dirname as dirname3 } from "path";
|
|
12170
13631
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
12171
|
-
import { spawn } from "child_process";
|
|
13632
|
+
import { spawn as spawn3 } from "child_process";
|
|
12172
13633
|
var __dirname3 = dirname3(fileURLToPath3(import.meta.url));
|
|
12173
13634
|
function resolveConnectorsDir2() {
|
|
12174
|
-
const fromBin =
|
|
12175
|
-
if (
|
|
13635
|
+
const fromBin = join7(__dirname3, "..", "connectors");
|
|
13636
|
+
if (existsSync6(fromBin))
|
|
12176
13637
|
return fromBin;
|
|
12177
|
-
const fromSrc =
|
|
12178
|
-
if (
|
|
13638
|
+
const fromSrc = join7(__dirname3, "..", "..", "connectors");
|
|
13639
|
+
if (existsSync6(fromSrc))
|
|
12179
13640
|
return fromSrc;
|
|
12180
13641
|
return fromBin;
|
|
12181
13642
|
}
|
|
@@ -12215,13 +13676,13 @@ function buildEnvWithCredentials(connectorName, baseEnv) {
|
|
|
12215
13676
|
}
|
|
12216
13677
|
function getConnectorCliPath(name) {
|
|
12217
13678
|
const safeName = name.replace(/[^a-z0-9-]/g, "");
|
|
12218
|
-
const connectorDir =
|
|
12219
|
-
const cliPath =
|
|
12220
|
-
if (
|
|
13679
|
+
const connectorDir = join7(CONNECTORS_DIR2, `connect-${safeName}`);
|
|
13680
|
+
const cliPath = join7(connectorDir, "src", "cli", "index.ts");
|
|
13681
|
+
if (existsSync6(cliPath))
|
|
12221
13682
|
return cliPath;
|
|
12222
13683
|
return null;
|
|
12223
13684
|
}
|
|
12224
|
-
function
|
|
13685
|
+
function runConnectorCommand2(name, args, timeoutMs = 30000) {
|
|
12225
13686
|
const cliPath = getConnectorCliPath(name);
|
|
12226
13687
|
if (!cliPath) {
|
|
12227
13688
|
return Promise.resolve({
|
|
@@ -12232,7 +13693,7 @@ function runConnectorCommand(name, args, timeoutMs = 30000) {
|
|
|
12232
13693
|
});
|
|
12233
13694
|
}
|
|
12234
13695
|
return new Promise((resolve) => {
|
|
12235
|
-
const proc =
|
|
13696
|
+
const proc = spawn3("bun", ["run", cliPath, ...args], {
|
|
12236
13697
|
timeout: timeoutMs,
|
|
12237
13698
|
env: buildEnvWithCredentials(name, process.env),
|
|
12238
13699
|
stdio: ["pipe", "pipe", "pipe"]
|
|
@@ -12268,7 +13729,7 @@ async function getConnectorOperations(name) {
|
|
|
12268
13729
|
if (!cliPath) {
|
|
12269
13730
|
return { commands: [], helpText: "", hasCli: false };
|
|
12270
13731
|
}
|
|
12271
|
-
const result = await
|
|
13732
|
+
const result = await runConnectorCommand2(name, ["--help"]);
|
|
12272
13733
|
const helpText = result.stdout || result.stderr;
|
|
12273
13734
|
const commands = [];
|
|
12274
13735
|
const lines = helpText.split(`
|
|
@@ -12292,7 +13753,7 @@ async function getConnectorOperations(name) {
|
|
|
12292
13753
|
return { commands, helpText, hasCli: true };
|
|
12293
13754
|
}
|
|
12294
13755
|
async function getConnectorCommandHelp(name, command) {
|
|
12295
|
-
const result = await
|
|
13756
|
+
const result = await runConnectorCommand2(name, [command, "--help"]);
|
|
12296
13757
|
return result.stdout || result.stderr;
|
|
12297
13758
|
}
|
|
12298
13759
|
|
|
@@ -12309,7 +13770,7 @@ var PRESETS = {
|
|
|
12309
13770
|
commerce: { description: "Commerce and finance", connectors: ["stripe", "shopify", "revolut", "mercury", "pandadoc"] }
|
|
12310
13771
|
};
|
|
12311
13772
|
var program2 = new Command;
|
|
12312
|
-
program2.name("connectors").description("Install API connectors for your project").version(
|
|
13773
|
+
program2.name("connectors").description("Install API connectors for your project").version(package_default.version).enablePositionalOptions();
|
|
12313
13774
|
program2.command("interactive", { isDefault: true }).alias("i").description("Interactive connector browser").action(() => {
|
|
12314
13775
|
if (!isTTY) {
|
|
12315
13776
|
console.log(`Non-interactive environment detected. Use a subcommand:
|
|
@@ -12330,8 +13791,8 @@ Run 'connectors --help' for full usage.`);
|
|
|
12330
13791
|
function listFilesRecursive(dir, base = dir) {
|
|
12331
13792
|
const files = [];
|
|
12332
13793
|
for (const entry of readdirSync4(dir)) {
|
|
12333
|
-
const fullPath =
|
|
12334
|
-
if (
|
|
13794
|
+
const fullPath = join9(dir, entry);
|
|
13795
|
+
if (statSync4(fullPath).isDirectory()) {
|
|
12335
13796
|
files.push(...listFilesRecursive(fullPath, base));
|
|
12336
13797
|
} else {
|
|
12337
13798
|
files.push(relative(base, fullPath));
|
|
@@ -12339,7 +13800,7 @@ function listFilesRecursive(dir, base = dir) {
|
|
|
12339
13800
|
}
|
|
12340
13801
|
return files;
|
|
12341
13802
|
}
|
|
12342
|
-
program2.command("install").alias("add").argument("[connectors...]", "Connectors to
|
|
13803
|
+
program2.command("install").alias("add").argument("[connectors...]", "Connectors to install").option("-o, --overwrite", "Overwrite existing connectors", false).option("-d, --dry-run", "Preview what would be installed without making changes", false).option("-c, --category <category>", "Install all connectors in a category").option("--preset <preset>", "Install a preset bundle (e.g. ai, fullstack, google)").option("--json", "Output results as JSON", false).description("Install one or more connectors").action((connectors, options) => {
|
|
12343
13804
|
if (options.category) {
|
|
12344
13805
|
const category = CATEGORIES.find((c) => c.toLowerCase() === options.category.toLowerCase());
|
|
12345
13806
|
if (!category) {
|
|
@@ -12352,7 +13813,8 @@ program2.command("install").alias("add").argument("[connectors...]", "Connectors
|
|
|
12352
13813
|
process.exit(1);
|
|
12353
13814
|
return;
|
|
12354
13815
|
}
|
|
12355
|
-
|
|
13816
|
+
const categoryConnectors = getConnectorsByCategory(category).map((c) => c.name);
|
|
13817
|
+
connectors.push(...categoryConnectors);
|
|
12356
13818
|
}
|
|
12357
13819
|
if (options.preset) {
|
|
12358
13820
|
const preset = PRESETS[options.preset.toLowerCase()];
|
|
@@ -12370,25 +13832,133 @@ program2.command("install").alias("add").argument("[connectors...]", "Connectors
|
|
|
12370
13832
|
}
|
|
12371
13833
|
if (connectors.length === 0) {
|
|
12372
13834
|
if (!isTTY) {
|
|
12373
|
-
console.error("Error: specify connectors to
|
|
13835
|
+
console.error("Error: specify connectors to install. Example: connectors install figma stripe");
|
|
12374
13836
|
process.exit(1);
|
|
12375
13837
|
}
|
|
12376
13838
|
render(/* @__PURE__ */ jsxDEV7(App, {}, undefined, false, undefined, this));
|
|
12377
13839
|
return;
|
|
12378
13840
|
}
|
|
12379
|
-
|
|
13841
|
+
if (options.dryRun) {
|
|
13842
|
+
const installed = getInstalledConnectors();
|
|
13843
|
+
const destDir = join9(process.cwd(), ".connectors");
|
|
13844
|
+
const actions = [];
|
|
13845
|
+
for (const name of connectors) {
|
|
13846
|
+
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
13847
|
+
actions.push({ connector: name, action: "error", reason: `Invalid connector name '${name}'` });
|
|
13848
|
+
continue;
|
|
13849
|
+
}
|
|
13850
|
+
const meta = getConnector(name);
|
|
13851
|
+
if (!meta) {
|
|
13852
|
+
actions.push({ connector: name, action: "error", reason: `Connector '${name}' not found in registry` });
|
|
13853
|
+
continue;
|
|
13854
|
+
}
|
|
13855
|
+
if (!connectorExists(name)) {
|
|
13856
|
+
actions.push({ connector: name, action: "error", reason: `Connector '${name}' source files not found` });
|
|
13857
|
+
continue;
|
|
13858
|
+
}
|
|
13859
|
+
const connectorDirName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
13860
|
+
const sourcePath = getConnectorPath(name);
|
|
13861
|
+
const destPath = join9(destDir, connectorDirName);
|
|
13862
|
+
const alreadyInstalled = installed.includes(name);
|
|
13863
|
+
const files = listFilesRecursive(sourcePath);
|
|
13864
|
+
const importLine = `export * as ${name} from './${connectorDirName}/src/index.js';`;
|
|
13865
|
+
if (alreadyInstalled && !options.overwrite) {
|
|
13866
|
+
actions.push({
|
|
13867
|
+
connector: name,
|
|
13868
|
+
action: "skip",
|
|
13869
|
+
reason: "Already installed. Use --overwrite to replace.",
|
|
13870
|
+
sourcePath,
|
|
13871
|
+
destPath
|
|
13872
|
+
});
|
|
13873
|
+
} else {
|
|
13874
|
+
actions.push({
|
|
13875
|
+
connector: name,
|
|
13876
|
+
action: alreadyInstalled ? "overwrite" : "install",
|
|
13877
|
+
sourcePath,
|
|
13878
|
+
destPath,
|
|
13879
|
+
files,
|
|
13880
|
+
importLine
|
|
13881
|
+
});
|
|
13882
|
+
}
|
|
13883
|
+
}
|
|
13884
|
+
if (options.json) {
|
|
13885
|
+
console.log(JSON.stringify({ dryRun: true, actions }, null, 2));
|
|
13886
|
+
process.exit(actions.every((a) => a.action !== "error") ? 0 : 1);
|
|
13887
|
+
return;
|
|
13888
|
+
}
|
|
13889
|
+
console.log(chalk2.bold(`
|
|
13890
|
+
Dry run \u2014 no changes will be made
|
|
13891
|
+
`));
|
|
13892
|
+
for (const a of actions) {
|
|
13893
|
+
if (a.action === "error") {
|
|
13894
|
+
console.log(chalk2.red(` \u2717 ${a.connector}: ${a.reason}`));
|
|
13895
|
+
continue;
|
|
13896
|
+
}
|
|
13897
|
+
if (a.action === "skip") {
|
|
13898
|
+
console.log(chalk2.yellow(` \u2298 ${a.connector}: ${a.reason}`));
|
|
13899
|
+
continue;
|
|
13900
|
+
}
|
|
13901
|
+
const actionLabel = a.action === "overwrite" ? chalk2.yellow("overwrite") : chalk2.green("install");
|
|
13902
|
+
console.log(` ${actionLabel} ${chalk2.cyan(a.connector)}`);
|
|
13903
|
+
console.log(chalk2.dim(` source: ${a.sourcePath}`));
|
|
13904
|
+
console.log(chalk2.dim(` dest: ${a.destPath}`));
|
|
13905
|
+
if (a.files && a.files.length > 0) {
|
|
13906
|
+
console.log(chalk2.dim(` files (${a.files.length}):`));
|
|
13907
|
+
for (const f of a.files) {
|
|
13908
|
+
console.log(chalk2.dim(` ${f}`));
|
|
13909
|
+
}
|
|
13910
|
+
}
|
|
13911
|
+
if (a.importLine) {
|
|
13912
|
+
console.log(` ${chalk2.dim("index.ts:")} ${a.importLine}`);
|
|
13913
|
+
}
|
|
13914
|
+
console.log();
|
|
13915
|
+
}
|
|
13916
|
+
const installCount = actions.filter((a) => a.action === "install").length;
|
|
13917
|
+
const overwriteCount = actions.filter((a) => a.action === "overwrite").length;
|
|
13918
|
+
const skipCount = actions.filter((a) => a.action === "skip").length;
|
|
13919
|
+
const errorCount = actions.filter((a) => a.action === "error").length;
|
|
13920
|
+
const parts = [];
|
|
13921
|
+
if (installCount)
|
|
13922
|
+
parts.push(chalk2.green(`${installCount} to install`));
|
|
13923
|
+
if (overwriteCount)
|
|
13924
|
+
parts.push(chalk2.yellow(`${overwriteCount} to overwrite`));
|
|
13925
|
+
if (skipCount)
|
|
13926
|
+
parts.push(chalk2.yellow(`${skipCount} skipped`));
|
|
13927
|
+
if (errorCount)
|
|
13928
|
+
parts.push(chalk2.red(`${errorCount} failed`));
|
|
13929
|
+
console.log(` ${chalk2.bold("Summary:")} ${parts.join(", ")}`);
|
|
13930
|
+
console.log(chalk2.dim(`
|
|
13931
|
+
Run without --dry-run to apply.
|
|
13932
|
+
`));
|
|
13933
|
+
process.exit(errorCount > 0 ? 1 : 0);
|
|
13934
|
+
return;
|
|
13935
|
+
}
|
|
13936
|
+
const results = connectors.map((name) => installConnector(name, { overwrite: options.overwrite }));
|
|
12380
13937
|
if (options.json) {
|
|
12381
13938
|
console.log(JSON.stringify(results, null, 2));
|
|
12382
13939
|
process.exit(results.every((r) => r.success) ? 0 : 1);
|
|
12383
13940
|
return;
|
|
12384
13941
|
}
|
|
13942
|
+
console.log(chalk2.bold(`
|
|
13943
|
+
Installing connectors...
|
|
13944
|
+
`));
|
|
13945
|
+
const succeeded = [];
|
|
12385
13946
|
for (const result of results) {
|
|
12386
13947
|
if (result.success) {
|
|
12387
|
-
console.log(chalk2.green(`\u2713 ${result.connector}`)
|
|
13948
|
+
console.log(chalk2.green(`\u2713 ${result.connector}`));
|
|
13949
|
+
succeeded.push(result.connector);
|
|
12388
13950
|
} else {
|
|
12389
13951
|
console.log(chalk2.red(`\u2717 ${result.connector}: ${result.error}`));
|
|
12390
13952
|
}
|
|
12391
13953
|
}
|
|
13954
|
+
if (succeeded.length > 0) {
|
|
13955
|
+
console.log(chalk2.bold(`
|
|
13956
|
+
Next steps:`));
|
|
13957
|
+
const importNames = succeeded.join(", ");
|
|
13958
|
+
console.log(chalk2.dim(` 1. Import: `) + `import { ${importNames} } from './.connectors'`);
|
|
13959
|
+
console.log(chalk2.dim(` 2. Set key: `) + `connectors docs ${succeeded[0]}` + chalk2.dim(` (see env vars)`));
|
|
13960
|
+
console.log(chalk2.dim(` 3. Explore: `) + `connectors serve` + chalk2.dim(` (dashboard for auth management)`));
|
|
13961
|
+
}
|
|
12392
13962
|
process.exit(results.every((r) => r.success) ? 0 : 1);
|
|
12393
13963
|
});
|
|
12394
13964
|
program2.command("list").alias("ls").option("-c, --category <category>", "Filter by category").option("-a, --all", "Show all available connectors", false).option("-i, --installed", "Show only installed connectors", false).option("-b, --brief", "Output only connector names", false).option("--json", "Output as JSON", false).description("List available or installed connectors").action((options) => {
|
|
@@ -12542,10 +14112,18 @@ Available connectors (${CONNECTORS.length}):
|
|
|
12542
14112
|
console.log();
|
|
12543
14113
|
}
|
|
12544
14114
|
});
|
|
12545
|
-
program2.command("search").argument("<query>", "Search term").option("--json", "Output as JSON", false).description("Search for connectors").action((query, options) => {
|
|
12546
|
-
const
|
|
14115
|
+
program2.command("search").argument("<query>", "Search term").option("--json", "Output as JSON", false).option("--limit <n>", "Max results", "20").description("Search for connectors (ranked with fuzzy matching)").action((query, options) => {
|
|
14116
|
+
const installed = getInstalledConnectors();
|
|
14117
|
+
const { getPromotedConnectors: getPromotedConnectors2 } = (init_promotions(), __toCommonJS(exports_promotions));
|
|
14118
|
+
const { getUsageMap: getUsageMap2 } = (init_usage(), __toCommonJS(exports_usage));
|
|
14119
|
+
const results = searchConnectors(query, {
|
|
14120
|
+
installed,
|
|
14121
|
+
promoted: getPromotedConnectors2(),
|
|
14122
|
+
usage: getUsageMap2(),
|
|
14123
|
+
limit: parseInt(options.limit)
|
|
14124
|
+
});
|
|
12547
14125
|
if (options.json) {
|
|
12548
|
-
console.log(JSON.stringify(results));
|
|
14126
|
+
console.log(JSON.stringify(results.map((c) => ({ name: c.name, displayName: c.displayName, version: c.version, category: c.category, description: c.description, score: c.score, badges: c.badges, matchReasons: c.matchReasons }))));
|
|
12549
14127
|
return;
|
|
12550
14128
|
}
|
|
12551
14129
|
if (results.length === 0) {
|
|
@@ -12555,10 +14133,12 @@ program2.command("search").argument("<query>", "Search term").option("--json", "
|
|
|
12555
14133
|
console.log(chalk2.bold(`
|
|
12556
14134
|
Found ${results.length} connector(s):
|
|
12557
14135
|
`));
|
|
12558
|
-
console.log(` ${chalk2.dim("Name".padEnd(
|
|
12559
|
-
console.log(chalk2.dim(` ${"\u2500".repeat(
|
|
14136
|
+
console.log(` ${chalk2.dim("Name".padEnd(22))}${chalk2.dim("Score".padEnd(7))}${chalk2.dim("Category".padEnd(20))}${chalk2.dim("Description")}`);
|
|
14137
|
+
console.log(chalk2.dim(` ${"\u2500".repeat(75)}`));
|
|
12560
14138
|
for (const c of results) {
|
|
12561
|
-
|
|
14139
|
+
const badges = c.badges.map((b) => b === "installed" ? chalk2.green("[INS]") : b === "hot" ? chalk2.red("[HOT]") : b === "promoted" ? chalk2.yellow("[PRO]") : "").join(" ");
|
|
14140
|
+
const badgeStr = badges ? " " + badges : "";
|
|
14141
|
+
console.log(` ${chalk2.cyan(c.name.padEnd(22))}${String(c.score).padEnd(7)}${chalk2.dim(c.category.padEnd(20))}${c.description}${badgeStr}`);
|
|
12562
14142
|
}
|
|
12563
14143
|
});
|
|
12564
14144
|
program2.command("info").argument("<connector>", "Connector name").option("--json", "Output as JSON", false).description("Show detailed info about a connector").action((connector, options) => {
|
|
@@ -12792,17 +14372,17 @@ Updating ${toUpdate.length} connector(s)...
|
|
|
12792
14372
|
});
|
|
12793
14373
|
program2.command("status").option("--json", "Output as JSON", false).description("Show auth status of all configured connectors (project + global)").action((options) => {
|
|
12794
14374
|
const installed = getInstalledConnectors();
|
|
12795
|
-
const configDir =
|
|
14375
|
+
const configDir = join9(homedir7(), ".connectors");
|
|
12796
14376
|
const seen = new Set;
|
|
12797
14377
|
const allStatuses = [];
|
|
12798
14378
|
function buildStatusEntry(name, source) {
|
|
12799
14379
|
const auth = getAuthStatus(name);
|
|
12800
14380
|
const connectorName = name.startsWith("connect-") ? name : `connect-${name}`;
|
|
12801
|
-
const currentProfileFile =
|
|
14381
|
+
const currentProfileFile = join9(configDir, connectorName, "current_profile");
|
|
12802
14382
|
let profile = "default";
|
|
12803
|
-
if (
|
|
14383
|
+
if (existsSync8(currentProfileFile)) {
|
|
12804
14384
|
try {
|
|
12805
|
-
profile =
|
|
14385
|
+
profile = readFileSync6(currentProfileFile, "utf-8").trim() || "default";
|
|
12806
14386
|
} catch {}
|
|
12807
14387
|
}
|
|
12808
14388
|
let expiryLabel = null;
|
|
@@ -12838,13 +14418,13 @@ program2.command("status").option("--json", "Output as JSON", false).description
|
|
|
12838
14418
|
seen.add(name);
|
|
12839
14419
|
allStatuses.push(buildStatusEntry(name, "project"));
|
|
12840
14420
|
}
|
|
12841
|
-
if (
|
|
14421
|
+
if (existsSync8(configDir)) {
|
|
12842
14422
|
try {
|
|
12843
14423
|
const globalDirs = readdirSync4(configDir).filter((f) => {
|
|
12844
14424
|
if (!f.startsWith("connect-"))
|
|
12845
14425
|
return false;
|
|
12846
14426
|
try {
|
|
12847
|
-
return
|
|
14427
|
+
return statSync4(join9(configDir, f)).isDirectory();
|
|
12848
14428
|
} catch {
|
|
12849
14429
|
return false;
|
|
12850
14430
|
}
|
|
@@ -13118,7 +14698,7 @@ Open this URL to authenticate:
|
|
|
13118
14698
|
return;
|
|
13119
14699
|
}
|
|
13120
14700
|
if (options.key) {
|
|
13121
|
-
saveApiKey(connector, options.key, options.field || undefined);
|
|
14701
|
+
await saveApiKey(connector, options.key, options.field || undefined);
|
|
13122
14702
|
const statusAfter2 = getAuthStatus(connector);
|
|
13123
14703
|
if (options.json) {
|
|
13124
14704
|
console.log(JSON.stringify({
|
|
@@ -13192,7 +14772,7 @@ Open this URL to authenticate:
|
|
|
13192
14772
|
process.exit(1);
|
|
13193
14773
|
return;
|
|
13194
14774
|
}
|
|
13195
|
-
saveApiKey(connector, key.trim(), options.field || undefined);
|
|
14775
|
+
await saveApiKey(connector, key.trim(), options.field || undefined);
|
|
13196
14776
|
const statusAfter = getAuthStatus(connector);
|
|
13197
14777
|
console.log(chalk2.green(`
|
|
13198
14778
|
\u2713 API key saved for ${meta.displayName}`));
|
|
@@ -13209,15 +14789,15 @@ program2.command("init").option("--json", "Output presets and suggestions as JSO
|
|
|
13209
14789
|
{ key: "commerce", emoji: "\uD83D\uDCB3", label: "Commerce", connectors: ["stripe", "shopify", "paypal", "revolut", "mercury"], description: "Commerce and finance" },
|
|
13210
14790
|
{ key: "google", emoji: "\uD83D\uDCC1", label: "Google Workspace", connectors: ["gmail", "googledrive", "googlecalendar", "googledocs", "googlesheets"], description: "Google Workspace suite" }
|
|
13211
14791
|
];
|
|
13212
|
-
const connectorsHome =
|
|
14792
|
+
const connectorsHome = join9(homedir7(), ".connectors");
|
|
13213
14793
|
let configuredCount = 0;
|
|
13214
14794
|
const configuredNames = [];
|
|
13215
14795
|
try {
|
|
13216
|
-
if (
|
|
13217
|
-
const entries = readdirSync4(connectorsHome).filter((e) => e.startsWith("connect-") &&
|
|
14796
|
+
if (existsSync8(connectorsHome)) {
|
|
14797
|
+
const entries = readdirSync4(connectorsHome).filter((e) => e.startsWith("connect-") && statSync4(join9(connectorsHome, e)).isDirectory());
|
|
13218
14798
|
for (const entry of entries) {
|
|
13219
|
-
const profilesDir =
|
|
13220
|
-
if (
|
|
14799
|
+
const profilesDir = join9(connectorsHome, entry, "profiles");
|
|
14800
|
+
if (existsSync8(profilesDir)) {
|
|
13221
14801
|
configuredCount++;
|
|
13222
14802
|
configuredNames.push(entry.replace(/^connect-/, ""));
|
|
13223
14803
|
}
|
|
@@ -13315,44 +14895,44 @@ function redactSecrets(obj) {
|
|
|
13315
14895
|
return obj;
|
|
13316
14896
|
}
|
|
13317
14897
|
program2.command("export").option("-o, --output <file>", "Write to file instead of stdout").option("--include-secrets", "Include secrets in plaintext (dangerous \u2014 use only for backup/restore)").description("Export all connector credentials as JSON backup").action((options) => {
|
|
13318
|
-
const connectDir =
|
|
14898
|
+
const connectDir = join9(homedir7(), ".connectors");
|
|
13319
14899
|
const result = {};
|
|
13320
|
-
if (
|
|
14900
|
+
if (existsSync8(connectDir)) {
|
|
13321
14901
|
for (const entry of readdirSync4(connectDir)) {
|
|
13322
|
-
const entryPath =
|
|
13323
|
-
if (!
|
|
14902
|
+
const entryPath = join9(connectDir, entry);
|
|
14903
|
+
if (!statSync4(entryPath).isDirectory() || !entry.startsWith("connect-"))
|
|
13324
14904
|
continue;
|
|
13325
14905
|
const connectorName = entry.replace(/^connect-/, "");
|
|
13326
14906
|
let credentials = undefined;
|
|
13327
|
-
const credentialsPath =
|
|
13328
|
-
if (
|
|
14907
|
+
const credentialsPath = join9(entryPath, "credentials.json");
|
|
14908
|
+
if (existsSync8(credentialsPath)) {
|
|
13329
14909
|
try {
|
|
13330
|
-
credentials = JSON.parse(
|
|
14910
|
+
credentials = JSON.parse(readFileSync6(credentialsPath, "utf-8"));
|
|
13331
14911
|
} catch {}
|
|
13332
14912
|
}
|
|
13333
|
-
const profilesDir =
|
|
13334
|
-
if (!
|
|
14913
|
+
const profilesDir = join9(entryPath, "profiles");
|
|
14914
|
+
if (!existsSync8(profilesDir) && !credentials)
|
|
13335
14915
|
continue;
|
|
13336
14916
|
const profiles = {};
|
|
13337
|
-
if (
|
|
14917
|
+
if (existsSync8(profilesDir)) {
|
|
13338
14918
|
for (const pEntry of readdirSync4(profilesDir)) {
|
|
13339
|
-
const pPath =
|
|
13340
|
-
if (
|
|
14919
|
+
const pPath = join9(profilesDir, pEntry);
|
|
14920
|
+
if (statSync4(pPath).isFile() && pEntry.endsWith(".json")) {
|
|
13341
14921
|
try {
|
|
13342
|
-
profiles[pEntry.replace(/\.json$/, "")] = JSON.parse(
|
|
14922
|
+
profiles[pEntry.replace(/\.json$/, "")] = JSON.parse(readFileSync6(pPath, "utf-8"));
|
|
13343
14923
|
} catch {}
|
|
13344
|
-
} else if (
|
|
13345
|
-
const configPath =
|
|
13346
|
-
const tokensPath =
|
|
14924
|
+
} else if (statSync4(pPath).isDirectory()) {
|
|
14925
|
+
const configPath = join9(pPath, "config.json");
|
|
14926
|
+
const tokensPath = join9(pPath, "tokens.json");
|
|
13347
14927
|
let merged = {};
|
|
13348
|
-
if (
|
|
14928
|
+
if (existsSync8(configPath)) {
|
|
13349
14929
|
try {
|
|
13350
|
-
merged = { ...merged, ...JSON.parse(
|
|
14930
|
+
merged = { ...merged, ...JSON.parse(readFileSync6(configPath, "utf-8")) };
|
|
13351
14931
|
} catch {}
|
|
13352
14932
|
}
|
|
13353
|
-
if (
|
|
14933
|
+
if (existsSync8(tokensPath)) {
|
|
13354
14934
|
try {
|
|
13355
|
-
merged = { ...merged, ...JSON.parse(
|
|
14935
|
+
merged = { ...merged, ...JSON.parse(readFileSync6(tokensPath, "utf-8")) };
|
|
13356
14936
|
} catch {}
|
|
13357
14937
|
}
|
|
13358
14938
|
if (Object.keys(merged).length > 0)
|
|
@@ -13373,7 +14953,7 @@ program2.command("export").option("-o, --output <file>", "Write to file instead
|
|
|
13373
14953
|
}
|
|
13374
14954
|
const exportData = JSON.stringify(exportPayload, null, 2);
|
|
13375
14955
|
if (options.output) {
|
|
13376
|
-
|
|
14956
|
+
writeFileSync5(options.output, exportData);
|
|
13377
14957
|
console.log(chalk2.green(`\u2713 Exported to ${options.output}`));
|
|
13378
14958
|
} else {
|
|
13379
14959
|
console.log(exportData);
|
|
@@ -13387,7 +14967,7 @@ program2.command("import").argument("<file>", "JSON backup file to import (use -
|
|
|
13387
14967
|
chunks.push(chunk.toString());
|
|
13388
14968
|
raw = chunks.join("");
|
|
13389
14969
|
} else {
|
|
13390
|
-
if (!
|
|
14970
|
+
if (!existsSync8(file)) {
|
|
13391
14971
|
if (options.json) {
|
|
13392
14972
|
console.log(JSON.stringify({ error: `File not found: ${file}` }));
|
|
13393
14973
|
} else {
|
|
@@ -13396,7 +14976,7 @@ program2.command("import").argument("<file>", "JSON backup file to import (use -
|
|
|
13396
14976
|
process.exit(1);
|
|
13397
14977
|
return;
|
|
13398
14978
|
}
|
|
13399
|
-
raw =
|
|
14979
|
+
raw = readFileSync6(file, "utf-8");
|
|
13400
14980
|
}
|
|
13401
14981
|
let data;
|
|
13402
14982
|
try {
|
|
@@ -13419,25 +14999,25 @@ program2.command("import").argument("<file>", "JSON backup file to import (use -
|
|
|
13419
14999
|
process.exit(1);
|
|
13420
15000
|
return;
|
|
13421
15001
|
}
|
|
13422
|
-
const connectDir =
|
|
15002
|
+
const connectDir = join9(homedir7(), ".connectors");
|
|
13423
15003
|
let imported = 0;
|
|
13424
15004
|
for (const [connectorName, connData] of Object.entries(data.connectors)) {
|
|
13425
15005
|
if (!/^[a-z0-9-]+$/.test(connectorName))
|
|
13426
15006
|
continue;
|
|
13427
|
-
const connectorDir =
|
|
15007
|
+
const connectorDir = join9(connectDir, `connect-${connectorName}`);
|
|
13428
15008
|
if (connData.credentials && typeof connData.credentials === "object") {
|
|
13429
|
-
|
|
13430
|
-
|
|
15009
|
+
mkdirSync7(connectorDir, { recursive: true });
|
|
15010
|
+
writeFileSync5(join9(connectorDir, "credentials.json"), JSON.stringify(connData.credentials, null, 2));
|
|
13431
15011
|
imported++;
|
|
13432
15012
|
}
|
|
13433
15013
|
if (!connData.profiles || typeof connData.profiles !== "object")
|
|
13434
15014
|
continue;
|
|
13435
|
-
const profilesDir =
|
|
15015
|
+
const profilesDir = join9(connectorDir, "profiles");
|
|
13436
15016
|
for (const [profileName, config] of Object.entries(connData.profiles)) {
|
|
13437
15017
|
if (!config || typeof config !== "object")
|
|
13438
15018
|
continue;
|
|
13439
|
-
|
|
13440
|
-
|
|
15019
|
+
mkdirSync7(profilesDir, { recursive: true });
|
|
15020
|
+
writeFileSync5(join9(profilesDir, `${profileName}.json`), JSON.stringify(config, null, 2));
|
|
13441
15021
|
imported++;
|
|
13442
15022
|
}
|
|
13443
15023
|
}
|
|
@@ -13448,9 +15028,9 @@ program2.command("import").argument("<file>", "JSON backup file to import (use -
|
|
|
13448
15028
|
}
|
|
13449
15029
|
});
|
|
13450
15030
|
program2.command("auth-import").option("--json", "Output as JSON", false).option("-d, --dry-run", "Preview what would be imported without copying", false).option("--force", "Overwrite existing files in ~/.connectors/", false).description("Migrate auth tokens from ~/.connect/ to ~/.connectors/").action((options) => {
|
|
13451
|
-
const oldBase =
|
|
13452
|
-
const newBase =
|
|
13453
|
-
if (!
|
|
15031
|
+
const oldBase = join9(homedir7(), ".connect");
|
|
15032
|
+
const newBase = join9(homedir7(), ".connectors");
|
|
15033
|
+
if (!existsSync8(oldBase)) {
|
|
13454
15034
|
if (options.json) {
|
|
13455
15035
|
console.log(JSON.stringify({ imported: [], skipped: [], error: null, message: "No ~/.connect/ directory found" }));
|
|
13456
15036
|
} else {
|
|
@@ -13462,7 +15042,7 @@ program2.command("auth-import").option("--json", "Output as JSON", false).option
|
|
|
13462
15042
|
if (!name.startsWith("connect-"))
|
|
13463
15043
|
return false;
|
|
13464
15044
|
try {
|
|
13465
|
-
return
|
|
15045
|
+
return statSync4(join9(oldBase, name)).isDirectory();
|
|
13466
15046
|
} catch {
|
|
13467
15047
|
return false;
|
|
13468
15048
|
}
|
|
@@ -13478,8 +15058,8 @@ program2.command("auth-import").option("--json", "Output as JSON", false).option
|
|
|
13478
15058
|
const imported = [];
|
|
13479
15059
|
const skipped = [];
|
|
13480
15060
|
for (const dirName of entries) {
|
|
13481
|
-
const oldDir =
|
|
13482
|
-
const newDir =
|
|
15061
|
+
const oldDir = join9(oldBase, dirName);
|
|
15062
|
+
const newDir = join9(newBase, dirName);
|
|
13483
15063
|
const connectorName = dirName.replace(/^connect-/, "");
|
|
13484
15064
|
const allFiles = listFilesRecursive(oldDir);
|
|
13485
15065
|
const authFiles = allFiles.filter((f) => {
|
|
@@ -13490,17 +15070,17 @@ program2.command("auth-import").option("--json", "Output as JSON", false).option
|
|
|
13490
15070
|
const copiedFiles = [];
|
|
13491
15071
|
const skippedFiles = [];
|
|
13492
15072
|
for (const relFile of authFiles) {
|
|
13493
|
-
const srcPath =
|
|
13494
|
-
const destPath =
|
|
13495
|
-
if (
|
|
15073
|
+
const srcPath = join9(oldDir, relFile);
|
|
15074
|
+
const destPath = join9(newDir, relFile);
|
|
15075
|
+
if (existsSync8(destPath) && !options.force) {
|
|
13496
15076
|
skippedFiles.push(relFile);
|
|
13497
15077
|
continue;
|
|
13498
15078
|
}
|
|
13499
15079
|
if (!options.dryRun) {
|
|
13500
|
-
const parentDir =
|
|
13501
|
-
|
|
13502
|
-
const content =
|
|
13503
|
-
|
|
15080
|
+
const parentDir = join9(destPath, "..");
|
|
15081
|
+
mkdirSync7(parentDir, { recursive: true });
|
|
15082
|
+
const content = readFileSync6(srcPath);
|
|
15083
|
+
writeFileSync5(destPath, content);
|
|
13504
15084
|
}
|
|
13505
15085
|
copiedFiles.push(relFile);
|
|
13506
15086
|
}
|
|
@@ -13745,7 +15325,7 @@ program2.command("env").option("-o, --output <file>", "Write to file instead of
|
|
|
13745
15325
|
`) + `
|
|
13746
15326
|
`;
|
|
13747
15327
|
if (options.output) {
|
|
13748
|
-
|
|
15328
|
+
writeFileSync5(options.output, output);
|
|
13749
15329
|
console.log(chalk2.green(`\u2713 Written to ${options.output} (${vars.length} variables)`));
|
|
13750
15330
|
} else {
|
|
13751
15331
|
console.log(output);
|
|
@@ -13773,7 +15353,7 @@ Available presets:
|
|
|
13773
15353
|
`));
|
|
13774
15354
|
});
|
|
13775
15355
|
program2.command("whoami").option("--json", "Output as JSON", false).description("Show current setup: config dir, installed connectors, auth status").action((options) => {
|
|
13776
|
-
const configDir =
|
|
15356
|
+
const configDir = join9(homedir7(), ".connectors");
|
|
13777
15357
|
const installed = getInstalledConnectors();
|
|
13778
15358
|
const version = "0.3.1";
|
|
13779
15359
|
let configured = 0;
|
|
@@ -13787,23 +15367,23 @@ program2.command("whoami").option("--json", "Output as JSON", false).description
|
|
|
13787
15367
|
configured++;
|
|
13788
15368
|
else
|
|
13789
15369
|
unconfigured++;
|
|
13790
|
-
const connectorConfigDir =
|
|
13791
|
-
const currentProfileFile =
|
|
15370
|
+
const connectorConfigDir = join9(configDir, name.startsWith("connect-") ? name : `connect-${name}`);
|
|
15371
|
+
const currentProfileFile = join9(connectorConfigDir, "current_profile");
|
|
13792
15372
|
let profile = "default";
|
|
13793
|
-
if (
|
|
15373
|
+
if (existsSync8(currentProfileFile)) {
|
|
13794
15374
|
try {
|
|
13795
|
-
profile =
|
|
15375
|
+
profile = readFileSync6(currentProfileFile, "utf-8").trim() || "default";
|
|
13796
15376
|
} catch {}
|
|
13797
15377
|
}
|
|
13798
15378
|
connectorDetails.push({ name, configured: auth.configured, authType: auth.type, profile, source: "project" });
|
|
13799
15379
|
}
|
|
13800
|
-
if (
|
|
15380
|
+
if (existsSync8(configDir)) {
|
|
13801
15381
|
try {
|
|
13802
15382
|
const globalDirs = readdirSync4(configDir).filter((f) => {
|
|
13803
15383
|
if (!f.startsWith("connect-"))
|
|
13804
15384
|
return false;
|
|
13805
15385
|
try {
|
|
13806
|
-
return
|
|
15386
|
+
return statSync4(join9(configDir, f)).isDirectory();
|
|
13807
15387
|
} catch {
|
|
13808
15388
|
return false;
|
|
13809
15389
|
}
|
|
@@ -13817,11 +15397,11 @@ program2.command("whoami").option("--json", "Output as JSON", false).description
|
|
|
13817
15397
|
continue;
|
|
13818
15398
|
seen.add(name);
|
|
13819
15399
|
configured++;
|
|
13820
|
-
const currentProfileFile =
|
|
15400
|
+
const currentProfileFile = join9(configDir, dir, "current_profile");
|
|
13821
15401
|
let profile = "default";
|
|
13822
|
-
if (
|
|
15402
|
+
if (existsSync8(currentProfileFile)) {
|
|
13823
15403
|
try {
|
|
13824
|
-
profile =
|
|
15404
|
+
profile = readFileSync6(currentProfileFile, "utf-8").trim() || "default";
|
|
13825
15405
|
} catch {}
|
|
13826
15406
|
}
|
|
13827
15407
|
connectorDetails.push({ name, configured: true, authType: auth.type, profile, source: "global" });
|
|
@@ -13832,7 +15412,7 @@ program2.command("whoami").option("--json", "Output as JSON", false).description
|
|
|
13832
15412
|
console.log(JSON.stringify({
|
|
13833
15413
|
version,
|
|
13834
15414
|
configDir,
|
|
13835
|
-
configDirExists:
|
|
15415
|
+
configDirExists: existsSync8(configDir),
|
|
13836
15416
|
installed: installed.length,
|
|
13837
15417
|
configured,
|
|
13838
15418
|
unconfigured,
|
|
@@ -13844,7 +15424,7 @@ program2.command("whoami").option("--json", "Output as JSON", false).description
|
|
|
13844
15424
|
Connectors Setup
|
|
13845
15425
|
`));
|
|
13846
15426
|
console.log(` Version: ${chalk2.cyan(version)}`);
|
|
13847
|
-
console.log(` Config: ${configDir}${
|
|
15427
|
+
console.log(` Config: ${configDir}${existsSync8(configDir) ? "" : chalk2.dim(" (not created yet)")}`);
|
|
13848
15428
|
console.log(` Installed: ${installed.length} connector${installed.length !== 1 ? "s" : ""}`);
|
|
13849
15429
|
console.log(` Configured: ${chalk2.green(String(configured))} ready, ${unconfigured > 0 ? chalk2.red(String(unconfigured)) : chalk2.dim("0")} need auth`);
|
|
13850
15430
|
const projectConnectors = connectorDetails.filter((c) => c.source === "project");
|
|
@@ -13934,18 +15514,18 @@ Testing connector credentials...
|
|
|
13934
15514
|
}
|
|
13935
15515
|
}
|
|
13936
15516
|
if (!apiKey) {
|
|
13937
|
-
const connectorConfigDir =
|
|
15517
|
+
const connectorConfigDir = join9(homedir7(), ".connectors", name.startsWith("connect-") ? name : `connect-${name}`);
|
|
13938
15518
|
let currentProfile = "default";
|
|
13939
|
-
const currentProfileFile =
|
|
13940
|
-
if (
|
|
15519
|
+
const currentProfileFile = join9(connectorConfigDir, "current_profile");
|
|
15520
|
+
if (existsSync8(currentProfileFile)) {
|
|
13941
15521
|
try {
|
|
13942
|
-
currentProfile =
|
|
15522
|
+
currentProfile = readFileSync6(currentProfileFile, "utf-8").trim() || "default";
|
|
13943
15523
|
} catch {}
|
|
13944
15524
|
}
|
|
13945
|
-
const tokensFile =
|
|
13946
|
-
if (
|
|
15525
|
+
const tokensFile = join9(connectorConfigDir, "profiles", currentProfile, "tokens.json");
|
|
15526
|
+
if (existsSync8(tokensFile)) {
|
|
13947
15527
|
try {
|
|
13948
|
-
const tokens = JSON.parse(
|
|
15528
|
+
const tokens = JSON.parse(readFileSync6(tokensFile, "utf-8"));
|
|
13949
15529
|
const isExpired = tokens.expiresAt && Date.now() >= tokens.expiresAt - 60000;
|
|
13950
15530
|
if (isExpired && tokens.refreshToken) {
|
|
13951
15531
|
try {
|
|
@@ -13963,19 +15543,19 @@ Testing connector credentials...
|
|
|
13963
15543
|
} catch {}
|
|
13964
15544
|
}
|
|
13965
15545
|
if (!apiKey) {
|
|
13966
|
-
const profileFile =
|
|
13967
|
-
if (
|
|
15546
|
+
const profileFile = join9(connectorConfigDir, "profiles", `${currentProfile}.json`);
|
|
15547
|
+
if (existsSync8(profileFile)) {
|
|
13968
15548
|
try {
|
|
13969
|
-
const config = JSON.parse(
|
|
15549
|
+
const config = JSON.parse(readFileSync6(profileFile, "utf-8"));
|
|
13970
15550
|
apiKey = Object.values(config).find((v) => typeof v === "string" && v.length > 0);
|
|
13971
15551
|
} catch {}
|
|
13972
15552
|
}
|
|
13973
15553
|
}
|
|
13974
15554
|
if (!apiKey) {
|
|
13975
|
-
const profileDirConfig =
|
|
13976
|
-
if (
|
|
15555
|
+
const profileDirConfig = join9(connectorConfigDir, "profiles", currentProfile, "config.json");
|
|
15556
|
+
if (existsSync8(profileDirConfig)) {
|
|
13977
15557
|
try {
|
|
13978
|
-
const config = JSON.parse(
|
|
15558
|
+
const config = JSON.parse(readFileSync6(profileDirConfig, "utf-8"));
|
|
13979
15559
|
apiKey = Object.values(config).find((v) => typeof v === "string" && v.length > 0);
|
|
13980
15560
|
} catch {}
|
|
13981
15561
|
}
|
|
@@ -14112,7 +15692,7 @@ program2.command("run").description("Execute an API operation on a connector").a
|
|
|
14112
15692
|
console.error(chalk2.yellow(`No command specified. Run ${chalk2.white(`connectors ops ${name}`)} to see available operations.`));
|
|
14113
15693
|
process.exit(1);
|
|
14114
15694
|
}
|
|
14115
|
-
const result = await
|
|
15695
|
+
const result = await runConnectorCommand2(name, args, parseInt(options.timeout));
|
|
14116
15696
|
if (result.stdout) {
|
|
14117
15697
|
console.log(result.stdout);
|
|
14118
15698
|
}
|
|
@@ -14142,7 +15722,7 @@ Setting up ${meta.displayName}...
|
|
|
14142
15722
|
const alreadyInstalled = installed.includes(meta.name);
|
|
14143
15723
|
let installResult;
|
|
14144
15724
|
if (alreadyInstalled && !options.overwrite) {
|
|
14145
|
-
installResult = { success: true, path:
|
|
15725
|
+
installResult = { success: true, path: join9(process.cwd(), ".connectors", `connect-${meta.name}`) };
|
|
14146
15726
|
if (!options.json) {
|
|
14147
15727
|
console.log(` ${chalk2.green("\u2713")} Already installed`);
|
|
14148
15728
|
}
|
|
@@ -14167,7 +15747,7 @@ Setting up ${meta.displayName}...
|
|
|
14167
15747
|
let authConfigured = false;
|
|
14168
15748
|
if (authType === "oauth") {
|
|
14169
15749
|
if (options.key) {
|
|
14170
|
-
saveApiKey(name, options.key, options.field || undefined);
|
|
15750
|
+
await saveApiKey(name, options.key, options.field || undefined);
|
|
14171
15751
|
authConfigured = true;
|
|
14172
15752
|
if (!options.json) {
|
|
14173
15753
|
console.log(` ${chalk2.green("\u2713")} Token saved`);
|
|
@@ -14225,7 +15805,7 @@ Setting up ${meta.displayName}...
|
|
|
14225
15805
|
}
|
|
14226
15806
|
} else {
|
|
14227
15807
|
if (options.key) {
|
|
14228
|
-
saveApiKey(name, options.key, options.field || undefined);
|
|
15808
|
+
await saveApiKey(name, options.key, options.field || undefined);
|
|
14229
15809
|
authConfigured = true;
|
|
14230
15810
|
if (!options.json) {
|
|
14231
15811
|
console.log(` ${chalk2.green("\u2713")} ${authType === "bearer" ? "Bearer token" : "API key"} saved`);
|
|
@@ -14268,4 +15848,299 @@ Setting up ${meta.displayName}...
|
|
|
14268
15848
|
}
|
|
14269
15849
|
process.exit(0);
|
|
14270
15850
|
});
|
|
15851
|
+
program2.command("hot").description("Show top connectors by usage").option("--limit <n>", "Max results", "10").option("--days <n>", "Time window in days", "7").option("--json", "Output as JSON").action((options) => {
|
|
15852
|
+
const { getTopConnectors: getTopConnectors2 } = (init_usage(), __toCommonJS(exports_usage));
|
|
15853
|
+
const { getPromotedConnectors: getPromotedConnectors2 } = (init_promotions(), __toCommonJS(exports_promotions));
|
|
15854
|
+
const top = getTopConnectors2(parseInt(options.limit), parseInt(options.days), getDatabase());
|
|
15855
|
+
const promoted = new Set(getPromotedConnectors2(getDatabase()));
|
|
15856
|
+
if (options.json) {
|
|
15857
|
+
console.log(JSON.stringify(top.map((t) => ({ ...t, promoted: promoted.has(t.connector) }))));
|
|
15858
|
+
return;
|
|
15859
|
+
}
|
|
15860
|
+
if (top.length === 0) {
|
|
15861
|
+
console.log(chalk2.dim("No usage data yet. Use connectors to build up stats."));
|
|
15862
|
+
return;
|
|
15863
|
+
}
|
|
15864
|
+
console.log(chalk2.bold(`
|
|
15865
|
+
Top connectors (last ${options.days} days):
|
|
15866
|
+
`));
|
|
15867
|
+
console.log(` ${chalk2.dim("#".padEnd(4))}${chalk2.dim("Connector".padEnd(22))}${chalk2.dim("Usage".padEnd(8))}${chalk2.dim("Badges")}`);
|
|
15868
|
+
console.log(chalk2.dim(` ${"\u2500".repeat(45)}`));
|
|
15869
|
+
for (let i = 0;i < top.length; i++) {
|
|
15870
|
+
const t = top[i];
|
|
15871
|
+
const badges = [
|
|
15872
|
+
t.count >= 5 ? chalk2.red("[HOT]") : "",
|
|
15873
|
+
promoted.has(t.connector) ? chalk2.yellow("[PRO]") : ""
|
|
15874
|
+
].filter(Boolean).join(" ");
|
|
15875
|
+
console.log(` ${String(i + 1).padEnd(4)}${chalk2.cyan(t.connector.padEnd(22))}${String(t.count).padEnd(8)}${badges}`);
|
|
15876
|
+
}
|
|
15877
|
+
});
|
|
15878
|
+
program2.command("promote").argument("<connector>", "Connector to promote").description("Mark a connector as promoted (boosted in search)").action((connector) => {
|
|
15879
|
+
const meta = getConnector(connector);
|
|
15880
|
+
if (!meta) {
|
|
15881
|
+
console.error(chalk2.red(`Connector '${connector}' not found`));
|
|
15882
|
+
process.exit(1);
|
|
15883
|
+
}
|
|
15884
|
+
const { promoteConnector: promoteConnector2 } = (init_promotions(), __toCommonJS(exports_promotions));
|
|
15885
|
+
promoteConnector2(connector, getDatabase());
|
|
15886
|
+
console.log(chalk2.green("\u2713") + ` ${meta.displayName} promoted \u2014 will rank higher in search`);
|
|
15887
|
+
});
|
|
15888
|
+
program2.command("demote").argument("<connector>", "Connector to demote").description("Remove promotion from a connector").action((connector) => {
|
|
15889
|
+
const { demoteConnector: demoteConnector2 } = (init_promotions(), __toCommonJS(exports_promotions));
|
|
15890
|
+
const removed = demoteConnector2(connector, getDatabase());
|
|
15891
|
+
if (removed)
|
|
15892
|
+
console.log(chalk2.green("\u2713") + ` ${connector} demoted`);
|
|
15893
|
+
else
|
|
15894
|
+
console.log(chalk2.dim(`${connector} was not promoted`));
|
|
15895
|
+
});
|
|
15896
|
+
var jobsCmd = program2.command("jobs").description("Manage scheduled connector jobs");
|
|
15897
|
+
jobsCmd.command("add").description("Add a scheduled job").requiredOption("--name <name>", "Job name").requiredOption("--connector <connector>", "Connector name").requiredOption("--command <command>", "Command to run").requiredOption("--cron <cron>", "Cron expression (5-field)").option("--args <args>", "Command args (space-separated)").option("--strip", "Apply LLM stripping to output").option("--json", "Output as JSON").action((options) => {
|
|
15898
|
+
const db = getDatabase();
|
|
15899
|
+
const args = options.args ? options.args.split(" ") : [];
|
|
15900
|
+
const job = createJob({ name: options.name, connector: options.connector, command: options.command, args, cron: options.cron, strip: !!options.strip }, db);
|
|
15901
|
+
if (options.json) {
|
|
15902
|
+
console.log(JSON.stringify(job));
|
|
15903
|
+
return;
|
|
15904
|
+
}
|
|
15905
|
+
console.log(chalk2.green("\u2713") + ` Job created: ${job.name} (${job.cron})`);
|
|
15906
|
+
});
|
|
15907
|
+
jobsCmd.command("list").description("List all jobs").option("--json", "Output as JSON").action((options) => {
|
|
15908
|
+
const jobs = listJobs(getDatabase());
|
|
15909
|
+
if (options.json) {
|
|
15910
|
+
console.log(JSON.stringify(jobs));
|
|
15911
|
+
return;
|
|
15912
|
+
}
|
|
15913
|
+
if (jobs.length === 0) {
|
|
15914
|
+
console.log(chalk2.dim("No jobs configured."));
|
|
15915
|
+
return;
|
|
15916
|
+
}
|
|
15917
|
+
for (const j of jobs) {
|
|
15918
|
+
const status = j.enabled ? chalk2.green("enabled") : chalk2.dim("disabled");
|
|
15919
|
+
const strip = j.strip ? chalk2.cyan(" [strip]") : "";
|
|
15920
|
+
console.log(` ${j.name.padEnd(20)} ${j.connector}.${j.command.padEnd(16)} ${j.cron.padEnd(15)} ${status}${strip}`);
|
|
15921
|
+
}
|
|
15922
|
+
});
|
|
15923
|
+
jobsCmd.command("run").description("Manually trigger a job").argument("<name>", "Job name").option("--json", "Output as JSON").action(async (name, options) => {
|
|
15924
|
+
const db = getDatabase();
|
|
15925
|
+
const job = getJobByName(name, db);
|
|
15926
|
+
if (!job) {
|
|
15927
|
+
console.error(chalk2.red(`Job "${name}" not found`));
|
|
15928
|
+
process.exit(1);
|
|
15929
|
+
}
|
|
15930
|
+
if (!options.json)
|
|
15931
|
+
console.log(chalk2.dim(`Running ${job.connector} ${job.command}...`));
|
|
15932
|
+
const result = await triggerJob(job, db);
|
|
15933
|
+
if (options.json) {
|
|
15934
|
+
console.log(JSON.stringify(result));
|
|
15935
|
+
return;
|
|
15936
|
+
}
|
|
15937
|
+
const icon = result.exit_code === 0 ? chalk2.green("\u2713") : chalk2.red("\u2717");
|
|
15938
|
+
console.log(`${icon} Run ${result.run_id} \u2014 exit ${result.exit_code}`);
|
|
15939
|
+
if (result.output)
|
|
15940
|
+
console.log(result.output.slice(0, 2000));
|
|
15941
|
+
});
|
|
15942
|
+
jobsCmd.command("logs").description("Show recent runs for a job").argument("<name>", "Job name").option("--limit <n>", "Max results", "10").option("--json", "Output as JSON").action((name, options) => {
|
|
15943
|
+
const db = getDatabase();
|
|
15944
|
+
const job = getJobByName(name, db);
|
|
15945
|
+
if (!job) {
|
|
15946
|
+
console.error(chalk2.red(`Job "${name}" not found`));
|
|
15947
|
+
process.exit(1);
|
|
15948
|
+
}
|
|
15949
|
+
const runs = listJobRuns(job.id, parseInt(options.limit), db);
|
|
15950
|
+
if (options.json) {
|
|
15951
|
+
console.log(JSON.stringify(runs));
|
|
15952
|
+
return;
|
|
15953
|
+
}
|
|
15954
|
+
if (runs.length === 0) {
|
|
15955
|
+
console.log(chalk2.dim("No runs yet."));
|
|
15956
|
+
return;
|
|
15957
|
+
}
|
|
15958
|
+
for (const r of runs) {
|
|
15959
|
+
const icon = r.exit_code === 0 ? chalk2.green("\u2713") : chalk2.red("\u2717");
|
|
15960
|
+
console.log(` ${icon} ${r.started_at.slice(0, 19)} \u2014 exit ${r.exit_code ?? "?"}`);
|
|
15961
|
+
}
|
|
15962
|
+
});
|
|
15963
|
+
jobsCmd.command("enable").description("Enable a job").argument("<name>").action((name) => {
|
|
15964
|
+
const db = getDatabase();
|
|
15965
|
+
const job = getJobByName(name, db);
|
|
15966
|
+
if (!job) {
|
|
15967
|
+
console.error(chalk2.red(`Job "${name}" not found`));
|
|
15968
|
+
process.exit(1);
|
|
15969
|
+
}
|
|
15970
|
+
updateJob(job.id, { enabled: true }, db);
|
|
15971
|
+
console.log(chalk2.green("\u2713") + ` Job "${name}" enabled`);
|
|
15972
|
+
});
|
|
15973
|
+
jobsCmd.command("disable").description("Disable a job").argument("<name>").action((name) => {
|
|
15974
|
+
const db = getDatabase();
|
|
15975
|
+
const job = getJobByName(name, db);
|
|
15976
|
+
if (!job) {
|
|
15977
|
+
console.error(chalk2.red(`Job "${name}" not found`));
|
|
15978
|
+
process.exit(1);
|
|
15979
|
+
}
|
|
15980
|
+
updateJob(job.id, { enabled: false }, db);
|
|
15981
|
+
console.log(chalk2.green("\u2713") + ` Job "${name}" disabled`);
|
|
15982
|
+
});
|
|
15983
|
+
jobsCmd.command("delete").description("Delete a job").argument("<name>").action((name) => {
|
|
15984
|
+
const db = getDatabase();
|
|
15985
|
+
const job = getJobByName(name, db);
|
|
15986
|
+
if (!job) {
|
|
15987
|
+
console.error(chalk2.red(`Job "${name}" not found`));
|
|
15988
|
+
process.exit(1);
|
|
15989
|
+
}
|
|
15990
|
+
deleteJob(job.id, db);
|
|
15991
|
+
console.log(chalk2.green("\u2713") + ` Job "${name}" deleted`);
|
|
15992
|
+
});
|
|
15993
|
+
var workflowsCmd = program2.command("workflows").description("Manage connector workflows (sequential pipelines)");
|
|
15994
|
+
workflowsCmd.command("add").description("Create a workflow from a JSON steps array").requiredOption("--name <name>", "Workflow name").requiredOption("--steps <json>", `Steps JSON array, e.g. '[{"connector":"stripe","command":"products list"}]'`).option("--json", "Output as JSON").action((options) => {
|
|
15995
|
+
let steps;
|
|
15996
|
+
try {
|
|
15997
|
+
steps = JSON.parse(options.steps);
|
|
15998
|
+
} catch {
|
|
15999
|
+
console.error(chalk2.red("Invalid JSON for --steps"));
|
|
16000
|
+
process.exit(1);
|
|
16001
|
+
}
|
|
16002
|
+
const wf = createWorkflow({ name: options.name, steps }, getDatabase());
|
|
16003
|
+
if (options.json) {
|
|
16004
|
+
console.log(JSON.stringify(wf));
|
|
16005
|
+
return;
|
|
16006
|
+
}
|
|
16007
|
+
console.log(chalk2.green("\u2713") + ` Workflow "${wf.name}" created (${wf.steps.length} steps)`);
|
|
16008
|
+
});
|
|
16009
|
+
workflowsCmd.command("list").description("List all workflows").option("--json", "Output as JSON").action((options) => {
|
|
16010
|
+
const wfs = listWorkflows(getDatabase());
|
|
16011
|
+
if (options.json) {
|
|
16012
|
+
console.log(JSON.stringify(wfs));
|
|
16013
|
+
return;
|
|
16014
|
+
}
|
|
16015
|
+
if (wfs.length === 0) {
|
|
16016
|
+
console.log(chalk2.dim("No workflows configured."));
|
|
16017
|
+
return;
|
|
16018
|
+
}
|
|
16019
|
+
for (const wf of wfs) {
|
|
16020
|
+
const status = wf.enabled ? chalk2.green("enabled") : chalk2.dim("disabled");
|
|
16021
|
+
console.log(` ${wf.name.padEnd(20)} ${String(wf.steps.length).padStart(2)} steps ${status}`);
|
|
16022
|
+
}
|
|
16023
|
+
});
|
|
16024
|
+
workflowsCmd.command("run").description("Run a workflow").argument("<name>", "Workflow name").option("--json", "Output as JSON").action(async (name, options) => {
|
|
16025
|
+
const wf = getWorkflowByName(name, getDatabase());
|
|
16026
|
+
if (!wf) {
|
|
16027
|
+
console.error(chalk2.red(`Workflow "${name}" not found`));
|
|
16028
|
+
process.exit(1);
|
|
16029
|
+
}
|
|
16030
|
+
if (!options.json)
|
|
16031
|
+
console.log(chalk2.dim(`Running workflow "${wf.name}" (${wf.steps.length} steps)...`));
|
|
16032
|
+
const result = await runWorkflow(wf);
|
|
16033
|
+
if (options.json) {
|
|
16034
|
+
console.log(JSON.stringify(result));
|
|
16035
|
+
return;
|
|
16036
|
+
}
|
|
16037
|
+
for (const step of result.steps) {
|
|
16038
|
+
const icon = step.exit_code === 0 ? chalk2.green("\u2713") : chalk2.red("\u2717");
|
|
16039
|
+
console.log(` ${icon} Step ${step.step}: ${step.connector} ${step.command}`);
|
|
16040
|
+
}
|
|
16041
|
+
console.log(result.success ? chalk2.green(`
|
|
16042
|
+
Workflow completed`) : chalk2.red(`
|
|
16043
|
+
Workflow failed`));
|
|
16044
|
+
});
|
|
16045
|
+
workflowsCmd.command("delete").description("Delete a workflow").argument("<name>").action((name) => {
|
|
16046
|
+
const wf = getWorkflowByName(name, getDatabase());
|
|
16047
|
+
if (!wf) {
|
|
16048
|
+
console.error(chalk2.red(`Workflow "${name}" not found`));
|
|
16049
|
+
process.exit(1);
|
|
16050
|
+
}
|
|
16051
|
+
deleteWorkflow(wf.id, getDatabase());
|
|
16052
|
+
console.log(chalk2.green("\u2713") + ` Workflow "${name}" deleted`);
|
|
16053
|
+
});
|
|
16054
|
+
var llmCmd = program2.command("llm").description("Manage LLM provider for output stripping");
|
|
16055
|
+
llmCmd.command("set").description("Configure LLM provider and API key").requiredOption("--provider <provider>", "Provider: cerebras, groq, openai, anthropic").requiredOption("--key <key>", "API key").option("--model <model>", "Model name (defaults to provider default)").option("--json", "Output as JSON").action((options) => {
|
|
16056
|
+
const provider = options.provider;
|
|
16057
|
+
const validProviders = ["cerebras", "groq", "openai", "anthropic"];
|
|
16058
|
+
if (!validProviders.includes(provider)) {
|
|
16059
|
+
console.error(chalk2.red(`Unknown provider "${provider}". Valid: ${validProviders.join(", ")}`));
|
|
16060
|
+
process.exit(1);
|
|
16061
|
+
}
|
|
16062
|
+
const model = options.model || PROVIDER_DEFAULTS[provider].model;
|
|
16063
|
+
const existing = getLlmConfig();
|
|
16064
|
+
saveLlmConfig({ provider, model, api_key: options.key, strip: existing?.strip ?? false });
|
|
16065
|
+
if (options.json) {
|
|
16066
|
+
console.log(JSON.stringify({ provider, model, key: maskKey(options.key), strip: existing?.strip ?? false }));
|
|
16067
|
+
} else {
|
|
16068
|
+
console.log(chalk2.green("\u2713") + ` LLM configured: ${provider} / ${model}`);
|
|
16069
|
+
console.log(` Key: ${maskKey(options.key)}`);
|
|
16070
|
+
console.log(` Strip: ${existing?.strip ? chalk2.green("enabled") : chalk2.dim("disabled")} (run 'connectors llm strip enable' to turn on)`);
|
|
16071
|
+
}
|
|
16072
|
+
});
|
|
16073
|
+
llmCmd.command("status").description("Show current LLM configuration").option("--json", "Output as JSON").action((options) => {
|
|
16074
|
+
const config = getLlmConfig();
|
|
16075
|
+
if (!config) {
|
|
16076
|
+
if (options.json)
|
|
16077
|
+
console.log(JSON.stringify({ configured: false }));
|
|
16078
|
+
else
|
|
16079
|
+
console.log(chalk2.dim("No LLM configured. Run: connectors llm set --provider <provider> --key <key>"));
|
|
16080
|
+
return;
|
|
16081
|
+
}
|
|
16082
|
+
if (options.json) {
|
|
16083
|
+
console.log(JSON.stringify({ configured: true, provider: config.provider, model: config.model, key: maskKey(config.api_key), strip: config.strip }));
|
|
16084
|
+
} else {
|
|
16085
|
+
console.log(chalk2.bold("LLM Configuration"));
|
|
16086
|
+
console.log(` Provider : ${config.provider}`);
|
|
16087
|
+
console.log(` Model : ${config.model}`);
|
|
16088
|
+
console.log(` Key : ${maskKey(config.api_key)}`);
|
|
16089
|
+
console.log(` Strip : ${config.strip ? chalk2.green("enabled") : chalk2.red("disabled")}`);
|
|
16090
|
+
}
|
|
16091
|
+
});
|
|
16092
|
+
llmCmd.command("strip").description("Enable or disable global output stripping").argument("<action>", "enable or disable").action((action) => {
|
|
16093
|
+
if (action !== "enable" && action !== "disable") {
|
|
16094
|
+
console.error(chalk2.red('Action must be "enable" or "disable"'));
|
|
16095
|
+
process.exit(1);
|
|
16096
|
+
}
|
|
16097
|
+
try {
|
|
16098
|
+
setLlmStrip(action === "enable");
|
|
16099
|
+
console.log(chalk2.green("\u2713") + ` Output stripping ${action}d`);
|
|
16100
|
+
} catch (e) {
|
|
16101
|
+
console.error(chalk2.red(String(e instanceof Error ? e.message : e)));
|
|
16102
|
+
process.exit(1);
|
|
16103
|
+
}
|
|
16104
|
+
});
|
|
16105
|
+
llmCmd.command("test").description("Test current LLM configuration with a sample prompt").option("--json", "Output as JSON").action(async (options) => {
|
|
16106
|
+
const config = getLlmConfig();
|
|
16107
|
+
if (!config) {
|
|
16108
|
+
console.error(chalk2.red("No LLM configured. Run: connectors llm set --provider <provider> --key <key>"));
|
|
16109
|
+
process.exit(1);
|
|
16110
|
+
}
|
|
16111
|
+
if (!options.json)
|
|
16112
|
+
console.log(chalk2.dim(`Testing ${config.provider} / ${config.model}...`));
|
|
16113
|
+
try {
|
|
16114
|
+
const client = new LLMClient(config);
|
|
16115
|
+
const result = await client.complete('You are a helpful assistant. Respond with exactly: {"status":"ok"}', "ping");
|
|
16116
|
+
if (options.json) {
|
|
16117
|
+
console.log(JSON.stringify({ success: true, provider: result.provider, model: result.model, latency_ms: result.latency_ms, response: result.content }));
|
|
16118
|
+
} else {
|
|
16119
|
+
console.log(chalk2.green("\u2713") + ` Response received in ${result.latency_ms}ms`);
|
|
16120
|
+
console.log(` ${result.content.trim()}`);
|
|
16121
|
+
}
|
|
16122
|
+
} catch (e) {
|
|
16123
|
+
if (options.json)
|
|
16124
|
+
console.log(JSON.stringify({ success: false, error: String(e instanceof Error ? e.message : e) }));
|
|
16125
|
+
else
|
|
16126
|
+
console.error(chalk2.red("\u2717 " + String(e instanceof Error ? e.message : e)));
|
|
16127
|
+
process.exit(1);
|
|
16128
|
+
}
|
|
16129
|
+
});
|
|
16130
|
+
llmCmd.command("providers").description("List supported LLM providers").option("--json", "Output as JSON").action((options) => {
|
|
16131
|
+
const providers = [
|
|
16132
|
+
{ name: "cerebras", baseUrl: "https://api.cerebras.ai/v1", defaultModel: PROVIDER_DEFAULTS.cerebras.model, compatible: "OpenAI" },
|
|
16133
|
+
{ name: "groq", baseUrl: "https://api.groq.com/openai/v1", defaultModel: PROVIDER_DEFAULTS.groq.model, compatible: "OpenAI" },
|
|
16134
|
+
{ name: "openai", baseUrl: "https://api.openai.com/v1", defaultModel: PROVIDER_DEFAULTS.openai.model, compatible: "OpenAI" },
|
|
16135
|
+
{ name: "anthropic", baseUrl: "https://api.anthropic.com/v1", defaultModel: PROVIDER_DEFAULTS.anthropic.model, compatible: "Anthropic" }
|
|
16136
|
+
];
|
|
16137
|
+
if (options.json) {
|
|
16138
|
+
console.log(JSON.stringify(providers));
|
|
16139
|
+
return;
|
|
16140
|
+
}
|
|
16141
|
+
console.log(chalk2.bold("Supported LLM Providers"));
|
|
16142
|
+
for (const p of providers) {
|
|
16143
|
+
console.log(` ${chalk2.cyan(p.name.padEnd(12))} ${p.defaultModel.padEnd(30)} ${chalk2.dim(p.baseUrl)}`);
|
|
16144
|
+
}
|
|
16145
|
+
});
|
|
14271
16146
|
program2.parse();
|