latchkey 1.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +66 -8
  2. package/dist/integrations/SKILL.md +15 -3
  3. package/dist/package.json +2 -2
  4. package/dist/scripts/codegen.js +1 -1
  5. package/dist/scripts/codegen.js.map +1 -1
  6. package/dist/src/apiCredentialStore.d.ts +1 -1
  7. package/dist/src/apiCredentialStore.d.ts.map +1 -1
  8. package/dist/src/apiCredentialStore.js +1 -1
  9. package/dist/src/apiCredentialStore.js.map +1 -1
  10. package/dist/src/apiCredentials.d.ts +13 -115
  11. package/dist/src/apiCredentials.d.ts.map +1 -1
  12. package/dist/src/apiCredentials.js +10 -101
  13. package/dist/src/apiCredentials.js.map +1 -1
  14. package/dist/src/apiCredentialsSerialization.d.ts +119 -0
  15. package/dist/src/apiCredentialsSerialization.d.ts.map +1 -0
  16. package/dist/src/apiCredentialsSerialization.js +90 -0
  17. package/dist/src/apiCredentialsSerialization.js.map +1 -0
  18. package/dist/src/browserConfig.d.ts +2 -33
  19. package/dist/src/browserConfig.d.ts.map +1 -1
  20. package/dist/src/browserConfig.js +6 -81
  21. package/dist/src/browserConfig.js.map +1 -1
  22. package/dist/src/cli.js +22 -0
  23. package/dist/src/cli.js.map +1 -1
  24. package/dist/src/cliCommands.d.ts +0 -1
  25. package/dist/src/cliCommands.d.ts.map +1 -1
  26. package/dist/src/cliCommands.js +148 -44
  27. package/dist/src/cliCommands.js.map +1 -1
  28. package/dist/src/config.d.ts +4 -3
  29. package/dist/src/config.d.ts.map +1 -1
  30. package/dist/src/config.js +17 -23
  31. package/dist/src/config.js.map +1 -1
  32. package/dist/src/configDataStore.d.ts +43 -0
  33. package/dist/src/configDataStore.d.ts.map +1 -0
  34. package/dist/src/configDataStore.js +108 -0
  35. package/dist/src/configDataStore.js.map +1 -0
  36. package/dist/src/curl.d.ts +10 -0
  37. package/dist/src/curl.d.ts.map +1 -1
  38. package/dist/src/curl.js +88 -0
  39. package/dist/src/curl.js.map +1 -1
  40. package/dist/src/encryptedStorage.d.ts +9 -0
  41. package/dist/src/encryptedStorage.d.ts.map +1 -1
  42. package/dist/src/encryptedStorage.js +12 -0
  43. package/dist/src/encryptedStorage.js.map +1 -1
  44. package/dist/src/index.d.ts +4 -2
  45. package/dist/src/index.d.ts.map +1 -1
  46. package/dist/src/index.js +4 -2
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/migrations.d.ts +9 -0
  49. package/dist/src/migrations.d.ts.map +1 -0
  50. package/dist/src/migrations.js +77 -0
  51. package/dist/src/migrations.js.map +1 -0
  52. package/dist/src/oauthUtils.d.ts +4 -1
  53. package/dist/src/oauthUtils.d.ts.map +1 -1
  54. package/dist/src/oauthUtils.js +1 -1
  55. package/dist/src/oauthUtils.js.map +1 -1
  56. package/dist/src/playwrightUtils.d.ts +2 -2
  57. package/dist/src/playwrightUtils.d.ts.map +1 -1
  58. package/dist/src/playwrightUtils.js +4 -4
  59. package/dist/src/playwrightUtils.js.map +1 -1
  60. package/dist/src/registeredService.d.ts +20 -0
  61. package/dist/src/registeredService.d.ts.map +1 -0
  62. package/dist/src/registeredService.js +34 -0
  63. package/dist/src/registeredService.js.map +1 -0
  64. package/dist/src/registeredServiceStore.d.ts +24 -0
  65. package/dist/src/registeredServiceStore.d.ts.map +1 -0
  66. package/dist/src/registeredServiceStore.js +70 -0
  67. package/dist/src/registeredServiceStore.js.map +1 -0
  68. package/dist/src/registry.d.ts +11 -1
  69. package/dist/src/registry.d.ts.map +1 -1
  70. package/dist/src/registry.js +70 -6
  71. package/dist/src/registry.js.map +1 -1
  72. package/dist/src/services/aws.d.ts +44 -0
  73. package/dist/src/services/aws.d.ts.map +1 -0
  74. package/dist/src/services/aws.js +237 -0
  75. package/dist/src/services/aws.js.map +1 -0
  76. package/dist/src/services/base.d.ts +14 -0
  77. package/dist/src/services/base.d.ts.map +1 -1
  78. package/dist/src/services/base.js +23 -11
  79. package/dist/src/services/base.js.map +1 -1
  80. package/dist/src/services/calendly.d.ts +12 -0
  81. package/dist/src/services/calendly.d.ts.map +1 -0
  82. package/dist/src/services/calendly.js +18 -0
  83. package/dist/src/services/calendly.js.map +1 -0
  84. package/dist/src/services/core/base.d.ts +141 -0
  85. package/dist/src/services/core/base.d.ts.map +1 -0
  86. package/dist/src/services/core/base.js +189 -0
  87. package/dist/src/services/core/base.js.map +1 -0
  88. package/dist/src/services/core/registered.d.ts +24 -0
  89. package/dist/src/services/core/registered.d.ts.map +1 -0
  90. package/dist/src/services/core/registered.js +53 -0
  91. package/dist/src/services/core/registered.js.map +1 -0
  92. package/dist/src/services/discord.d.ts +2 -1
  93. package/dist/src/services/discord.d.ts.map +1 -1
  94. package/dist/src/services/discord.js +4 -1
  95. package/dist/src/services/discord.js.map +1 -1
  96. package/dist/src/services/dropbox.d.ts +3 -2
  97. package/dist/src/services/dropbox.d.ts.map +1 -1
  98. package/dist/src/services/dropbox.js +6 -1
  99. package/dist/src/services/dropbox.js.map +1 -1
  100. package/dist/src/services/figma.d.ts +12 -0
  101. package/dist/src/services/figma.d.ts.map +1 -0
  102. package/dist/src/services/figma.js +14 -0
  103. package/dist/src/services/figma.js.map +1 -0
  104. package/dist/src/services/github.d.ts +2 -1
  105. package/dist/src/services/github.d.ts.map +1 -1
  106. package/dist/src/services/github.js +4 -1
  107. package/dist/src/services/github.js.map +1 -1
  108. package/dist/src/services/gitlab.d.ts +12 -0
  109. package/dist/src/services/gitlab.d.ts.map +1 -0
  110. package/dist/src/services/gitlab.js +14 -0
  111. package/dist/src/services/gitlab.js.map +1 -0
  112. package/dist/src/services/google/analytics.d.ts +11 -0
  113. package/dist/src/services/google/analytics.d.ts.map +1 -0
  114. package/dist/src/services/google/analytics.js +22 -0
  115. package/dist/src/services/google/analytics.js.map +1 -0
  116. package/dist/src/services/google/base.d.ts +73 -0
  117. package/dist/src/services/google/base.d.ts.map +1 -0
  118. package/dist/src/services/google/base.js +323 -0
  119. package/dist/src/services/google/base.js.map +1 -0
  120. package/dist/src/services/google/calendar.d.ts +11 -0
  121. package/dist/src/services/google/calendar.d.ts.map +1 -0
  122. package/dist/src/services/google/calendar.js +22 -0
  123. package/dist/src/services/google/calendar.js.map +1 -0
  124. package/dist/src/services/google/directions.d.ts +14 -0
  125. package/dist/src/services/google/directions.d.ts.map +1 -0
  126. package/dist/src/services/google/directions.js +49 -0
  127. package/dist/src/services/google/directions.js.map +1 -0
  128. package/dist/src/services/google/docs.d.ts +11 -0
  129. package/dist/src/services/google/docs.d.ts.map +1 -0
  130. package/dist/src/services/google/docs.js +19 -0
  131. package/dist/src/services/google/docs.js.map +1 -0
  132. package/dist/src/services/google/drive.d.ts +11 -0
  133. package/dist/src/services/google/drive.d.ts.map +1 -0
  134. package/dist/src/services/google/drive.js +19 -0
  135. package/dist/src/services/google/drive.js.map +1 -0
  136. package/dist/src/services/google/gmail.d.ts +11 -0
  137. package/dist/src/services/google/gmail.d.ts.map +1 -0
  138. package/dist/src/services/google/gmail.js +24 -0
  139. package/dist/src/services/google/gmail.js.map +1 -0
  140. package/dist/src/services/google/maps.d.ts +39 -0
  141. package/dist/src/services/google/maps.d.ts.map +1 -0
  142. package/dist/src/services/google/maps.js +94 -0
  143. package/dist/src/services/google/maps.js.map +1 -0
  144. package/dist/src/services/google/people.d.ts +11 -0
  145. package/dist/src/services/google/people.d.ts.map +1 -0
  146. package/dist/src/services/google/people.js +22 -0
  147. package/dist/src/services/google/people.js.map +1 -0
  148. package/dist/src/services/google/sheets.d.ts +11 -0
  149. package/dist/src/services/google/sheets.d.ts.map +1 -0
  150. package/dist/src/services/google/sheets.js +19 -0
  151. package/dist/src/services/google/sheets.js.map +1 -0
  152. package/dist/src/services/googleAnalytics.d.ts +11 -0
  153. package/dist/src/services/googleAnalytics.d.ts.map +1 -0
  154. package/dist/src/services/googleAnalytics.js +18 -0
  155. package/dist/src/services/googleAnalytics.js.map +1 -0
  156. package/dist/src/services/googleMaps.d.ts +12 -0
  157. package/dist/src/services/googleMaps.d.ts.map +1 -0
  158. package/dist/src/services/googleMaps.js +17 -0
  159. package/dist/src/services/googleMaps.js.map +1 -0
  160. package/dist/src/services/index.d.ts +21 -3
  161. package/dist/src/services/index.d.ts.map +1 -1
  162. package/dist/src/services/index.js +21 -3
  163. package/dist/src/services/index.js.map +1 -1
  164. package/dist/src/services/linear.d.ts +2 -1
  165. package/dist/src/services/linear.d.ts.map +1 -1
  166. package/dist/src/services/linear.js +4 -1
  167. package/dist/src/services/linear.js.map +1 -1
  168. package/dist/src/services/mailchimp.d.ts +3 -2
  169. package/dist/src/services/mailchimp.d.ts.map +1 -1
  170. package/dist/src/services/mailchimp.js +5 -4
  171. package/dist/src/services/mailchimp.js.map +1 -1
  172. package/dist/src/services/notion.d.ts +2 -1
  173. package/dist/src/services/notion.d.ts.map +1 -1
  174. package/dist/src/services/notion.js +4 -1
  175. package/dist/src/services/notion.js.map +1 -1
  176. package/dist/src/services/sentry.d.ts +14 -0
  177. package/dist/src/services/sentry.d.ts.map +1 -0
  178. package/dist/src/services/sentry.js +43 -0
  179. package/dist/src/services/sentry.js.map +1 -0
  180. package/dist/src/services/slack.d.ts +31 -2
  181. package/dist/src/services/slack.d.ts.map +1 -1
  182. package/dist/src/services/slack.js +46 -3
  183. package/dist/src/services/slack.js.map +1 -1
  184. package/dist/src/services/stripe.d.ts +12 -0
  185. package/dist/src/services/stripe.d.ts.map +1 -0
  186. package/dist/src/services/stripe.js +14 -0
  187. package/dist/src/services/stripe.js.map +1 -0
  188. package/dist/src/services/telegram.d.ts +40 -0
  189. package/dist/src/services/telegram.d.ts.map +1 -0
  190. package/dist/src/services/telegram.js +73 -0
  191. package/dist/src/services/telegram.js.map +1 -0
  192. package/dist/src/services/yelp.d.ts +12 -0
  193. package/dist/src/services/yelp.d.ts.map +1 -0
  194. package/dist/src/services/yelp.js +16 -0
  195. package/dist/src/services/yelp.js.map +1 -0
  196. package/dist/src/services/zoom.d.ts +12 -0
  197. package/dist/src/services/zoom.d.ts.map +1 -0
  198. package/dist/src/services/zoom.js +18 -0
  199. package/dist/src/services/zoom.js.map +1 -0
  200. package/dist/tests/apiCredentialStore.test.js +2 -19
  201. package/dist/tests/apiCredentialStore.test.js.map +1 -1
  202. package/dist/tests/apiCredentials.test.js +139 -178
  203. package/dist/tests/apiCredentials.test.js.map +1 -1
  204. package/dist/tests/cli.test.js +755 -255
  205. package/dist/tests/cli.test.js.map +1 -1
  206. package/dist/tests/encryptedStorage.test.js +0 -4
  207. package/dist/tests/encryptedStorage.test.js.map +1 -1
  208. package/dist/tests/encryptedStorageKeyGeneration.test.d.ts +2 -0
  209. package/dist/tests/encryptedStorageKeyGeneration.test.d.ts.map +1 -0
  210. package/dist/tests/encryptedStorageKeyGeneration.test.js +22 -0
  211. package/dist/tests/encryptedStorageKeyGeneration.test.js.map +1 -0
  212. package/dist/tests/encryption.test.js +3 -35
  213. package/dist/tests/encryption.test.js.map +1 -1
  214. package/dist/tests/migrations.test.d.ts +2 -0
  215. package/dist/tests/migrations.test.d.ts.map +1 -0
  216. package/dist/tests/migrations.test.js +164 -0
  217. package/dist/tests/migrations.test.js.map +1 -0
  218. package/dist/tests/playwrightDownload.test.js +2 -65
  219. package/dist/tests/playwrightDownload.test.js.map +1 -1
  220. package/dist/tests/registry.test.js +147 -75
  221. package/dist/tests/registry.test.js.map +1 -1
  222. package/dist/tests/servicesAgainstRecordings.test.js +2 -2
  223. package/dist/tests/servicesAgainstRecordings.test.js.map +1 -1
  224. package/package.json +2 -2
