latchkey 2.0.0 → 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 (127) hide show
  1. package/README.md +39 -1
  2. package/dist/integrations/SKILL.md +6 -1
  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/apiCredentials.d.ts +2 -1
  7. package/dist/src/apiCredentials.d.ts.map +1 -1
  8. package/dist/src/apiCredentials.js +1 -0
  9. package/dist/src/apiCredentials.js.map +1 -1
  10. package/dist/src/browserConfig.d.ts +1 -28
  11. package/dist/src/browserConfig.d.ts.map +1 -1
  12. package/dist/src/browserConfig.js +4 -73
  13. package/dist/src/browserConfig.js.map +1 -1
  14. package/dist/src/cli.js +2 -0
  15. package/dist/src/cli.js.map +1 -1
  16. package/dist/src/cliCommands.d.ts.map +1 -1
  17. package/dist/src/cliCommands.js +98 -4
  18. package/dist/src/cliCommands.js.map +1 -1
  19. package/dist/src/configDataStore.d.ts +43 -0
  20. package/dist/src/configDataStore.d.ts.map +1 -0
  21. package/dist/src/configDataStore.js +108 -0
  22. package/dist/src/configDataStore.js.map +1 -0
  23. package/dist/src/oauthUtils.js +1 -1
  24. package/dist/src/oauthUtils.js.map +1 -1
  25. package/dist/src/registeredService.d.ts +20 -0
  26. package/dist/src/registeredService.d.ts.map +1 -0
  27. package/dist/src/registeredService.js +34 -0
  28. package/dist/src/registeredService.js.map +1 -0
  29. package/dist/src/registeredServiceStore.d.ts +24 -0
  30. package/dist/src/registeredServiceStore.d.ts.map +1 -0
  31. package/dist/src/registeredServiceStore.js +70 -0
  32. package/dist/src/registeredServiceStore.js.map +1 -0
  33. package/dist/src/registry.d.ts +11 -1
  34. package/dist/src/registry.d.ts.map +1 -1
  35. package/dist/src/registry.js +52 -4
  36. package/dist/src/registry.js.map +1 -1
  37. package/dist/src/services/aws.d.ts +1 -1
  38. package/dist/src/services/aws.d.ts.map +1 -1
  39. package/dist/src/services/aws.js +1 -1
  40. package/dist/src/services/aws.js.map +1 -1
  41. package/dist/src/services/calendly.d.ts +1 -1
  42. package/dist/src/services/calendly.d.ts.map +1 -1
  43. package/dist/src/services/calendly.js +1 -1
  44. package/dist/src/services/calendly.js.map +1 -1
  45. package/dist/src/services/core/base.d.ts +141 -0
  46. package/dist/src/services/core/base.d.ts.map +1 -0
  47. package/dist/src/services/core/base.js +189 -0
  48. package/dist/src/services/core/base.js.map +1 -0
  49. package/dist/src/services/core/registered.d.ts +24 -0
  50. package/dist/src/services/core/registered.d.ts.map +1 -0
  51. package/dist/src/services/core/registered.js +53 -0
  52. package/dist/src/services/core/registered.js.map +1 -0
  53. package/dist/src/services/discord.d.ts +1 -1
  54. package/dist/src/services/discord.d.ts.map +1 -1
  55. package/dist/src/services/discord.js +1 -1
  56. package/dist/src/services/discord.js.map +1 -1
  57. package/dist/src/services/dropbox.d.ts +1 -1
  58. package/dist/src/services/dropbox.d.ts.map +1 -1
  59. package/dist/src/services/dropbox.js +1 -1
  60. package/dist/src/services/dropbox.js.map +1 -1
  61. package/dist/src/services/figma.d.ts +1 -1
  62. package/dist/src/services/figma.d.ts.map +1 -1
  63. package/dist/src/services/figma.js +1 -1
  64. package/dist/src/services/figma.js.map +1 -1
  65. package/dist/src/services/github.d.ts +1 -1
  66. package/dist/src/services/github.d.ts.map +1 -1
  67. package/dist/src/services/github.js +1 -1
  68. package/dist/src/services/github.js.map +1 -1
  69. package/dist/src/services/gitlab.d.ts +1 -1
  70. package/dist/src/services/gitlab.d.ts.map +1 -1
  71. package/dist/src/services/gitlab.js +1 -1
  72. package/dist/src/services/gitlab.js.map +1 -1
  73. package/dist/src/services/google/base.d.ts +1 -1
  74. package/dist/src/services/google/base.d.ts.map +1 -1
  75. package/dist/src/services/google/base.js +1 -1
  76. package/dist/src/services/google/base.js.map +1 -1
  77. package/dist/src/services/google/directions.d.ts +1 -1
  78. package/dist/src/services/google/directions.d.ts.map +1 -1
  79. package/dist/src/services/google/directions.js +1 -1
  80. package/dist/src/services/google/directions.js.map +1 -1
  81. package/dist/src/services/index.d.ts +3 -2
  82. package/dist/src/services/index.d.ts.map +1 -1
  83. package/dist/src/services/index.js +3 -2
  84. package/dist/src/services/index.js.map +1 -1
  85. package/dist/src/services/linear.d.ts +1 -1
  86. package/dist/src/services/linear.d.ts.map +1 -1
  87. package/dist/src/services/linear.js +1 -1
  88. package/dist/src/services/linear.js.map +1 -1
  89. package/dist/src/services/mailchimp.d.ts +1 -1
  90. package/dist/src/services/mailchimp.d.ts.map +1 -1
  91. package/dist/src/services/mailchimp.js +1 -1
  92. package/dist/src/services/mailchimp.js.map +1 -1
  93. package/dist/src/services/notion.d.ts +1 -1
  94. package/dist/src/services/notion.d.ts.map +1 -1
  95. package/dist/src/services/notion.js +1 -1
  96. package/dist/src/services/notion.js.map +1 -1
  97. package/dist/src/services/sentry.d.ts +1 -1
  98. package/dist/src/services/sentry.d.ts.map +1 -1
  99. package/dist/src/services/sentry.js +1 -1
  100. package/dist/src/services/sentry.js.map +1 -1
  101. package/dist/src/services/slack.d.ts +1 -1
  102. package/dist/src/services/slack.d.ts.map +1 -1
  103. package/dist/src/services/slack.js +1 -1
  104. package/dist/src/services/slack.js.map +1 -1
  105. package/dist/src/services/stripe.d.ts +1 -1
  106. package/dist/src/services/stripe.d.ts.map +1 -1
  107. package/dist/src/services/stripe.js +1 -1
  108. package/dist/src/services/stripe.js.map +1 -1
  109. package/dist/src/services/telegram.d.ts +1 -1
  110. package/dist/src/services/telegram.d.ts.map +1 -1
  111. package/dist/src/services/telegram.js +1 -1
  112. package/dist/src/services/telegram.js.map +1 -1
  113. package/dist/src/services/yelp.d.ts +1 -1
  114. package/dist/src/services/yelp.d.ts.map +1 -1
  115. package/dist/src/services/yelp.js +1 -1
  116. package/dist/src/services/yelp.js.map +1 -1
  117. package/dist/src/services/zoom.d.ts +1 -1
  118. package/dist/src/services/zoom.d.ts.map +1 -1
  119. package/dist/src/services/zoom.js +1 -1
  120. package/dist/src/services/zoom.js.map +1 -1
  121. package/dist/tests/cli.test.js +602 -2
  122. package/dist/tests/cli.test.js.map +1 -1
  123. package/dist/tests/registry.test.js +100 -2
  124. package/dist/tests/registry.test.js.map +1 -1
  125. package/dist/tests/servicesAgainstRecordings.test.js +1 -1
  126. package/dist/tests/servicesAgainstRecordings.test.js.map +1 -1
  127. package/package.json +2 -2
