opencode-1password-auth 1.0.16 → 1.0.17
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/README.md +105 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -4
- package/dist/index.js.map +1 -1
- package/dist/src/command-matcher.d.ts +34 -0
- package/dist/src/command-matcher.d.ts.map +1 -0
- package/dist/src/command-matcher.js +171 -0
- package/dist/src/command-matcher.js.map +1 -0
- package/dist/src/config.d.ts +16 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +82 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/desktop-detection.d.ts +20 -0
- package/dist/src/desktop-detection.d.ts.map +1 -0
- package/dist/src/desktop-detection.js +48 -0
- package/dist/src/desktop-detection.js.map +1 -0
- package/dist/src/fallback.d.ts +15 -0
- package/dist/src/fallback.d.ts.map +1 -0
- package/dist/src/fallback.js +184 -0
- package/dist/src/fallback.js.map +1 -0
- package/dist/src/logging.d.ts +21 -0
- package/dist/src/logging.d.ts.map +1 -0
- package/dist/src/logging.js +141 -0
- package/dist/src/logging.js.map +1 -0
- package/dist/src/orchestration.d.ts +37 -0
- package/dist/src/orchestration.d.ts.map +1 -0
- package/dist/src/orchestration.js +175 -0
- package/dist/src/orchestration.js.map +1 -0
- package/dist/src/validation.d.ts +26 -0
- package/dist/src/validation.d.ts.map +1 -0
- package/dist/src/validation.js +113 -0
- package/dist/src/validation.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get home directory in a cross-platform way
|
|
3
|
+
*/
|
|
4
|
+
export declare const getHomeDir: () => string;
|
|
5
|
+
/**
|
|
6
|
+
* Get the platform identifier
|
|
7
|
+
*/
|
|
8
|
+
export declare const getPlatform: () => string;
|
|
9
|
+
/**
|
|
10
|
+
* Get the path to the 1Password mounted environments directory
|
|
11
|
+
* Cross-platform: uses ~/.1password/mounted/envs/ on all platforms
|
|
12
|
+
*/
|
|
13
|
+
export declare const getMountedEnvPath: () => string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Check if the 1Password desktop app is available by checking if the
|
|
16
|
+
* mounted environments directory exists
|
|
17
|
+
* Uses non-blocking detection with timeout
|
|
18
|
+
*/
|
|
19
|
+
export declare const isDesktopAppAvailable: () => boolean;
|
|
20
|
+
//# sourceMappingURL=desktop-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-detection.d.ts","sourceRoot":"","sources":["../../src/desktop-detection.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,QAAO,MAE9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAM,GAAG,IAQ7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAO,OAexC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Get home directory in a cross-platform way
|
|
5
|
+
*/
|
|
6
|
+
export const getHomeDir = () => {
|
|
7
|
+
return process.env.HOME || process.env.USERPROFILE || "";
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Get the platform identifier
|
|
11
|
+
*/
|
|
12
|
+
export const getPlatform = () => {
|
|
13
|
+
return process.platform;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Get the path to the 1Password mounted environments directory
|
|
17
|
+
* Cross-platform: uses ~/.1password/mounted/envs/ on all platforms
|
|
18
|
+
*/
|
|
19
|
+
export const getMountedEnvPath = () => {
|
|
20
|
+
const home = getHomeDir();
|
|
21
|
+
if (!home) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
// 1Password uses ~/.1password/mounted/envs/ on all platforms
|
|
25
|
+
return path.join(home, '.1password', 'mounted', 'envs');
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Check if the 1Password desktop app is available by checking if the
|
|
29
|
+
* mounted environments directory exists
|
|
30
|
+
* Uses non-blocking detection with timeout
|
|
31
|
+
*/
|
|
32
|
+
export const isDesktopAppAvailable = () => {
|
|
33
|
+
try {
|
|
34
|
+
const mountedPath = getMountedEnvPath();
|
|
35
|
+
if (!mountedPath) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// Check if directory exists using fs.existsSync (non-blocking approach)
|
|
39
|
+
// Note: We don't check for FIFOs directly as that could be blocking
|
|
40
|
+
// The existence of the directory itself indicates the desktop app is running
|
|
41
|
+
return fs.existsSync(mountedPath);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
// Ignore errors - directory doesn't exist or isn't accessible
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=desktop-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-detection.js","sourceRoot":"","sources":["../../src/desktop-detection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE;IACrC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AAC3D,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAW,EAAE;IACtC,OAAO,OAAO,CAAC,QAAQ,CAAC;AAC1B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAkB,EAAE;IACnD,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6DAA6D;IAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAY,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wEAAwE;QACxE,oEAAoE;QACpE,6EAA6E;QAC7E,OAAO,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,8DAA8D;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate that Service Account can access required 1Password environments.
|
|
3
|
+
* This verifies that the fallback mechanism (Service Account) is functional
|
|
4
|
+
* when the 1Password desktop app is unavailable.
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. Create SDK client using OP_SERVICE_ACCOUNT_TOKEN
|
|
8
|
+
* 2. Read config environment (OP_CONFIG_ENV_ID) to get provider and MCP environment IDs
|
|
9
|
+
* 3. Verify we can read variables from those environments
|
|
10
|
+
* 4. Return true if all steps succeed, false otherwise
|
|
11
|
+
*
|
|
12
|
+
* @returns Promise<boolean> true if fallback validation succeeded, false otherwise
|
|
13
|
+
*/
|
|
14
|
+
export declare function fallbackToServiceAccount(): Promise<boolean>;
|
|
15
|
+
//# sourceMappingURL=fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/fallback.ts"],"names":[],"mappings":"AA8FA;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CA0BjE"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { createClient } from '@1password/sdk';
|
|
2
|
+
import { validationWarn, validationError, validationInfo, validationDebug } from './logging.js';
|
|
3
|
+
import config from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Helper to wrap a promise with a timeout.
|
|
6
|
+
* Returns the promise result if it resolves before timeout, otherwise throws.
|
|
7
|
+
*/
|
|
8
|
+
async function withTimeout(promise, timeoutMs, timeoutMessage) {
|
|
9
|
+
if (timeoutMs <= 0) {
|
|
10
|
+
return promise;
|
|
11
|
+
}
|
|
12
|
+
return Promise.race([
|
|
13
|
+
promise,
|
|
14
|
+
new Promise((_, reject) => {
|
|
15
|
+
setTimeout(() => reject(new Error(timeoutMessage)), timeoutMs);
|
|
16
|
+
}),
|
|
17
|
+
]);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize 1Password SDK client for fallback validation.
|
|
21
|
+
* Follows the same pattern as initClient in index.ts.
|
|
22
|
+
*/
|
|
23
|
+
async function initClient() {
|
|
24
|
+
const token = process.env.OP_SERVICE_ACCOUNT_TOKEN;
|
|
25
|
+
if (!token) {
|
|
26
|
+
validationWarn('Missing OP_SERVICE_ACCOUNT_TOKEN for fallback validation');
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Get createClient function, with fallback to dynamic import (same pattern as index.ts)
|
|
30
|
+
let createClientFunc = createClient;
|
|
31
|
+
if (typeof createClientFunc !== 'function') {
|
|
32
|
+
validationDebug('createClient from static import is not a function, trying dynamic import...');
|
|
33
|
+
try {
|
|
34
|
+
const sdkModule = await import('@1password/sdk');
|
|
35
|
+
// Try different export patterns
|
|
36
|
+
if (sdkModule.createClient && typeof sdkModule.createClient === 'function') {
|
|
37
|
+
createClientFunc = sdkModule.createClient;
|
|
38
|
+
validationDebug('Using createClient from dynamic import (named export)');
|
|
39
|
+
}
|
|
40
|
+
else if (sdkModule.default?.createClient && typeof sdkModule.default.createClient === 'function') {
|
|
41
|
+
createClientFunc = sdkModule.default.createClient;
|
|
42
|
+
validationDebug('Using createClient from dynamic import (default export)');
|
|
43
|
+
}
|
|
44
|
+
else if (typeof sdkModule === 'function') {
|
|
45
|
+
createClientFunc = sdkModule;
|
|
46
|
+
validationDebug('Using dynamic import module as function');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
validationDebug('Dynamic import failed: no createClient found');
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
validationDebug(`Dynamic import failed: ${err}`);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const client = await createClientFunc({
|
|
60
|
+
auth: token,
|
|
61
|
+
integrationName: "opencode-1password-env-fallback",
|
|
62
|
+
integrationVersion: "1.0.0",
|
|
63
|
+
});
|
|
64
|
+
validationDebug('1Password SDK client created successfully for fallback');
|
|
65
|
+
return client;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
validationError('Failed to create 1Password SDK client for fallback', err);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Read environment variables from a 1Password environment.
|
|
74
|
+
* Follows the same pattern as readEnvironmentVariables in index.ts.
|
|
75
|
+
*/
|
|
76
|
+
async function readEnvironmentVariables(client, envId) {
|
|
77
|
+
try {
|
|
78
|
+
const { variables } = await client.environments.getVariables(envId);
|
|
79
|
+
validationDebug(`Read ${variables?.length || 0} variables from environment ${envId.substring(0, 8)}...`);
|
|
80
|
+
return variables || [];
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
validationError(`Failed to read environment ${envId.substring(0, 8)}...`, err);
|
|
84
|
+
throw err; // Propagate error to caller
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Validate that Service Account can access required 1Password environments.
|
|
89
|
+
* This verifies that the fallback mechanism (Service Account) is functional
|
|
90
|
+
* when the 1Password desktop app is unavailable.
|
|
91
|
+
*
|
|
92
|
+
* Steps:
|
|
93
|
+
* 1. Create SDK client using OP_SERVICE_ACCOUNT_TOKEN
|
|
94
|
+
* 2. Read config environment (OP_CONFIG_ENV_ID) to get provider and MCP environment IDs
|
|
95
|
+
* 3. Verify we can read variables from those environments
|
|
96
|
+
* 4. Return true if all steps succeed, false otherwise
|
|
97
|
+
*
|
|
98
|
+
* @returns Promise<boolean> true if fallback validation succeeded, false otherwise
|
|
99
|
+
*/
|
|
100
|
+
export async function fallbackToServiceAccount() {
|
|
101
|
+
const startTime = Date.now();
|
|
102
|
+
validationInfo('Starting Service Account fallback validation');
|
|
103
|
+
// Use validation timeout with buffer for the entire fallback operation
|
|
104
|
+
const fallbackTimeoutMs = config.validationTimeout + 5000;
|
|
105
|
+
try {
|
|
106
|
+
const result = await withTimeout(executeFallbackValidation(), fallbackTimeoutMs, `Fallback validation timeout after ${fallbackTimeoutMs}ms`);
|
|
107
|
+
const durationMs = Date.now() - startTime;
|
|
108
|
+
if (result) {
|
|
109
|
+
validationInfo(`Service Account fallback validation succeeded in ${durationMs}ms`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
validationWarn(`Service Account fallback validation failed in ${durationMs}ms`);
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const durationMs = Date.now() - startTime;
|
|
118
|
+
validationError(`Service Account fallback validation error after ${durationMs}ms`, error);
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Core fallback validation logic that can be wrapped with timeout.
|
|
124
|
+
*/
|
|
125
|
+
async function executeFallbackValidation() {
|
|
126
|
+
// 1. Initialize SDK client
|
|
127
|
+
const client = await initClient();
|
|
128
|
+
if (!client) {
|
|
129
|
+
validationWarn('Cannot perform fallback validation: no 1Password SDK client available');
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// 2. Get config environment ID
|
|
133
|
+
const configEnvId = process.env.OP_CONFIG_ENV_ID;
|
|
134
|
+
if (!configEnvId) {
|
|
135
|
+
validationWarn('Cannot perform fallback validation: OP_CONFIG_ENV_ID not set');
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
// 3. Read config environment to get provider and MCP environment IDs
|
|
139
|
+
validationDebug(`Reading config environment ${configEnvId.substring(0, 8)}...`);
|
|
140
|
+
const configVars = await readEnvironmentVariables(client, configEnvId);
|
|
141
|
+
const configEnvIds = {};
|
|
142
|
+
for (const v of configVars) {
|
|
143
|
+
if (v.name.endsWith("_ENV_ID") && v.value) {
|
|
144
|
+
configEnvIds[v.name] = v.value;
|
|
145
|
+
validationDebug(`Found ${v.name} = ${v.value.substring(0, 10)}...`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const providersEnvId = configEnvIds.OPENCODE_PROVIDERS_ENV_ID;
|
|
149
|
+
const mcpsEnvId = configEnvIds.OPENCODE_MCPS_ENV_ID;
|
|
150
|
+
if (!providersEnvId && !mcpsEnvId) {
|
|
151
|
+
validationWarn('Cannot perform fallback validation: no provider or MCP environment IDs found in config');
|
|
152
|
+
// We might still consider fallback successful if at least we can read the config environment
|
|
153
|
+
// But for security, we want to verify we can read the actual secret environments
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
// 4. Verify we can read from the environments
|
|
157
|
+
let allEnvironmentsAccessible = true;
|
|
158
|
+
if (providersEnvId) {
|
|
159
|
+
validationDebug(`Verifying access to providers environment ${providersEnvId.substring(0, 8)}...`);
|
|
160
|
+
const providerVars = await readEnvironmentVariables(client, providersEnvId);
|
|
161
|
+
if (providerVars.length === 0) {
|
|
162
|
+
validationWarn(`No variables found in providers environment ${providersEnvId.substring(0, 8)}... (environment may be empty)`);
|
|
163
|
+
// Don't fail for empty environments - only fail if we couldn't read at all
|
|
164
|
+
// readEnvironmentVariables already logs errors if there's a real failure
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
validationDebug(`Successfully read ${providerVars.length} variables from providers environment`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (mcpsEnvId) {
|
|
171
|
+
validationDebug(`Verifying access to MCP environment ${mcpsEnvId.substring(0, 8)}...`);
|
|
172
|
+
const mcpVars = await readEnvironmentVariables(client, mcpsEnvId);
|
|
173
|
+
if (mcpVars.length === 0) {
|
|
174
|
+
validationWarn(`No variables found in MCP environment ${mcpsEnvId.substring(0, 8)}... (environment may be empty)`);
|
|
175
|
+
// Don't fail for empty environments - only fail if we couldn't read at all
|
|
176
|
+
// readEnvironmentVariables already logs errors if there's a real failure
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
validationDebug(`Successfully read ${mcpVars.length} variables from MCP environment`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return allEnvironmentsAccessible;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback.js","sourceRoot":"","sources":["../../src/fallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
DEBUG = 0,
|
|
3
|
+
INFO = 1,
|
|
4
|
+
WARN = 2,
|
|
5
|
+
ERROR = 3
|
|
6
|
+
}
|
|
7
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
8
|
+
export declare function getLogLevel(): LogLevel;
|
|
9
|
+
export declare function logDebug(message: string): void;
|
|
10
|
+
export declare function logInfo(message: string): void;
|
|
11
|
+
export declare function logWarn(message: string): void;
|
|
12
|
+
export declare function logError(message: string): void;
|
|
13
|
+
export declare function validationDebug(message: string, context?: Record<string, unknown>): void;
|
|
14
|
+
export declare function validationInfo(message: string, context?: Record<string, unknown>): void;
|
|
15
|
+
export declare function validationWarn(message: string, context?: Record<string, unknown>): void;
|
|
16
|
+
export declare function validationError(message: string, error?: Error | unknown, context?: Record<string, unknown>): void;
|
|
17
|
+
export declare function logValidationAttempt(provider: string, command: string, validated: boolean): void;
|
|
18
|
+
export declare function logValidationResult(provider: string, success: boolean, durationMs: number, error?: Error | unknown): void;
|
|
19
|
+
export declare function logValidationFallback(provider: string, reason: string, fallbackValue?: string): void;
|
|
20
|
+
export { logDebug as debugLog, logInfo as infoLog, logWarn as warnLog, logError as errorLog };
|
|
21
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAIA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAmDD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAGD,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAQD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI9C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI9C;AAGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKxF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKvF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKvF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAgBjH;AAGD,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,GACjB,IAAI,CAEN;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GACtB,IAAI,CASN;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CAGN;AAGD,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
// Log levels enum
|
|
4
|
+
export var LogLevel;
|
|
5
|
+
(function (LogLevel) {
|
|
6
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
7
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
8
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
9
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
10
|
+
})(LogLevel || (LogLevel = {}));
|
|
11
|
+
// Current log level - default to DEBUG for development
|
|
12
|
+
let currentLogLevel = LogLevel.DEBUG;
|
|
13
|
+
// Get log directory path
|
|
14
|
+
function getLogDir() {
|
|
15
|
+
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
16
|
+
return path.join(home, '.opencode-1password-debug');
|
|
17
|
+
}
|
|
18
|
+
// Get log file path
|
|
19
|
+
function getLogFile() {
|
|
20
|
+
return path.join(getLogDir(), 'debug.log');
|
|
21
|
+
}
|
|
22
|
+
// Ensure log directory exists
|
|
23
|
+
function ensureLogDir() {
|
|
24
|
+
const logDir = getLogDir();
|
|
25
|
+
if (!fs.existsSync(logDir)) {
|
|
26
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Format log message with timestamp and prefix
|
|
30
|
+
function formatMessage(level, message) {
|
|
31
|
+
const timestamp = new Date().toISOString();
|
|
32
|
+
return `[${timestamp}] 1Password:${level} ${message}`;
|
|
33
|
+
}
|
|
34
|
+
// Write to file and console
|
|
35
|
+
function writeLog(level, message) {
|
|
36
|
+
const formattedMessage = formatMessage(level, message);
|
|
37
|
+
// Always output to console
|
|
38
|
+
if (level === 'ERROR') {
|
|
39
|
+
console.error(formattedMessage);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(formattedMessage);
|
|
43
|
+
}
|
|
44
|
+
// Write to file
|
|
45
|
+
try {
|
|
46
|
+
ensureLogDir();
|
|
47
|
+
fs.appendFileSync(getLogFile(), formattedMessage + '\n');
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
// Ignore file logging errors
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Set log level
|
|
54
|
+
export function setLogLevel(level) {
|
|
55
|
+
currentLogLevel = level;
|
|
56
|
+
}
|
|
57
|
+
// Get current log level
|
|
58
|
+
export function getLogLevel() {
|
|
59
|
+
return currentLogLevel;
|
|
60
|
+
}
|
|
61
|
+
// Check if a level should be logged based on current log level
|
|
62
|
+
function shouldLog(level) {
|
|
63
|
+
return level >= currentLogLevel;
|
|
64
|
+
}
|
|
65
|
+
// Base logging functions
|
|
66
|
+
export function logDebug(message) {
|
|
67
|
+
if (shouldLog(LogLevel.DEBUG)) {
|
|
68
|
+
writeLog('DEBUG', message);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export function logInfo(message) {
|
|
72
|
+
if (shouldLog(LogLevel.INFO)) {
|
|
73
|
+
writeLog('INFO', message);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export function logWarn(message) {
|
|
77
|
+
if (shouldLog(LogLevel.WARN)) {
|
|
78
|
+
writeLog('WARN', message);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function logError(message) {
|
|
82
|
+
if (shouldLog(LogLevel.ERROR)) {
|
|
83
|
+
writeLog('ERROR', message);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Validation-specific logging functions
|
|
87
|
+
export function validationDebug(message, context) {
|
|
88
|
+
if (shouldLog(LogLevel.DEBUG)) {
|
|
89
|
+
const ctxStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
90
|
+
writeLog('DEBUG', `[VALIDATION]${ctxStr} ${message}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function validationInfo(message, context) {
|
|
94
|
+
if (shouldLog(LogLevel.INFO)) {
|
|
95
|
+
const ctxStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
96
|
+
writeLog('INFO', `[VALIDATION]${ctxStr} ${message}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export function validationWarn(message, context) {
|
|
100
|
+
if (shouldLog(LogLevel.WARN)) {
|
|
101
|
+
const ctxStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
102
|
+
writeLog('WARN', `[VALIDATION]${ctxStr} ${message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export function validationError(message, error, context) {
|
|
106
|
+
if (shouldLog(LogLevel.ERROR)) {
|
|
107
|
+
let errorStr = '';
|
|
108
|
+
if (error) {
|
|
109
|
+
if (error instanceof Error) {
|
|
110
|
+
errorStr = ` Error: ${error.message}`;
|
|
111
|
+
if (error.stack) {
|
|
112
|
+
errorStr += ` Stack: ${error.stack}`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
errorStr = ` Error: ${String(error)}`;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const ctxStr = context ? ` ${JSON.stringify(context)}` : '';
|
|
120
|
+
writeLog('ERROR', `[VALIDATION]${ctxStr} ${message}${errorStr}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Validation event logging helpers
|
|
124
|
+
export function logValidationAttempt(provider, command, validated) {
|
|
125
|
+
validationInfo(`Validation attempt: provider=${provider}, command=${command}, validated=${validated}`);
|
|
126
|
+
}
|
|
127
|
+
export function logValidationResult(provider, success, durationMs, error) {
|
|
128
|
+
if (success) {
|
|
129
|
+
validationInfo(`Validation result: provider=${provider}, success=true, duration=${durationMs}ms`);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
validationError(`Validation result: provider=${provider}, success=false, duration=${durationMs}ms`, error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export function logValidationFallback(provider, reason, fallbackValue) {
|
|
136
|
+
const ctx = fallbackValue ? { reason, fallbackValue } : { reason };
|
|
137
|
+
validationWarn(`Validation fallback: provider=${provider}`, ctx);
|
|
138
|
+
}
|
|
139
|
+
// Re-export base logging functions for convenience
|
|
140
|
+
export { logDebug as debugLog, logInfo as infoLog, logWarn as warnLog, logError as errorLog };
|
|
141
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ValidationResult as FIFOValidationResult } from './validation.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extended validation result with orchestration metadata.
|
|
4
|
+
*/
|
|
5
|
+
export interface OrchestrationResult extends FIFOValidationResult {
|
|
6
|
+
/** Why validation was skipped, if applicable */
|
|
7
|
+
skippedReason?: 'desktop_app_unavailable' | 'no_mounted_path' | 'command_not_matched' | 'fallback_failed' | 'validation_disabled';
|
|
8
|
+
/** Whether the 1Password desktop app was detected as available */
|
|
9
|
+
desktopAppAvailable: boolean;
|
|
10
|
+
/** Path to mounted environments directory, if available */
|
|
11
|
+
mountedEnvPath?: string;
|
|
12
|
+
/** Whether fallback to Service Account was attempted */
|
|
13
|
+
fallbackAttempted: boolean;
|
|
14
|
+
/** Whether fallback succeeded (only relevant if fallbackAttempted is true) */
|
|
15
|
+
fallbackSuccess?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Orchestrates validation of a shell command against 1Password secrets.
|
|
19
|
+
*
|
|
20
|
+
* Follows the orchestration pattern from index.ts:162-173 (readEnvironmentVariables)
|
|
21
|
+
* and error handling pattern from index.ts:117-160 (multiple fallback strategies).
|
|
22
|
+
*
|
|
23
|
+
* Steps:
|
|
24
|
+
* 1. Check if command matches validation patterns (using shouldValidateCommand)
|
|
25
|
+
* 2. If not, returns skipped result with reason 'command_not_matched'
|
|
26
|
+
* 3. Check if desktop app is available (isDesktopAppAvailable)
|
|
27
|
+
* 4. If not, attempts fallback to Service Account validation (fallbackToServiceAccount)
|
|
28
|
+
* 5. If desktop app available, get mounted environment path (getMountedEnvPath)
|
|
29
|
+
* 6. Validate FIFO files at that path (validateMountedEnvFiles)
|
|
30
|
+
* 7. Handle timeouts and errors gracefully
|
|
31
|
+
* 8. Return comprehensive result with status and metadata
|
|
32
|
+
*
|
|
33
|
+
* @param command - The shell command to validate
|
|
34
|
+
* @returns Promise<OrchestrationResult> Validation result with metadata
|
|
35
|
+
*/
|
|
36
|
+
export declare function validateCommand(command: string): Promise<OrchestrationResult>;
|
|
37
|
+
//# sourceMappingURL=orchestration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../src/orchestration.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AA8BpG;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,gDAAgD;IAChD,aAAa,CAAC,EAAE,yBAAyB,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,qBAAqB,CAAC;IAClI,kEAAkE;IAClE,mBAAmB,EAAE,OAAO,CAAC;IAC7B,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,8EAA8E;IAC9E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsHnF"}
|