bigquery bugfixes

This commit is contained in:
dal 2025-09-17 07:03:11 -06:00
parent a7e0c71acb
commit 6ad4654200
No known key found for this signature in database
GPG Key ID: 16F4B0E1E9F61122
3 changed files with 40 additions and 9 deletions

View File

@ -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,

View File

@ -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;
}

View File

@ -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;