@@ -5,13 +5,15 @@ import { existsSync, unlinkSync } from 'node:fs';
5
5
  import { createInterface } from 'node:readline';
6
6
  import { ApiCredentialStore } from './apiCredentialStore.js';
7
7
  import { ApiCredentialStatus, RawCurlCredentials } from './apiCredentials.js';
8
- import { BROWSER_SOURCES, BrowserNotFoundError, DEFAULT_BROWSER_SOURCES, ensureBrowser, loadBrowserConfig, } from './browserConfig.js';
8
+ import { BROWSER_SOURCES, BrowserNotFoundError, DEFAULT_BROWSER_SOURCES, ensureBrowser, } from './browserConfig.js';
9
9
  import { CONFIG } from './config.js';
10
- import { BrowserDisabledError, BrowserFlowsNotSupportedError } from './playwrightUtils.js';
10
+ import { deleteRegisteredService, loadBrowserConfig, saveRegisteredService, } from './configDataStore.js';
11
+ import { BrowserDisabledError } from './playwrightUtils.js';
11
12
  import { EncryptedStorage } from './encryptedStorage.js';
12
- import { REGISTRY } from './registry.js';
13
- import { LoginCancelledError, LoginFailedError } from './services/index.js';
14
- import { run as curlRun } from './curl.js';
13
+ import { DuplicateServiceNameError, InvalidServiceNameError, REGISTRY, canonicalizeServiceName, } from './registry.js';
14
+ import { RegisteredService } from './services/core/registered.js';
15
+ import { LoginCancelledError, LoginFailedError, NoCurlCredentialsNotSupportedError, } from './services/index.js';
16
+ import { extractUrlFromCurlArguments, run as curlRun } from './curl.js';
15
17
  import { getSkillMdContent } from './skillMd.js';
