diff --git a/CHANGELOG.md b/CHANGELOG.md index 6da14d8..2312dcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.1.6](https://github.com/cloudquery/plugin-sdk-javascript/compare/v0.1.5...v0.1.6) (2024-02-12) + + +### Features + +* Implement `GetSpecSchema` plugin gRPC API call ([#133](https://github.com/cloudquery/plugin-sdk-javascript/issues/133)) ([d1568f5](https://github.com/cloudquery/plugin-sdk-javascript/commit/d1568f51c52db6491fab0d14b56a6ea4d2850c78)) + ## [0.1.5](https://github.com/cloudquery/plugin-sdk-javascript/compare/v0.1.4...v0.1.5) (2024-02-01) diff --git a/package-lock.json b/package-lock.json index 86edcb5..c6f1070 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@cloudquery/plugin-sdk-javascript", - "version": "0.1.5", + "version": "0.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@cloudquery/plugin-sdk-javascript", - "version": "0.1.5", + "version": "0.1.6", "license": "MPL-2.0", "dependencies": { "@apache-arrow/esnext-esm": "^12.0.1", - "@cloudquery/plugin-pb-javascript": "^0.0.14", + "@cloudquery/plugin-pb-javascript": "^0.0.15", "@grpc/grpc-js": "^1.9.0", "@types/luxon": "^3.3.1", "ajv": "^8.12.0", @@ -264,9 +264,9 @@ } }, "node_modules/@cloudquery/plugin-pb-javascript": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@cloudquery/plugin-pb-javascript/-/plugin-pb-javascript-0.0.14.tgz", - "integrity": "sha512-D10skSdHwaxKw98mMZYeXnCvZXWBD+2BVyj/fCYdmm3k+rmurkFUrQpCylG+h9ftFiWzItgJI1jCaTyvMt13tg==", + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@cloudquery/plugin-pb-javascript/-/plugin-pb-javascript-0.0.15.tgz", + "integrity": "sha512-qYLRxRGr2Hgg3+YQ73a0Zogk0Hm4Z0WVSmfmpkU7n18Fs7HbmL3Rr0O+EfzfpmeU6LuCnE/48RglS/YSAd6vVQ==", "dependencies": { "google-protobuf": "^3.21.2" }, diff --git a/package.json b/package.json index ae2e6cc..86563df 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cloudquery/plugin-sdk-javascript", - "version": "0.1.5", + "version": "0.1.6", "files": [ "dist", "!dist/**/*.test.*", @@ -88,7 +88,7 @@ }, "dependencies": { "@apache-arrow/esnext-esm": "^12.0.1", - "@cloudquery/plugin-pb-javascript": "^0.0.14", + "@cloudquery/plugin-pb-javascript": "^0.0.15", "@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 f15fbf3..2a572a1 100644 --- a/src/grpc/plugin.ts +++ b/src/grpc/plugin.ts @@ -47,6 +47,20 @@ export class PluginServer extends pluginV3.cloudquery.plugin.v3.UnimplementedPlu ): void { return callback(null, new pluginV3.cloudquery.plugin.v3.GetVersion.Response({ version: this.plugin.version() })); } + + GetSpecSchema( + call: grpc.ServerUnaryCall< + pluginV3.cloudquery.plugin.v3.GetSpecSchema.Request, + pluginV3.cloudquery.plugin.v3.GetSpecSchema.Response + >, + callback: grpc.sendUnaryData, + ): void { + return callback( + null, + new pluginV3.cloudquery.plugin.v3.GetSpecSchema.Response({ json_schema: this.plugin.jsonSchema() }), + ); + } + Init( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData, diff --git a/src/memdb/memdb.ts b/src/memdb/memdb.ts index 6245a86..08abde0 100644 --- a/src/memdb/memdb.ts +++ b/src/memdb/memdb.ts @@ -95,7 +95,28 @@ export const newMemDBPlugin = (): Plugin => { return Promise.resolve(pluginClient); }; - const plugin = newPlugin('memdb', '0.0.1', newClient, { team: 'cloudquery', kind: 'source' }); + const plugin = newPlugin('memdb', '0.0.1', newClient, { + team: 'cloudquery', + kind: 'source', + jsonSchema: `{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/cloudquery/plugin-sdk-javascript/memdb/spec", + "$ref": "#/$defs/Spec", + "$defs": { + "Spec": { + "properties": { + "concurrency": { + "type": "integer", + "minimum": 1, + "description": "Concurrency." + } + }, + "additionalProperties": false, + "type": "object", + }, + } +}`, + }); pluginClient.plugin = plugin; return plugin; }; diff --git a/src/plugin/plugin.ts b/src/plugin/plugin.ts index 4889c6c..fe4291b 100644 --- a/src/plugin/plugin.ts +++ b/src/plugin/plugin.ts @@ -42,6 +42,7 @@ export type PluginOptions = { kind: PluginKind; dockerFile?: string; buildTargets?: BuildTarget[]; + jsonSchema?: string; }; export interface SourceClient { @@ -65,6 +66,7 @@ export interface Plugin extends Client { version: () => string; team: () => string | undefined; kind: () => PluginKind | undefined; + jsonSchema: () => string | undefined; dockerFile: () => string; buildTargets: () => BuildTarget[]; init: (spec: string, options: NewClientOptions) => Promise; @@ -102,6 +104,7 @@ export const newPlugin = ( version: () => version, team: () => options?.team, kind: () => options?.kind, + jsonSchema: () => options?.jsonSchema, dockerFile: () => options?.dockerFile || 'Dockerfile', buildTargets: () => options?.buildTargets || defaultBuildTargets, write: (stream: WriteStream) => {