mirror of https://github.com/buster-so/buster.git
bigquery bugfixes
This commit is contained in:
parent
a7e0c71acb
commit
6ad4654200
|
@ -81,6 +81,32 @@ describe('BigQueryAdapter', () => {
|
|||
await expect(adapter.initialize(credentials)).resolves.not.toThrow();
|
||||
});
|
||||
|
||||
it('should handle service account key as parsed object', async () => {
|
||||
const serviceAccountObject = {
|
||||
type: 'service_account',
|
||||
project_id: 'test-project',
|
||||
private_key_id: 'key123',
|
||||
private_key: '-----BEGIN PRIVATE KEY-----\ntest\n-----END PRIVATE KEY-----',
|
||||
client_email: 'test@test-project.iam.gserviceaccount.com',
|
||||
};
|
||||
|
||||
const credentials: BigQueryCredentials = {
|
||||
type: DataSourceType.BigQuery,
|
||||
project_id: 'test-project',
|
||||
service_account_key: serviceAccountObject,
|
||||
};
|
||||
|
||||
await adapter.initialize(credentials);
|
||||
|
||||
const { BigQuery } = await import('@google-cloud/bigquery');
|
||||
expect(BigQuery).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
projectId: 'test-project',
|
||||
credentials: serviceAccountObject,
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
it('should allow initialization without credentials (uses ADC)', async () => {
|
||||
const credentials: BigQueryCredentials = {
|
||||
type: DataSourceType.BigQuery,
|
||||
|
|
|
@ -31,6 +31,10 @@ export class BigQueryAdapter extends BaseAdapter {
|
|||
|
||||
// Handle service account authentication
|
||||
if (bigqueryCredentials.service_account_key) {
|
||||
// Check if it's already an object
|
||||
if (typeof bigqueryCredentials.service_account_key === 'object') {
|
||||
options.credentials = bigqueryCredentials.service_account_key;
|
||||
} else if (typeof bigqueryCredentials.service_account_key === 'string') {
|
||||
try {
|
||||
// Try to parse as JSON string
|
||||
const keyData = JSON.parse(bigqueryCredentials.service_account_key);
|
||||
|
@ -39,6 +43,7 @@ export class BigQueryAdapter extends BaseAdapter {
|
|||
// If parsing fails, treat as file path
|
||||
options.keyFilename = bigqueryCredentials.service_account_key;
|
||||
}
|
||||
}
|
||||
} else if (bigqueryCredentials.key_file_path) {
|
||||
options.keyFilename = bigqueryCredentials.key_file_path;
|
||||
}
|
||||
|
|
|
@ -53,8 +53,8 @@ export interface BigQueryCredentials {
|
|||
/** Google Cloud project ID */
|
||||
project_id: string;
|
||||
|
||||
/** Service account key JSON (as string) or path to key file */
|
||||
service_account_key?: string;
|
||||
/** Service account key - can be JSON string, parsed object, or path to key file */
|
||||
service_account_key?: string | Record<string, unknown>;
|
||||
|
||||
/** Path to service account key file */
|
||||
key_file_path?: string;
|
||||
|
|
Loading…
Reference in New Issue