@cloudquery/plugin-sdk-javascript
Version:
This is the high-level package to use for developing CloudQuery plugins in JavaScript
153 lines • 6.41 kB
JavaScript
import { pluginV3 } from '@cloudquery/plugin-pb-javascript';
import { encodeTables, flattenTables } from '../schema/table.js';
export class MigrateTable extends pluginV3.cloudquery.plugin.v3.Sync.MessageMigrateTable {
}
export class DeleteStale extends pluginV3.cloudquery.plugin.v3.Write.MessageDeleteStale {
}
export class SyncRequest extends pluginV3.cloudquery.plugin.v3.Sync.Request {
}
export class Insert extends pluginV3.cloudquery.plugin.v3.Sync.MessageInsert {
}
export class SyncResponse extends pluginV3.cloudquery.plugin.v3.Sync.Response {
}
export class ReadRequest extends pluginV3.cloudquery.plugin.v3.Read.Request {
}
export class ReadResponse extends pluginV3.cloudquery.plugin.v3.Read.Response {
}
export class WriteRequest extends pluginV3.cloudquery.plugin.v3.Write.Request {
}
export class WriteResponse extends pluginV3.cloudquery.plugin.v3.Write.Response {
}
export class PluginServer extends pluginV3.cloudquery.plugin.v3.UnimplementedPluginService {
// Needed due to some TypeScript nonsense
plugin;
constructor(plugin) {
super();
this.plugin = plugin;
}
GetName(call, callback) {
return callback(null, new pluginV3.cloudquery.plugin.v3.GetName.Response({ name: this.plugin.name() }));
}
GetVersion(call, callback) {
return callback(null, new pluginV3.cloudquery.plugin.v3.GetVersion.Response({ version: this.plugin.version() }));
}
GetSpecSchema(call, callback) {
return callback(null, new pluginV3.cloudquery.plugin.v3.GetSpecSchema.Response({ json_schema: this.plugin.jsonSchema() }));
}
Init(call, callback) {
const { spec = new Uint8Array(), no_connection: noConnection = false } = call.request.toObject();
const stringSpec = new TextDecoder().decode(spec);
this.plugin
.init(stringSpec, { noConnection })
.then(() => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(null, new pluginV3.cloudquery.plugin.v3.Init.Response());
})
.catch((error) => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(error, null);
});
}
GetTables(call, callback) {
const { tables = [], skip_tables: skipTables = [], skip_dependent_tables: skipDependentTables = false, } = call.request.toObject();
this.plugin
.tables({ tables, skipTables, skipDependentTables })
.then((tables) => {
const flattened = flattenTables(tables);
// eslint-disable-next-line promise/no-callback-in-promise
return callback(null, new pluginV3.cloudquery.plugin.v3.GetTables.Response({ tables: encodeTables(flattened) }));
})
.catch((error) => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(error, null);
});
}
Sync(call) {
const { tables = [], skip_tables: skipTables = [], skip_dependent_tables: skipDependentTables = false, deterministic_cq_id: deterministicCQId = false, backend: { connection = '', table_name: tableName = '' } = {}, } = call.request.toObject();
this.plugin.sync({
tables,
skipTables,
skipDependentTables,
deterministicCQId,
backendOptions: { connection, tableName },
stream: call,
});
}
Read(call) {
this.plugin.read(call);
}
Write(call, callback) {
this.plugin
.write(call)
.then(() => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(null, new pluginV3.cloudquery.plugin.v3.Write.Response());
})
.catch((error) => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(error, null);
});
}
Close(call, callback) {
this.plugin
.close()
.then(() => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(null, new pluginV3.cloudquery.plugin.v3.Close.Response());
})
.catch((error) => {
// eslint-disable-next-line promise/no-callback-in-promise
return callback(error, null);
});
}
Transform(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
call) {
throw new Error('Method not implemented.');
}
TransformSchema(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
call,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
callback) {
throw new Error('Method not implemented.');
}
TestConnection(call, callback) {
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',
}));
});
}
}
}
//# sourceMappingURL=plugin.js.map