latchkey 2.4.1 → 2.4.3
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/dist/package.json +1 -1
- 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/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 +3 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/latestVersionCheck.d.ts +10 -0
- package/dist/src/latestVersionCheck.d.ts.map +1 -0
- package/dist/src/latestVersionCheck.js +42 -0
- package/dist/src/latestVersionCheck.js.map +1 -0
- package/dist/src/registeredService.d.ts +20 -0
- package/dist/src/registeredService.d.ts.map +1 -0
- package/dist/src/registeredService.js +34 -0
- package/dist/src/registeredService.js.map +1 -0
- package/dist/src/registeredServiceStore.d.ts +24 -0
- package/dist/src/registeredServiceStore.d.ts.map +1 -0
- package/dist/src/registeredServiceStore.js +70 -0
- package/dist/src/registeredServiceStore.js.map +1 -0
- package/dist/src/services/google/maps.d.ts +39 -0
- package/dist/src/services/google/maps.d.ts.map +1 -0
- package/dist/src/services/google/maps.js +94 -0
- package/dist/src/services/google/maps.js.map +1 -0
- package/dist/src/services/google.d.ts.map +1 -1
- package/dist/src/services/google.js +4 -3
- package/dist/src/services/google.js.map +1 -1
- package/dist/src/services/googleAnalytics.d.ts +11 -0
- package/dist/src/services/googleAnalytics.d.ts.map +1 -0
- package/dist/src/services/googleAnalytics.js +18 -0
- package/dist/src/services/googleAnalytics.js.map +1 -0
- package/dist/src/services/googleMaps.d.ts +12 -0
- package/dist/src/services/googleMaps.d.ts.map +1 -0
- package/dist/src/services/googleMaps.js +17 -0
- package/dist/src/services/googleMaps.js.map +1 -0
- package/dist/tests/latestVersionCheck.test.d.ts +2 -0
- package/dist/tests/latestVersionCheck.test.d.ts.map +1 -0
- package/dist/tests/latestVersionCheck.test.js +80 -0
- package/dist/tests/latestVersionCheck.test.js.map +1 -0
- package/package.json +1 -1
package/dist/package.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* CLI tool for encrypting and decrypting latchkey files.
|
|
4
|
+
*
|
|
5
|
+
* This is a developer utility for inspecting and modifying encrypted
|
|
6
|
+
* credential and browser state files.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx scripts/encryptFile.ts decrypt <file> # Decrypt file to stdout
|
|
10
|
+
* npx tsx scripts/encryptFile.ts encrypt <file> # Encrypt file in place
|
|
11
|
+
*
|
|
12
|
+
* The encryption key is sourced from:
|
|
13
|
+
* 1. LATCHKEY_ENCRYPTION_KEY environment variable
|
|
14
|
+
* 2. System keychain
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* npx tsx scripts/encryptFile.ts decrypt ~/.latchkey/credentials.json
|
|
18
|
+
* npx tsx scripts/encryptFile.ts encrypt ~/.latchkey/credentials.json
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=encryptFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryptFile.d.ts","sourceRoot":"","sources":["../../scripts/encryptFile.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* CLI tool for encrypting and decrypting latchkey files.
|
|
4
|
+
*
|
|
5
|
+
* This is a developer utility for inspecting and modifying encrypted
|
|
6
|
+
* credential and browser state files.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx tsx scripts/encryptFile.ts decrypt <file> # Decrypt file to stdout
|
|
10
|
+
* npx tsx scripts/encryptFile.ts encrypt <file> # Encrypt file in place
|
|
11
|
+
*
|
|
12
|
+
* The encryption key is sourced from:
|
|
13
|
+
* 1. LATCHKEY_ENCRYPTION_KEY environment variable
|
|
14
|
+
* 2. System keychain
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* npx tsx scripts/encryptFile.ts decrypt ~/.latchkey/credentials.json
|
|
18
|
+
* npx tsx scripts/encryptFile.ts encrypt ~/.latchkey/credentials.json
|
|
19
|
+
*/
|
|
20
|
+
import { program } from 'commander';
|
|
21
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
22
|
+
import { CONFIG } from '../src/config.js';
|
|
23
|
+
import { EncryptedStorage } from '../src/encryptedStorage.js';
|
|
24
|
+
import { encrypt, generateKey } from '../src/encryption.js';
|
|
25
|
+
import { isKeychainAvailable, retrieveFromKeychain } from '../src/keychain.js';
|
|
26
|
+
const ENCRYPTED_FILE_PREFIX = 'LATCHKEY_ENCRYPTED:';
|
|
27
|
+
function getEncryptionKey() {
|
|
28
|
+
// 1. Check environment variable via Config
|
|
29
|
+
if (CONFIG.encryptionKeyOverride) {
|
|
30
|
+
return CONFIG.encryptionKeyOverride;
|
|
31
|
+
}
|
|
32
|
+
// 2. Check keychain
|
|
33
|
+
if (isKeychainAvailable(CONFIG.serviceName, CONFIG.accountName)) {
|
|
34
|
+
const keychainKey = retrieveFromKeychain(CONFIG.serviceName, CONFIG.accountName);
|
|
35
|
+
if (keychainKey) {
|
|
36
|
+
return keychainKey;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
console.error(`\
|
|
40
|
+
Error: No encryption key available.
|
|
41
|
+
Set LATCHKEY_ENCRYPTION_KEY or ensure the system keychain has a stored key.
|
|
42
|
+
|
|
43
|
+
To generate a new key:
|
|
44
|
+
export LATCHKEY_ENCRYPTION_KEY="${generateKey()}"`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
function decryptCommand(filePath) {
|
|
48
|
+
if (!existsSync(filePath)) {
|
|
49
|
+
console.error(`Error: File not found: ${filePath}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const storage = new EncryptedStorage({
|
|
53
|
+
serviceName: CONFIG.serviceName,
|
|
54
|
+
accountName: CONFIG.accountName,
|
|
55
|
+
});
|
|
56
|
+
const content = storage.readFile(filePath);
|
|
57
|
+
if (content === null) {
|
|
58
|
+
console.error(`Error: Could not read file: ${filePath}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
// Output to stdout
|
|
62
|
+
process.stdout.write(content);
|
|
63
|
+
}
|
|
64
|
+
function encryptCommand(filePath) {
|
|
65
|
+
if (!existsSync(filePath)) {
|
|
66
|
+
console.error(`Error: File not found: ${filePath}`);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
70
|
+
if (content.startsWith(ENCRYPTED_FILE_PREFIX)) {
|
|
71
|
+
console.error(`Error: File is already encrypted: ${filePath}`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
const key = getEncryptionKey();
|
|
75
|
+
const encryptedData = encrypt(content, key);
|
|
76
|
+
const dataToWrite = ENCRYPTED_FILE_PREFIX + encryptedData;
|
|
77
|
+
writeFileSync(filePath, dataToWrite, { encoding: 'utf-8', mode: 0o600 });
|
|
78
|
+
console.error(`Encrypted: ${filePath}`);
|
|
79
|
+
}
|
|
80
|
+
program.name('encryptFile').description(`\
|
|
81
|
+
CLI tool for encrypting and decrypting latchkey files.
|
|
82
|
+
|
|
83
|
+
The encryption key is sourced from:
|
|
84
|
+
1. LATCHKEY_ENCRYPTION_KEY environment variable
|
|
85
|
+
2. System keychain`);
|
|
86
|
+
program
|
|
87
|
+
.command('decrypt')
|
|
88
|
+
.description('Decrypt file and print to stdout')
|
|
89
|
+
.argument('<file>', 'Path to the encrypted file')
|
|
90
|
+
.action((filePath) => {
|
|
91
|
+
decryptCommand(filePath);
|
|
92
|
+
});
|
|
93
|
+
program
|
|
94
|
+
.command('encrypt')
|
|
95
|
+
.description('Encrypt an unencrypted file in place')
|
|
96
|
+
.argument('<file>', 'Path to the file to encrypt')
|
|
97
|
+
.action((filePath) => {
|
|
98
|
+
encryptCommand(filePath);
|
|
99
|
+
});
|
|
100
|
+
program.parse();
|
|
101
|
+
//# sourceMappingURL=encryptFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryptFile.js","sourceRoot":"","sources":["../../scripts/encryptFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserState.d.ts","sourceRoot":"","sources":["../../src/browserState.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAUnD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
package/dist/src/cli.js
CHANGED
|
@@ -10,8 +10,9 @@ import { EncryptedStorage, EncryptedStorageError, EncryptionKeyLostError, } from
|
|
|
10
10
|
import { MigrationError, runMigrations } from './migrations.js';
|
|
11
11
|
import { loadRegisteredServicesIntoRegistry } from './registry.js';
|
|
12
12
|
import { countDailyIfNeeded } from './dailyCounting.js';
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
import { createRequire } from 'node:module';
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
const packageJson = require('../../package.json');
|
|
15
16
|
const deps = createDefaultDependencies();
|
|
16
17
|
try {
|
|
17
18
|
deps.config.checkSensitiveFilePermissions();
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,kCAAkC,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registeredServiceStore.js","sourceRoot":"","sources":["../../src/registeredServiceStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ApiCredentialStatus } from '../../apiCredentials.js';
|
|
3
|
+
import { extractUrlFromCurlArguments, runCaptured } from '../../curl.js';
|
|
4
|
+
import { NoCurlCredentialsNotSupportedError, Service } from '../base.js';
|
|
5
|
+
/**
|
|
6
|
+
* Google Maps API key credentials.
|
|
7
|
+
* The API key is injected as a `key=` query parameter in the URL.
|
|
8
|
+
*/
|
|
9
|
+
export const GoogleMapsApiKeyCredentialsSchema = z.object({
|
|
10
|
+
objectType: z.literal('googleMapsApiKey'),
|
|
11
|
+
apiKey: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export class GoogleMapsApiKeyCredentials {
|
|
14
|
+
objectType = 'googleMapsApiKey';
|
|
15
|
+
apiKey;
|
|
16
|
+
constructor(apiKey) {
|
|
17
|
+
this.apiKey = apiKey;
|
|
18
|
+
}
|
|
19
|
+
injectIntoCurlCall(curlArguments) {
|
|
20
|
+
const url = extractUrlFromCurlArguments(curlArguments);
|
|
21
|
+
if (!url?.startsWith('https://maps.googleapis.com/')) {
|
|
22
|
+
return curlArguments;
|
|
23
|
+
}
|
|
24
|
+
const parsed = new URL(url);
|
|
25
|
+
if (parsed.searchParams.has('key')) {
|
|
26
|
+
return curlArguments;
|
|
27
|
+
}
|
|
28
|
+
parsed.searchParams.set('key', this.apiKey);
|
|
29
|
+
const rewrittenUrl = parsed.toString();
|
|
30
|
+
return curlArguments.map((argument) => (argument === url ? rewrittenUrl : argument));
|
|
31
|
+
}
|
|
32
|
+
isExpired() {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
toJSON() {
|
|
36
|
+
return {
|
|
37
|
+
objectType: this.objectType,
|
|
38
|
+
apiKey: this.apiKey,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
static fromJSON(data) {
|
|
42
|
+
return new GoogleMapsApiKeyCredentials(data.apiKey);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class GoogleMaps extends Service {
|
|
46
|
+
name = 'google-maps';
|
|
47
|
+
displayName = 'Google Maps';
|
|
48
|
+
baseApiUrls = ['https://maps.googleapis.com/'];
|
|
49
|
+
loginUrl = 'https://console.cloud.google.com/google/maps-apis/';
|
|
50
|
+
info = 'https://developers.google.com/maps/documentation. ' +
|
|
51
|
+
'Browser-based authentication is not yet supported. ' +
|
|
52
|
+
'Use `latchkey auth set-nocurl google-maps <api-key>` to add credentials. ' +
|
|
53
|
+
'Example invocation: `latchkey curl google-maps https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway` ' +
|
|
54
|
+
'(the API key will be added automatically).';
|
|
55
|
+
credentialCheckCurlArguments = [
|
|
56
|
+
'https://maps.googleapis.com/maps/api/geocode/json?address=test',
|
|
57
|
+
];
|
|
58
|
+
getCredentialsNoCurl(arguments_) {
|
|
59
|
+
if (arguments_.length !== 1 || arguments_[0] === undefined) {
|
|
60
|
+
throw new GoogleMapsCredentialError('Expected exactly one argument: the API key.\n' +
|
|
61
|
+
'Example: latchkey auth set-nocurl google-maps AIzaSyA1B2C3D4E5F6G7H8I9J0');
|
|
62
|
+
}
|
|
63
|
+
const apiKey = arguments_[0];
|
|
64
|
+
if (apiKey.length < 10) {
|
|
65
|
+
throw new GoogleMapsCredentialError("The provided key doesn't look like a Google Maps API key (too short).\n" +
|
|
66
|
+
'Example: AIzaSyA1B2C3D4E5F6G7H8I9J0');
|
|
67
|
+
}
|
|
68
|
+
return new GoogleMapsApiKeyCredentials(apiKey);
|
|
69
|
+
}
|
|
70
|
+
checkApiCredentials(apiCredentials) {
|
|
71
|
+
const allCurlArgs = apiCredentials.injectIntoCurlCall([
|
|
72
|
+
'-s',
|
|
73
|
+
'-o',
|
|
74
|
+
'/dev/null',
|
|
75
|
+
'-w',
|
|
76
|
+
'%{http_code}',
|
|
77
|
+
...this.credentialCheckCurlArguments,
|
|
78
|
+
]);
|
|
79
|
+
const result = runCaptured(allCurlArgs, 10);
|
|
80
|
+
if (result.stdout === '200') {
|
|
81
|
+
return ApiCredentialStatus.Valid;
|
|
82
|
+
}
|
|
83
|
+
return ApiCredentialStatus.Invalid;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
class GoogleMapsCredentialError extends NoCurlCredentialsNotSupportedError {
|
|
87
|
+
constructor(message) {
|
|
88
|
+
super('google-maps');
|
|
89
|
+
this.message = message;
|
|
90
|
+
this.name = 'GoogleMapsCredentialError';
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export const GOOGLE_MAPS = new GoogleMaps();
|
|
94
|
+
//# sourceMappingURL=maps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maps.js","sourceRoot":"","sources":["../../../../src/services/google/maps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/services/google.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAQ,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,OAAO,EACP,6BAA6B,EAI9B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAqQ/D,cAAM,oBAAqB,SAAQ,6BAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIpC,SAAS,CAAC,eAAe,IAAI,OAAO;IAIpC;;;OAGG;cACgB,mBAAmB,CACpC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,cAAc,EACvB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;cAIjB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgClB,OAAO,CACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,CAAC,EAAE,oBAAoB,GACnC,OAAO,CAAC,cAAc,CAAC;YAmBZ,gBAAgB;
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/services/google.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAQ,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,OAAO,EACP,6BAA6B,EAI9B,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAqQ/D,cAAM,oBAAqB,SAAQ,6BAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAEvD,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIpC,SAAS,CAAC,eAAe,IAAI,OAAO;IAIpC;;;OAGG;cACgB,mBAAmB,CACpC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,cAAc,EACvB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;cAIjB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgClB,OAAO,CACpB,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,CAAC,EAAE,oBAAoB,GACnC,OAAO,CAAC,cAAc,CAAC;YAmBZ,gBAAgB;CAqE/B;AAED,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,sBAAsB;IAC1C,QAAQ,CAAC,WAAW,2CAA4C;IAChE,QAAQ,CAAC,QAAQ,uCAAuC;IACxD,QAAQ,CAAC,IAAI,SAG0D;IAEvE,QAAQ,CAAC,4BAA4B,6DAE1B;IAEF,UAAU,IAAI,oBAAoB;IAIlC,kBAAkB,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAoC5F;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -229,7 +229,7 @@ class GoogleServiceSession extends BrowserFollowupServiceSession {
|
|
|
229
229
|
}
|
|
230
230
|
// Require existing credentials with client ID and secret
|
|
231
231
|
if (!(oldCredentials instanceof OAuthCredentials)) {
|
|
232
|
-
throw new LoginFailedError('Google login requires existing OAuth client credentials. Run prepare first.');
|
|
232
|
+
throw new LoginFailedError('Google login requires existing OAuth client credentials. Run browser-prepare first.');
|
|
233
233
|
}
|
|
234
234
|
const clientId = oldCredentials.clientId;
|
|
235
235
|
const clientSecret = oldCredentials.clientSecret;
|
|
@@ -281,6 +281,7 @@ class GoogleServiceSession extends BrowserFollowupServiceSession {
|
|
|
281
281
|
// Google refresh tokens typically don't expire, so we don't set refreshTokenExpiresAt
|
|
282
282
|
return {
|
|
283
283
|
accessToken: tokens.access_token,
|
|
284
|
+
// exchangeCodeForTokens() guarantees refresh_token is present
|
|
284
285
|
refreshToken: tokens.refresh_token,
|
|
285
286
|
accessTokenExpiresAt,
|
|
286
287
|
};
|
|
@@ -305,7 +306,7 @@ export class Google extends Service {
|
|
|
305
306
|
baseApiUrls = ['https://www.googleapis.com/'];
|
|
306
307
|
loginUrl = 'https://console.cloud.google.com/';
|
|
307
308
|
info = 'Supports some Google Workspace APIs: Gmail, Calendar, Drive, Sheets, Docs, and Contacts. ' +
|
|
308
|
-
'If needed, run "latchkey prepare google" to create an OAuth client first. ' +
|
|
309
|
+
'If needed, run "latchkey auth browser-prepare google" to create an OAuth client first. ' +
|
|
309
310
|
'It may take a few minutes before the OAuth client is ready to use.';
|
|
310
311
|
credentialCheckCurlArguments = [
|
|
311
312
|
'https://www.googleapis.com/oauth2/v1/userinfo',
|
|
@@ -328,7 +329,7 @@ export class Google extends Service {
|
|
|
328
329
|
const accessTokenExpiresAt = new Date(Date.now() + tokens.expires_in * 1000).toISOString();
|
|
329
330
|
// Return new credentials with refreshed access token
|
|
330
331
|
// Keep the same refresh token unless a new one is provided
|
|
331
|
-
return Promise.resolve(new OAuthCredentials(apiCredentials.clientId, apiCredentials.clientSecret, tokens.access_token, tokens.refresh_token, accessTokenExpiresAt, apiCredentials.refreshTokenExpiresAt));
|
|
332
|
+
return Promise.resolve(new OAuthCredentials(apiCredentials.clientId, apiCredentials.clientSecret, tokens.access_token, tokens.refresh_token ?? apiCredentials.refreshToken, accessTokenExpiresAt, apiCredentials.refreshTokenExpiresAt));
|
|
332
333
|
}
|
|
333
334
|
}
|
|
334
335
|
export const GOOGLE = new Google();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/services/google.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/services/google.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Service } from './base.js';
|
|
2
|
+
export declare class GoogleAnalytics extends Service {
|
|
3
|
+
readonly name = "google-analytics";
|
|
4
|
+
readonly displayName = "Google Analytics";
|
|
5
|
+
readonly baseApiUrls: readonly ["https://analyticsdata.googleapis.com/", "https://analyticsadmin.googleapis.com/"];
|
|
6
|
+
readonly loginUrl = "https://analytics.google.com/";
|
|
7
|
+
readonly info: string;
|
|
8
|
+
readonly credentialCheckCurlArguments: readonly ["https://analyticsadmin.googleapis.com/v1beta/accountSummaries"];
|
|
9
|
+
}
|
|
10
|
+
export declare const GOOGLE_ANALYTICS: GoogleAnalytics;
|
|
11
|
+
//# sourceMappingURL=googleAnalytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleAnalytics.d.ts","sourceRoot":"","sources":["../../../src/services/googleAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qBAAa,eAAgB,SAAQ,OAAO;IAC1C,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,sBAAsB;IAC1C,QAAQ,CAAC,WAAW,+FAGT;IACX,QAAQ,CAAC,QAAQ,mCAAmC;IACpD,QAAQ,CAAC,IAAI,SAGgG;IAE7G,QAAQ,CAAC,4BAA4B,6EAE1B;CACZ;AAED,eAAO,MAAM,gBAAgB,iBAAwB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Service } from './base.js';
|
|
2
|
+
export class GoogleAnalytics extends Service {
|
|
3
|
+
name = 'google-analytics';
|
|
4
|
+
displayName = 'Google Analytics';
|
|
5
|
+
baseApiUrls = [
|
|
6
|
+
'https://analyticsdata.googleapis.com/',
|
|
7
|
+
'https://analyticsadmin.googleapis.com/',
|
|
8
|
+
];
|
|
9
|
+
loginUrl = 'https://analytics.google.com/';
|
|
10
|
+
info = 'https://developers.google.com/analytics/devguides/reporting/data/v1. ' +
|
|
11
|
+
'Browser-based authentication is not yet supported. ' +
|
|
12
|
+
'Use `latchkey auth set google-analytics -H "Authorization: Bearer <token>"` to add credentials manually.';
|
|
13
|
+
credentialCheckCurlArguments = [
|
|
14
|
+
'https://analyticsadmin.googleapis.com/v1beta/accountSummaries',
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
export const GOOGLE_ANALYTICS = new GoogleAnalytics();
|
|
18
|
+
//# sourceMappingURL=googleAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleAnalytics.js","sourceRoot":"","sources":["../../../src/services/googleAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,OAAO,eAAgB,SAAQ,OAAO;IACjC,IAAI,GAAG,kBAAkB,CAAC;IAC1B,WAAW,GAAG,kBAAkB,CAAC;IACjC,WAAW,GAAG;QACrB,uCAAuC;QACvC,wCAAwC;KAChC,CAAC;IACF,QAAQ,GAAG,+BAA+B,CAAC;IAC3C,IAAI,GACX,uEAAuE;QACvE,qDAAqD;QACrD,0GAA0G,CAAC;IAEpG,4BAA4B,GAAG;QACtC,+DAA+D;KACvD,CAAC;CACZ;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Service } from './base.js';
|
|
2
|
+
/** Work in progress — not yet registered in the service registry. */
|
|
3
|
+
export declare class GoogleMaps extends Service {
|
|
4
|
+
readonly name = "google-maps";
|
|
5
|
+
readonly displayName = "Google Maps";
|
|
6
|
+
readonly baseApiUrls: readonly ["https://maps.googleapis.com/"];
|
|
7
|
+
readonly loginUrl = "https://console.cloud.google.com/google/maps-apis/";
|
|
8
|
+
readonly info: string;
|
|
9
|
+
readonly credentialCheckCurlArguments: readonly ["https://maps.googleapis.com/maps/api/geocode/json?address=test"];
|
|
10
|
+
}
|
|
11
|
+
export declare const GOOGLE_MAPS: GoogleMaps;
|
|
12
|
+
//# sourceMappingURL=googleMaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleMaps.d.ts","sourceRoot":"","sources":["../../../src/services/googleMaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qEAAqE;AACrE,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,SAIgD;IAE7D,QAAQ,CAAC,4BAA4B,8EAE1B;CACZ;AAED,eAAO,MAAM,WAAW,YAAmB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Service } from './base.js';
|
|
2
|
+
/** Work in progress — not yet registered in the service registry. */
|
|
3
|
+
export class GoogleMaps extends Service {
|
|
4
|
+
name = 'google-maps';
|
|
5
|
+
displayName = 'Google Maps';
|
|
6
|
+
baseApiUrls = ['https://maps.googleapis.com/'];
|
|
7
|
+
loginUrl = 'https://console.cloud.google.com/google/maps-apis/';
|
|
8
|
+
info = 'https://developers.google.com/maps/documentation. ' +
|
|
9
|
+
'Browser-based authentication is not yet supported. ' +
|
|
10
|
+
'Use `latchkey auth set google-maps -H "X-Goog-Api-Key: <key>"` to add credentials manually. ' +
|
|
11
|
+
'Only a subset of the APIs accept API keys in the header.';
|
|
12
|
+
credentialCheckCurlArguments = [
|
|
13
|
+
'https://maps.googleapis.com/maps/api/geocode/json?address=test',
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
export const GOOGLE_MAPS = new GoogleMaps();
|
|
17
|
+
//# sourceMappingURL=googleMaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleMaps.js","sourceRoot":"","sources":["../../../src/services/googleMaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qEAAqE;AACrE,MAAM,OAAO,UAAW,SAAQ,OAAO;IAC5B,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,aAAa,CAAC;IAC5B,WAAW,GAAG,CAAC,8BAA8B,CAAU,CAAC;IACxD,QAAQ,GAAG,oDAAoD,CAAC;IAChE,IAAI,GACX,oDAAoD;QACpD,qDAAqD;QACrD,8FAA8F;QAC9F,0DAA0D,CAAC;IAEpD,4BAA4B,GAAG;QACtC,gEAAgE;KACxD,CAAC;CACZ;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latestVersionCheck.test.d.ts","sourceRoot":"","sources":["../../tests/latestVersionCheck.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { mkdtempSync, readFileSync, rmSync, writeFileSync, existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { Config } from '../src/config.js';
|
|
6
|
+
import { checkLatestVersionIfNeeded } from '../src/latestVersionCheck.js';
|
|
7
|
+
import { setDetachedSubprocessRunner, resetDetachedSubprocessRunner } from '../src/curl.js';
|
|
8
|
+
describe('checkLatestVersionIfNeeded', () => {
|
|
9
|
+
let directory;
|
|
10
|
+
let config;
|
|
11
|
+
let detachedCalls;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
directory = mkdtempSync(join(tmpdir(), 'latchkey-version-check-'));
|
|
14
|
+
config = new Config(() => undefined);
|
|
15
|
+
// Override directory via a new Config with custom env
|
|
16
|
+
config = new Config((name) => (name === 'LATCHKEY_DIRECTORY' ? directory : undefined));
|
|
17
|
+
detachedCalls = [];
|
|
18
|
+
setDetachedSubprocessRunner((args) => {
|
|
19
|
+
detachedCalls = [...detachedCalls, [...args]];
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
resetDetachedSubprocessRunner();
|
|
24
|
+
rmSync(directory, { recursive: true, force: true });
|
|
25
|
+
});
|
|
26
|
+
it('should fire a request when the file does not exist', () => {
|
|
27
|
+
checkLatestVersionIfNeeded(config);
|
|
28
|
+
expect(detachedCalls).toHaveLength(1);
|
|
29
|
+
expect(detachedCalls[0]).toContain('https://dau-tracker.latchkey.host.imbue.com/api/version/latchkey');
|
|
30
|
+
expect(detachedCalls[0]).toContain('--max-time');
|
|
31
|
+
expect(detachedCalls[0]).toContain('5');
|
|
32
|
+
});
|
|
33
|
+
it('should write the current timestamp to the file after firing', () => {
|
|
34
|
+
checkLatestVersionIfNeeded(config);
|
|
35
|
+
const filePath = join(directory, 'latest-version-check');
|
|
36
|
+
expect(existsSync(filePath)).toBe(true);
|
|
37
|
+
const content = readFileSync(filePath, 'utf-8').trim();
|
|
38
|
+
const timestamp = new Date(content);
|
|
39
|
+
expect(isNaN(timestamp.getTime())).toBe(false);
|
|
40
|
+
expect(Date.now() - timestamp.getTime()).toBeLessThan(5000);
|
|
41
|
+
});
|
|
42
|
+
it('should not fire a request when the file has a recent timestamp', () => {
|
|
43
|
+
const filePath = join(directory, 'latest-version-check');
|
|
44
|
+
writeFileSync(filePath, new Date().toISOString(), 'utf-8');
|
|
45
|
+
checkLatestVersionIfNeeded(config);
|
|
46
|
+
expect(detachedCalls).toHaveLength(0);
|
|
47
|
+
});
|
|
48
|
+
it('should fire a request when the timestamp is older than 24 hours', () => {
|
|
49
|
+
const filePath = join(directory, 'latest-version-check');
|
|
50
|
+
const oldDate = new Date(Date.now() - 25 * 60 * 60 * 1000);
|
|
51
|
+
writeFileSync(filePath, oldDate.toISOString(), 'utf-8');
|
|
52
|
+
checkLatestVersionIfNeeded(config);
|
|
53
|
+
expect(detachedCalls).toHaveLength(1);
|
|
54
|
+
});
|
|
55
|
+
it('should fire a request when the file contains invalid content', () => {
|
|
56
|
+
const filePath = join(directory, 'latest-version-check');
|
|
57
|
+
writeFileSync(filePath, 'not-a-date', 'utf-8');
|
|
58
|
+
checkLatestVersionIfNeeded(config);
|
|
59
|
+
expect(detachedCalls).toHaveLength(1);
|
|
60
|
+
});
|
|
61
|
+
it('should not fire a request when telemetry is disabled', () => {
|
|
62
|
+
const telemetryDisabledConfig = new Config((name) => {
|
|
63
|
+
if (name === 'LATCHKEY_DIRECTORY')
|
|
64
|
+
return directory;
|
|
65
|
+
if (name === 'LATCHKEY_DISABLE_TELEMETRY')
|
|
66
|
+
return '1';
|
|
67
|
+
return undefined;
|
|
68
|
+
});
|
|
69
|
+
checkLatestVersionIfNeeded(telemetryDisabledConfig);
|
|
70
|
+
expect(detachedCalls).toHaveLength(0);
|
|
71
|
+
});
|
|
72
|
+
it('should not fire a request when the timestamp is exactly 23 hours old', () => {
|
|
73
|
+
const filePath = join(directory, 'latest-version-check');
|
|
74
|
+
const recentDate = new Date(Date.now() - 23 * 60 * 60 * 1000);
|
|
75
|
+
writeFileSync(filePath, recentDate.toISOString(), 'utf-8');
|
|
76
|
+
checkLatestVersionIfNeeded(config);
|
|
77
|
+
expect(detachedCalls).toHaveLength(0);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=latestVersionCheck.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latestVersionCheck.test.js","sourceRoot":"","sources":["../../tests/latestVersionCheck.test.ts"],"names":[],"mappings":"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"}
|