latchkey 2.5.0 → 2.5.1

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.
Files changed (51) hide show
  1. package/dist/src/cli.js +0 -0
  2. package/package.json +2 -2
  3. package/dist/integrations/SKILL.md +0 -114
  4. package/dist/integrations/openclaw/SKILL.md +0 -106
  5. package/dist/package.json +0 -67
  6. package/dist/scripts/encryptFile.d.ts +0 -21
  7. package/dist/scripts/encryptFile.d.ts.map +0 -1
  8. package/dist/scripts/encryptFile.js +0 -101
  9. package/dist/scripts/encryptFile.js.map +0 -1
  10. package/dist/skills/generic/SKILL.md +0 -114
  11. package/dist/skills/openclaw/SKILL.md +0 -106
  12. package/dist/src/browserState.d.ts +0 -8
  13. package/dist/src/browserState.d.ts.map +0 -1
  14. package/dist/src/browserState.js +0 -21
  15. package/dist/src/browserState.js.map +0 -1
  16. package/dist/src/latestVersionCheck.d.ts +0 -10
  17. package/dist/src/latestVersionCheck.d.ts.map +0 -1
  18. package/dist/src/latestVersionCheck.js +0 -42
  19. package/dist/src/latestVersionCheck.js.map +0 -1
  20. package/dist/src/registeredService.d.ts +0 -20
  21. package/dist/src/registeredService.d.ts.map +0 -1
  22. package/dist/src/registeredService.js +0 -34
  23. package/dist/src/registeredService.js.map +0 -1
  24. package/dist/src/registeredServiceStore.d.ts +0 -24
  25. package/dist/src/registeredServiceStore.d.ts.map +0 -1
  26. package/dist/src/registeredServiceStore.js +0 -70
  27. package/dist/src/registeredServiceStore.js.map +0 -1
  28. package/dist/src/services/base.d.ts +0 -141
  29. package/dist/src/services/base.d.ts.map +0 -1
  30. package/dist/src/services/base.js +0 -189
  31. package/dist/src/services/base.js.map +0 -1
  32. package/dist/src/services/google/maps.d.ts +0 -39
  33. package/dist/src/services/google/maps.d.ts.map +0 -1
  34. package/dist/src/services/google/maps.js +0 -94
  35. package/dist/src/services/google/maps.js.map +0 -1
  36. package/dist/src/services/google.d.ts +0 -34
  37. package/dist/src/services/google.d.ts.map +0 -1
  38. package/dist/src/services/google.js +0 -336
  39. package/dist/src/services/google.js.map +0 -1
  40. package/dist/src/services/googleAnalytics.d.ts +0 -11
  41. package/dist/src/services/googleAnalytics.d.ts.map +0 -1
  42. package/dist/src/services/googleAnalytics.js +0 -18
  43. package/dist/src/services/googleAnalytics.js.map +0 -1
  44. package/dist/src/services/googleMaps.d.ts +0 -12
  45. package/dist/src/services/googleMaps.d.ts.map +0 -1
  46. package/dist/src/services/googleMaps.js +0 -17
  47. package/dist/src/services/googleMaps.js.map +0 -1
  48. package/dist/tests/latestVersionCheck.test.d.ts +0 -2
  49. package/dist/tests/latestVersionCheck.test.d.ts.map +0 -1
  50. package/dist/tests/latestVersionCheck.test.js +0 -80
  51. package/dist/tests/latestVersionCheck.test.js.map +0 -1