16
18
  /**
17
19
  * Try to refresh expired credentials if the service supports it.
@@ -35,8 +37,6 @@ async function getCredentialStatus(service, credentials, apiCredentialStore) {
35
37
  const refreshed = await maybeRefreshCredentials(service, credentials, apiCredentialStore);
36
38
  return service.checkApiCredentials(refreshed);
37
39
  }
38
- // Curl flags that don't affect the HTTP request semantics but may not be supported by URL extraction.
39
- const CURL_PASSTHROUGH_FLAGS = new Set(['-v', '--verbose']);
40
40
  /**
41
41
  * Default implementation of CLI dependencies.
42
42
  */
@@ -55,32 +55,6 @@ export function createDefaultDependencies() {
55
55
  },
56
56
  };
57
57
  }
58
- function filterPassthroughFlags(args) {
59
- return args.filter((arg) => !CURL_PASSTHROUGH_FLAGS.has(arg));
60
- }
61
- export function extractUrlFromCurlArguments(args) {
62
- const filteredArgs = filterPassthroughFlags(args);
63
- // Simple URL extraction: look for arguments that look like URLs
64
- // or parse known curl argument patterns
65
- for (let i = 0; i < filteredArgs.length; i++) {
66
- const arg = filteredArgs[i];
67
- if (arg === undefined)
68
- continue;
69
- // Skip flags and their values
70
- if (arg.startsWith('-')) {
71
- // Skip flags that take a value
72
- if (['-H', '-d', '-X', '-o', '-w', '-u', '-A', '-e', '-b', '-c', '-F', '-T'].includes(arg)) {
73
- i++; // Skip the next argument which is the value
74
- }
75
- continue;
76
- }
77
- // This looks like a URL
78
- if (arg.startsWith('http://') || arg.startsWith('https://')) {
79
- return arg;
80
- }
81
- }
82
- return null;
83
- }
84
58
  async function defaultConfirm(message) {
85
59
  const readline = createInterface({
86
60
  input: process.stdin,
@@ -129,10 +103,12 @@ async function clearAll(deps, yes) {
129
103
  }
130
104
  }
131
105
  function createEncryptedStorageFromConfig(config) {
106
+ const hasEncryptedData = existsSync(config.credentialStorePath) || existsSync(config.browserStatePath);
132
107
  return new EncryptedStorage({
133
108
  encryptionKeyOverride: config.encryptionKeyOverride,
134
109
  serviceName: config.serviceName,
135
110
  accountName: config.accountName,
111
+ allowKeyGeneration: !hasEncryptedData,
136
112
  });
137
113
  }
138
114
  function clearService(deps, serviceName) {
@@ -188,8 +164,13 @@ export function registerCommands(program, deps) {
188
164
  servicesCommand
189
165
  .command('list')
190
166
  .description('List all supported services.')
191
- .action(() => {
192
- const serviceNames = deps.registry.services.map((service) => service.name);
167
+ .option('--built-in-only', 'Only list built-in services (exclude registered services)')
168
+ .action((options) => {
169
+ let services = deps.registry.services;
170
+ if (options.builtInOnly === true) {
171
+ services = services.filter((service) => !(service instanceof RegisteredService));
172
+ }
173
+ const serviceNames = services.map((service) => service.name).sort();
193
174
  deps.log(JSON.stringify(serviceNames, null, 2));
194
175
  });
195
176
  servicesCommand
@@ -211,13 +192,101 @@ export function registerCommands(program, deps) {
211
192
  const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
212
193
  const apiCredentials = apiCredentialStore.get(serviceName);
213
194
  const credentialStatus = await getCredentialStatus(service, apiCredentials, apiCredentialStore);
195
+ const serviceType = service instanceof RegisteredService ? 'user-registered' : 'built-in';
214
196
  const info = {
197
+ type: serviceType,
215
198
  authOptions,
216
199
  credentialStatus,
200
+ setCredentialsExample: service.setCredentialsExample(serviceName),
217
201
  developerNotes: service.info,
218
202
  };
219
203
  deps.log(JSON.stringify(info, null, 2));
220
204
  });
205
+ servicesCommand
206
+ .command('register')
207
+ .description('Register a self-hosted service instance.')
208
+ .argument('<service_name>', 'Name for the new service')
209
+ .requiredOption('--base-api-url <url>', 'Base API URL for the self-hosted instance')
210
+ .option('--service-family <name>', 'Name of the built-in service to use as a template, if any (e.g. gitlab)')
211
+ .option('--login-url <url>', 'Login URL for browser-based authentication, if applicable')
212
+ .action((rawServiceName, options) => {
213
+ let serviceName;
214
+ try {
215
+ serviceName = canonicalizeServiceName(rawServiceName);
216
+ }
217
+ catch (error) {
218
+ if (error instanceof InvalidServiceNameError) {
219
+ deps.errorLog(`Error: ${error.message}`);
220
+ deps.exit(1);
221
+ }
222
+ throw error;
223
+ }
224
+ let familyService;
225
+ if (options.serviceFamily !== undefined) {
226
+ familyService = deps.registry.getByName(options.serviceFamily) ?? undefined;
227
+ if (familyService === undefined) {
228
+ deps.errorLog(`Error: Unknown service family: ${options.serviceFamily}`);
229
+ deps.errorLog("Use 'latchkey services list --built-in-only' to see available service families.");
230
+ deps.exit(1);
231
+ }
232
+ }
233
+ if (options.loginUrl !== undefined) {
234
+ if (familyService === undefined) {
235
+ deps.errorLog('Error: --login-url requires a --service-family that supports browser login.');
236
+ deps.exit(1);
237
+ }
238
+ else if (familyService.getSession === undefined) {
239
+ deps.errorLog(`Error: Service family '${options.serviceFamily}' does not support browser login, so --login-url is not applicable.`);
240
+ deps.exit(1);
241
+ }
242
+ }
243
+ else if (familyService?.getSession !== undefined) {
244
+ deps.errorLog(`Error: Service family '${options.serviceFamily}' supports browser login, so --login-url is required.`);
245
+ deps.exit(1);
246
+ }
247
+ const registeredService = new RegisteredService(serviceName, options.baseApiUrl, familyService, options.loginUrl);
248
+ try {
249
+ deps.registry.addService(registeredService);
250
+ }
251
+ catch (error) {
252
+ if (error instanceof DuplicateServiceNameError) {
253
+ deps.errorLog(`Error: ${error.message}`);
254
+ deps.exit(1);
255
+ }
256
+ throw error;
257
+ }
258
+ saveRegisteredService(deps.config.configPath, serviceName, {
259
+ baseApiUrl: options.baseApiUrl,
260
+ serviceFamily: options.serviceFamily,
261
+ loginUrl: options.loginUrl,
262
+ });
263
+ deps.log(`Service '${serviceName}' registered.`);
264
+ });
265
+ servicesCommand
266
+ .command('deregister')
267
+ .description('Deregister a previously registered service instance.')
268
+ .argument('<service_name>', 'Name of the registered service to remove')
269
+ .action((serviceName) => {
270
+ const service = deps.registry.getByName(serviceName);
271
+ if (service === null) {
272
+ deps.errorLog(`Error: Unknown service: ${serviceName}`);
273
+ deps.exit(1);
274
+ }
275
+ if (!(service instanceof RegisteredService)) {
276
+ deps.errorLog(`Error: Service '${serviceName}' is a built-in service and cannot be deregistered.`);
277
+ deps.exit(1);
278
+ }
279
+ const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
280
+ const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
281
+ const credentials = apiCredentialStore.get(serviceName);
282
+ if (credentials !== null) {
283
+ deps.errorLog(`Error: Credentials still exist for '${serviceName}'. ` +
284
+ `Run 'latchkey auth clear ${serviceName}' before deregistering.`);
285
+ deps.exit(1);
286
+ }
287
+ deleteRegisteredService(deps.config.configPath, serviceName);
288
+ deps.log(`Service '${serviceName}' deregistered.`);
289
+ });
221
290
  const authCommand = program.command('auth').description('Manage authentication credentials.');
222
291
  authCommand
223
292
  .command('clear')
@@ -239,17 +308,14 @@ export function registerCommands(program, deps) {
239
308
  const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
240
309
  const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
241
310
  const allCredentials = apiCredentialStore.getAll();
242
- const entries = {};
243
- for (const [serviceName, credentials] of allCredentials) {
311
+ const statusChecks = Array.from(allCredentials, async ([serviceName, credentials]) => {
244
312
  const service = deps.registry.getByName(serviceName);
245
313
  const credentialStatus = service !== null
246
314
  ? await getCredentialStatus(service, credentials, apiCredentialStore)
247
315
  : ApiCredentialStatus.Valid;
248
- entries[serviceName] = {
249
- credentialType: credentials.objectType,
250
- credentialStatus,
251
- };
252
- }
316
+ return [serviceName, { credentialType: credentials.objectType, credentialStatus }];
317
+ });
318
+ const entries = Object.fromEntries(await Promise.all(statusChecks));
253
319
  deps.log(JSON.stringify(entries, null, 2));
254
320
  });
255
321
  authCommand
@@ -282,6 +348,43 @@ export function registerCommands(program, deps) {
282
348
  apiCredentialStore.save(serviceName, credentials);
283
349
  deps.log('Credentials stored.');
284
350
  });
351
+ authCommand
352
+ .command('set-nocurl')
353
+ .description('Store credentials using service-specific arguments (not curl). ' +
354
+ 'Useful for services that cannot express their credentials ' +
355
+ 'as static curl arguments. Arguments are passed to the service ' +
356
+ 'implementation to modify latchkey curl requests on the fly.')
357
+ .argument('<service_name>', 'Name of the service to store credentials for')
358
+ .addHelpText('after', `\nExample:\n $ latchkey auth set-nocurl aws <access-key-id> <secret-access-key>`)
359
+ .allowExcessArguments()
360
+ .action((_serviceName, _options, command) => {
361
+ const [serviceName, ...noCurlArguments] = command.args;
362
+ if (serviceName === undefined) {
363
+ deps.errorLog('Error: Service name is required.');
364
+ deps.exit(1);
365
+ }
366
+ const service = deps.registry.getByName(serviceName);
367
+ if (service === null) {
368
+ deps.errorLog(`Error: Unknown service: ${serviceName}`);
369
+ deps.errorLog("Use 'latchkey services list' to see available services.");
370
+ deps.exit(1);
371
+ }
372
+ const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
373
+ const apiCredentialStore = new ApiCredentialStore(deps.config.credentialStorePath, encryptedStorage);
374
+ let credentials;
375
+ try {
376
+ credentials = service.getCredentialsNoCurl(noCurlArguments);
377
+ }
378
+ catch (error) {
379
+ if (error instanceof NoCurlCredentialsNotSupportedError) {
380
+ deps.errorLog(`Error: ${error.message}`);
381
+ deps.exit(1);
382
+ }
383
+ throw error;
384
+ }
385
+ apiCredentialStore.save(serviceName, credentials);
386
+ deps.log('Credentials stored.');
387
+ });
285
388
  authCommand
286
389
  .command('browser')
287
390
  .description('Login to a service via the browser and store the API credentials.')
@@ -295,7 +398,8 @@ export function registerCommands(program, deps) {
295
398
  }
296
399
  const session = service.getSession?.();
297
400
  if (!session) {
298
- deps.errorLog(new BrowserFlowsNotSupportedError(service.name).message);
401
+ deps.errorLog(`Service '${serviceName}' does not support browser flows. ` +
402
+ `Use '${service.setCredentialsExample(serviceName)}' to set credentials manually.`);
299
403
  deps.exit(1);
300
404
  }
301
405
  const encryptedStorage = createEncryptedStorageFromConfig(deps.config);
@@ -401,7 +505,7 @@ export function registerCommands(program, deps) {
401
505
  deps.exit(1);
402
506
  }
403
507
  }
404
- const allArguments = [...apiCredentials.asCurlArguments(), ...curlArguments];
508
+ const allArguments = apiCredentials.injectIntoCurlCall(curlArguments);
405
509
  const result = deps.runCurl(allArguments);
406
510
  deps.exit(result.returncode);
407
511
  });