@@ -0,0 +1,141 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/services/core/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/services/core/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
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
+ * When no family service is provided, the registered service acts as a
6
+ * generic service that only supports `latchkey auth set` for credentials.
7
+ */
8
+ import { ApiCredentialStatus, type ApiCredentials } from '../../apiCredentials.js';
9
+ import { Service, type ServiceSession } from './base.js';
10
+ export declare class RegisteredService extends Service {
11
+ readonly name: string;
12
+ readonly displayName: string;
13
+ readonly baseApiUrls: readonly string[];
14
+ readonly loginUrl: string;
15
+ readonly info: string;
16
+ readonly credentialCheckCurlArguments: readonly string[];
17
+ private readonly familyService;
18
+ constructor(name: string, baseApiUrl: string, familyService?: Service, loginUrl?: string);
19
+ getSession?(): ServiceSession;
20
+ checkApiCredentials(): ApiCredentialStatus;
21
+ setCredentialsExample(serviceName: string): string;
22
+ getCredentialsNoCurl(arguments_: readonly string[]): ApiCredentials;
23
+ }
24
+ //# sourceMappingURL=registered.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registered.d.ts","sourceRoot":"","sources":["../../../../src/services/core/registered.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzD,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,CAAsB;gBAExC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;IAqB/E,UAAU,CAAC,IAAI,cAAc;IAE7B,mBAAmB,IAAI,mBAAmB;IAInD,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAOzC,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc;CAM7E"}
@@ -0,0 +1,53 @@
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
+ * When no family service is provided, the registered service acts as a
6
+ * generic service that only supports `latchkey auth set` for credentials.
7
+ */
8
+ import { ApiCredentialStatus } from '../../apiCredentials.js';
9
+ import { Service } from './base.js';
10
+ export class RegisteredService extends Service {
11
+ name;
12
+ displayName;
13
+ baseApiUrls;
14
+ loginUrl;
15
+ info;
16
+ credentialCheckCurlArguments;
17
+ familyService;
18
+ constructor(name, baseApiUrl, familyService, loginUrl) {
19
+ super();
20
+ this.name = name;
21
+ this.displayName = name;
22
+ this.baseApiUrls = [baseApiUrl];
23
+ this.loginUrl = loginUrl ?? '';
24
+ this.credentialCheckCurlArguments = [];
25
+ this.familyService = familyService;
26
+ if (familyService !== undefined) {
27
+ this.info = `Self-hosted ${familyService.displayName} instance. ${familyService.info}`;
28
+ }
29
+ else {
30
+ this.info =
31
+ 'Generic service. Use `latchkey auth set` to supply credentials as curl arguments.';
32
+ }
33
+ if (loginUrl !== undefined && familyService?.getSession !== undefined) {
34
+ this.getSession = () => familyService.getSession();
35
+ }
36
+ }
37
+ checkApiCredentials() {
38
+ return ApiCredentialStatus.Unknown;
39
+ }
40
+ setCredentialsExample(serviceName) {
41
+ if (this.familyService !== undefined) {
42
+ return this.familyService.setCredentialsExample(serviceName);
43
+ }
44
+ return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
45
+ }
46
+ getCredentialsNoCurl(arguments_) {
47
+ if (this.familyService !== undefined) {
48
+ return this.familyService.getCredentialsNoCurl(arguments_);
49
+ }
50
+ return super.getCredentialsNoCurl(arguments_);
51
+ }
52
+ }
53
+ //# sourceMappingURL=registered.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registered.js","sourceRoot":"","sources":["../../../../src/services/core/registered.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAuB,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,OAAO,EAAuB,MAAM,WAAW,CAAC;AAEzD,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,CAAsB;IAEpD,YAAY,IAAY,EAAE,UAAkB,EAAE,aAAuB,EAAE,QAAiB;QACtF,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,4BAA4B,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,GAAG,eAAe,aAAa,CAAC,WAAW,cAAc,aAAa,CAAC,IAAI,EAAE,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI;gBACP,mFAAmF,CAAC;QACxF,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;YACtE,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,UAAW,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAIQ,mBAAmB;QAC1B,OAAO,mBAAmB,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,qBAAqB,CAAC,WAAmB;QACvC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;IAEQ,oBAAoB,CAAC,UAA6B;QACzD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;CACF"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import type { Response } from 'playwright';
5
5
  import { ApiCredentials } from '../apiCredentials.js';
