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(); 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 () => { it('should allow initialization without credentials (uses ADC)', async () => {
const credentials: BigQueryCredentials = { const credentials: BigQueryCredentials = {
type: DataSourceType.BigQuery, type: DataSourceType.BigQuery,

View File

@ -31,13 +31,18 @@ export class BigQueryAdapter extends BaseAdapter {
// Handle service account authentication // Handle service account authentication
if (bigqueryCredentials.service_account_key) { if (bigqueryCredentials.service_account_key) {
try { // Check if it's already an object
// Try to parse as JSON string if (typeof bigqueryCredentials.service_account_key === 'object') {
const keyData = JSON.parse(bigqueryCredentials.service_account_key); options.credentials = bigqueryCredentials.service_account_key;
options.credentials = keyData; } else if (typeof bigqueryCredentials.service_account_key === 'string') {
} catch { try {
// If parsing fails, treat as file path // Try to parse as JSON string
options.keyFilename = bigqueryCredentials.service_account_key; const keyData = JSON.parse(bigqueryCredentials.service_account_key);
options.credentials = keyData;
} catch {
// If parsing fails, treat as file path
options.keyFilename = bigqueryCredentials.service_account_key;
}
} }
} else if (bigqueryCredentials.key_file_path) { } else if (bigqueryCredentials.key_file_path) {
options.keyFilename = bigqueryCredentials.key_file_path; options.keyFilename = bigqueryCredentials.key_file_path;

View File

@ -53,8 +53,8 @@ export interface BigQueryCredentials {
/** Google Cloud project ID */ /** Google Cloud project ID */
project_id: string; project_id: string;
/** Service account key JSON (as string) or path to key file */ /** Service account key - can be JSON string, parsed object, or path to key file */
service_account_key?: string; service_account_key?: string | Record<string, unknown>;
/** Path to service account key file */ /** Path to service account key file */
key_file_path?: string; key_file_path?: string;