latchkey 0.1.4 → 1.0.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 +1 -1
- package/README.md +93 -56
- package/dist/integrations/SKILL.md +77 -0
- package/dist/package.json +67 -0
- package/dist/scripts/encryptFile.d.ts +21 -0
- package/dist/scripts/encryptFile.d.ts.map +1 -0
- package/dist/scripts/encryptFile.js +101 -0
- package/dist/scripts/encryptFile.js.map +1 -0
- package/dist/src/apiCredentialStore.d.ts +1 -0
- package/dist/src/apiCredentialStore.d.ts.map +1 -1
- package/dist/src/apiCredentialStore.js +12 -0
- package/dist/src/apiCredentialStore.js.map +1 -1
- package/dist/src/apiCredentials.d.ts +116 -1
- package/dist/src/apiCredentials.d.ts.map +1 -1
- package/dist/src/apiCredentials.js +119 -1
- package/dist/src/apiCredentials.js.map +1 -1
- package/dist/src/browserState.d.ts +8 -0
- package/dist/src/browserState.d.ts.map +1 -0
- package/dist/src/browserState.js +21 -0
- package/dist/src/browserState.js.map +1 -0
- package/dist/src/cli.js +5 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/cliCommands.d.ts.map +1 -1
- package/dist/src/cliCommands.js +218 -81
- package/dist/src/cliCommands.js.map +1 -1
- package/dist/src/config.d.ts +13 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +50 -4
- package/dist/src/config.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/oauthUtils.d.ts +49 -0
- package/dist/src/oauthUtils.d.ts.map +1 -0
- package/dist/src/oauthUtils.js +183 -0
- package/dist/src/oauthUtils.js.map +1 -0
- package/dist/src/playwrightUtils.d.ts +14 -1
- package/dist/src/playwrightUtils.d.ts.map +1 -1
- package/dist/src/playwrightUtils.js +37 -8
- package/dist/src/playwrightUtils.js.map +1 -1
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +20 -4
- package/dist/src/registry.js.map +1 -1
- package/dist/src/services/base.d.ts +43 -15
- package/dist/src/services/base.d.ts.map +1 -1
- package/dist/src/services/base.js +49 -9
- package/dist/src/services/base.js.map +1 -1
- package/dist/src/services/discord.d.ts +4 -3
- package/dist/src/services/discord.d.ts.map +1 -1
- package/dist/src/services/discord.js +6 -22
- package/dist/src/services/discord.js.map +1 -1
- package/dist/src/services/dropbox.d.ts +5 -4
- package/dist/src/services/dropbox.d.ts.map +1 -1
- package/dist/src/services/dropbox.js +10 -27
- package/dist/src/services/dropbox.js.map +1 -1
- package/dist/src/services/github.d.ts +5 -4
- package/dist/src/services/github.d.ts.map +1 -1
- package/dist/src/services/github.js +21 -30
- package/dist/src/services/github.js.map +1 -1
- package/dist/src/services/google.d.ts +34 -0
- package/dist/src/services/google.d.ts.map +1 -0
- package/dist/src/services/google.js +336 -0
- package/dist/src/services/google.js.map +1 -0
- package/dist/src/services/index.d.ts +4 -2
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +4 -1
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/linear.d.ts +5 -4
- package/dist/src/services/linear.d.ts.map +1 -1
- package/dist/src/services/linear.js +10 -29
- package/dist/src/services/linear.js.map +1 -1
- package/dist/src/services/mailchimp.d.ts +11 -0
- package/dist/src/services/mailchimp.d.ts.map +1 -0
- package/dist/src/services/mailchimp.js +16 -0
- package/dist/src/services/mailchimp.js.map +1 -0
- package/dist/src/services/notion.d.ts +29 -0
- package/dist/src/services/notion.d.ts.map +1 -0
- package/dist/src/services/notion.js +102 -0
- package/dist/src/services/notion.js.map +1 -0
- package/dist/src/services/slack.d.ts +3 -1
- package/dist/src/services/slack.d.ts.map +1 -1
- package/dist/src/services/slack.js +5 -5
- package/dist/src/services/slack.js.map +1 -1
- package/dist/src/skillMd.d.ts +2 -0
- package/dist/src/skillMd.d.ts.map +1 -0
- package/dist/src/skillMd.js +19 -0
- package/dist/src/skillMd.js.map +1 -0
- package/dist/tests/apiCredentials.test.js +59 -1
- package/dist/tests/apiCredentials.test.js.map +1 -1
- package/dist/tests/cli.test.js +283 -104
- package/dist/tests/cli.test.js.map +1 -1
- package/dist/tests/playwrightDownload.test.js +2 -2
- package/dist/tests/playwrightDownload.test.js.map +1 -1
- package/dist/tests/registry.test.js +28 -3
- package/dist/tests/registry.test.js.map +1 -1
- package/dist/tests/servicesAgainstRecordings.test.js +3 -0
- package/dist/tests/servicesAgainstRecordings.test.js.map +1 -1
- package/package.json +6 -6
package/dist/src/cliCommands.js
CHANGED
|
@@ -4,13 +4,37 @@
|
|
|
4
4
|
import { existsSync, unlinkSync } from 'node:fs';
|
|
5
5
|
import { createInterface } from 'node:readline';
|
|
6
6
|
import { ApiCredentialStore } from './apiCredentialStore.js';
|
|
7
|
-
import { ApiCredentialStatus } from './apiCredentials.js';
|
|
7
|
+
import { ApiCredentialStatus, RawCurlCredentials } from './apiCredentials.js';
|
|
8
8
|
import { BROWSER_SOURCES, BrowserNotFoundError, DEFAULT_BROWSER_SOURCES, ensureBrowser, loadBrowserConfig, } from './browserConfig.js';
|
|
9
9
|
import { CONFIG } from './config.js';
|
|
10
|
+
import { BrowserDisabledError, BrowserFlowsNotSupportedError } from './playwrightUtils.js';
|
|
10
11
|
import { EncryptedStorage } from './encryptedStorage.js';
|
|
11
12
|
import { REGISTRY } from './registry.js';
|
|
12
13
|
import { LoginCancelledError, LoginFailedError } from './services/index.js';
|
|
13
14
|
import { run as curlRun } from './curl.js';
|
|
15
|
+
import { getSkillMdContent } from './skillMd.js';
|
|
16
|
+
/**
|
|
17
|
+
* Try to refresh expired credentials if the service supports it.
|
|
18
|
+
* Returns refreshed credentials if successful, otherwise returns the original credentials.
|
|
19
|
+
*/
|
|
20
|
+
async function maybeRefreshCredentials(service, apiCredentials, apiCredentialStore) {
|
|
21
|
+
if (apiCredentials.isExpired() !== true || !service.refreshCredentials) {
|
|
22
|
+
return apiCredentials;
|
|
23
|
+
}
|
|
24
|
+
const refreshedCredentials = await service.refreshCredentials(apiCredentials);
|
|
25
|
+
if (refreshedCredentials !== null) {
|
|
26
|
+
apiCredentialStore.save(service.name, refreshedCredentials);
|
|
27
|
+
return refreshedCredentials;
|
|
28
|
+
}
|
|
29
|
+
return apiCredentials;
|
|
30
|
+
}
|
|
31
|
+
async function getCredentialStatus(service, credentials, apiCredentialStore) {
|
|
32
|
+
if (credentials === null) {
|
|
33
|
+
return ApiCredentialStatus.Missing;
|
|
34
|
+
}
|
|
35
|
+
const refreshed = await maybeRefreshCredentials(service, credentials, apiCredentialStore);
|
|
36
|
+
return service.checkApiCredentials(refreshed);
|
|
37
|
+
}
|
|
14
38
|
// Curl flags that don't affect the HTTP request semantics but may not be supported by URL extraction.
|
|
15
39
|
const CURL_PASSTHROUGH_FLAGS = new Set(['-v', '--verbose']);
|
|
16
40
|
/**
|
|
@@ -115,7 +139,7 @@ function clearService(deps, serviceName) {
|
|
|
115
139
|
const service = deps.registry.getByName(serviceName);
|
|
116
140
|
if (service === null) {
|
|
117
141
|
deps.errorLog(`Error: Unknown service: ${serviceName}`);
|
|
118
|
-
deps.errorLog("Use 'latchkey services' to see available services.");
|
|
142
|
+
deps.errorLog("Use 'latchkey services list' to see available services.");
|
|
119
143
|
deps.exit(1);
|
|
120
144
|
}
|
|
121
145
|
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
@@ -128,11 +152,22 @@ function clearService(deps, serviceName) {
|
|
|
128
152
|
deps.log(`No API credentials found for ${serviceName}.`);
|
|
129
153
|
}
|
|
130
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if browser login is disabled via environment variable.
|
|
157
|
+
* Exits with error if LATCHKEY_DISABLE_BROWSER is set.
|
|
158
|
+
*/
|
|
159
|
+
function checkBrowserNotDisabledOrExit(deps) {
|
|
160
|
+
if (deps.config.browserDisabled) {
|
|
161
|
+
deps.errorLog(new BrowserDisabledError().message);
|
|
162
|
+
deps.exit(1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
131
165
|
/**
|
|
132
166
|
* Get the browser launch options from configuration, handling errors with CLI output.
|
|
133
|
-
* Exits with error if no valid browser config exists.
|
|
167
|
+
* Exits with error if no valid browser config exists or if browser is disabled.
|
|
134
168
|
*/
|
|
135
169
|
function getBrowserLaunchOptionsOrExit(deps) {
|
|
170
|
+
checkBrowserNotDisabledOrExit(deps);
|
|
136
171
|
const browserConfig = loadBrowserConfig(deps.config.configPath);
|
|
137
172
|
if (!browserConfig) {
|
|
138
173
|
deps.errorLog("Error: No browser configured. Run 'latchkey ensure-browser' first.");
|
|
@@ -147,48 +182,44 @@ function getBrowserLaunchOptionsOrExit(deps) {
|
|
|
147
182
|
* Register all CLI commands on the given program.
|
|
148
183
|
*/
|
|
149
184
|
export function registerCommands(program, deps) {
|
|
150
|
-
program
|
|
185
|
+
const servicesCommand = program
|
|
151
186
|
.command('services')
|
|
152
|
-
.description('
|
|
187
|
+
.description('Manage and inspect supported services.');
|
|
188
|
+
servicesCommand
|
|
189
|
+
.command('list')
|
|
190
|
+
.description('List all supported services.')
|
|
153
191
|
.action(() => {
|
|
154
192
|
const serviceNames = deps.registry.services.map((service) => service.name);
|
|
155
|
-
deps.log(
|
|
193
|
+
deps.log(JSON.stringify(serviceNames, null, 2));
|
|
156
194
|
});
|
|
157
|
-
|
|
158
|
-
.command('
|
|
159
|
-
.description('
|
|
160
|
-
.
|
|
161
|
-
.action(async (
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (invalidSources.length > 0) {
|
|
167
|
-
deps.errorLog(`Error: Invalid source(s): ${invalidSources.join(', ')}`);
|
|
168
|
-
deps.errorLog(`Valid sources: ${BROWSER_SOURCES.join(', ')}`);
|
|
195
|
+
servicesCommand
|
|
196
|
+
.command('info')
|
|
197
|
+
.description('Show information about a service.')
|
|
198
|
+
.argument('<service_name>', 'Name of the service to get info for')
|
|
199
|
+
.action(async (serviceName) => {
|
|
200
|
+
const service = deps.registry.getByName(serviceName);
|
|
201
|
+
if (service === null) {
|
|
202
|
+
deps.errorLog(`Error: Unknown service: ${serviceName}`);
|
|
203
|
+
deps.errorLog("Use 'latchkey services list' to see available services.");
|
|
169
204
|
deps.exit(1);
|
|
170
205
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
deps.errorLog(`Error: ${error.message}`);
|
|
186
|
-
deps.exit(1);
|
|
187
|
-
}
|
|
188
|
-
throw error;
|
|
189
|
-
}
|
|
206
|
+
// Login options
|
|
207
|
+
const supportsBrowser = service.getSession !== undefined && !deps.config.browserDisabled;
|
|
208
|
+
const authOptions = supportsBrowser ? ['browser', 'set'] : ['set'];
|
|
209
|
+
// Credentials status
|
|
210
|
+
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
211
|
+
const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
|
|
212
|
+
const apiCredentials = apiCredentialStore.get(serviceName);
|
|
213
|
+
const credentialStatus = await getCredentialStatus(service, apiCredentials, apiCredentialStore);
|
|
214
|
+
const info = {
|
|
215
|
+
authOptions,
|
|
216
|
+
credentialStatus,
|
|
217
|
+
developerNotes: service.info,
|
|
218
|
+
};
|
|
219
|
+
deps.log(JSON.stringify(info, null, 2));
|
|
190
220
|
});
|
|
191
|
-
program
|
|
221
|
+
const authCommand = program.command('auth').description('Manage authentication credentials.');
|
|
222
|
+
authCommand
|
|
192
223
|
.command('clear')
|
|
193
224
|
.description('Clear stored API credentials.')
|
|
194
225
|
.argument('[service_name]', 'Name of the service to clear API credentials for')
|
|
@@ -201,56 +232,83 @@ export function registerCommands(program, deps) {
|
|
|
201
232
|
clearService(deps, serviceName);
|
|
202
233
|
}
|
|
203
234
|
});
|
|
204
|
-
|
|
205
|
-
.command('
|
|
206
|
-
.description('
|
|
207
|
-
.
|
|
208
|
-
.action((serviceName) => {
|
|
235
|
+
authCommand
|
|
236
|
+
.command('list')
|
|
237
|
+
.description('List all stored credentials and their status.')
|
|
238
|
+
.action(async () => {
|
|
209
239
|
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
210
240
|
const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
|
|
241
|
+
const allCredentials = apiCredentialStore.getAll();
|
|
242
|
+
const entries = {};
|
|
243
|
+
for (const [serviceName, credentials] of allCredentials) {
|
|
244
|
+
const service = deps.registry.getByName(serviceName);
|
|
245
|
+
const credentialStatus = service !== null
|
|
246
|
+
? await getCredentialStatus(service, credentials, apiCredentialStore)
|
|
247
|
+
: ApiCredentialStatus.Valid;
|
|
248
|
+
entries[serviceName] = {
|
|
249
|
+
credentialType: credentials.objectType,
|
|
250
|
+
credentialStatus,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
deps.log(JSON.stringify(entries, null, 2));
|
|
254
|
+
});
|
|
255
|
+
authCommand
|
|
256
|
+
.command('set')
|
|
257
|
+
.description('Store credentials for a service in the form of arbitrary curl arguments.')
|
|
258
|
+
.argument('<service_name>', 'Name of the service to store credentials for')
|
|
259
|
+
.addHelpText('after', `\nExample:\n $ latchkey auth set slack -H "Authorization: Bearer xoxb-your-token"`)
|
|
260
|
+
.allowUnknownOption()
|
|
261
|
+
.allowExcessArguments()
|
|
262
|
+
.action((_serviceName, _options, command) => {
|
|
263
|
+
const [serviceName, ...curlArguments] = command.args;
|
|
211
264
|
if (serviceName === undefined) {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
if (apiCredentials === null) {
|
|
215
|
-
deps.log(`${service.name}: ${ApiCredentialStatus.Missing}`);
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
const status = service.checkApiCredentials(apiCredentials);
|
|
219
|
-
deps.log(`${service.name}: ${status}`);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return;
|
|
265
|
+
deps.errorLog('Error: Service name is required.');
|
|
266
|
+
deps.exit(1);
|
|
223
267
|
}
|
|
224
268
|
const service = deps.registry.getByName(serviceName);
|
|
225
269
|
if (service === null) {
|
|
226
270
|
deps.errorLog(`Error: Unknown service: ${serviceName}`);
|
|
227
|
-
deps.errorLog("Use 'latchkey services' to see available services.");
|
|
271
|
+
deps.errorLog("Use 'latchkey services list' to see available services.");
|
|
228
272
|
deps.exit(1);
|
|
229
273
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
deps.
|
|
233
|
-
|
|
274
|
+
if (!curlArguments.some((argument) => argument.startsWith('-'))) {
|
|
275
|
+
deps.errorLog("Error: Arguments don't look like valid curl options (expected at least one switch starting with '-').");
|
|
276
|
+
deps.errorLog(`Example: latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`);
|
|
277
|
+
deps.exit(1);
|
|
234
278
|
}
|
|
235
|
-
const
|
|
236
|
-
deps.
|
|
279
|
+
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
280
|
+
const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
|
|
281
|
+
const credentials = new RawCurlCredentials(curlArguments);
|
|
282
|
+
apiCredentialStore.save(serviceName, credentials);
|
|
283
|
+
deps.log('Credentials stored.');
|
|
237
284
|
});
|
|
238
|
-
|
|
239
|
-
.command('
|
|
240
|
-
.description('Login to a service and store the API credentials.')
|
|
285
|
+
authCommand
|
|
286
|
+
.command('browser')
|
|
287
|
+
.description('Login to a service via the browser and store the API credentials.')
|
|
241
288
|
.argument('<service_name>', 'Name of the service to login to')
|
|
242
289
|
.action(async (serviceName) => {
|
|
243
290
|
const service = deps.registry.getByName(serviceName);
|
|
244
291
|
if (service === null) {
|
|
245
292
|
deps.errorLog(`Error: Unknown service: ${serviceName}`);
|
|
246
|
-
deps.errorLog("Use 'latchkey services' to see available services.");
|
|
293
|
+
deps.errorLog("Use 'latchkey services list' to see available services.");
|
|
294
|
+
deps.exit(1);
|
|
295
|
+
}
|
|
296
|
+
const session = service.getSession?.();
|
|
297
|
+
if (!session) {
|
|
298
|
+
deps.errorLog(new BrowserFlowsNotSupportedError(service.name).message);
|
|
247
299
|
deps.exit(1);
|
|
248
300
|
}
|
|
249
301
|
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
250
302
|
const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
|
|
303
|
+
const oldCredentials = apiCredentialStore.get(service.name);
|
|
304
|
+
if (session.prepare && oldCredentials === null) {
|
|
305
|
+
deps.errorLog(`Error: Service ${serviceName} requires preparation first.`);
|
|
306
|
+
deps.errorLog(`Run 'latchkey auth browser-prepare ${serviceName}' before logging in.`);
|
|
307
|
+
deps.exit(1);
|
|
308
|
+
}
|
|
251
309
|
const launchOptions = getBrowserLaunchOptionsOrExit(deps);
|
|
252
310
|
try {
|
|
253
|
-
const apiCredentials = await
|
|
311
|
+
const apiCredentials = await session.login(encryptedStorage, launchOptions, oldCredentials ?? undefined);
|
|
254
312
|
apiCredentialStore.save(service.name, apiCredentials);
|
|
255
313
|
deps.log('Done');
|
|
256
314
|
}
|
|
@@ -266,6 +324,48 @@ export function registerCommands(program, deps) {
|
|
|
266
324
|
throw error;
|
|
267
325
|
}
|
|
268
326
|
});
|
|
327
|
+
authCommand
|
|
328
|
+
.command('browser-prepare')
|
|
329
|
+
.description('Prepare a service to be used with the browser command.')
|
|
330
|
+
.argument('<service_name>', 'Name of the service to prepare')
|
|
331
|
+
.action(async (serviceName) => {
|
|
332
|
+
const service = deps.registry.getByName(serviceName);
|
|
333
|
+
if (service === null) {
|
|
334
|
+
deps.errorLog(`Error: Unknown service: ${serviceName}`);
|
|
335
|
+
deps.errorLog("Use 'latchkey services list' to see available services.");
|
|
336
|
+
deps.exit(1);
|
|
337
|
+
}
|
|
338
|
+
const session = service.getSession?.();
|
|
339
|
+
if (!session?.prepare) {
|
|
340
|
+
deps.log('This service does not require a preparation step.');
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
344
|
+
const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
|
|
345
|
+
// Check if already prepared (credentials exist)
|
|
346
|
+
const existingCredentials = apiCredentialStore.get(service.name);
|
|
347
|
+
if (existingCredentials !== null) {
|
|
348
|
+
deps.log('Already prepared.');
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
const launchOptions = getBrowserLaunchOptionsOrExit(deps);
|
|
352
|
+
try {
|
|
353
|
+
const apiCredentials = await session.prepare(encryptedStorage, launchOptions);
|
|
354
|
+
apiCredentialStore.save(service.name, apiCredentials);
|
|
355
|
+
deps.log('Done');
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
if (error instanceof LoginCancelledError) {
|
|
359
|
+
deps.errorLog('Preparation cancelled.');
|
|
360
|
+
deps.exit(1);
|
|
361
|
+
}
|
|
362
|
+
if (error instanceof LoginFailedError) {
|
|
363
|
+
deps.errorLog(error.message);
|
|
364
|
+
deps.exit(1);
|
|
365
|
+
}
|
|
366
|
+
throw error;
|
|
367
|
+
}
|
|
368
|
+
});
|
|
269
369
|
program
|
|
270
370
|
.command('curl')
|
|
271
371
|
.description('Run curl with API credential injection.')
|
|
@@ -286,27 +386,64 @@ export function registerCommands(program, deps) {
|
|
|
286
386
|
const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
|
|
287
387
|
const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
|
|
288
388
|
let apiCredentials = apiCredentialStore.get(service.name);
|
|
389
|
+
// Check if credentials exist but are expired
|
|
390
|
+
const isExpired = apiCredentials?.isExpired() === true;
|
|
289
391
|
if (apiCredentials === null) {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if (error instanceof LoginFailedError) {
|
|
301
|
-
deps.errorLog(error.message);
|
|
302
|
-
deps.exit(1);
|
|
303
|
-
}
|
|
304
|
-
throw error;
|
|
392
|
+
deps.errorLog(`Error: No credentials found for ${service.name}.`);
|
|
393
|
+
deps.errorLog(`Run 'latchkey auth browser ${service.name}' or 'latchkey auth set ${service.name}' first.`);
|
|
394
|
+
deps.exit(1);
|
|
395
|
+
}
|
|
396
|
+
if (isExpired) {
|
|
397
|
+
apiCredentials = await maybeRefreshCredentials(service, apiCredentials, apiCredentialStore);
|
|
398
|
+
if (apiCredentials.isExpired() === true) {
|
|
399
|
+
deps.errorLog(`Error: Credentials for ${service.name} are expired.`);
|
|
400
|
+
deps.errorLog(`Run 'latchkey auth browser ${service.name}' or 'latchkey auth set ${service.name}' to refresh them.`);
|
|
401
|
+
deps.exit(1);
|
|
305
402
|
}
|
|
306
403
|
}
|
|
307
404
|
const allArguments = [...apiCredentials.asCurlArguments(), ...curlArguments];
|
|
308
405
|
const result = deps.runCurl(allArguments);
|
|
309
406
|
deps.exit(result.returncode);
|
|
310
407
|
});
|
|
408
|
+
program
|
|
409
|
+
.command('skill-md')
|
|
410
|
+
.description('Print the SKILL.md file for AI agent integration.')
|
|
411
|
+
.action(async () => {
|
|
412
|
+
deps.log(await getSkillMdContent());
|
|
413
|
+
});
|
|
414
|
+
program
|
|
415
|
+
.command('ensure-browser')
|
|
416
|
+
.description('Ensure a Chrome/Chromium browser is available for Latchkey to use.')
|
|
417
|
+
.option('--source <sources>', `Comma-separated list of sources to try in order: ${BROWSER_SOURCES.join(', ')}`, DEFAULT_BROWSER_SOURCES.join(','))
|
|
418
|
+
.action(async (options) => {
|
|
419
|
+
const configPath = deps.config.configPath;
|
|
420
|
+
// Parse and validate sources
|
|
421
|
+
const sourceList = options.source.split(',').map((s) => s.trim());
|
|
422
|
+
const invalidSources = sourceList.filter((s) => !BROWSER_SOURCES.includes(s));
|
|
423
|
+
if (invalidSources.length > 0) {
|
|
424
|
+
deps.errorLog(`Error: Invalid source(s): ${invalidSources.join(', ')}`);
|
|
425
|
+
deps.errorLog(`Valid sources: ${BROWSER_SOURCES.join(', ')}`);
|
|
426
|
+
deps.exit(1);
|
|
427
|
+
}
|
|
428
|
+
const sources = sourceList;
|
|
429
|
+
deps.log(`Discovering browser using sources: ${sources.join(', ')}`);
|
|
430
|
+
try {
|
|
431
|
+
const { config, source } = await ensureBrowser(configPath, sources);
|
|
432
|
+
deps.log('');
|
|
433
|
+
deps.log('Browser configured successfully:');
|
|
434
|
+
deps.log(` Path: ${config.executablePath}`);
|
|
435
|
+
deps.log(` Found via: ${source}`);
|
|
436
|
+
if (source !== 'existing-config') {
|
|
437
|
+
deps.log(` Config saved to: ${configPath}`);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
if (error instanceof BrowserNotFoundError) {
|
|
442
|
+
deps.errorLog(`Error: ${error.message}`);
|
|
443
|
+
deps.exit(1);
|
|
444
|
+
}
|
|
445
|
+
throw error;
|
|
446
|
+
}
|
|
447
|
+
});
|
|
311
448
|
}
|
|
312
449
|
//# sourceMappingURL=cliCommands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliCommands.js","sourceRoot":"","sources":["../../src/cliCommands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cliCommands.js","sourceRoot":"","sources":["../../src/cliCommands.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.d.ts
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
export declare class InsecureFilePermissionsError extends Error {
|
|
5
5
|
constructor(filePath: string, permissions: number);
|
|
6
6
|
}
|
|
7
|
+
export declare class CurlNotFoundError extends Error {
|
|
8
|
+
constructor(curlCommand: string);
|
|
9
|
+
}
|
|
7
10
|
export declare const DEFAULT_KEYRING_SERVICE_NAME = "latchkey";
|
|
8
11
|
export declare const DEFAULT_KEYRING_ACCOUNT_NAME = "encryption-key";
|
|
9
12
|
/**
|
|
@@ -22,12 +25,22 @@ export declare class Config {
|
|
|
22
25
|
readonly encryptionKeyOverride: string | null;
|
|
23
26
|
readonly serviceName: string;
|
|
24
27
|
readonly accountName: string;
|
|
28
|
+
/**
|
|
29
|
+
* When true, the browser login flow is disabled.
|
|
30
|
+
* Commands that require browser login will fail with an error.
|
|
31
|
+
*/
|
|
32
|
+
readonly browserDisabled: boolean;
|
|
25
33
|
constructor(getEnv?: (name: string) => string | undefined);
|
|
26
34
|
/**
|
|
27
35
|
* Check that sensitive files have secure permissions.
|
|
28
36
|
* Throws InsecureFilePermissionsError if any file is readable by group or others.
|
|
29
37
|
*/
|
|
30
38
|
checkSensitiveFilePermissions(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Check that system prerequisites are met.
|
|
41
|
+
* Throws CurlNotFoundError if curl is not available.
|
|
42
|
+
*/
|
|
43
|
+
checkSystemPrerequisites(): void;
|
|
31
44
|
}
|
|
32
45
|
/**
|
|
33
46
|
* Global configuration singleton, initialized from process.env at import time.
|
package/dist/src/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAOlD;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAOlD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,WAAW,EAAE,MAAM;CAIhC;AAWD,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AA8C7D;;GAEG;AACH,qBAAa,MAAM;IACjB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;gBAEtB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAuC;IA8BtF;;;OAGG;IACH,6BAA6B,IAAI,IAAI;IAoBrC;;;OAGG;IACH,wBAAwB,IAAI,IAAI;CAKjC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
package/dist/src/config.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Configuration management for Latchkey.
|
|
3
3
|
*/
|
|
4
|
-
import { existsSync, statSync } from 'node:fs';
|
|
4
|
+
import { accessSync, constants, existsSync, statSync } from 'node:fs';
|
|
5
5
|
import { homedir } from 'node:os';
|
|
6
|
-
import { join, resolve } from 'node:path';
|
|
6
|
+
import { delimiter, isAbsolute, join, resolve } from 'node:path';
|
|
7
7
|
import { getDefaultConfigPath } from './browserConfig.js';
|
|
8
8
|
import { isKeychainAvailable } from './keychain.js';
|
|
9
9
|
export class InsecureFilePermissionsError extends Error {
|
|
@@ -13,13 +13,20 @@ export class InsecureFilePermissionsError extends Error {
|
|
|
13
13
|
this.name = 'InsecureFilePermissionsError';
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
export class CurlNotFoundError extends Error {
|
|
17
|
+
constructor(curlCommand) {
|
|
18
|
+
super(`'${curlCommand}' is not available. Please install curl.`);
|
|
19
|
+
this.name = 'CurlNotFoundError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
16
22
|
const LATCHKEY_STORE_ENV_VAR = 'LATCHKEY_STORE';
|
|
17
23
|
const LATCHKEY_BROWSER_STATE_ENV_VAR = 'LATCHKEY_BROWSER_STATE';
|
|
18
24
|
const LATCHKEY_CONFIG_ENV_VAR = 'LATCHKEY_CONFIG';
|
|
19
|
-
const
|
|
25
|
+
const LATCHKEY_CURL_ENV_VAR = 'LATCHKEY_CURL';
|
|
20
26
|
const LATCHKEY_ENCRYPTION_KEY_ENV_VAR = 'LATCHKEY_ENCRYPTION_KEY';
|
|
21
27
|
const LATCHKEY_KEYRING_SERVICE_NAME_ENV_VAR = 'LATCHKEY_KEYRING_SERVICE_NAME';
|
|
22
28
|
const LATCHKEY_KEYRING_ACCOUNT_NAME_ENV_VAR = 'LATCHKEY_KEYRING_ACCOUNT_NAME';
|
|
29
|
+
const LATCHKEY_DISABLE_BROWSER_ENV_VAR = 'LATCHKEY_DISABLE_BROWSER';
|
|
23
30
|
export const DEFAULT_KEYRING_SERVICE_NAME = 'latchkey';
|
|
24
31
|
export const DEFAULT_KEYRING_ACCOUNT_NAME = 'encryption-key';
|
|
25
32
|
function getDefaultCredentialStorePath(encryptionEnabled) {
|
|
@@ -36,6 +43,29 @@ function resolvePathWithTildeExpansion(path) {
|
|
|
36
43
|
}
|
|
37
44
|
return resolve(path);
|
|
38
45
|
}
|
|
46
|
+
function isExecutable(filePath) {
|
|
47
|
+
try {
|
|
48
|
+
accessSync(filePath, constants.X_OK);
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function findInPath(command) {
|
|
56
|
+
if (isAbsolute(command)) {
|
|
57
|
+
return isExecutable(command);
|
|
58
|
+
}
|
|
59
|
+
const pathEnv = process.env.PATH ?? '';
|
|
60
|
+
const pathDirs = pathEnv.split(delimiter);
|
|
61
|
+
for (const dir of pathDirs) {
|
|
62
|
+
const fullPath = join(dir, command);
|
|
63
|
+
if (isExecutable(fullPath)) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
39
69
|
/**
|
|
40
70
|
* Configuration for Latchkey, sourced from environment variables with sensible defaults.
|
|
41
71
|
*/
|
|
@@ -52,13 +82,20 @@ export class Config {
|
|
|
52
82
|
encryptionKeyOverride;
|
|
53
83
|
serviceName;
|
|
54
84
|
accountName;
|
|
85
|
+
/**
|
|
86
|
+
* When true, the browser login flow is disabled.
|
|
87
|
+
* Commands that require browser login will fail with an error.
|
|
88
|
+
*/
|
|
89
|
+
browserDisabled;
|
|
55
90
|
constructor(getEnv = (name) => process.env[name]) {
|
|
56
|
-
this.curlCommand = getEnv(
|
|
91
|
+
this.curlCommand = getEnv(LATCHKEY_CURL_ENV_VAR) ?? 'curl';
|
|
57
92
|
this.encryptionKeyOverride = getEnv(LATCHKEY_ENCRYPTION_KEY_ENV_VAR) ?? null;
|
|
58
93
|
this.serviceName =
|
|
59
94
|
getEnv(LATCHKEY_KEYRING_SERVICE_NAME_ENV_VAR) ?? DEFAULT_KEYRING_SERVICE_NAME;
|
|
60
95
|
this.accountName =
|
|
61
96
|
getEnv(LATCHKEY_KEYRING_ACCOUNT_NAME_ENV_VAR) ?? DEFAULT_KEYRING_ACCOUNT_NAME;
|
|
97
|
+
const browserDisabledEnv = getEnv(LATCHKEY_DISABLE_BROWSER_ENV_VAR);
|
|
98
|
+
this.browserDisabled = browserDisabledEnv !== undefined && browserDisabledEnv !== '';
|
|
62
99
|
// Determine if encryption will be enabled (either via key override or keychain)
|
|
63
100
|
const encryptionEnabled = this.encryptionKeyOverride !== null ||
|
|
64
101
|
isKeychainAvailable(this.serviceName, this.accountName);
|
|
@@ -93,6 +130,15 @@ export class Config {
|
|
|
93
130
|
}
|
|
94
131
|
}
|
|
95
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Check that system prerequisites are met.
|
|
135
|
+
* Throws CurlNotFoundError if curl is not available.
|
|
136
|
+
*/
|
|
137
|
+
checkSystemPrerequisites() {
|
|
138
|
+
if (!findInPath(this.curlCommand)) {
|
|
139
|
+
throw new CurlNotFoundError(this.curlCommand);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
96
142
|
}
|
|
97
143
|
/**
|
|
98
144
|
* Global configuration singleton, initialized from process.env at import time.
|
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export { encrypt, decrypt, generateKey, EncryptionError, DecryptionError } from
|
|
|
8
8
|
export { EncryptedStorage, EncryptedStorageError } from './encryptedStorage.js';
|
|
9
9
|
export { storeInKeychain, retrieveFromKeychain, deleteFromKeychain, isKeychainAvailable, KeychainError, KeychainNotAvailableError, } from './keychain.js';
|
|
10
10
|
export { run as runCurl, runCaptured as runCurlCaptured, setSubprocessRunner, resetSubprocessRunner, setCapturingSubprocessRunner, resetCapturingSubprocessRunner, } from './curl.js';
|
|
11
|
-
export { typeLikeHuman } from './playwrightUtils.js';
|
|
11
|
+
export { typeLikeHuman, BrowserDisabledError, BrowserFlowsNotSupportedError, } from './playwrightUtils.js';
|
|
12
12
|
export { Service, ServiceSession, SimpleServiceSession, BrowserFollowupServiceSession, LoginCancelledError, LoginFailedError, Slack, SLACK, Discord, DISCORD, Github, GITHUB, Dropbox, DROPBOX, Linear, LINEAR, } from './services/index.js';
|
|
13
13
|
export { Registry, REGISTRY } from './registry.js';
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElG,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,GAAG,IAAI,OAAO,EACd,WAAW,IAAI,eAAe,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,WAAW,CAAC;AAEnB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElG,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,GAAG,IAAI,OAAO,EACd,WAAW,IAAI,eAAe,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,MAAM,GACP,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|