diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ca1ac01..93fcfa2 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.11" + ".": "0.1.12" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 808ea96..2b8eab9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.1.12](https://github.com/cloudquery/plugin-sdk-javascript/compare/v0.1.11...v0.1.12) (2024-06-03) + + +### Bug Fixes + +* **deps:** Update dependency @cloudquery/plugin-pb-javascript to ^0.0.19 ([#177](https://github.com/cloudquery/plugin-sdk-javascript/issues/177)) ([a9ec712](https://github.com/cloudquery/plugin-sdk-javascript/commit/a9ec7125760c2e391ca893d4ae7b627f4c16007f)) +* **deps:** Update dependency @grpc/grpc-js to v1.10.8 ([#168](https://github.com/cloudquery/plugin-sdk-javascript/issues/168)) ([5a10335](https://github.com/cloudquery/plugin-sdk-javascript/commit/5a10335a65ca0eeef1376d1fc45a10d631df8956)) +* **deps:** Update dependency ajv to v8.14.0 ([#172](https://github.com/cloudquery/plugin-sdk-javascript/issues/172)) ([d82278c](https://github.com/cloudquery/plugin-sdk-javascript/commit/d82278cca533f94249f480404de81b19e28d8186)) +* **deps:** Update dependency ava to v6.1.3 ([#169](https://github.com/cloudquery/plugin-sdk-javascript/issues/169)) ([8eca09e](https://github.com/cloudquery/plugin-sdk-javascript/commit/8eca09ed8ce656f813d66d702ad94964a513abe9)) +* **deps:** Update dependency eslint-plugin-promise to v6.2.0 ([#173](https://github.com/cloudquery/plugin-sdk-javascript/issues/173)) ([aa2c7cb](https://github.com/cloudquery/plugin-sdk-javascript/commit/aa2c7cba66aa21e274992e3170584c4b9883e924)) +* **deps:** Update dependency semver to v7.6.2 ([#171](https://github.com/cloudquery/plugin-sdk-javascript/issues/171)) ([154f3d9](https://github.com/cloudquery/plugin-sdk-javascript/commit/154f3d92bb07cbbd2ffd29373ffe7d91f7f9fe9c)) + ## [0.1.11](https://github.com/cloudquery/plugin-sdk-javascript/compare/v0.1.10...v0.1.11) (2024-05-01) diff --git a/package-lock.json b/package-lock.json index e39fcfb..e4a78fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@cloudquery/plugin-sdk-javascript", - "version": "0.1.11", + "version": "0.1.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@cloudquery/plugin-sdk-javascript", - "version": "0.1.11", + "version": "0.1.12", "license": "MPL-2.0", "dependencies": { "@apache-arrow/esnext-esm": "^12.0.1", - "@cloudquery/plugin-pb-javascript": "^0.0.18", + "@cloudquery/plugin-pb-javascript": "^0.0.19", "@grpc/grpc-js": "^1.9.0", "@types/luxon": "^3.3.1", "ajv": "^8.12.0", @@ -264,9 +264,10 @@ } }, "node_modules/@cloudquery/plugin-pb-javascript": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/@cloudquery/plugin-pb-javascript/-/plugin-pb-javascript-0.0.18.tgz", - "integrity": "sha512-HSBDE/ojSsHX+NdmYqy0D1B5kBxWy/A5YqV84zVuR00qrEd30ecyW12wI71tKt7OWQEUvXL23Agx1Dm75LmBTQ==", + "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@cloudquery/plugin-pb-javascript/-/plugin-pb-javascript-0.0.19.tgz", + "integrity": "sha512-22LB7dVE/X6gVEkJ/zYoARn8X1+pVBdfkmaOIQHA+lvVstKBXeRL7zMD4V88+HGb1KJ0El2yn0Ch81p42wyQgQ==", + "license": "MPL-2.0", "dependencies": { "google-protobuf": "^3.21.2" }, @@ -383,11 +384,12 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.6.tgz", - "integrity": "sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.8.tgz", + "integrity": "sha512-vYVqYzHicDqyKB+NQhAc54I1QWCBLCrYG6unqOIcBTHx+7x8C9lcoLj3KVJXs2VB4lUbpWY+Kk9NipcbXYWmvg==", + "license": "Apache-2.0", "dependencies": { - "@grpc/proto-loader": "^0.7.10", + "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" }, "engines": { @@ -395,13 +397,14 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.10.tgz", - "integrity": "sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==", + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", - "protobufjs": "^7.2.4", + "protobufjs": "^7.2.5", "yargs": "^17.7.2" }, "bin": { @@ -1044,9 +1047,10 @@ } }, "node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", + "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -1280,10 +1284,11 @@ "dev": true }, "node_modules/ava": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ava/-/ava-6.1.2.tgz", - "integrity": "sha512-WcpxJ8yZ7mk9ABTinD0IAjcemovSeVGjuuwZx0JS9johREWFeLTl8UP6wd7l6nmnrWqkKZdwaD71a/ocH4qPKw==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/ava/-/ava-6.1.3.tgz", + "integrity": "sha512-tkKbpF1pIiC+q09wNU9OfyTDYZa8yuWvU2up3+lFJ3lr1RmnYh2GBpPwzYUEB0wvTPIUysGjcZLNZr7STDviRA==", "dev": true, + "license": "MIT", "dependencies": { "@vercel/nft": "^0.26.2", "acorn": "^8.11.3", @@ -1330,7 +1335,7 @@ "ava": "entrypoints/cli.mjs" }, "engines": { - "node": "^18.18 || ^20.8 || ^21" + "node": "^18.18 || ^20.8 || ^21 || ^22" }, "peerDependencies": { "@ava/typescript": "*" @@ -1346,6 +1351,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -1366,6 +1372,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1378,6 +1385,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -2794,15 +2802,19 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.2.0.tgz", + "integrity": "sha512-QmAqwizauvnKOlifxyDj2ObfULpHQawlg/zQdgEixur9vl0CvZGv/LCJV2rtj3210QCoeGBzVMfMXqGAOr/4fA==", "dev": true, + "license": "ISC", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-unicorn": { @@ -4528,17 +4540,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/luxon": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", @@ -5933,12 +5934,10 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7236,7 +7235,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yargs": { "version": "17.7.2", diff --git a/package.json b/package.json index 39c2f14..b290d10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudquery/plugin-sdk-javascript", - "version": "0.1.11", + "version": "0.1.12", "files": [ "dist", "!dist/**/*.test.*", @@ -88,7 +88,7 @@ }, "dependencies": { "@apache-arrow/esnext-esm": "^12.0.1", - "@cloudquery/plugin-pb-javascript": "^0.0.18", + "@cloudquery/plugin-pb-javascript": "^0.0.19", "@grpc/grpc-js": "^1.9.0", "@types/luxon": "^3.3.1", "ajv": "^8.12.0", diff --git a/src/grpc/plugin.ts b/src/grpc/plugin.ts index 2a572a1..d284a5c 100644 --- a/src/grpc/plugin.ts +++ b/src/grpc/plugin.ts @@ -158,4 +158,54 @@ export class PluginServer extends pluginV3.cloudquery.plugin.v3.UnimplementedPlu return callback(error, null); }); } + + TestConnection( + call: grpc.ServerUnaryCall< + pluginV3.cloudquery.plugin.v3.TestConnection.Request, + pluginV3.cloudquery.plugin.v3.TestConnection.Response + >, + callback: grpc.sendUnaryData, + ): void { + const { spec = new Uint8Array() } = call.request.toObject(); + + const stringSpec = new TextDecoder().decode(spec); + if (this.plugin.testConnection) { + this.plugin + .testConnection(stringSpec) + .then(({ success, failureCode, failureDescription }) => { + // eslint-disable-next-line promise/no-callback-in-promise + return callback( + null, + new pluginV3.cloudquery.plugin.v3.TestConnection.Response({ + success, + failure_code: failureCode, + failure_description: failureDescription, + }), + ); + }) + .catch((error) => { + // eslint-disable-next-line promise/no-callback-in-promise + return callback(error, null); + }); + } else { + // fall back to init + this.plugin + .init(stringSpec, { noConnection: false }) + .then(() => { + // eslint-disable-next-line promise/no-callback-in-promise + return callback(null, new pluginV3.cloudquery.plugin.v3.TestConnection.Response({ success: true })); + }) + .catch(() => { + // eslint-disable-next-line promise/no-callback-in-promise + return callback( + null, + new pluginV3.cloudquery.plugin.v3.TestConnection.Response({ + success: false, + failure_code: 'UNKNOWN', + failure_description: 'Failed to connect', + }), + ); + }); + } + } } diff --git a/src/plugin/plugin.ts b/src/plugin/plugin.ts index fe4291b..7dd2bea 100644 --- a/src/plugin/plugin.ts +++ b/src/plugin/plugin.ts @@ -70,6 +70,7 @@ export interface Plugin extends Client { dockerFile: () => string; buildTargets: () => BuildTarget[]; init: (spec: string, options: NewClientOptions) => Promise; + testConnection?: (spec: string) => Promise<{ success?: boolean; failureCode?: string; failureDescription?: string }>; } export const newUnimplementedSource = (): SourceClient => {