@@ -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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"}
@@ -13,9 +13,7 @@ export declare const DEFAULT_KEYRING_ACCOUNT_NAME = "encryption-key";
13
13
  * Configuration for Latchkey, sourced from environment variables with sensible defaults.
14
14
  */
15
15
  export declare class Config {
16
- readonly credentialStorePath: string;
17
- readonly browserStatePath: string;
18
- readonly configPath: string;
16
+ readonly directory: string;
19
17
  readonly curlCommand: string;
20
18
  /**
21
19
  * Encryption key override from environment variable.
@@ -31,6 +29,9 @@ export declare class Config {
31
29
  */
32
30
  readonly browserDisabled: boolean;
33
31
  constructor(getEnv?: (name: string) => string | undefined);
32
+ get credentialStorePath(): string;
33
+ get browserStatePath(): string;
34
+ get configPath(): string;
34
35
  /**
35
36
  * Check that sensitive files have secure permissions.
36
37
  * Throws InsecureFilePermissionsError if any file is readable by group or others.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,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;AA4C7D;;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;IAyBtF;;;OAGG;IACH,6BAA6B,IAAI,IAAI;IAoBrC;;;OAGG;IACH,wBAAwB,IAAI,IAAI;CAKjC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAOlD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,WAAW,EAAE,MAAM;CAIhC;AASD,eAAO,MAAM,4BAA4B,aAAa,CAAC;AACvD,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AA0C7D;;GAEG;AACH,qBAAa,MAAM;IACjB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,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;IAetF,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;OAGG;IACH,6BAA6B,IAAI,IAAI;IAoBrC;;;OAGG;IACH,wBAAwB,IAAI,IAAI;CAKjC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -4,7 +4,6 @@
4
4
  import { accessSync, constants, existsSync, statSync } from 'node:fs';
5
5
  import { homedir } from 'node:os';
6
6
  import { delimiter, isAbsolute, join, resolve } from 'node:path';
7
- import { getDefaultConfigPath } from './browserConfig.js';
8
7
  export class InsecureFilePermissionsError extends Error {
9
8
  constructor(filePath, permissions) {
10
9
  const permissionsOctal = permissions.toString(8).padStart(3, '0');
@@ -18,9 +17,7 @@ export class CurlNotFoundError extends Error {
18
17
  this.name = 'CurlNotFoundError';
19
18
  }
20
19
  }
21
- const LATCHKEY_STORE_ENV_VAR = 'LATCHKEY_STORE';
22
- const LATCHKEY_BROWSER_STATE_ENV_VAR = 'LATCHKEY_BROWSER_STATE';
23
- const LATCHKEY_CONFIG_ENV_VAR = 'LATCHKEY_CONFIG';
20
+ const LATCHKEY_DIRECTORY_ENV_VAR = 'LATCHKEY_DIRECTORY';
24
21
  const LATCHKEY_CURL_ENV_VAR = 'LATCHKEY_CURL';
25
22
  const LATCHKEY_ENCRYPTION_KEY_ENV_VAR = 'LATCHKEY_ENCRYPTION_KEY';
26
23
  const LATCHKEY_KEYRING_SERVICE_NAME_ENV_VAR = 'LATCHKEY_KEYRING_SERVICE_NAME';
@@ -28,12 +25,10 @@ const LATCHKEY_KEYRING_ACCOUNT_NAME_ENV_VAR = 'LATCHKEY_KEYRING_ACCOUNT_NAME';
28
25
  const LATCHKEY_DISABLE_BROWSER_ENV_VAR = 'LATCHKEY_DISABLE_BROWSER';
29
26
  export const DEFAULT_KEYRING_SERVICE_NAME = 'latchkey';
30
27
  export const DEFAULT_KEYRING_ACCOUNT_NAME = 'encryption-key';
31
- function getDefaultCredentialStorePath() {
32
- return join(homedir(), '.latchkey', 'credentials.json.enc');
33
- }
34
- function getDefaultBrowserStatePath() {
35
- return join(homedir(), '.latchkey', 'browser_state.json.enc');
36
- }
28
+ const DEFAULT_DIRECTORY = join(homedir(), '.latchkey');
29
+ const CREDENTIAL_STORE_FILENAME = 'credentials.json.enc';
30
+ const BROWSER_STATE_FILENAME = 'browser_state.json.enc';
31
+ const CONFIG_FILENAME = 'config.json';
37
32
  function resolvePathWithTildeExpansion(path) {
38
33
  if (path.startsWith('~')) {
39
34
  return resolve(homedir(), path.slice(2));
@@ -67,9 +62,7 @@ function findInPath(command) {
67
62
  * Configuration for Latchkey, sourced from environment variables with sensible defaults.
68
63
  */
69
64
  export class Config {
70
- credentialStorePath;
71
- browserStatePath;
72
- configPath;
65
+ directory;
73
66
  curlCommand;
74
67
  /**
75
68
  * Encryption key override from environment variable.
@@ -93,16 +86,17 @@ export class Config {
93
86
  getEnv(LATCHKEY_KEYRING_ACCOUNT_NAME_ENV_VAR) ?? DEFAULT_KEYRING_ACCOUNT_NAME;
94
87
  const browserDisabledEnv = getEnv(LATCHKEY_DISABLE_BROWSER_ENV_VAR);
95
88
  this.browserDisabled = browserDisabledEnv !== undefined && browserDisabledEnv !== '';
96
- const credentialStoreEnv = getEnv(LATCHKEY_STORE_ENV_VAR);
97
- this.credentialStorePath = credentialStoreEnv
98
- ? resolvePathWithTildeExpansion(credentialStoreEnv)
99
- : getDefaultCredentialStorePath();
100
- const browserStateEnv = getEnv(LATCHKEY_BROWSER_STATE_ENV_VAR);
101
- this.browserStatePath = browserStateEnv
102
- ? resolvePathWithTildeExpansion(browserStateEnv)
103
- : getDefaultBrowserStatePath();
104
- const configEnv = getEnv(LATCHKEY_CONFIG_ENV_VAR);
105
- this.configPath = configEnv ? resolvePathWithTildeExpansion(configEnv) : getDefaultConfigPath();
89
+ const directoryEnv = getEnv(LATCHKEY_DIRECTORY_ENV_VAR);
90
+ this.directory = directoryEnv ? resolvePathWithTildeExpansion(directoryEnv) : DEFAULT_DIRECTORY;
91
+ }
92
+ get credentialStorePath() {
93
+ return join(this.directory, CREDENTIAL_STORE_FILENAME);
94
+ }
95
+ get browserStatePath() {
96
+ return join(this.directory, BROWSER_STATE_FILENAME);
97
+ }
98
+ get configPath() {
99
+ return join(this.directory, CONFIG_FILENAME);
106
100
  }
107
101
  /**
108
102
  * Check that sensitive files have secure permissions.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Centralized persistence for config.json.
3
+ *
4
+ * All reads and writes to the config file go through this module,
5
+ * ensuring consistent handling of the file format, directory creation,
6
+ * and data merging.
7
+ */
8
+ import { z } from 'zod';
9
+ declare const RegisteredServiceEntrySchema: z.ZodObject<{
10
+ baseApiUrl: z.ZodString;
11
+ serviceFamily: z.ZodOptional<z.ZodString>;
12
+ loginUrl: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ baseApiUrl: string;
15
+ serviceFamily?: string | undefined;
16
+ loginUrl?: string | undefined;
17
+ }, {
18
+ baseApiUrl: string;
19
+ serviceFamily?: string | undefined;
20
+ loginUrl?: string | undefined;
21
+ }>;
22
+ export type RegisteredServiceEntry = z.infer<typeof RegisteredServiceEntrySchema>;
23
+ declare const BrowserConfigSchema: z.ZodObject<{
24
+ executablePath: z.ZodString;
25
+ source: z.ZodEnum<["system", "playwright", "downloaded"]>;
26
+ discoveredAt: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ executablePath: string;
29
+ source: "system" | "playwright" | "downloaded";
30
+ discoveredAt: string;
31
+ }, {
32
+ executablePath: string;
33
+ source: "system" | "playwright" | "downloaded";
34
+ discoveredAt: string;
35
+ }>;
36
+ export type BrowserConfig = z.infer<typeof BrowserConfigSchema>;
37
+ export declare function loadRegisteredServices(configPath: string): ReadonlyMap<string, RegisteredServiceEntry>;
38
+ export declare function saveRegisteredService(configPath: string, name: string, entry: RegisteredServiceEntry): void;
39
+ export declare function deleteRegisteredService(configPath: string, name: string): void;
40
+ export declare function loadBrowserConfig(configPath: string): BrowserConfig | null;
41
+ export declare function saveBrowserConfig(configPath: string, config: BrowserConfig): void;
42
+ export {};
43
+ //# sourceMappingURL=configDataStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configDataStore.d.ts","sourceRoot":"","sources":["../../src/configDataStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,4BAA4B;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;EAIvB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAuChE,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,GACjB,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAQ7C;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,sBAAsB,GAC5B,IAAI,CAaN;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAa9E;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAc1E;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAIjF"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Centralized persistence for config.json.
3
+ *
4
+ * All reads and writes to the config file go through this module,
5
+ * ensuring consistent handling of the file format, directory creation,
6
+ * and data merging.
7
+ */
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { dirname } from 'node:path';
10
+ import { z } from 'zod';
11
+ const RegisteredServiceEntrySchema = z.object({
12
+ baseApiUrl: z.string(),
13
+ serviceFamily: z.string().optional(),
14
+ loginUrl: z.string().optional(),
15
+ });
16
+ const RegisteredServicesSchema = z.record(z.string(), RegisteredServiceEntrySchema);
17
+ const BrowserConfigSchema = z.object({
18
+ executablePath: z.string(),
19
+ source: z.enum(['system', 'playwright', 'downloaded']),
20
+ discoveredAt: z.string().datetime(),
21
+ });
22
+ const ConfigFileSchema = z.object({
23
+ browser: BrowserConfigSchema.optional(),
24
+ registeredServices: RegisteredServicesSchema.optional(),
25
+ });
26
+ /**
27
+ * Read the raw config object from disk.
28
+ * Returns an empty object if the file doesn't exist or is unparseable.
29
+ */
30
+ function readConfigFile(configPath) {
31
+ if (!existsSync(configPath)) {
32
+ return {};
33
+ }
34
+ try {
35
+ const content = readFileSync(configPath, 'utf-8');
36
+ const data = JSON.parse(content);
37
+ if (typeof data !== 'object' || data === null) {
38
+ return {};
39
+ }
40
+ return data;
41
+ }
42
+ catch {
43
+ return {};
44
+ }
45
+ }
46
+ /**
47
+ * Write a config object to disk, creating the directory if needed.
48
+ */
49
+ function writeConfigFile(configPath, config) {
50
+ const directory = dirname(configPath);
51
+ if (!existsSync(directory)) {
52
+ mkdirSync(directory, { recursive: true, mode: 0o700 });
53
+ }
54
+ const content = JSON.stringify(config, null, 2);
55
+ writeFileSync(configPath, content, { encoding: 'utf-8', mode: 0o600 });
56
+ }
57
+ export function loadRegisteredServices(configPath) {
58
+ const raw = readConfigFile(configPath);
59
+ try {
60
+ const registeredServices = RegisteredServicesSchema.parse(raw.registeredServices ?? {});
61
+ return new Map(Object.entries(registeredServices));
62
+ }
63
+ catch {
64
+ return new Map();
65
+ }
66
+ }
67
+ export function saveRegisteredService(configPath, name, entry) {
68
+ const existingConfig = readConfigFile(configPath);
69
+ const registeredServices = typeof existingConfig.registeredServices === 'object' &&
70
+ existingConfig.registeredServices !== null
71
+ ? existingConfig.registeredServices
72
+ : {};
73
+ registeredServices[name] = entry;
74
+ existingConfig.registeredServices = registeredServices;
75
+ writeConfigFile(configPath, existingConfig);
76
+ }
77
+ export function deleteRegisteredService(configPath, name) {
78
+ const existingConfig = readConfigFile(configPath);
79
+ const registeredServices = typeof existingConfig.registeredServices === 'object' &&
80
+ existingConfig.registeredServices !== null
81
+ ? existingConfig.registeredServices
82
+ : {};
83
+ const { [name]: _, ...rest } = registeredServices;
84
+ existingConfig.registeredServices = rest;
85
+ writeConfigFile(configPath, existingConfig);
86
+ }
87
+ export function loadBrowserConfig(configPath) {
88
+ const raw = readConfigFile(configPath);
89
+ try {
90
+ const configFile = ConfigFileSchema.parse(raw);
91
+ if (!configFile.browser) {
92
+ return null;
93
+ }
94
+ if (!existsSync(configFile.browser.executablePath)) {
95
+ return null;
96
+ }
97
+ return configFile.browser;
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ export function saveBrowserConfig(configPath, config) {
104
+ const existingConfig = readConfigFile(configPath);
105
+ existingConfig.browser = config;
106
+ writeConfigFile(configPath, existingConfig);
107
+ }
108
+ //# sourceMappingURL=configDataStore.js.map