@grepr/cli 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +71 -0
- package/build/dist/commands/base-command.d.ts +13 -0
- package/build/dist/commands/base-command.d.ts.map +1 -0
- package/build/dist/commands/base-command.js +28 -0
- package/build/dist/commands/base-command.js.map +1 -0
- package/build/dist/commands/config-command.d.ts +19 -0
- package/build/dist/commands/config-command.d.ts.map +1 -0
- package/build/dist/commands/config-command.js +108 -0
- package/build/dist/commands/config-command.js.map +1 -0
- package/build/dist/commands/crud-command.d.ts +117 -0
- package/build/dist/commands/crud-command.d.ts.map +1 -0
- package/build/dist/commands/crud-command.js +264 -0
- package/build/dist/commands/crud-command.js.map +1 -0
- package/build/dist/commands/dataset-command.d.ts +45 -0
- package/build/dist/commands/dataset-command.d.ts.map +1 -0
- package/build/dist/commands/dataset-command.js +139 -0
- package/build/dist/commands/dataset-command.js.map +1 -0
- package/build/dist/commands/integration-command.d.ts +30 -0
- package/build/dist/commands/integration-command.d.ts.map +1 -0
- package/build/dist/commands/integration-command.js +80 -0
- package/build/dist/commands/integration-command.js.map +1 -0
- package/build/dist/commands/job-command.d.ts +92 -0
- package/build/dist/commands/job-command.d.ts.map +1 -0
- package/build/dist/commands/job-command.js +294 -0
- package/build/dist/commands/job-command.js.map +1 -0
- package/build/dist/commands/list-command.d.ts +69 -0
- package/build/dist/commands/list-command.d.ts.map +1 -0
- package/build/dist/commands/list-command.js +130 -0
- package/build/dist/commands/list-command.js.map +1 -0
- package/build/dist/commands/query-command.d.ts +20 -0
- package/build/dist/commands/query-command.d.ts.map +1 -0
- package/build/dist/commands/query-command.js +167 -0
- package/build/dist/commands/query-command.js.map +1 -0
- package/build/dist/grepr.d.ts +3 -0
- package/build/dist/grepr.d.ts.map +1 -0
- package/build/dist/grepr.js +155 -0
- package/build/dist/grepr.js.map +1 -0
- package/build/dist/lib/api-client-factory.d.ts +21 -0
- package/build/dist/lib/api-client-factory.d.ts.map +1 -0
- package/build/dist/lib/api-client-factory.js +23 -0
- package/build/dist/lib/api-client-factory.js.map +1 -0
- package/build/dist/lib/api-client.d.ts +2 -0
- package/build/dist/lib/api-client.d.ts.map +1 -0
- package/build/dist/lib/api-client.js +3 -0
- package/build/dist/lib/api-client.js.map +1 -0
- package/build/dist/lib/auth.d.ts +104 -0
- package/build/dist/lib/auth.d.ts.map +1 -0
- package/build/dist/lib/auth.js +312 -0
- package/build/dist/lib/auth.js.map +1 -0
- package/build/dist/lib/command-registry.d.ts +35 -0
- package/build/dist/lib/command-registry.d.ts.map +1 -0
- package/build/dist/lib/command-registry.js +33 -0
- package/build/dist/lib/command-registry.js.map +1 -0
- package/build/dist/lib/config.d.ts +40 -0
- package/build/dist/lib/config.d.ts.map +1 -0
- package/build/dist/lib/config.js +114 -0
- package/build/dist/lib/config.js.map +1 -0
- package/build/dist/lib/grepr-api-client.d.ts +216 -0
- package/build/dist/lib/grepr-api-client.d.ts.map +1 -0
- package/build/dist/lib/grepr-api-client.js +424 -0
- package/build/dist/lib/grepr-api-client.js.map +1 -0
- package/build/dist/lib/heartbeat.d.ts +17 -0
- package/build/dist/lib/heartbeat.d.ts.map +1 -0
- package/build/dist/lib/heartbeat.js +56 -0
- package/build/dist/lib/heartbeat.js.map +1 -0
- package/build/dist/lib/json-formatter.d.ts +135 -0
- package/build/dist/lib/json-formatter.d.ts.map +1 -0
- package/build/dist/lib/json-formatter.js +658 -0
- package/build/dist/lib/json-formatter.js.map +1 -0
- package/build/dist/lib/parser.d.ts +26 -0
- package/build/dist/lib/parser.d.ts.map +1 -0
- package/build/dist/lib/parser.js +95 -0
- package/build/dist/lib/parser.js.map +1 -0
- package/build/dist/lib/streaming-job-executor.d.ts +31 -0
- package/build/dist/lib/streaming-job-executor.d.ts.map +1 -0
- package/build/dist/lib/streaming-job-executor.js +281 -0
- package/build/dist/lib/streaming-job-executor.js.map +1 -0
- package/build/dist/lib/time-utils.d.ts +28 -0
- package/build/dist/lib/time-utils.d.ts.map +1 -0
- package/build/dist/lib/time-utils.js +87 -0
- package/build/dist/lib/time-utils.js.map +1 -0
- package/build/dist/openapi/openApiTypes.d.ts +10430 -0
- package/build/dist/openapi/openApiTypes.d.ts.map +1 -0
- package/build/dist/openapi/openApiTypes.js +571 -0
- package/build/dist/openapi/openApiTypes.js.map +1 -0
- package/build/dist/types.d.ts +168 -0
- package/build/dist/types.d.ts.map +1 -0
- package/build/dist/types.js +20 -0
- package/build/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { BaseCommand } from './base-command.js';
|
|
2
|
+
export class QueryCommand extends BaseCommand {
|
|
3
|
+
getCommandName() {
|
|
4
|
+
return 'query';
|
|
5
|
+
}
|
|
6
|
+
getCommandDescription() {
|
|
7
|
+
return 'Execute a query agains a dataset';
|
|
8
|
+
}
|
|
9
|
+
getCommandOptions() {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
flags: '--dataset-id <id>',
|
|
13
|
+
description: 'Dataset ID to query'
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
flags: '--dataset-name <name>',
|
|
17
|
+
description: 'Dataset name to query (will be resolved to ID)'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
flags: '--sort-order <order>',
|
|
21
|
+
description: 'Sort order for results (UNSORTED, ASC, DESC)',
|
|
22
|
+
defaultValue: 'UNSORTED'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
flags: '--query-engine <engine>',
|
|
26
|
+
description: 'Query engine (grepr-raw-log-source, logs-iceberg-table-source)',
|
|
27
|
+
defaultValue: 'grepr-raw-log-source'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
flags: '--query-type <type>',
|
|
31
|
+
description: 'Query type (e.g., datadog-query)',
|
|
32
|
+
defaultValue: 'datadog-query'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
flags: '--query <query>',
|
|
36
|
+
description: 'Query string',
|
|
37
|
+
defaultValue: ''
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
flags: '--start <timestamp>',
|
|
41
|
+
description: 'Start timestamp (ISO 8601 format)'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
flags: '--end <timestamp>',
|
|
45
|
+
description: 'End timestamp (ISO 8601 format)'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
flags: '--limit <number>',
|
|
49
|
+
description: 'Maximum number of records to return',
|
|
50
|
+
parser: parseInt
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
addToProgram(program, mergeConfiguration) {
|
|
55
|
+
let command = program.command(this.getCommandName())
|
|
56
|
+
.description(this.getCommandDescription());
|
|
57
|
+
// Add command-specific options
|
|
58
|
+
this.getCommandOptions().forEach(option => {
|
|
59
|
+
if (option.parser) {
|
|
60
|
+
command = command.option(option.flags, option.description, option.parser, option.defaultValue);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
command = command.option(option.flags, option.description, option.defaultValue);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// Add streaming options
|
|
67
|
+
command
|
|
68
|
+
.option('-f, --format <format>', 'Output format (table, csv, pretty, raw, compact)', 'table')
|
|
69
|
+
.option('-s, --sort <column:order>', 'Sort table by column (e.g., "eventTimestamp:asc")', 'eventTimestamp:asc')
|
|
70
|
+
.option('--no-color', 'Disable colored output')
|
|
71
|
+
.option('--no-timestamps', 'Hide timestamps')
|
|
72
|
+
.option('--no-job-state', 'Hide job state messages')
|
|
73
|
+
.action(async (options, command) => {
|
|
74
|
+
try {
|
|
75
|
+
const globalOptions = command.parent?.opts();
|
|
76
|
+
const mergedGlobalOptions = await mergeConfiguration(globalOptions);
|
|
77
|
+
const mergedOptions = {
|
|
78
|
+
...mergedGlobalOptions,
|
|
79
|
+
...options
|
|
80
|
+
};
|
|
81
|
+
await this.execute(mergedOptions);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
85
|
+
console.error('Fatal error:', errorMessage);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async execute(options) {
|
|
91
|
+
try {
|
|
92
|
+
this.validateQueryOptions(options);
|
|
93
|
+
this.validateHeaderAuth(options);
|
|
94
|
+
this.initializeComponents(options);
|
|
95
|
+
// Resolve dataset ID
|
|
96
|
+
const datasetId = await this.resolveDatasetId(options);
|
|
97
|
+
// Create job definition
|
|
98
|
+
const jobDefinition = await this.createJobDefinition(options, datasetId);
|
|
99
|
+
await this.processJobStream(jobDefinition, options);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
this.handleError(error, 'Query initialization error');
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
validateQueryOptions(options) {
|
|
107
|
+
if (!options.datasetId && !options.datasetName) {
|
|
108
|
+
console.error('Error: Either --dataset-id or --dataset-name is required');
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
if (options.datasetId && options.datasetName) {
|
|
112
|
+
console.error('Error: Cannot specify both --dataset-id and --dataset-name');
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async resolveDatasetId(options) {
|
|
117
|
+
if (options.datasetId) {
|
|
118
|
+
return options.datasetId;
|
|
119
|
+
}
|
|
120
|
+
if (!options.quiet) {
|
|
121
|
+
console.log(`Looking up dataset: ${options.datasetName}`);
|
|
122
|
+
}
|
|
123
|
+
const dataset = await this.apiClient.lookupDataset(options.datasetName);
|
|
124
|
+
if (!options.quiet) {
|
|
125
|
+
console.log(`Found dataset: ${dataset.name} (ID: ${dataset.id})`);
|
|
126
|
+
}
|
|
127
|
+
return dataset.id;
|
|
128
|
+
}
|
|
129
|
+
async createJobDefinition(options, datasetId) {
|
|
130
|
+
try {
|
|
131
|
+
const queryEngine = options.queryEngine || 'grepr-raw-log-source';
|
|
132
|
+
// Build the job definition directly in code based on query engine
|
|
133
|
+
const jobDefinition = {
|
|
134
|
+
name: `query_tool_job_${Date.now()}`,
|
|
135
|
+
execution: 'SYNCHRONOUS',
|
|
136
|
+
processing: 'BATCH',
|
|
137
|
+
jobGraph: {
|
|
138
|
+
vertices: [
|
|
139
|
+
{
|
|
140
|
+
type: queryEngine,
|
|
141
|
+
name: 'source',
|
|
142
|
+
datasetId: datasetId,
|
|
143
|
+
start: options.start || new Date(Date.now() - 10 * 60 * 1000).toISOString(), // Default: 10 minutes ago
|
|
144
|
+
end: options.end || new Date().toISOString(), // Default: now
|
|
145
|
+
query: {
|
|
146
|
+
type: options.queryType || 'datadog-query',
|
|
147
|
+
query: options.query || ''
|
|
148
|
+
},
|
|
149
|
+
sortOrder: options.sortOrder || 'UNSORTED',
|
|
150
|
+
limit: options.limit || 100 // Default limit to stay under sync query limit
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
type: 'logs-sync-sink',
|
|
154
|
+
name: 'sink'
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
edges: ['source -> sink']
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
return jobDefinition;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
throw new Error(`Failed to create job definition: ${error.message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=query-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-command.js","sourceRoot":"","sources":["../../../src/main/typescript/commands/query-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepr.d.ts","sourceRoot":"","sources":["../../src/main/typescript/grepr.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import process from 'process';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
7
|
+
import { ConfigManager } from './lib/config.js';
|
|
8
|
+
import { CommandRegistry } from './lib/command-registry.js';
|
|
9
|
+
import { QueryCommand } from './commands/query-command.js';
|
|
10
|
+
import { ConfigCommand } from './commands/config-command.js';
|
|
11
|
+
import { JobListCommand, JobCrudCommand } from './commands/job-command.js';
|
|
12
|
+
import { IntegrationListCommand, IntegrationCrudCommand } from './commands/integration-command.js';
|
|
13
|
+
import { DatasetListCommand, DatasetCrudCommand } from './commands/dataset-command.js';
|
|
14
|
+
/**
|
|
15
|
+
* Get the version from package.json
|
|
16
|
+
*/
|
|
17
|
+
function getVersion() {
|
|
18
|
+
try {
|
|
19
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
+
const __dirname = dirname(__filename);
|
|
21
|
+
// Try multiple possible locations for package.json
|
|
22
|
+
const possiblePaths = [
|
|
23
|
+
join(__dirname, '../../package.json'), // Development: build/dist/grepr.js -> package.json
|
|
24
|
+
join(__dirname, 'package.json'), // Distribution: grepr.js in same dir as package.json
|
|
25
|
+
join(__dirname, '../package.json'), // Alternative distribution structure
|
|
26
|
+
];
|
|
27
|
+
for (const packageJsonPath of possiblePaths) {
|
|
28
|
+
try {
|
|
29
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
30
|
+
return packageJson.version;
|
|
31
|
+
}
|
|
32
|
+
catch (pathError) {
|
|
33
|
+
// Continue to next path
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
throw new Error('package.json not found in any expected location');
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.warn('Could not read version from package.json:', error);
|
|
40
|
+
return '1.1.0'; // fallback version
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Main CLI application for Grepr query tool using self-registering commands
|
|
45
|
+
*/
|
|
46
|
+
class GreprQueryCLI {
|
|
47
|
+
program;
|
|
48
|
+
commandRegistry;
|
|
49
|
+
constructor() {
|
|
50
|
+
this.program = new Command();
|
|
51
|
+
this.commandRegistry = new CommandRegistry();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parse and validate URL
|
|
55
|
+
*/
|
|
56
|
+
parseUrl(url) {
|
|
57
|
+
if (!url) {
|
|
58
|
+
return url;
|
|
59
|
+
}
|
|
60
|
+
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
61
|
+
return url;
|
|
62
|
+
}
|
|
63
|
+
throw new Error(`Invalid API base URL: ${url}. Must start with http:// or https://`);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Merge configuration with CLI options
|
|
67
|
+
*/
|
|
68
|
+
async mergeConfiguration(options) {
|
|
69
|
+
const configManager = new ConfigManager();
|
|
70
|
+
if (options.conf) {
|
|
71
|
+
try {
|
|
72
|
+
const savedConfig = await configManager.getConfig(options.conf);
|
|
73
|
+
if (savedConfig) {
|
|
74
|
+
options = ConfigManager.mergeConfigWithOptions(savedConfig, options);
|
|
75
|
+
// Remove conf from final options
|
|
76
|
+
delete options.conf;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
81
|
+
console.error(`Error loading configuration '${options.conf}': ${errorMessage}`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Validate required orgName if no config loaded
|
|
86
|
+
if (!options.orgName) {
|
|
87
|
+
console.error('Error: --org-name is required (unless using --conf with a saved configuration)');
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
// Set all the defaults
|
|
91
|
+
if (!options.authBaseUrl) {
|
|
92
|
+
options.authBaseUrl = 'https://grepr-prod.us.auth0.com';
|
|
93
|
+
}
|
|
94
|
+
if (!options.apiBaseUrl) {
|
|
95
|
+
options.apiBaseUrl = `https://${options.orgName}.app.grepr.ai/api`;
|
|
96
|
+
}
|
|
97
|
+
if (!options.clientId) {
|
|
98
|
+
// prod app clientId.
|
|
99
|
+
options.clientId = '4XOD92WjzdfT4yxWeHpwh4J2u8t9qPtS';
|
|
100
|
+
}
|
|
101
|
+
return options;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Register all commands with the command registry
|
|
105
|
+
*/
|
|
106
|
+
registerCommands() {
|
|
107
|
+
// Register streaming commands
|
|
108
|
+
this.commandRegistry.register(new QueryCommand());
|
|
109
|
+
// Register configuration commands
|
|
110
|
+
this.commandRegistry.register(new ConfigCommand());
|
|
111
|
+
// Register job commands
|
|
112
|
+
this.commandRegistry.register(new JobListCommand());
|
|
113
|
+
this.commandRegistry.register(new JobCrudCommand());
|
|
114
|
+
// Register integration commands
|
|
115
|
+
this.commandRegistry.register(new IntegrationListCommand());
|
|
116
|
+
this.commandRegistry.register(new IntegrationCrudCommand());
|
|
117
|
+
// Register dataset commands
|
|
118
|
+
this.commandRegistry.register(new DatasetListCommand());
|
|
119
|
+
this.commandRegistry.register(new DatasetCrudCommand());
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Setup CLI commands and options
|
|
123
|
+
*/
|
|
124
|
+
setupCLI() {
|
|
125
|
+
this.program
|
|
126
|
+
.name('grepr')
|
|
127
|
+
.description('Grepr Command Line Interface (CLI) Tool')
|
|
128
|
+
.version(getVersion());
|
|
129
|
+
// Global options for all commands
|
|
130
|
+
this.program
|
|
131
|
+
.option('--conf <name>', 'Use saved configuration from ~/.grepr/cli-config.json')
|
|
132
|
+
.option('--org-name <name>', 'Organization name (required unless using --conf)')
|
|
133
|
+
.option('--api-base-url <url>', 'API server base URL (default: https://<orgName>.app.grepr.ai/api)', this.parseUrl)
|
|
134
|
+
.option('--auth-base-url <url>', 'Auth0 base URL', this.parseUrl)
|
|
135
|
+
.option('--auth-method <method>', 'Authentication method (oauth, header)', 'oauth')
|
|
136
|
+
.option('--user-id <id>', 'User ID for header authentication (required when using --auth-method header)')
|
|
137
|
+
.option('--client-id <id>', 'OAuth Client ID (optional, defaults to Web Client ID)')
|
|
138
|
+
.option('--no-auth-cache', 'Force fresh authentication by ignoring cached tokens', true)
|
|
139
|
+
.option('--no-browser', 'Do not automatically open browser for OAuth authentication', true)
|
|
140
|
+
.option('--timezone <tz>', 'Timezone for timestamp formatting (e.g., UTC, America/New_York)', 'system')
|
|
141
|
+
.option('-o, --output <file>', 'Output results to file instead of stdout')
|
|
142
|
+
.option('-d, --debug', 'Enable debug output')
|
|
143
|
+
.option('-q, --quiet', 'Suppress non-essential output');
|
|
144
|
+
// Register all commands using the registry
|
|
145
|
+
this.registerCommands();
|
|
146
|
+
this.commandRegistry.registerAll(this.program, this.mergeConfiguration.bind(this));
|
|
147
|
+
return this.program;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Main execution
|
|
151
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
152
|
+
const cli = new GreprQueryCLI();
|
|
153
|
+
cli.setupCLI().parse();
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=grepr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepr.js","sourceRoot":"","sources":["../../src/main/typescript/grepr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { GreprApiClient } from './api-client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Common interface for options needed to create an API client
|
|
4
|
+
*/
|
|
5
|
+
export interface ApiClientFactoryOptions {
|
|
6
|
+
orgName: string;
|
|
7
|
+
apiBaseUrl?: string;
|
|
8
|
+
authBaseUrl?: string;
|
|
9
|
+
authMethod?: 'oauth' | 'header';
|
|
10
|
+
userId?: string;
|
|
11
|
+
clientId?: string;
|
|
12
|
+
debug?: boolean;
|
|
13
|
+
authCache: boolean;
|
|
14
|
+
browser: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Factory function to create GreprApiClient instances
|
|
18
|
+
* Shared across all command types to ensure DRY principle
|
|
19
|
+
*/
|
|
20
|
+
export declare function createApiClient(options: ApiClientFactoryOptions): GreprApiClient;
|
|
21
|
+
//# sourceMappingURL=api-client-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client-factory.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/lib/api-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,uBAAuB,GAAG,cAAc,CAkBhF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { GreprApiClient } from './api-client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Factory function to create GreprApiClient instances
|
|
4
|
+
* Shared across all command types to ensure DRY principle
|
|
5
|
+
*/
|
|
6
|
+
export function createApiClient(options) {
|
|
7
|
+
const clientConfig = {
|
|
8
|
+
orgName: options.orgName,
|
|
9
|
+
apiBaseUrl: options.apiBaseUrl || `https://${options.orgName}.app.grepr.ai/api`,
|
|
10
|
+
authBaseUrl: options.authBaseUrl || `https://${options.orgName}.app.grepr.ai/auth`,
|
|
11
|
+
authMethod: options.authMethod,
|
|
12
|
+
clientId: options.clientId || 'default-client-id',
|
|
13
|
+
debug: options.debug || false,
|
|
14
|
+
authCache: options.authCache,
|
|
15
|
+
browser: options.browser,
|
|
16
|
+
userId: options.userId,
|
|
17
|
+
};
|
|
18
|
+
if (options.debug) {
|
|
19
|
+
console.log("API Client Config:", clientConfig);
|
|
20
|
+
}
|
|
21
|
+
return new GreprApiClient(clientConfig);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=api-client-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client-factory.js","sourceRoot":"","sources":["../../../src/main/typescript/lib/api-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiBjD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgC;IAC9D,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,WAAW,OAAO,CAAC,OAAO,mBAAmB;QAC/E,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,WAAW,OAAO,CAAC,OAAO,oBAAoB;QAClF,UAAU,EAAE,OAAO,CAAC,UAAgC;QACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,mBAAmB;QACjD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;QAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/lib/api-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/main/typescript/lib/api-client.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ApiClientConfig } from '../types.js';
|
|
2
|
+
export interface AuthConfig extends ApiClientConfig {
|
|
3
|
+
}
|
|
4
|
+
interface TokenData {
|
|
5
|
+
access_token: string;
|
|
6
|
+
refresh_token?: string;
|
|
7
|
+
expires_in: number;
|
|
8
|
+
expires_at: number;
|
|
9
|
+
token_type: string;
|
|
10
|
+
}
|
|
11
|
+
interface HeaderAuthConfig extends AuthConfig {
|
|
12
|
+
userId: string;
|
|
13
|
+
authMethod: 'header';
|
|
14
|
+
}
|
|
15
|
+
interface OAuthAuthConfig extends AuthConfig {
|
|
16
|
+
authMethod: 'oauth';
|
|
17
|
+
authUrl: string;
|
|
18
|
+
tokenUrl: string;
|
|
19
|
+
redirectUrl: string;
|
|
20
|
+
audience: string;
|
|
21
|
+
clientId: string;
|
|
22
|
+
orgId: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Header-based authentication for testing (no OAuth required)
|
|
26
|
+
*/
|
|
27
|
+
export declare class HeaderAuth {
|
|
28
|
+
config: HeaderAuthConfig;
|
|
29
|
+
constructor(options: ApiClientConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Build configuration from command-line options
|
|
32
|
+
*/
|
|
33
|
+
private buildConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Get authentication headers for API requests
|
|
36
|
+
*/
|
|
37
|
+
getAuthHeaders(): Promise<Record<string, string>>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* OAuth-based authentication (simplified version for now)
|
|
41
|
+
*/
|
|
42
|
+
export declare class GreprAuth {
|
|
43
|
+
config: OAuthAuthConfig;
|
|
44
|
+
constructor(options: ApiClientConfig);
|
|
45
|
+
/**
|
|
46
|
+
* Get the path to the token cache file
|
|
47
|
+
*/
|
|
48
|
+
private get tokenCachePath();
|
|
49
|
+
/**
|
|
50
|
+
* Build configuration from command-line options
|
|
51
|
+
*/
|
|
52
|
+
private buildConfig;
|
|
53
|
+
/**
|
|
54
|
+
* Get authentication headers for API requests (OAuth uses Bearer token)
|
|
55
|
+
*/
|
|
56
|
+
getAuthHeaders(): Promise<{
|
|
57
|
+
Authorization: string;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Get a valid access token, refreshing if necessary
|
|
61
|
+
*/
|
|
62
|
+
getAccessToken(): Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Perform fresh OAuth authentication and optionally cache the result
|
|
65
|
+
*/
|
|
66
|
+
private performFreshAuthentication;
|
|
67
|
+
/**
|
|
68
|
+
* OAuth 2.0 PKCE flow with local callback server
|
|
69
|
+
*/
|
|
70
|
+
authenticateWithPKCE(): Promise<TokenData>;
|
|
71
|
+
/**
|
|
72
|
+
* Generate PKCE code verifier and challenge
|
|
73
|
+
*/
|
|
74
|
+
generatePKCEPair(): {
|
|
75
|
+
codeVerifier: string;
|
|
76
|
+
codeChallenge: string;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Start local HTTP server to receive OAuth callback
|
|
80
|
+
*/
|
|
81
|
+
startCallbackServer(expectedState: string, authUrl: string): Promise<string>;
|
|
82
|
+
/**
|
|
83
|
+
* Exchange authorization code for access token
|
|
84
|
+
*/
|
|
85
|
+
exchangeCodeForToken(authCode: string, codeVerifier: string): Promise<TokenData>;
|
|
86
|
+
/**
|
|
87
|
+
* Refresh access token using refresh token
|
|
88
|
+
*/
|
|
89
|
+
refreshToken(refreshToken: string): Promise<TokenData>;
|
|
90
|
+
/**
|
|
91
|
+
* Load cached token from file system
|
|
92
|
+
*/
|
|
93
|
+
loadCachedToken(): Promise<TokenData | null>;
|
|
94
|
+
/**
|
|
95
|
+
* Save token to cache
|
|
96
|
+
*/
|
|
97
|
+
saveCachedToken(tokenData: TokenData): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Check if token is expired (with 5 minute buffer)
|
|
100
|
+
*/
|
|
101
|
+
isTokenExpired(tokenData: TokenData): boolean;
|
|
102
|
+
}
|
|
103
|
+
export {};
|
|
104
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/lib/auth.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,MAAM,WAAW,UAAW,SAAQ,eAAe;CAClD;AAED,UAAU,SAAS;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,gBAAiB,SAAQ,UAAU;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,QAAQ,CAAC;CACtB;AAED,UAAU,eAAgB,SAAQ,UAAU;IAC1C,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,UAAU;IACd,MAAM,EAAE,gBAAgB,CAAC;gBAEpB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACH,OAAO,CAAC,WAAW;IAqBnB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAOxD;AAED;;GAEG;AACH,qBAAa,SAAS;IACb,MAAM,EAAE,eAAe,CAAC;gBAEnB,OAAO,EAAE,eAAe;IAIpC;;OAEG;IACH,OAAO,KAAK,cAAc,GAEzB;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;IA6BnB;;OAEG;IACG,cAAc;;;IAOpB;;OAEG;IACG,cAAc;IA2BpB;;OAEG;YACW,0BAA0B;IAWxC;;OAEG;IACG,oBAAoB;IAkC1B;;OAEG;IACH,gBAAgB;;;;IAShB;;OAEG;IACG,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyDlF;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA2BtF;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAyB5D;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAYlD;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;CAQ9C"}
|