@@ -1,21 +0,0 @@
1
- /**
2
- * Browser state management utilities.
3
- */
4
- import { homedir } from 'node:os';
5
- import { resolve } from 'node:path';
6
- const LATCHKEY_BROWSER_STATE_ENV_VAR = 'LATCHKEY_BROWSER_STATE';
7
- /**
8
- * Get the browser state path from the LATCHKEY_BROWSER_STATE environment variable.
9
- */
10
- export function getBrowserStatePath() {
11
- const envValue = process.env[LATCHKEY_BROWSER_STATE_ENV_VAR];
12
- if (envValue) {
13
- // Expand ~ to home directory
14
- if (envValue.startsWith('~')) {
15
- return resolve(homedir(), envValue.slice(2));
16
- }
17
- return resolve(envValue);
18
- }
19
- return null;
20
- }
21
- //# sourceMappingURL=browserState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browserState.js","sourceRoot":"","sources":["../../src/browserState.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,8BAA8B,GAAG,wBAAwB,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACb,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Fire-and-forget version check on startup.
3
- *
4
- * Reads `LATCHKEY_DIR/latest-version-check` for an ISO timestamp.
5
- * If the file is missing or the timestamp is older than 24 hours,
6
- * spawns a detached curl process to ping the version endpoint.
7
- */
8
- import type { Config } from './config.js';
9
- export declare function checkLatestVersionIfNeeded(config: Config): void;
10
- //# sourceMappingURL=latestVersionCheck.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"latestVersionCheck.d.ts","sourceRoot":"","sources":["../../src/latestVersionCheck.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAyB1C,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAgB/D"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Fire-and-forget version check on startup.
3
- *
4
- * Reads `LATCHKEY_DIR/latest-version-check` for an ISO timestamp.
5
- * If the file is missing or the timestamp is older than 24 hours,
6
- * spawns a detached curl process to ping the version endpoint.
7
- */
8
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
9
- import { join } from 'node:path';
10
- import { runDetached } from './curl.js';
11
- const VERSION_CHECK_FILENAME = 'latest-version-check';
12
- const VERSION_CHECK_URL = 'https://dau-tracker.latchkey.host.imbue.com/api/version/latchkey';
13
- const ONE_DAY_IN_MILLISECONDS = 24 * 60 * 60 * 1000;
14
- const TIMEOUT_SECONDS = 5;
15
- function shouldCheck(config) {
16
- const filePath = join(config.directory, VERSION_CHECK_FILENAME);
17
- if (!existsSync(filePath)) {
18
- return true;
19
- }
20
- const content = readFileSync(filePath, 'utf-8').trim();
21
- const timestamp = new Date(content);
22
- if (isNaN(timestamp.getTime())) {
23
- return true;
24
- }
25
- return Date.now() - timestamp.getTime() > ONE_DAY_IN_MILLISECONDS;
26
- }
27
- export function checkLatestVersionIfNeeded(config) {
28
- if (config.telemetryDisabled || !shouldCheck(config)) {
29
- return;
30
- }
31
- const filePath = join(config.directory, VERSION_CHECK_FILENAME);
32
- writeFileSync(filePath, new Date().toISOString(), 'utf-8');
33
- runDetached([
34
- '--silent',
35
- '--max-time',
36
- String(TIMEOUT_SECONDS),
37
- '--output',
38
- '/dev/null',
39
- VERSION_CHECK_URL,
40
- ]);
41
- }
42
- //# sourceMappingURL=latestVersionCheck.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"latestVersionCheck.js","sourceRoot":"","sources":["../../src/latestVersionCheck.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AACtD,MAAM,iBAAiB,GAAG,kEAAkE,CAAC;AAC7F,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACpD,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,uBAAuB,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAChE,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IAE3D,WAAW,CAAC;QACV,UAAU;QACV,YAAY;QACZ,MAAM,CAAC,eAAe,CAAC;QACvB,UAAU;QACV,WAAW;QACX,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * A user-registered service that wraps a built-in "family" service
3
- * with a custom name and base API URL. Used for self-hosted instances.
4
- */
5
- import type { ApiCredentials } from './apiCredentials.js';
6
- import { Service, type ServiceSession } from './services/base.js';
7
- export declare class RegisteredService extends Service {
8
- readonly name: string;
9
- readonly displayName: string;
10
- readonly baseApiUrls: readonly string[];
11
- readonly loginUrl: string;
12
- readonly info: string;
13
- readonly credentialCheckCurlArguments: readonly string[];
14
- private readonly familyService;
15
- constructor(name: string, baseApiUrl: string, familyService: Service, loginUrl?: string);
16
- getSession?(): ServiceSession;
17
- setCredentialsExample(serviceName: string): string;
18
- getCredentialsNoCurl(arguments_: readonly string[]): ApiCredentials;
19
- }
20
- //# sourceMappingURL=registeredService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registeredService.d.ts","sourceRoot":"","sources":["../../src/registeredService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAElE,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;gBAE5B,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;IAe9E,UAAU,CAAC,IAAI,cAAc;IAEtC,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc;CAG7E"}
@@ -1,34 +0,0 @@
1
- /**
2
- * A user-registered service that wraps a built-in "family" service
3
- * with a custom name and base API URL. Used for self-hosted instances.
4
- */
5
- import { Service } from './services/base.js';
6
- export class RegisteredService extends Service {
7
- name;
8
- displayName;
9
- baseApiUrls;
10
- loginUrl;
11
- info;
12
- credentialCheckCurlArguments;
13
- familyService;
14
- constructor(name, baseApiUrl, familyService, loginUrl) {
15
- super();
16
- this.name = name;
17
- this.displayName = name;
18
- this.baseApiUrls = [baseApiUrl];
19
- this.loginUrl = loginUrl ?? '';
20
- this.info = `Self-hosted ${familyService.displayName} instance. ${familyService.info}`;
21
- this.credentialCheckCurlArguments = [];
22
- this.familyService = familyService;
23
- if (loginUrl !== undefined && familyService.getSession !== undefined) {
24
- this.getSession = () => familyService.getSession();
25
- }
26
- }
27
- setCredentialsExample(serviceName) {
28
- return this.familyService.setCredentialsExample(serviceName);
29
- }
30
- getCredentialsNoCurl(arguments_) {
31
- return this.familyService.getCredentialsNoCurl(arguments_);
32
- }
33
- }
34
- //# sourceMappingURL=registeredService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registeredService.js","sourceRoot":"","sources":["../../src/registeredService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAuB,MAAM,oBAAoB,CAAC;AAElE,MAAM,OAAO,iBAAkB,SAAQ,OAAO;IACnC,IAAI,CAAS;IACb,WAAW,CAAS;IACpB,WAAW,CAAoB;IAC/B,QAAQ,CAAS;IACjB,IAAI,CAAS;IACb,4BAA4B,CAAoB;IAExC,aAAa,CAAU;IAExC,YAAY,IAAY,EAAE,UAAkB,EAAE,aAAsB,EAAE,QAAiB;QACrF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,eAAe,aAAa,CAAC,WAAW,cAAc,aAAa,CAAC,IAAI,EAAE,CAAC;QACvF,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrE,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,UAAW,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAID,qBAAqB,CAAC,WAAmB;QACvC,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IAEQ,oBAAoB,CAAC,UAA6B;QACzD,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;CACF"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Persistence for user-registered services in config.json.
3
- */
4
- import { z } from 'zod';
5
- import type { Registry } from './registry.js';
6
- declare const RegisteredServiceEntrySchema: z.ZodObject<{
7
- baseApiUrl: z.ZodString;
8
- serviceFamily: z.ZodString;
9
- loginUrl: z.ZodOptional<z.ZodString>;
10
- }, "strip", z.ZodTypeAny, {
11
- baseApiUrl: string;
12
- serviceFamily: string;
13
- loginUrl?: string | undefined;
14
- }, {
15
- baseApiUrl: string;
16
- serviceFamily: string;
17
- loginUrl?: string | undefined;
18
- }>;
19
- export type RegisteredServiceEntry = z.infer<typeof RegisteredServiceEntrySchema>;
20
- export declare function loadRegisteredServices(configPath: string): ReadonlyMap<string, RegisteredServiceEntry>;
21
- export declare function saveRegisteredService(configPath: string, name: string, entry: RegisteredServiceEntry): void;
22
- export declare function loadRegisteredServicesIntoRegistry(configPath: string, registry: Registry): void;
23
- export {};
24
- //# sourceMappingURL=registeredServiceStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registeredServiceStore.d.ts","sourceRoot":"","sources":["../../src/registeredServiceStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,QAAA,MAAM,4BAA4B;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAiB7C;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,sBAAsB,GAC5B,IAAI,CA2BN;AAED,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAkB/F"}
@@ -1,70 +0,0 @@
1
- /**
2
- * Persistence for user-registered services in config.json.
3
- */
4
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
5
- import { dirname } from 'node:path';
6
- import { z } from 'zod';
7
- import { RegisteredService } from './registeredService.js';
8
- const RegisteredServiceEntrySchema = z.object({
9
- baseApiUrl: z.string(),
10
- serviceFamily: z.string(),
11
- loginUrl: z.string().optional(),
12
- });
13
- const RegisteredServicesSchema = z.record(z.string(), RegisteredServiceEntrySchema);
14
- export function loadRegisteredServices(configPath) {
15
- if (!existsSync(configPath)) {
16
- return new Map();
17
- }
18
- try {
19
- const content = readFileSync(configPath, 'utf-8');
20
- const data = JSON.parse(content);
21
- if (typeof data !== 'object' || data === null) {
22
- return new Map();
23
- }
24
- const record = data;
25
- const registeredServices = RegisteredServicesSchema.parse(record.registeredServices ?? {});
26
- return new Map(Object.entries(registeredServices));
27
- }
28
- catch {
29
- return new Map();
30
- }
31
- }
32
- export function saveRegisteredService(configPath, name, entry) {
33
- const directory = dirname(configPath);
34
- if (!existsSync(directory)) {
35
- mkdirSync(directory, { recursive: true, mode: 0o700 });
36
- }
37
- let existingConfig = {};
38
- if (existsSync(configPath)) {
39
- try {
40
- const existingContent = readFileSync(configPath, 'utf-8');
41
- existingConfig = JSON.parse(existingContent);
42
- }
43
- catch {
44
- // Ignore parse errors, start fresh
45
- }
46
- }
47
- const registeredServices = typeof existingConfig.registeredServices === 'object' &&
48
- existingConfig.registeredServices !== null
49
- ? existingConfig.registeredServices
50
- : {};
51
- registeredServices[name] = entry;
52
- existingConfig.registeredServices = registeredServices;
53
- const content = JSON.stringify(existingConfig, null, 2);
54
- writeFileSync(configPath, content, { encoding: 'utf-8' });
55
- }
56
- export function loadRegisteredServicesIntoRegistry(configPath, registry) {
57
- const entries = loadRegisteredServices(configPath);
58
- for (const [name, entry] of entries) {
59
- const familyService = registry.getByName(entry.serviceFamily);
60
- if (familyService === null) {
61
- continue;
62
- }
63
- if (registry.getByName(name) !== null) {
64
- continue;
65
- }
66
- const registeredService = new RegisteredService(name, entry.baseApiUrl, familyService, entry.loginUrl);
67
- registry.addService(registeredService);
68
- }
69
- }
70
- //# sourceMappingURL=registeredServiceStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registeredServiceStore.js","sourceRoot":"","sources":["../../src/registeredServiceStore.ts"],"names":[],"mappings":"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"}
@@ -1,141 +0,0 @@
1
- /**
2
- * Base classes and interfaces for service implementations.
3
- */
4
- import type { Browser, BrowserContext, Response } from 'playwright';
5
- import { ApiCredentialStatus, ApiCredentials } from '../apiCredentials.js';
6
- import { EncryptedStorage } from '../encryptedStorage.js';
7
- import { type BrowserLaunchOptions } from '../playwrightUtils.js';
8
- export declare class NoCurlCredentialsNotSupportedError extends Error {
9
- constructor(serviceName: string);
10
- }
11
- export declare class LoginCancelledError extends Error {
12
- constructor(message?: string);
13
- }
14
- export declare class LoginFailedError extends Error {
15
- constructor(message?: string);
16
- }
17
- export declare function isBrowserClosedError(error: Error): boolean;
18
- /**
19
- * Abstract base class for services that latchkey can authenticate with.
20
- */
21
- export declare abstract class Service {
22
- abstract readonly name: string;
23
- abstract readonly displayName: string;
24
- abstract readonly baseApiUrls: readonly (string | RegExp)[];
25
- abstract readonly loginUrl: string;
26
- /**
27
- * Developer notes about this service for agents and users.
28
- */
29
- abstract readonly info: string;
30
- /**
31
- * Return curl arguments for checking credentials (excluding auth headers).
32
- */
33
- abstract readonly credentialCheckCurlArguments: readonly string[];
34
- /**
35
- * Check if the given API credentials are valid for this service.
36
- */
37
- checkApiCredentials(apiCredentials: ApiCredentials): ApiCredentialStatus;
38
- /**
39
- * Return an example showing how to set credentials for this service via the CLI.
40
- * The service name is passed as a parameter (not baked in) so the same example
41
- * can be reused for aliased services in the future.
42
- */
43
- abstract setCredentialsExample(serviceName: string): string;
44
- /**
45
- * Set credentials from arbitrary (non-curl) arguments.
46
- * Services that support this should override to validate and return typed credentials.
47
- */
48
- getCredentialsNoCurl(_arguments: readonly string[]): ApiCredentials;
49
- /**
50
- * Get a new session for the login flow.
51
- * Services that don't support browser login should not implement this method.
52
- */
53
- getSession?(): ServiceSession;
54
- /**
55
- * Optional method to refresh expired credentials.
56
- * Services can implement this to refresh access tokens without user interaction.
57
- * @param apiCredentials - The expired credentials
58
- * @returns New credentials if refresh succeeded, null otherwise
59
- */
60
- refreshCredentials?(apiCredentials: ApiCredentials): Promise<ApiCredentials | null>;
61
- }
62
- /**
63
- * Base class for service sessions that handle browser-based interactions.
64
- * This includes login, preparation steps, and any other browser automation.
65
- */
66
- export declare abstract class ServiceSession {
67
- readonly service: Service;
68
- constructor(service: Service);
69
- /**
70
- * Handle a response during the headful login phase.
71
- */
72
- abstract onResponse(response: Response): void;
73
- /**
74
- * Check if the login phase is complete.
75
- */
76
- protected abstract isLoginComplete(): boolean;
77
- /**
78
- * Finalize credentials after the headful login phase.
79
- * Receives the browser and context from the login phase, which are still open.
80
- * @param browser - Browser instance
81
- * @param context - Browser context
82
- * @param oldCredentials - Optional existing credentials to reuse
83
- */
84
- protected abstract finalizeCredentials(browser: Browser, context: BrowserContext, oldCredentials?: ApiCredentials): Promise<ApiCredentials | null>;
85
- /**
86
- * Wait until the browser login phase is complete.
87
- */
88
- private waitForLoginComplete;
89
- /**
90
- * Optionally diagnose a timeout error that occurred during credential finalization.
91
- *
92
- * Services can override this to inspect the page state and return a more
93
- * specific error (e.g., checking for permission denied messages).
94
- * If this returns an error, it will be thrown instead of the generic
95
- * LoginFailedError. If it returns null, the original timeout error message is used.
96
- */
97
- protected diagnoseTimeoutError(_context: BrowserContext, _originalError: Error): Promise<Error | null>;
98
- /**
99
- * Optional preparation step before login.
100
- * Services can override this to perform setup (e.g., creating OAuth clients).
101
- */
102
- prepare?(encryptedStorage: EncryptedStorage, launchOptions?: BrowserLaunchOptions): Promise<ApiCredentials>;
103
- /**
104
- * Perform the login flow and return the extracted credentials.
105
- * @param encryptedStorage - Storage for managing credentials
106
- * @param launchOptions - Browser launch options
107
- * @param oldCredentials - Optional existing credentials to reuse (e.g., client ID/secret)
108
- */
109
- login(encryptedStorage: EncryptedStorage, launchOptions?: BrowserLaunchOptions, oldCredentials?: ApiCredentials): Promise<ApiCredentials>;
110
- }
111
- /**
112
- * Simple service session where credentials are extracted by observing requests during login.
113
- */
114
- export declare abstract class SimpleServiceSession extends ServiceSession {
115
- protected apiCredentials: ApiCredentials | null;
116
- /**
117
- * Extract API credentials from a response during the headful login phase.
118
- */
119
- protected abstract getApiCredentialsFromResponse(response: Response): Promise<ApiCredentials | null>;
120
- onResponse(response: Response): void;
121
- protected isLoginComplete(): boolean;
122
- protected finalizeCredentials(_browser: Browser, _context: BrowserContext, _oldCredentials?: ApiCredentials): Promise<ApiCredentials | null>;
123
- }
124
- /**
125
- * Service session that requires a browser followup to finalize credentials.
126
- *
127
- * The login phase captures login state. After login completes,
128
- * the same browser session is reused to perform additional actions
129
- * (e.g., navigating to settings and creating an API key).
130
- */
131
- export declare abstract class BrowserFollowupServiceSession extends ServiceSession {
132
- /**
133
- * Perform actions in the browser to finalize and extract API credentials.
134
- * This runs in the same browser session used for login.
135
- * @param context - Browser context
136
- * @param oldCredentials - Optional existing credentials to reuse
137
- */
138
- protected abstract performBrowserFollowup(context: BrowserContext, oldCredentials?: ApiCredentials): Promise<ApiCredentials | null>;
139
- protected finalizeCredentials(_browser: Browser, context: BrowserContext, oldCredentials?: ApiCredentials): Promise<ApiCredentials | null>;
140
- }
141
- //# sourceMappingURL=base.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/services/base.ts"],"names":[],"mappings":"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"}
@@ -1,189 +0,0 @@
1
- /**
2
- * Base classes and interfaces for service implementations.
3
- */
4
- import { ApiCredentialStatus, ApiCredentialsUsageError, } from '../apiCredentials.js';
5
- import { runCaptured } from '../curl.js';
6
- import { showSpinnerPage, withTempBrowserContext, } from '../playwrightUtils.js';
7
- export class NoCurlCredentialsNotSupportedError extends Error {
8
- constructor(serviceName) {
9
- super(`Service '${serviceName}' does not support set-nocurl credentials.`);
10
- this.name = 'NoCurlCredentialsNotSupportedError';
11
- }
12
- }
13
- export class LoginCancelledError extends Error {
14
- constructor(message = 'Login was cancelled because the browser was closed.') {
15
- super(message);
16
- this.name = 'LoginCancelledError';
17
- }
18
- }
19
- export class LoginFailedError extends Error {
20
- constructor(message = 'Login failed: no credentials were extracted.') {
21
- super(message);
22
- this.name = 'LoginFailedError';
23
- }
24
- }
25
- export function isBrowserClosedError(error) {
26
- const message = error.message.toLowerCase();
27
- return (message.includes('target closed') ||
28
- message.includes('browser closed') ||
29
- message.includes('browser has been closed') ||
30
- message.includes('context has been closed') ||
31
- message.includes('page has been closed') ||
32
- message.includes('net::err_aborted'));
33
- }
34
- function isTimeoutError(error) {
35
- return error.name === 'TimeoutError';
36
- }
37
- /**
38
- * Abstract base class for services that latchkey can authenticate with.
39
- */
40
- export class Service {
41
- /**
42
- * Check if the given API credentials are valid for this service.
43
- */
44
- checkApiCredentials(apiCredentials) {
45
- let allCurlArgs;
46
- try {
47
- allCurlArgs = apiCredentials.injectIntoCurlCall([
48
- '-s',
49
- '-o',
50
- '/dev/null',
51
- '-w',
52
- '%{http_code}',
53
- ...this.credentialCheckCurlArguments,
54
- ]);
55
- }
56
- catch (error) {
57
- if (error instanceof ApiCredentialsUsageError) {
58
- return ApiCredentialStatus.Missing;
59
- }
60
- throw error;
61
- }
62
- const result = runCaptured(allCurlArgs, 10);
63
- if (result.stdout === '200') {
64
- return ApiCredentialStatus.Valid;
65
- }
66
- return ApiCredentialStatus.Invalid;
67
- }
68
- /**
69
- * Set credentials from arbitrary (non-curl) arguments.
70
- * Services that support this should override to validate and return typed credentials.
71
- */
72
- getCredentialsNoCurl(_arguments) {
73
- throw new NoCurlCredentialsNotSupportedError(this.name);
74
- }
75
- }
76
- /**
77
- * Base class for service sessions that handle browser-based interactions.
78
- * This includes login, preparation steps, and any other browser automation.
79
- */
80
- export class ServiceSession {
81
- service;
82
- constructor(service) {
83
- this.service = service;
84
- }
85
- /**
86
- * Wait until the browser login phase is complete.
87
- */
88
- async waitForLoginComplete(page) {
89
- while (!this.isLoginComplete()) {
90
- await page.waitForTimeout(100);
91
- }
92
- }
93
- /**
94
- * Optionally diagnose a timeout error that occurred during credential finalization.
95
- *
96
- * Services can override this to inspect the page state and return a more
97
- * specific error (e.g., checking for permission denied messages).
98
- * If this returns an error, it will be thrown instead of the generic
99
- * LoginFailedError. If it returns null, the original timeout error message is used.
100
- */
101
- diagnoseTimeoutError(_context, _originalError) {
102
- return Promise.resolve(null);
103
- }
104
- /**
105
- * Perform the login flow and return the extracted credentials.
106
- * @param encryptedStorage - Storage for managing credentials
107
- * @param launchOptions - Browser launch options
108
- * @param oldCredentials - Optional existing credentials to reuse (e.g., client ID/secret)
109
- */
110
- async login(encryptedStorage, launchOptions = {}, oldCredentials) {
111
- return withTempBrowserContext(encryptedStorage, launchOptions, async ({ browser, context }) => {
112
- const page = await context.newPage();
113
- page.on('response', (response) => {
114
- this.onResponse(response);
115
- });
116
- try {
117
- await page.goto(this.service.loginUrl);
118
- await this.waitForLoginComplete(page);
119
- }
120
- catch (error) {
121
- if (error instanceof Error && isBrowserClosedError(error)) {
122
- throw new LoginCancelledError();
123
- }
124
- throw error;
125
- }
126
- let apiCredentials;
127
- try {
128
- apiCredentials = await this.finalizeCredentials(browser, context, oldCredentials);
129
- }
130
- catch (error) {
131
- if (error instanceof Error && isBrowserClosedError(error)) {
132
- throw new LoginCancelledError();
133
- }
134
- if (error instanceof Error && isTimeoutError(error)) {
135
- const diagnosedError = await this.diagnoseTimeoutError(context, error);
136
- if (diagnosedError !== null) {
137
- throw diagnosedError;
138
- }
139
- throw new LoginFailedError(`Login failed: ${error.message}`);
140
- }
141
- throw error;
142
- }
143
- if (apiCredentials === null) {
144
- throw new LoginFailedError();
145
- }
146
- return apiCredentials;
147
- });
148
- }
149
- }
150
- /**
151
- * Simple service session where credentials are extracted by observing requests during login.
152
- */
153
- export class SimpleServiceSession extends ServiceSession {
154
- apiCredentials = null;
155
- onResponse(response) {
156
- if (this.apiCredentials !== null) {
157
- return;
158
- }
159
- this.getApiCredentialsFromResponse(response)
160
- .then((credentials) => {
161
- if (this.apiCredentials === null && credentials !== null) {
162
- this.apiCredentials = credentials;
163
- }
164
- })
165
- .catch(() => {
166
- // Ignore errors extracting credentials
167
- });
168
- }
169
- isLoginComplete() {
170
- return this.apiCredentials !== null;
171
- }
172
- finalizeCredentials(_browser, _context, _oldCredentials) {
173
- return Promise.resolve(this.apiCredentials);
174
- }
175
- }
176
- /**
177
- * Service session that requires a browser followup to finalize credentials.
178
- *
179
- * The login phase captures login state. After login completes,
180
- * the same browser session is reused to perform additional actions
181
- * (e.g., navigating to settings and creating an API key).
182
- */
183
- export class BrowserFollowupServiceSession extends ServiceSession {
184
- async finalizeCredentials(_browser, context, oldCredentials) {
185
- await showSpinnerPage(context, `Finalizing ${this.service.displayName} login...`);
186
- return this.performBrowserFollowup(context, oldCredentials);
187
- }
188
- }
189
- //# sourceMappingURL=base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/services/base.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { z } from 'zod';
2
- import { ApiCredentialStatus, type ApiCredentials } from '../../apiCredentials.js';
3
- import { Service } from '../base.js';
4
- /**
5
- * Google Maps API key credentials.
6
- * The API key is injected as a `key=` query parameter in the URL.
7
- */
8
- export declare const GoogleMapsApiKeyCredentialsSchema: z.ZodObject<{
9
- objectType: z.ZodLiteral<"googleMapsApiKey">;
10
- apiKey: z.ZodString;
11
- }, "strip", z.ZodTypeAny, {
12
- objectType: "googleMapsApiKey";
13
- apiKey: string;
14
- }, {
15
- objectType: "googleMapsApiKey";
16
- apiKey: string;
17
- }>;
18
- export type GoogleMapsApiKeyCredentialsData = z.infer<typeof GoogleMapsApiKeyCredentialsSchema>;
19
- export declare class GoogleMapsApiKeyCredentials implements ApiCredentials {
20
- readonly objectType: "googleMapsApiKey";
21
- readonly apiKey: string;
22
- constructor(apiKey: string);
23
- injectIntoCurlCall(curlArguments: readonly string[]): readonly string[];
24
- isExpired(): boolean | undefined;
25
- toJSON(): GoogleMapsApiKeyCredentialsData;
26
- static fromJSON(data: GoogleMapsApiKeyCredentialsData): GoogleMapsApiKeyCredentials;
27
- }
28
- export declare class GoogleMaps extends Service {
29
- readonly name = "google-maps";
30
- readonly displayName = "Google Maps";
31
- readonly baseApiUrls: readonly ["https://maps.googleapis.com/"];
32
- readonly loginUrl = "https://console.cloud.google.com/google/maps-apis/";
33
- readonly info: string;
34
- readonly credentialCheckCurlArguments: readonly ["https://maps.googleapis.com/maps/api/geocode/json?address=test"];
35
- getCredentialsNoCurl(arguments_: readonly string[]): ApiCredentials;
36
- checkApiCredentials(apiCredentials: ApiCredentials): ApiCredentialStatus;
37
- }
38
- export declare const GOOGLE_MAPS: GoogleMaps;
39
- //# sourceMappingURL=maps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"maps.d.ts","sourceRoot":"","sources":["../../../../src/services/google/maps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAsC,OAAO,EAAE,MAAM,YAAY,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;EAG5C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAEhG,qBAAa,2BAA4B,YAAW,cAAc;IAChE,QAAQ,CAAC,UAAU,EAAG,kBAAkB,CAAU;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;IAI1B,kBAAkB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE;IAcvE,SAAS,IAAI,OAAO,GAAG,SAAS;IAIhC,MAAM,IAAI,+BAA+B;IAOzC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,+BAA+B,GAAG,2BAA2B;CAGpF;AAED,qBAAa,UAAW,SAAQ,OAAO;IACrC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,WAAW,4CAA6C;IACjE,QAAQ,CAAC,QAAQ,wDAAwD;IACzE,QAAQ,CAAC,IAAI,SAKkC;IAE/C,QAAQ,CAAC,4BAA4B,8EAE1B;IAEF,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc;IAiBnE,mBAAmB,CAAC,cAAc,EAAE,cAAc,GAAG,mBAAmB;CAiBlF;AAUD,eAAO,MAAM,WAAW,YAAmB,CAAC"}