latchkey 2.21.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -4
- package/dist/skills/generic/latchkey/SKILL.md +21 -0
- package/dist/skills/openclaw/latchkey/SKILL.md +21 -0
- package/dist/src/apiCredentials/account.d.ts +28 -0
- package/dist/src/apiCredentials/account.d.ts.map +1 -0
- package/dist/src/apiCredentials/account.js +49 -0
- package/dist/src/apiCredentials/account.js.map +1 -0
- package/dist/src/apiCredentials/store.d.ts +70 -4
- package/dist/src/apiCredentials/store.d.ts.map +1 -1
- package/dist/src/apiCredentials/store.js +161 -19
- package/dist/src/apiCredentials/store.js.map +1 -1
- package/dist/src/apiCredentials/utils.d.ts +2 -2
- package/dist/src/apiCredentials/utils.d.ts.map +1 -1
- package/dist/src/apiCredentials/utils.js +5 -5
- package/dist/src/apiCredentials/utils.js.map +1 -1
- package/dist/src/cli.js +1 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/cliCommands.d.ts.map +1 -1
- package/dist/src/cliCommands.js +118 -22
- package/dist/src/cliCommands.js.map +1 -1
- package/dist/src/config.d.ts +6 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +8 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/configDataStore.d.ts +3 -0
- package/dist/src/configDataStore.d.ts.map +1 -1
- package/dist/src/configDataStore.js +1 -0
- package/dist/src/configDataStore.js.map +1 -1
- package/dist/src/curl.d.ts +21 -16
- package/dist/src/curl.d.ts.map +1 -1
- package/dist/src/curl.js +17 -24
- package/dist/src/curl.js.map +1 -1
- package/dist/src/curlInjection.d.ts +8 -2
- package/dist/src/curlInjection.d.ts.map +1 -1
- package/dist/src/curlInjection.js +13 -8
- package/dist/src/curlInjection.js.map +1 -1
- package/dist/src/errorMessages.d.ts +2 -2
- package/dist/src/errorMessages.d.ts.map +1 -1
- package/dist/src/errorMessages.js +22 -6
- package/dist/src/errorMessages.js.map +1 -1
- package/dist/src/gateway/gatewayEndpoint.d.ts +1 -1
- package/dist/src/gateway/gatewayEndpoint.d.ts.map +1 -1
- package/dist/src/gateway/gatewayEndpoint.js +3 -1
- package/dist/src/gateway/gatewayEndpoint.js.map +1 -1
- package/dist/src/gateway/latchkeyEndpoint.d.ts +6 -0
- package/dist/src/gateway/latchkeyEndpoint.d.ts.map +1 -1
- package/dist/src/gateway/latchkeyEndpoint.js +6 -4
- package/dist/src/gateway/latchkeyEndpoint.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrations.d.ts +21 -1
- package/dist/src/migrations.d.ts.map +1 -1
- package/dist/src/migrations.js +112 -4
- package/dist/src/migrations.js.map +1 -1
- package/dist/src/oauthUtils.d.ts +2 -2
- package/dist/src/oauthUtils.d.ts.map +1 -1
- package/dist/src/oauthUtils.js +5 -5
- package/dist/src/oauthUtils.js.map +1 -1
- package/dist/src/services/aws.d.ts +1 -0
- package/dist/src/services/aws.d.ts.map +1 -1
- package/dist/src/services/aws.js +13 -0
- package/dist/src/services/aws.js.map +1 -1
- package/dist/src/services/calendly.d.ts +2 -0
- package/dist/src/services/calendly.d.ts.map +1 -1
- package/dist/src/services/calendly.js +7 -0
- package/dist/src/services/calendly.js.map +1 -1
- package/dist/src/services/coolify.d.ts +3 -1
- package/dist/src/services/coolify.d.ts.map +1 -1
- package/dist/src/services/coolify.js +10 -1
- package/dist/src/services/coolify.js.map +1 -1
- package/dist/src/services/core/base.d.ts +43 -1
- package/dist/src/services/core/base.d.ts.map +1 -1
- package/dist/src/services/core/base.js +29 -9
- package/dist/src/services/core/base.js.map +1 -1
- package/dist/src/services/core/registered.d.ts +1 -0
- package/dist/src/services/core/registered.d.ts.map +1 -1
- package/dist/src/services/core/registered.js +5 -0
- package/dist/src/services/core/registered.js.map +1 -1
- package/dist/src/services/discord.d.ts +1 -0
- package/dist/src/services/discord.d.ts.map +1 -1
- package/dist/src/services/discord.js +9 -0
- package/dist/src/services/discord.js.map +1 -1
- package/dist/src/services/dropbox.d.ts +2 -1
- package/dist/src/services/dropbox.d.ts.map +1 -1
- package/dist/src/services/dropbox.js +17 -11
- package/dist/src/services/dropbox.js.map +1 -1
- package/dist/src/services/figma.d.ts +2 -0
- package/dist/src/services/figma.d.ts.map +1 -1
- package/dist/src/services/figma.js +7 -0
- package/dist/src/services/figma.js.map +1 -1
- package/dist/src/services/github.d.ts +1 -0
- package/dist/src/services/github.d.ts.map +1 -1
- package/dist/src/services/github.js +9 -0
- package/dist/src/services/github.js.map +1 -1
- package/dist/src/services/gitlab.d.ts +2 -0
- package/dist/src/services/gitlab.d.ts.map +1 -1
- package/dist/src/services/gitlab.js +9 -0
- package/dist/src/services/gitlab.js.map +1 -1
- package/dist/src/services/google/analytics.d.ts +0 -1
- package/dist/src/services/google/analytics.d.ts.map +1 -1
- package/dist/src/services/google/analytics.js +0 -3
- package/dist/src/services/google/analytics.js.map +1 -1
- package/dist/src/services/google/base.d.ts +11 -0
- package/dist/src/services/google/base.d.ts.map +1 -1
- package/dist/src/services/google/base.js +26 -7
- package/dist/src/services/google/base.js.map +1 -1
- package/dist/src/services/google/calendar.d.ts +0 -1
- package/dist/src/services/google/calendar.d.ts.map +1 -1
- package/dist/src/services/google/calendar.js +0 -3
- package/dist/src/services/google/calendar.js.map +1 -1
- package/dist/src/services/google/directions.d.ts +1 -0
- package/dist/src/services/google/directions.d.ts.map +1 -1
- package/dist/src/services/google/directions.js +5 -0
- package/dist/src/services/google/directions.js.map +1 -1
- package/dist/src/services/google/docs.d.ts +0 -1
- package/dist/src/services/google/docs.d.ts.map +1 -1
- package/dist/src/services/google/docs.js +0 -3
- package/dist/src/services/google/docs.js.map +1 -1
- package/dist/src/services/google/drive.d.ts +0 -1
- package/dist/src/services/google/drive.d.ts.map +1 -1
- package/dist/src/services/google/drive.js +0 -3
- package/dist/src/services/google/drive.js.map +1 -1
- package/dist/src/services/google/gmail.d.ts +0 -1
- package/dist/src/services/google/gmail.d.ts.map +1 -1
- package/dist/src/services/google/gmail.js +0 -3
- package/dist/src/services/google/gmail.js.map +1 -1
- package/dist/src/services/google/people.d.ts +0 -1
- package/dist/src/services/google/people.d.ts.map +1 -1
- package/dist/src/services/google/people.js +0 -3
- package/dist/src/services/google/people.js.map +1 -1
- package/dist/src/services/google/sheets.d.ts +0 -1
- package/dist/src/services/google/sheets.d.ts.map +1 -1
- package/dist/src/services/google/sheets.js +0 -3
- package/dist/src/services/google/sheets.js.map +1 -1
- package/dist/src/services/google/slides.d.ts +0 -1
- package/dist/src/services/google/slides.d.ts.map +1 -1
- package/dist/src/services/google/slides.js +0 -3
- package/dist/src/services/google/slides.js.map +1 -1
- package/dist/src/services/index.d.ts +1 -1
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/linear.d.ts +2 -1
- package/dist/src/services/linear.d.ts.map +1 -1
- package/dist/src/services/linear.js +8 -1
- package/dist/src/services/linear.js.map +1 -1
- package/dist/src/services/mailchimp.d.ts +2 -0
- package/dist/src/services/mailchimp.d.ts.map +1 -1
- package/dist/src/services/mailchimp.js +7 -0
- package/dist/src/services/mailchimp.js.map +1 -1
- package/dist/src/services/notion-mcp.d.ts +3 -2
- package/dist/src/services/notion-mcp.d.ts.map +1 -1
- package/dist/src/services/notion-mcp.js +111 -14
- package/dist/src/services/notion-mcp.js.map +1 -1
- package/dist/src/services/notion.d.ts +2 -0
- package/dist/src/services/notion.d.ts.map +1 -1
- package/dist/src/services/notion.js +17 -0
- package/dist/src/services/notion.js.map +1 -1
- package/dist/src/services/ramp.d.ts +11 -2
- package/dist/src/services/ramp.d.ts.map +1 -1
- package/dist/src/services/ramp.js +35 -9
- package/dist/src/services/ramp.js.map +1 -1
- package/dist/src/services/sentry.d.ts +3 -2
- package/dist/src/services/sentry.d.ts.map +1 -1
- package/dist/src/services/sentry.js +12 -27
- package/dist/src/services/sentry.js.map +1 -1
- package/dist/src/services/slack.d.ts +3 -2
- package/dist/src/services/slack.d.ts.map +1 -1
- package/dist/src/services/slack.js +19 -13
- package/dist/src/services/slack.js.map +1 -1
- package/dist/src/services/stripe.d.ts +7 -0
- package/dist/src/services/stripe.d.ts.map +1 -1
- package/dist/src/services/stripe.js +15 -0
- package/dist/src/services/stripe.js.map +1 -1
- package/dist/src/services/telegram.d.ts +1 -0
- package/dist/src/services/telegram.d.ts.map +1 -1
- package/dist/src/services/telegram.js +7 -0
- package/dist/src/services/telegram.js.map +1 -1
- package/dist/src/services/todoist.d.ts +2 -1
- package/dist/src/services/todoist.d.ts.map +1 -1
- package/dist/src/services/todoist.js +9 -1
- package/dist/src/services/todoist.js.map +1 -1
- package/dist/src/services/umami.d.ts +3 -1
- package/dist/src/services/umami.d.ts.map +1 -1
- package/dist/src/services/umami.js +11 -1
- package/dist/src/services/umami.js.map +1 -1
- package/dist/src/services/yelp.d.ts +1 -0
- package/dist/src/services/yelp.d.ts.map +1 -1
- package/dist/src/services/yelp.js +5 -0
- package/dist/src/services/yelp.js.map +1 -1
- package/dist/src/services/zoom.d.ts +8 -0
- package/dist/src/services/zoom.d.ts.map +1 -1
- package/dist/src/services/zoom.js +16 -0
- package/dist/src/services/zoom.js.map +1 -1
- package/dist/src/sharedOperations.d.ts +30 -10
- package/dist/src/sharedOperations.d.ts.map +1 -1
- package/dist/src/sharedOperations.js +67 -29
- package/dist/src/sharedOperations.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tests/apiCredentialStore.test.js +155 -2
- package/dist/tests/apiCredentialStore.test.js.map +1 -1
- package/dist/tests/apiCredentialsUtils.test.js +1 -1
- package/dist/tests/apiCredentialsUtils.test.js.map +1 -1
- package/dist/tests/cli.test.js +334 -147
- package/dist/tests/cli.test.js.map +1 -1
- package/dist/tests/config.test.js +5 -0
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/gateway.test.js +8 -18
- package/dist/tests/gateway.test.js.map +1 -1
- package/dist/tests/latchkeyEndpoint.test.js +18 -28
- package/dist/tests/latchkeyEndpoint.test.js.map +1 -1
- package/dist/tests/migrations.test.js +220 -39
- package/dist/tests/migrations.test.js.map +1 -1
- package/dist/tests/mockService.d.ts +25 -0
- package/dist/tests/mockService.d.ts.map +1 -0
- package/dist/tests/mockService.js +40 -0
- package/dist/tests/mockService.js.map +1 -0
- package/dist/tests/oauthUtils.test.js +12 -12
- package/dist/tests/oauthUtils.test.js.map +1 -1
- package/dist/tests/serviceAccounts.test.d.ts +12 -0
- package/dist/tests/serviceAccounts.test.d.ts.map +1 -0
- package/dist/tests/serviceAccounts.test.js +278 -0
- package/dist/tests/serviceAccounts.test.js.map +1 -0
- package/dist/tests/sharedOperations.test.js +327 -58
- package/dist/tests/sharedOperations.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG/D;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEhF,qBAAa,mBAAoB,YAAW,cAAc;IACxD,QAAQ,CAAC,UAAU,EAAG,OAAO,CAAU;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK1C,kBAAkB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAUhF,SAAS,IAAI,OAAO,GAAG,SAAS;IAIhC,MAAM,IAAI,uBAAuB;IAQjC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB;CAGpE;AAED,cAAM,mBAAoB,SAAQ,oBAAoB;IACpD,OAAO,CAAC,cAAc,CAAuB;cAE7B,6BAA6B,CAC3C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAmClC;AAED,qBAAa,KAAM,SAAQ,OAAO;IAChC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,WAAW;IAC/B,QAAQ,CAAC,WAAW,kEAAmE;IACvF,QAAQ,CAAC,QAAQ,8BAA8B;IAC/C,QAAQ,CAAC,IAAI,SAEyD;IAEtE,QAAQ,CAAC,4BAA4B,+CAAgD;IAErF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB;cAM5C,8BAA8B,CAC/C,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO;IAKD,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAuB5E;AAED,eAAO,MAAM,KAAK,OAAc,CAAC"}
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
* Slack service implementation.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { ApiCredentialStatus } from '../apiCredentials/base.js';
|
|
6
|
-
import { runCaptured } from '../curl.js';
|
|
7
5
|
import { Service, SimpleServiceSession } from './core/base.js';
|
|
6
|
+
import { fetchAccountFromEndpoint, tryParseJson } from '../apiCredentials/account.js';
|
|
8
7
|
/**
|
|
9
8
|
* Slack-specific credentials (token + d cookie).
|
|
10
9
|
*/
|
|
@@ -92,18 +91,25 @@ export class Slack extends Service {
|
|
|
92
91
|
getSession(appNamePrefix) {
|
|
93
92
|
return new SlackServiceSession(this, appNamePrefix);
|
|
94
93
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
94
|
+
// auth.test reports authentication failures as HTTP 200 with `ok: false`,
|
|
95
|
+
// so validity comes from the body rather than the status code.
|
|
96
|
+
isCredentialCheckResponseValid(_httpStatusCode, responseBody) {
|
|
97
|
+
const data = tryParseJson(responseBody);
|
|
98
|
+
return data?.ok === true;
|
|
99
|
+
}
|
|
100
|
+
getAccount(apiCredentials) {
|
|
101
|
+
return fetchAccountFromEndpoint(apiCredentials, this.credentialCheckCurlArguments, (responseBody) => {
|
|
102
|
+
const data = tryParseJson(responseBody);
|
|
103
|
+
if (data?.user === undefined) {
|
|
104
|
+
return null;
|
|
101
105
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
106
|
+
// The same user can be signed in to several workspaces, so the account
|
|
107
|
+
// includes the workspace: prefer the stable subdomain from the workspace
|
|
108
|
+
// URL, falling back to the display name.
|
|
109
|
+
const workspaceMatch = data.url === undefined ? null : /^https:\/\/([^./]+)\./.exec(data.url);
|
|
110
|
+
const workspace = workspaceMatch?.[1] ?? data.team;
|
|
111
|
+
return workspace === undefined ? data.user : `${data.user}@${workspace}`;
|
|
112
|
+
});
|
|
107
113
|
}
|
|
108
114
|
}
|
|
109
115
|
export const SLACK = new Slack();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ApiCredentials } from '../apiCredentials/base.js';
|
|
1
2
|
import { Service } from './core/base.js';
|
|
2
3
|
export declare class Stripe extends Service {
|
|
3
4
|
readonly name = "stripe";
|
|
@@ -7,6 +8,12 @@ export declare class Stripe extends Service {
|
|
|
7
8
|
readonly info = "https://docs.stripe.com/api.";
|
|
8
9
|
readonly credentialCheckCurlArguments: readonly ["https://api.stripe.com/v1/balance"];
|
|
9
10
|
setCredentialsExample(serviceName: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* The account comes from /v1/account rather than the balance endpoint used
|
|
13
|
+
* by the credential check, which carries no identity. Restricted keys may
|
|
14
|
+
* not be allowed to read the account, in which case it stays undetermined.
|
|
15
|
+
*/
|
|
16
|
+
getAccount(apiCredentials: ApiCredentials): Promise<string | null>;
|
|
10
17
|
}
|
|
11
18
|
export declare const STRIPE: Stripe;
|
|
12
19
|
//# sourceMappingURL=stripe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../../src/services/stripe.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,wCAAwC;IACzD,QAAQ,CAAC,IAAI,kCAAkC;IAE/C,QAAQ,CAAC,4BAA4B,iDAAkD;IAEvF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../../src/services/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,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,wCAAwC;IACzD,QAAQ,CAAC,IAAI,kCAAkC;IAE/C,QAAQ,CAAC,4BAA4B,iDAAkD;IAEvF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD;;;;OAIG;IACM,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAiB5E;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fetchAccountFromEndpoint, tryParseJson } from '../apiCredentials/account.js';
|
|
1
2
|
import { Service } from './core/base.js';
|
|
2
3
|
export class Stripe extends Service {
|
|
3
4
|
name = 'stripe';
|
|
@@ -9,6 +10,20 @@ export class Stripe extends Service {
|
|
|
9
10
|
setCredentialsExample(serviceName) {
|
|
10
11
|
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
11
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* The account comes from /v1/account rather than the balance endpoint used
|
|
15
|
+
* by the credential check, which carries no identity. Restricted keys may
|
|
16
|
+
* not be allowed to read the account, in which case it stays undetermined.
|
|
17
|
+
*/
|
|
18
|
+
getAccount(apiCredentials) {
|
|
19
|
+
return fetchAccountFromEndpoint(apiCredentials, ['https://api.stripe.com/v1/account'], (responseBody) => {
|
|
20
|
+
const data = tryParseJson(responseBody);
|
|
21
|
+
if (data === null || data.error !== undefined) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return data.email ?? data.id ?? null;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
12
27
|
}
|
|
13
28
|
export const STRIPE = new Stripe();
|
|
14
29
|
//# sourceMappingURL=stripe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/services/stripe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/services/stripe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACtF,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,oCAAoC,CAAC;IAChD,IAAI,GAAG,8BAA8B,CAAC;IAEtC,4BAA4B,GAAG,CAAC,mCAAmC,CAAU,CAAC;IAEvF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;IAED;;;;OAIG;IACM,UAAU,CAAC,cAA8B;QAChD,OAAO,wBAAwB,CAC7B,cAAc,EACd,CAAC,mCAAmC,CAAC,EACrC,CAAC,YAAY,EAAE,EAAE;YACf,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAI9B,CAAC;YACT,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;QACvC,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -35,6 +35,7 @@ export declare class Telegram extends Service {
|
|
|
35
35
|
readonly credentialCheckCurlArguments: readonly ["https://api.telegram.org/getMe"];
|
|
36
36
|
setCredentialsExample(serviceName: string): string;
|
|
37
37
|
getCredentialsNoCurl(arguments_: readonly string[]): ApiCredentials;
|
|
38
|
+
getAccount(apiCredentials: ApiCredentials): Promise<string | null>;
|
|
38
39
|
}
|
|
39
40
|
export declare const TELEGRAM: Telegram;
|
|
40
41
|
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/services/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAsC,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/services/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAsC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK7E;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;EAGvC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAEtF,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,QAAQ,CAAC,UAAU,EAAG,aAAa,CAAU;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM;IAIzB,kBAAkB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAYhF,SAAS,IAAI,OAAO,GAAG,SAAS;IAIhC,MAAM,IAAI,0BAA0B;IAOpC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,0BAA0B,GAAG,sBAAsB;CAG1E;AAED,qBAAa,QAAS,SAAQ,OAAO;IACnC,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,cAAc;IAClC,QAAQ,CAAC,WAAW,yCAA2B;IAC/C,QAAQ,CAAC,QAAQ,+BAA+B;IAChD,QAAQ,CAAC,IAAI,SAGgF;IAE7F,QAAQ,CAAC,4BAA4B,8CAAqC;IAE1E,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc;IAiBnE,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAY5E;AAUD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { extractUrlFromCurlArguments } from '../curl.js';
|
|
3
3
|
import { NoCurlCredentialsNotSupportedError, Service } from './core/base.js';
|
|
4
|
+
import { fetchAccountFromEndpoint, tryParseJson } from '../apiCredentials/account.js';
|
|
4
5
|
const BASE_API_URL = 'https://api.telegram.org/';
|
|
5
6
|
/**
|
|
6
7
|
* Telegram Bot API credentials.
|
|
@@ -63,6 +64,12 @@ export class Telegram extends Service {
|
|
|
63
64
|
}
|
|
64
65
|
return new TelegramBotCredentials(token);
|
|
65
66
|
}
|
|
67
|
+
getAccount(apiCredentials) {
|
|
68
|
+
return fetchAccountFromEndpoint(apiCredentials, this.credentialCheckCurlArguments, (responseBody) => {
|
|
69
|
+
const data = tryParseJson(responseBody);
|
|
70
|
+
return data?.result?.username ?? data?.result?.id?.toString() ?? null;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
66
73
|
}
|
|
67
74
|
class TelegramCredentialError extends NoCurlCredentialsNotSupportedError {
|
|
68
75
|
constructor(message) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/services/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,kCAAkC,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/services/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,9 @@ export declare class Todoist extends Service {
|
|
|
16
16
|
readonly baseApiUrls: readonly ["https://api.todoist.com/"];
|
|
17
17
|
readonly loginUrl = "https://app.todoist.com/app/settings/integrations/developer";
|
|
18
18
|
readonly info: string;
|
|
19
|
-
readonly credentialCheckCurlArguments: readonly ["https://api.todoist.com/api/v1/
|
|
19
|
+
readonly credentialCheckCurlArguments: readonly ["https://api.todoist.com/api/v1/user"];
|
|
20
20
|
setCredentialsExample(serviceName: string): string;
|
|
21
|
+
getAccount(apiCredentials: ApiCredentials): Promise<string | null>;
|
|
21
22
|
getSession(appNamePrefix: string): TodoistServiceSession;
|
|
22
23
|
}
|
|
23
24
|
export declare const TODOIST: Todoist;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todoist.d.ts","sourceRoot":"","sources":["../../../src/services/todoist.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAuB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"todoist.d.ts","sourceRoot":"","sources":["../../../src/services/todoist.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAuB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,gBAAgB,CAAC;AAY1F,cAAM,qBAAsB,SAAQ,6BAA6B;IAC/D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAsBpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAuBlC;AAED,qBAAa,OAAQ,SAAQ,OAAO;IAClC,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,aAAa;IACjC,QAAQ,CAAC,WAAW,wCAAyC;IAC7D,QAAQ,CAAC,QAAQ,iEAAkC;IACnD,QAAQ,CAAC,IAAI,SAE6E;IAG1F,QAAQ,CAAC,4BAA4B,mDAAoD;IAEzF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAelE,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,qBAAqB;CAGlE;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { AuthorizationBearer } from '../apiCredentials/base.js';
|
|
5
5
|
import { Service, BrowserFollowupServiceSession, LoginFailedError } from './core/base.js';
|
|
6
|
+
import { fetchAccountFromEndpoint, tryParseJson } from '../apiCredentials/account.js';
|
|
6
7
|
const DEFAULT_TIMEOUT_MS = 8000;
|
|
7
8
|
// The Developer settings page exposes the user's personal API token. It also
|
|
8
9
|
// doubles as the login URL: when visited while logged out, Todoist redirects to
|
|
@@ -57,10 +58,17 @@ export class Todoist extends Service {
|
|
|
57
58
|
loginUrl = TODOIST_DEVELOPER_SETTINGS_URL;
|
|
58
59
|
info = 'https://developer.todoist.com/api/v1. ' +
|
|
59
60
|
'The personal API token is read from Settings → Integrations → Developer during login.';
|
|
60
|
-
|
|
61
|
+
// /user both validates the token and identifies the account.
|
|
62
|
+
credentialCheckCurlArguments = ['https://api.todoist.com/api/v1/user'];
|
|
61
63
|
setCredentialsExample(serviceName) {
|
|
62
64
|
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
63
65
|
}
|
|
66
|
+
getAccount(apiCredentials) {
|
|
67
|
+
return fetchAccountFromEndpoint(apiCredentials, this.credentialCheckCurlArguments, (responseBody) => {
|
|
68
|
+
const data = tryParseJson(responseBody);
|
|
69
|
+
return data?.email ?? data?.full_name ?? data?.id ?? null;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
64
72
|
getSession(appNamePrefix) {
|
|
65
73
|
return new TodoistServiceSession(this, appNamePrefix);
|
|
66
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todoist.js","sourceRoot":"","sources":["../../../src/services/todoist.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"todoist.js","sourceRoot":"","sources":["../../../src/services/todoist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ApiCredentials } from '../apiCredentials/base.js';
|
|
1
2
|
import { Service } from './core/base.js';
|
|
2
3
|
export declare class Umami extends Service {
|
|
3
4
|
readonly name = "umami";
|
|
@@ -5,8 +6,9 @@ export declare class Umami extends Service {
|
|
|
5
6
|
readonly baseApiUrls: readonly ["https://api.umami.is/"];
|
|
6
7
|
readonly loginUrl = "https://cloud.umami.is/login";
|
|
7
8
|
readonly info = "https://umami.is/docs/api.";
|
|
8
|
-
readonly credentialCheckCurlArguments: readonly ["https://api.umami.is/v1/
|
|
9
|
+
readonly credentialCheckCurlArguments: readonly ["https://api.umami.is/v1/me"];
|
|
9
10
|
setCredentialsExample(serviceName: string): string;
|
|
11
|
+
getAccount(apiCredentials: ApiCredentials): Promise<string | null>;
|
|
10
12
|
}
|
|
11
13
|
export declare const UMAMI: Umami;
|
|
12
14
|
//# sourceMappingURL=umami.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"umami.d.ts","sourceRoot":"","sources":["../../../src/services/umami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"umami.d.ts","sourceRoot":"","sources":["../../../src/services/umami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,qBAAa,KAAM,SAAQ,OAAO;IAChC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,WAAW;IAC/B,QAAQ,CAAC,WAAW,qCAAsC;IAC1D,QAAQ,CAAC,QAAQ,kCAAkC;IACnD,QAAQ,CAAC,IAAI,gCAAgC;IAI7C,QAAQ,CAAC,4BAA4B,0CAA2C;IAEhF,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAa5E;AAED,eAAO,MAAM,KAAK,OAAc,CAAC"}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { Service } from './core/base.js';
|
|
2
|
+
import { fetchAccountFromEndpoint, tryParseJson } from '../apiCredentials/account.js';
|
|
2
3
|
export class Umami extends Service {
|
|
3
4
|
name = 'umami';
|
|
4
5
|
displayName = 'Umami';
|
|
5
6
|
baseApiUrls = ['https://api.umami.is/'];
|
|
6
7
|
loginUrl = 'https://cloud.umami.is/login';
|
|
7
8
|
info = 'https://umami.is/docs/api.';
|
|
8
|
-
|
|
9
|
+
// /v1/me both validates the API key and identifies the account (it is one of
|
|
10
|
+
// the few endpoints allowed for API-key authentication).
|
|
11
|
+
credentialCheckCurlArguments = ['https://api.umami.is/v1/me'];
|
|
9
12
|
setCredentialsExample(serviceName) {
|
|
10
13
|
return `latchkey auth set ${serviceName} -H "x-umami-api-key: <api-key>"`;
|
|
11
14
|
}
|
|
15
|
+
getAccount(apiCredentials) {
|
|
16
|
+
return fetchAccountFromEndpoint(apiCredentials, this.credentialCheckCurlArguments, (responseBody) => {
|
|
17
|
+
// On Umami Cloud the username is the account e-mail.
|
|
18
|
+
const data = tryParseJson(responseBody);
|
|
19
|
+
return data?.user?.username ?? data?.user?.id ?? null;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
12
22
|
}
|
|
13
23
|
export const UMAMI = new Umami();
|
|
14
24
|
//# sourceMappingURL=umami.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"umami.js","sourceRoot":"","sources":["../../../src/services/umami.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"umami.js","sourceRoot":"","sources":["../../../src/services/umami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEtF,MAAM,OAAO,KAAM,SAAQ,OAAO;IACvB,IAAI,GAAG,OAAO,CAAC;IACf,WAAW,GAAG,OAAO,CAAC;IACtB,WAAW,GAAG,CAAC,uBAAuB,CAAU,CAAC;IACjD,QAAQ,GAAG,8BAA8B,CAAC;IAC1C,IAAI,GAAG,4BAA4B,CAAC;IAE7C,6EAA6E;IAC7E,yDAAyD;IAChD,4BAA4B,GAAG,CAAC,4BAA4B,CAAU,CAAC;IAEhF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,kCAAkC,CAAC;IAC5E,CAAC;IAEQ,UAAU,CAAC,cAA8B;QAChD,OAAO,wBAAwB,CAC7B,cAAc,EACd,IAAI,CAAC,4BAA4B,EACjC,CAAC,YAAY,EAAE,EAAE;YACf,qDAAqD;YACrD,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAE9B,CAAC;YACT,OAAO,IAAI,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;QACxD,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC"}
|
|
@@ -7,6 +7,7 @@ export declare class Yelp extends Service {
|
|
|
7
7
|
readonly info = "https://docs.developer.yelp.com/reference.";
|
|
8
8
|
readonly credentialCheckCurlArguments: readonly ["https://api.yelp.com/v3/businesses/search?location=NYC&limit=1"];
|
|
9
9
|
setCredentialsExample(serviceName: string): string;
|
|
10
|
+
getAccount(): Promise<string | null>;
|
|
10
11
|
}
|
|
11
12
|
export declare const YELP: Yelp;
|
|
12
13
|
//# sourceMappingURL=yelp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yelp.d.ts","sourceRoot":"","sources":["../../../src/services/yelp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,IAAK,SAAQ,OAAO;IAC/B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,UAAU;IAC9B,QAAQ,CAAC,WAAW,qCAAsC;IAC1D,QAAQ,CAAC,QAAQ,gCAAgC;IACjD,QAAQ,CAAC,IAAI,gDAAgD;IAE7D,QAAQ,CAAC,4BAA4B,8EAE1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"yelp.d.ts","sourceRoot":"","sources":["../../../src/services/yelp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,IAAK,SAAQ,OAAO;IAC/B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,UAAU;IAC9B,QAAQ,CAAC,WAAW,qCAAsC;IAC1D,QAAQ,CAAC,QAAQ,gCAAgC;IACjD,QAAQ,CAAC,IAAI,gDAAgD;IAE7D,QAAQ,CAAC,4BAA4B,8EAE1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAMlD,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGrC;AAED,eAAO,MAAM,IAAI,MAAa,CAAC"}
|
|
@@ -11,6 +11,11 @@ export class Yelp extends Service {
|
|
|
11
11
|
setCredentialsExample(serviceName) {
|
|
12
12
|
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
13
13
|
}
|
|
14
|
+
// Yelp API keys are app-scoped and the Fusion API has no endpoint that
|
|
15
|
+
// reveals the account behind them.
|
|
16
|
+
getAccount() {
|
|
17
|
+
return Promise.resolve(null);
|
|
18
|
+
}
|
|
14
19
|
}
|
|
15
20
|
export const YELP = new Yelp();
|
|
16
21
|
//# sourceMappingURL=yelp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yelp.js","sourceRoot":"","sources":["../../../src/services/yelp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,OAAO,IAAK,SAAQ,OAAO;IACtB,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,MAAM,CAAC;IACrB,WAAW,GAAG,CAAC,uBAAuB,CAAU,CAAC;IACjD,QAAQ,GAAG,4BAA4B,CAAC;IACxC,IAAI,GAAG,4CAA4C,CAAC;IAEpD,4BAA4B,GAAG;QACtC,gEAAgE;KACxD,CAAC;IAEX,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"yelp.js","sourceRoot":"","sources":["../../../src/services/yelp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,OAAO,IAAK,SAAQ,OAAO;IACtB,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,MAAM,CAAC;IACrB,WAAW,GAAG,CAAC,uBAAuB,CAAU,CAAC;IACjD,QAAQ,GAAG,4BAA4B,CAAC;IACxC,IAAI,GAAG,4CAA4C,CAAC;IAEpD,4BAA4B,GAAG;QACtC,gEAAgE;KACxD,CAAC;IAEX,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;IAED,uEAAuE;IACvE,mCAAmC;IACnC,UAAU;QACR,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ApiCredentials } from '../apiCredentials/base.js';
|
|
1
2
|
import { Service } from './core/base.js';
|
|
2
3
|
export declare class Zoom extends Service {
|
|
3
4
|
readonly name = "zoom";
|
|
@@ -7,6 +8,13 @@ export declare class Zoom extends Service {
|
|
|
7
8
|
readonly info = "https://developers.zoom.us/docs/api/.";
|
|
8
9
|
readonly credentialCheckCurlArguments: readonly ["-H", "Content-Type: application/json", "https://api.zoom.us/v2/users?page_size=1"];
|
|
9
10
|
setCredentialsExample(serviceName: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* The account comes from /users/me rather than the user-list endpoint used
|
|
13
|
+
* by the credential check, which carries no identity. Server-to-server
|
|
14
|
+
* tokens have no user context and error on /users/me, in which case the
|
|
15
|
+
* account stays undetermined.
|
|
16
|
+
*/
|
|
17
|
+
getAccount(apiCredentials: ApiCredentials): Promise<string | null>;
|
|
10
18
|
}
|
|
11
19
|
export declare const ZOOM: Zoom;
|
|
12
20
|
//# sourceMappingURL=zoom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/services/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,IAAK,SAAQ,OAAO;IAC/B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,UAAU;IAC9B,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,4BAA4B;IAC7C,QAAQ,CAAC,IAAI,2CAA2C;IAExD,QAAQ,CAAC,4BAA4B,gGAI1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/services/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,IAAK,SAAQ,OAAO;IAC/B,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,UAAU;IAC9B,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,4BAA4B;IAC7C,QAAQ,CAAC,IAAI,2CAA2C;IAExD,QAAQ,CAAC,4BAA4B,gGAI1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD;;;;;OAKG;IACM,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAiB5E;AAED,eAAO,MAAM,IAAI,MAAa,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fetchAccountFromEndpoint, tryParseJson } from '../apiCredentials/account.js';
|
|
1
2
|
import { Service } from './core/base.js';
|
|
2
3
|
export class Zoom extends Service {
|
|
3
4
|
name = 'zoom';
|
|
@@ -13,6 +14,21 @@ export class Zoom extends Service {
|
|
|
13
14
|
setCredentialsExample(serviceName) {
|
|
14
15
|
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* The account comes from /users/me rather than the user-list endpoint used
|
|
19
|
+
* by the credential check, which carries no identity. Server-to-server
|
|
20
|
+
* tokens have no user context and error on /users/me, in which case the
|
|
21
|
+
* account stays undetermined.
|
|
22
|
+
*/
|
|
23
|
+
getAccount(apiCredentials) {
|
|
24
|
+
return fetchAccountFromEndpoint(apiCredentials, ['https://api.zoom.us/v2/users/me'], (responseBody) => {
|
|
25
|
+
const data = tryParseJson(responseBody);
|
|
26
|
+
if (data === null || data.code !== undefined) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return data.email ?? data.id ?? null;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
16
32
|
}
|
|
17
33
|
export const ZOOM = new Zoom();
|
|
18
34
|
//# sourceMappingURL=zoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/services/zoom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/services/zoom.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,OAAO,IAAK,SAAQ,OAAO;IACtB,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,MAAM,CAAC;IACrB,WAAW,GAAG,CAAC,yBAAyB,CAAU,CAAC;IACnD,QAAQ,GAAG,wBAAwB,CAAC;IACpC,IAAI,GAAG,uCAAuC,CAAC;IAE/C,4BAA4B,GAAG;QACtC,IAAI;QACJ,gCAAgC;QAChC,0CAA0C;KAClC,CAAC;IAEX,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;IAED;;;;;OAKG;IACM,UAAU,CAAC,cAA8B;QAChD,OAAO,wBAAwB,CAC7B,cAAc,EACd,CAAC,iCAAiC,CAAC,EACnC,CAAC,YAAY,EAAE,EAAE;YACf,MAAM,IAAI,GAAG,YAAY,CAAC,YAAY,CAI9B,CAAC;YACT,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;QACvC,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC"}
|
|
@@ -19,24 +19,43 @@ export declare class BrowserNotConfiguredError extends Error {
|
|
|
19
19
|
export declare class PreparationRequiredError extends Error {
|
|
20
20
|
constructor(serviceName: string);
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Thrown when an explicitly named account has no stored credentials.
|
|
24
|
+
*/
|
|
25
|
+
export declare class AccountNotFoundError extends Error {
|
|
26
|
+
constructor(serviceName: string, account: string);
|
|
27
|
+
}
|
|
22
28
|
export declare function servicesList(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, config: Config, options: {
|
|
23
29
|
builtin?: boolean;
|
|
24
30
|
viable?: boolean;
|
|
25
31
|
}): readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* Status of a single stored credential, keyed by account in the various
|
|
34
|
+
* listings. Shared between `auth list` and `services info`.
|
|
35
|
+
*/
|
|
36
|
+
export interface CredentialStatusEntry {
|
|
37
|
+
readonly credentialType: string;
|
|
38
|
+
readonly credentialStatus: ApiCredentialStatus;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A service's stored credentials keyed by account. The default account is
|
|
42
|
+
* keyed by the empty string.
|
|
43
|
+
*/
|
|
44
|
+
export type AccountCredentialStatuses = Record<string, CredentialStatusEntry>;
|
|
26
45
|
export interface ServicesInfoResult {
|
|
27
46
|
readonly type: 'built-in' | 'user-registered';
|
|
28
47
|
readonly baseApiUrls: readonly (string | RegExp)[];
|
|
29
48
|
readonly authOptions: readonly string[];
|
|
30
|
-
readonly
|
|
49
|
+
readonly credentials: AccountCredentialStatuses;
|
|
31
50
|
readonly setCredentialsExample: string;
|
|
32
51
|
readonly developerNotes: string;
|
|
33
52
|
}
|
|
34
53
|
export declare function servicesInfo(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, config: Config, serviceName: string, offline?: boolean): Promise<ServicesInfoResult>;
|
|
35
|
-
export declare function authList(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, config: Config): Promise<Record<string,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
export declare function authBrowser(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, encryptedStorage: EncryptedStorage, config: Config, serviceName: string): Promise<
|
|
54
|
+
export declare function authList(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, config: Config): Promise<Record<string, AccountCredentialStatuses>>;
|
|
55
|
+
export interface AuthBrowserResult {
|
|
56
|
+
readonly account: string;
|
|
57
|
+
}
|
|
58
|
+
export declare function authBrowser(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, encryptedStorage: EncryptedStorage, config: Config, serviceName: string, account?: string): Promise<AuthBrowserResult>;
|
|
40
59
|
export interface AuthBrowserPrepareResult {
|
|
41
60
|
readonly alreadyPrepared: boolean;
|
|
42
61
|
}
|
|
@@ -46,10 +65,11 @@ export interface PrepareServiceResult {
|
|
|
46
65
|
readonly credentialType: string;
|
|
47
66
|
}
|
|
48
67
|
/**
|
|
49
|
-
* Store
|
|
50
|
-
* (`latchkey auth prepare <service> <json>`)
|
|
51
|
-
*
|
|
52
|
-
* the service does not
|
|
68
|
+
* Store a service's preparation from a validated JSON payload
|
|
69
|
+
* (`latchkey auth prepare <service> <json>`), overwriting any previous
|
|
70
|
+
* preparation. The whole operation is rejected — and nothing is stored — if
|
|
71
|
+
* the JSON is malformed, fails the service's schema, or the service does not
|
|
72
|
+
* support prepare.
|
|
53
73
|
*/
|
|
54
74
|
export declare function prepareService(registry: ServiceRegistry, apiCredentialStore: ApiCredentialStore, serviceName: string, json: string): PrepareServiceResult;
|
|
55
75
|
//# sourceMappingURL=sharedOperations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedOperations.d.ts","sourceRoot":"","sources":["../../src/sharedOperations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"sharedOperations.d.ts","sourceRoot":"","sources":["../../src/sharedOperations.ts"],"names":[],"mappings":"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"}
|