6
- import { Service, SimpleServiceSession } from './base.js';
6
+ import { Service, SimpleServiceSession } from './core/base.js';
7
7
  declare class DiscordServiceSession extends SimpleServiceSession {
8
8
  protected getApiCredentialsFromResponse(response: Response): Promise<ApiCredentials | null>;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../src/services/discord.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE1D,cAAM,qBAAsB,SAAQ,oBAAoB;cACtC,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAsBlC;AAED,qBAAa,OAAQ,SAAQ,OAAO;IAClC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,aAAa;IACjC,QAAQ,CAAC,WAAW,wCAAyC;IAC7D,QAAQ,CAAC,QAAQ,+BAA+B;IAChD,QAAQ,CAAC,IAAI,SAEyD;IAEtE,QAAQ,CAAC,4BAA4B,oDAAqD;IAE1F,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,qBAAqB;CAG7C;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../src/services/discord.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,cAAM,qBAAsB,SAAQ,oBAAoB;cACtC,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAsBlC;AAED,qBAAa,OAAQ,SAAQ,OAAO;IAClC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,aAAa;IACjC,QAAQ,CAAC,WAAW,wCAAyC;IAC7D,QAAQ,CAAC,QAAQ,+BAA+B;IAChD,QAAQ,CAAC,IAAI,SAEyD;IAEtE,QAAQ,CAAC,4BAA4B,oDAAqD;IAE1F,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,qBAAqB;CAG7C;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Discord service implementation.
3
3
  */
4
4
  import { AuthorizationBare } from '../apiCredentials.js';
5
- import { Service, SimpleServiceSession } from './base.js';
5
+ import { Service, SimpleServiceSession } from './core/base.js';
6
6
  class DiscordServiceSession extends SimpleServiceSession {
7
7
  async getApiCredentialsFromResponse(response) {
8
8
  const request = response.request();
@@ -1 +1 @@
1
- {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../../src/services/discord.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,qBAAsB,SAAQ,oBAAoB;IAC5C,KAAK,CAAC,6BAA6B,CAC3C,QAAkB;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oEAAoE;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/D,OAAO,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,OAAQ,SAAQ,OAAO;IACzB,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,SAAS,CAAC;IACxB,WAAW,GAAG,CAAC,0BAA0B,CAAU,CAAC;IACpD,QAAQ,GAAG,2BAA2B,CAAC;IACvC,IAAI,GACX,iDAAiD;QACjD,mEAAmE,CAAC;IAE7D,4BAA4B,GAAG,CAAC,sCAAsC,CAAU,CAAC;IAE1F,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,kCAAkC,CAAC;IAC5E,CAAC;IAEQ,UAAU;QACjB,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../../src/services/discord.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,qBAAsB,SAAQ,oBAAoB;IAC5C,KAAK,CAAC,6BAA6B,CAC3C,QAAkB;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oEAAoE;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC5C,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC/D,OAAO,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,OAAQ,SAAQ,OAAO;IACzB,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,SAAS,CAAC;IACxB,WAAW,GAAG,CAAC,0BAA0B,CAAU,CAAC;IACpD,QAAQ,GAAG,2BAA2B,CAAC;IACvC,IAAI,GACX,iDAAiD;QACjD,mEAAmE,CAAC;IAE7D,4BAA4B,GAAG,CAAC,sCAAsC,CAAU,CAAC;IAE1F,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,kCAAkC,CAAC;IAC5E,CAAC;IAEQ,UAAU;QACjB,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import type { Response, BrowserContext } from 'playwright';
5
5
  import { ApiCredentials } from '../apiCredentials.js';
6
- import { Service, BrowserFollowupServiceSession } from './base.js';
6
+ import { Service, BrowserFollowupServiceSession } from './core/base.js';
7
7
  declare class DropboxServiceSession extends BrowserFollowupServiceSession {
8
8
  private isLoggedIn;
9
9
  onResponse(response: Response): void;
@@ -1 +1 @@
1
- {"version":3,"file":"dropbox.d.ts","sourceRoot":"","sources":["../../../src/services/dropbox.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,WAAW,CAAC;AAIrF,cAAM,qBAAsB,SAAQ,6BAA6B;IAC/D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA0BpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAgFlC;AAED,qBAAa,OAAQ,SAAQ,OAAO;IAClC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,aAAa;IACjC,QAAQ,CAAC,WAAW,gHAIT;IACX,QAAQ,CAAC,QAAQ,mCAAmC;IACpD,QAAQ,CAAC,IAAI,SAE8F;IAE3G,QAAQ,CAAC,4BAA4B,4HAM1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,qBAAqB;CAG7C;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"dropbox.d.ts","sourceRoot":"","sources":["../../../src/services/dropbox.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,gBAAgB,CAAC;AAI1F,cAAM,qBAAsB,SAAQ,6BAA6B;IAC/D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA0BpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAgFlC;AAED,qBAAa,OAAQ,SAAQ,OAAO;IAClC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,aAAa;IACjC,QAAQ,CAAC,WAAW,gHAIT;IACX,QAAQ,CAAC,QAAQ,mCAAmC;IACpD,QAAQ,CAAC,IAAI,SAE8F;IAE3G,QAAQ,CAAC,4BAA4B,4HAM1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,qBAAqB;CAG7C;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { AuthorizationBearer } from '../apiCredentials.js';
5
5
  import { generateLatchkeyAppName, typeLikeHuman } from '../playwrightUtils.js';
6
- import { Service, BrowserFollowupServiceSession, LoginFailedError } from './base.js';
6
+ import { Service, BrowserFollowupServiceSession, LoginFailedError } from './core/base.js';
7
7
  const DEFAULT_TIMEOUT_MS = 8000;
8
8
  class DropboxServiceSession extends BrowserFollowupServiceSession {
9
9
  isLoggedIn = false;
@@ -1 +1 @@
1
- {"version":3,"file":"dropbox.js","sourceRoot":"","sources":["../../../src/services/dropbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dropbox.js","sourceRoot":"","sources":["../../../src/services/dropbox.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Service } from './base.js';
1
+ import { Service } from './core/base.js';
2
2
  export declare class Figma extends Service {
3
3
  readonly name = "figma";
4
4
  readonly displayName = "Figma";
@@ -1 +1 @@
1
- {"version":3,"file":"figma.d.ts","sourceRoot":"","sources":["../../../src/services/figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qBAAa,KAAM,SAAQ,OAAO;IAChC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,WAAW;IAC/B,QAAQ,CAAC,WAAW,sCAAuC;IAC3D,QAAQ,CAAC,QAAQ,iCAAiC;IAClD,QAAQ,CAAC,IAAI,2CAA2C;IAExD,QAAQ,CAAC,4BAA4B,2CAA4C;IAEjF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGnD;AAED,eAAO,MAAM,KAAK,OAAc,CAAC"}
1
+ {"version":3,"file":"figma.d.ts","sourceRoot":"","sources":["../../../src/services/figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,KAAM,SAAQ,OAAO;IAChC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,WAAW;IAC/B,QAAQ,CAAC,WAAW,sCAAuC;IAC3D,QAAQ,CAAC,QAAQ,iCAAiC;IAClD,QAAQ,CAAC,IAAI,2CAA2C;IAExD,QAAQ,CAAC,4BAA4B,2CAA4C;IAEjF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGnD;AAED,eAAO,MAAM,KAAK,OAAc,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Service } from './base.js';
1
+ import { Service } from './core/base.js';
2
2
  export class Figma extends Service {
3
3
  name = 'figma';
4
4
  displayName = 'Figma';
@@ -1 +1 @@
1
- {"version":3,"file":"figma.js","sourceRoot":"","sources":["../../../src/services/figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,OAAO,KAAM,SAAQ,OAAO;IACvB,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,OAAO,CAAC;IACtB,WAAW,GAAG,CAAC,wBAAwB,CAAU,CAAC;IAClD,QAAQ,GAAG,6BAA6B,CAAC;IACzC,IAAI,GAAG,uCAAuC,CAAC;IAE/C,4BAA4B,GAAG,CAAC,6BAA6B,CAAU,CAAC;IAEjF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"figma.js","sourceRoot":"","sources":["../../../src/services/figma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,OAAO,KAAM,SAAQ,OAAO;IACvB,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,OAAO,CAAC;IACtB,WAAW,GAAG,CAAC,wBAAwB,CAAU,CAAC;IAClD,QAAQ,GAAG,6BAA6B,CAAC;IACzC,IAAI,GAAG,uCAAuC,CAAC;IAE/C,4BAA4B,GAAG,CAAC,6BAA6B,CAAU,CAAC;IAEjF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import type { Response, BrowserContext } from 'playwright';
5
5
  import { ApiCredentials } from '../apiCredentials.js';
6
- import { Service, BrowserFollowupServiceSession } from './base.js';
6
+ import { Service, BrowserFollowupServiceSession } from './core/base.js';
7
7
  declare class GithubServiceSession extends BrowserFollowupServiceSession {
8
8
  private isLoggedIn;
9
9
  onResponse(response: Response): void;
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/services/github.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,WAAW,CAAC;AA6BrF,cAAM,oBAAqB,SAAQ,6BAA6B;IAC9D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAqBpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAwClC;AAED,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,4CAAwB;IACzC,QAAQ,CAAC,IAAI,SAE+D;IAE5E,QAAQ,CAAC,4BAA4B,2CAA4C;IAEjF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,oBAAoB;CAG5C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/services/github.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,gBAAgB,CAAC;AA6B1F,cAAM,oBAAqB,SAAQ,6BAA6B;IAC9D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAqBpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAwClC;AAED,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,4CAAwB;IACzC,QAAQ,CAAC,IAAI,SAE+D;IAE5E,QAAQ,CAAC,4BAA4B,2CAA4C;IAEjF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,oBAAoB;CAG5C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { AuthorizationBearer } from '../apiCredentials.js';
5
5
  import { generateLatchkeyAppName, typeLikeHuman } from '../playwrightUtils.js';
6
- import { Service, BrowserFollowupServiceSession, LoginFailedError } from './base.js';
6
+ import { Service, BrowserFollowupServiceSession, LoginFailedError } from './core/base.js';
7
7
  const DEFAULT_TIMEOUT_MS = 8000;
8
8
  // URL for creating a new personal access token (also used as login URL to trigger sudo)
9
9
  const GITHUB_NEW_TOKEN_URL = 'https://github.com/settings/tokens/new';
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/services/github.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/services/github.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Service } from './base.js';
1
+ import { Service } from './core/base.js';
2
2
  export declare class Gitlab extends Service {
3
3
  readonly name = "gitlab";
4
4
  readonly displayName = "GitLab";
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../../src/services/gitlab.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,sCAAsC;IACvD,QAAQ,CAAC,IAAI,wCAAwC;IAErD,QAAQ,CAAC,4BAA4B,8CAA+C;IAEpF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGnD;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"gitlab.d.ts","sourceRoot":"","sources":["../../../src/services/gitlab.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,sCAAsC;IACvD,QAAQ,CAAC,IAAI,wCAAwC;IAErD,QAAQ,CAAC,4BAA4B,8CAA+C;IAEpF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGnD;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Service } from './base.js';
1
+ import { Service } from './core/base.js';
2
2
  export class Gitlab extends Service {
3
3
  name = 'gitlab';
4
4
  displayName = 'GitLab';
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../src/services/gitlab.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,OAAO,MAAO,SAAQ,OAAO;IACxB,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,QAAQ,CAAC;IACvB,WAAW,GAAG,CAAC,yBAAyB,CAAU,CAAC;IACnD,QAAQ,GAAG,kCAAkC,CAAC;IAC9C,IAAI,GAAG,oCAAoC,CAAC;IAE5C,4BAA4B,GAAG,CAAC,gCAAgC,CAAU,CAAC;IAEpF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,8BAA8B,CAAC;IACxE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../src/services/gitlab.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,OAAO,MAAO,SAAQ,OAAO;IACxB,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,QAAQ,CAAC;IACvB,WAAW,GAAG,CAAC,yBAAyB,CAAU,CAAC;IACnD,QAAQ,GAAG,kCAAkC,CAAC;IAC9C,IAAI,GAAG,oCAAoC,CAAC;IAE5C,4BAA4B,GAAG,CAAC,gCAAgC,CAAU,CAAC;IAEpF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,8BAA8B,CAAC;IACxE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -9,7 +9,7 @@ import { z } from 'zod';
9
9
  import type { Browser, BrowserContext, Response } from 'playwright';
10
10
  import { type ApiCredentials } from '../../apiCredentials.js';
11
11
  import { type BrowserLaunchOptions } from '../../playwrightUtils.js';
12
- import { Service, BrowserFollowupServiceSession } from '../base.js';
12
+ import { Service, BrowserFollowupServiceSession } from '../core/base.js';
13
13
  import type { EncryptedStorage } from '../../encryptedStorage.js';
14
14
  /**
15
15
  * Google API key credentials.