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.
- package/README.md +66 -8
- package/dist/integrations/SKILL.md +15 -3
- package/dist/package.json +2 -2
- package/dist/scripts/codegen.js +1 -1
- package/dist/scripts/codegen.js.map +1 -1
- package/dist/src/apiCredentialStore.d.ts +1 -1
- package/dist/src/apiCredentialStore.d.ts.map +1 -1
- package/dist/src/apiCredentialStore.js +1 -1
- package/dist/src/apiCredentialStore.js.map +1 -1
- package/dist/src/apiCredentials.d.ts +13 -115
- package/dist/src/apiCredentials.d.ts.map +1 -1
- package/dist/src/apiCredentials.js +10 -101
- package/dist/src/apiCredentials.js.map +1 -1
- package/dist/src/apiCredentialsSerialization.d.ts +119 -0
- package/dist/src/apiCredentialsSerialization.d.ts.map +1 -0
- package/dist/src/apiCredentialsSerialization.js +90 -0
- package/dist/src/apiCredentialsSerialization.js.map +1 -0
- package/dist/src/browserConfig.d.ts +2 -33
- package/dist/src/browserConfig.d.ts.map +1 -1
- package/dist/src/browserConfig.js +6 -81
- package/dist/src/browserConfig.js.map +1 -1
- package/dist/src/cli.js +22 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/cliCommands.d.ts +0 -1
- package/dist/src/cliCommands.d.ts.map +1 -1
- package/dist/src/cliCommands.js +148 -44
- package/dist/src/cliCommands.js.map +1 -1
- package/dist/src/config.d.ts +4 -3
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +17 -23
- package/dist/src/config.js.map +1 -1
- package/dist/src/configDataStore.d.ts +43 -0
- package/dist/src/configDataStore.d.ts.map +1 -0
- package/dist/src/configDataStore.js +108 -0
- package/dist/src/configDataStore.js.map +1 -0
- package/dist/src/curl.d.ts +10 -0
- package/dist/src/curl.d.ts.map +1 -1
- package/dist/src/curl.js +88 -0
- package/dist/src/curl.js.map +1 -1
- package/dist/src/encryptedStorage.d.ts +9 -0
- package/dist/src/encryptedStorage.d.ts.map +1 -1
- package/dist/src/encryptedStorage.js +12 -0
- package/dist/src/encryptedStorage.js.map +1 -1
- package/dist/src/index.d.ts +4 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrations.d.ts +9 -0
- package/dist/src/migrations.d.ts.map +1 -0
- package/dist/src/migrations.js +77 -0
- package/dist/src/migrations.js.map +1 -0
- package/dist/src/oauthUtils.d.ts +4 -1
- package/dist/src/oauthUtils.d.ts.map +1 -1
- package/dist/src/oauthUtils.js +1 -1
- package/dist/src/oauthUtils.js.map +1 -1
- package/dist/src/playwrightUtils.d.ts +2 -2
- package/dist/src/playwrightUtils.d.ts.map +1 -1
- package/dist/src/playwrightUtils.js +4 -4
- package/dist/src/playwrightUtils.js.map +1 -1
- package/dist/src/registeredService.d.ts +20 -0
- package/dist/src/registeredService.d.ts.map +1 -0
- package/dist/src/registeredService.js +34 -0
- package/dist/src/registeredService.js.map +1 -0
- package/dist/src/registeredServiceStore.d.ts +24 -0
- package/dist/src/registeredServiceStore.d.ts.map +1 -0
- package/dist/src/registeredServiceStore.js +70 -0
- package/dist/src/registeredServiceStore.js.map +1 -0
- package/dist/src/registry.d.ts +11 -1
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +70 -6
- package/dist/src/registry.js.map +1 -1
- package/dist/src/services/aws.d.ts +44 -0
- package/dist/src/services/aws.d.ts.map +1 -0
- package/dist/src/services/aws.js +237 -0
- package/dist/src/services/aws.js.map +1 -0
- package/dist/src/services/base.d.ts +14 -0
- package/dist/src/services/base.d.ts.map +1 -1
- package/dist/src/services/base.js +23 -11
- package/dist/src/services/base.js.map +1 -1
- package/dist/src/services/calendly.d.ts +12 -0
- package/dist/src/services/calendly.d.ts.map +1 -0
- package/dist/src/services/calendly.js +18 -0
- package/dist/src/services/calendly.js.map +1 -0
- package/dist/src/services/core/base.d.ts +141 -0
- package/dist/src/services/core/base.d.ts.map +1 -0
- package/dist/src/services/core/base.js +189 -0
- package/dist/src/services/core/base.js.map +1 -0
- package/dist/src/services/core/registered.d.ts +24 -0
- package/dist/src/services/core/registered.d.ts.map +1 -0
- package/dist/src/services/core/registered.js +53 -0
- package/dist/src/services/core/registered.js.map +1 -0
- package/dist/src/services/discord.d.ts +2 -1
- package/dist/src/services/discord.d.ts.map +1 -1
- package/dist/src/services/discord.js +4 -1
- package/dist/src/services/discord.js.map +1 -1
- package/dist/src/services/dropbox.d.ts +3 -2
- package/dist/src/services/dropbox.d.ts.map +1 -1
- package/dist/src/services/dropbox.js +6 -1
- package/dist/src/services/dropbox.js.map +1 -1
- package/dist/src/services/figma.d.ts +12 -0
- package/dist/src/services/figma.d.ts.map +1 -0
- package/dist/src/services/figma.js +14 -0
- package/dist/src/services/figma.js.map +1 -0
- package/dist/src/services/github.d.ts +2 -1
- package/dist/src/services/github.d.ts.map +1 -1
- package/dist/src/services/github.js +4 -1
- package/dist/src/services/github.js.map +1 -1
- package/dist/src/services/gitlab.d.ts +12 -0
- package/dist/src/services/gitlab.d.ts.map +1 -0
- package/dist/src/services/gitlab.js +14 -0
- package/dist/src/services/gitlab.js.map +1 -0
- package/dist/src/services/google/analytics.d.ts +11 -0
- package/dist/src/services/google/analytics.d.ts.map +1 -0
- package/dist/src/services/google/analytics.js +22 -0
- package/dist/src/services/google/analytics.js.map +1 -0
- package/dist/src/services/google/base.d.ts +73 -0
- package/dist/src/services/google/base.d.ts.map +1 -0
- package/dist/src/services/google/base.js +323 -0
- package/dist/src/services/google/base.js.map +1 -0
- package/dist/src/services/google/calendar.d.ts +11 -0
- package/dist/src/services/google/calendar.d.ts.map +1 -0
- package/dist/src/services/google/calendar.js +22 -0
- package/dist/src/services/google/calendar.js.map +1 -0
- package/dist/src/services/google/directions.d.ts +14 -0
- package/dist/src/services/google/directions.d.ts.map +1 -0
- package/dist/src/services/google/directions.js +49 -0
- package/dist/src/services/google/directions.js.map +1 -0
- package/dist/src/services/google/docs.d.ts +11 -0
- package/dist/src/services/google/docs.d.ts.map +1 -0
- package/dist/src/services/google/docs.js +19 -0
- package/dist/src/services/google/docs.js.map +1 -0
- package/dist/src/services/google/drive.d.ts +11 -0
- package/dist/src/services/google/drive.d.ts.map +1 -0
- package/dist/src/services/google/drive.js +19 -0
- package/dist/src/services/google/drive.js.map +1 -0
- package/dist/src/services/google/gmail.d.ts +11 -0
- package/dist/src/services/google/gmail.d.ts.map +1 -0
- package/dist/src/services/google/gmail.js +24 -0
- package/dist/src/services/google/gmail.js.map +1 -0
- package/dist/src/services/google/maps.d.ts +39 -0
- package/dist/src/services/google/maps.d.ts.map +1 -0
- package/dist/src/services/google/maps.js +94 -0
- package/dist/src/services/google/maps.js.map +1 -0
- package/dist/src/services/google/people.d.ts +11 -0
- package/dist/src/services/google/people.d.ts.map +1 -0
- package/dist/src/services/google/people.js +22 -0
- package/dist/src/services/google/people.js.map +1 -0
- package/dist/src/services/google/sheets.d.ts +11 -0
- package/dist/src/services/google/sheets.d.ts.map +1 -0
- package/dist/src/services/google/sheets.js +19 -0
- package/dist/src/services/google/sheets.js.map +1 -0
- package/dist/src/services/googleAnalytics.d.ts +11 -0
- package/dist/src/services/googleAnalytics.d.ts.map +1 -0
- package/dist/src/services/googleAnalytics.js +18 -0
- package/dist/src/services/googleAnalytics.js.map +1 -0
- package/dist/src/services/googleMaps.d.ts +12 -0
- package/dist/src/services/googleMaps.d.ts.map +1 -0
- package/dist/src/services/googleMaps.js +17 -0
- package/dist/src/services/googleMaps.js.map +1 -0
- package/dist/src/services/index.d.ts +21 -3
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +21 -3
- 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 +4 -1
- package/dist/src/services/linear.js.map +1 -1
- package/dist/src/services/mailchimp.d.ts +3 -2
- package/dist/src/services/mailchimp.d.ts.map +1 -1
- package/dist/src/services/mailchimp.js +5 -4
- package/dist/src/services/mailchimp.js.map +1 -1
- package/dist/src/services/notion.d.ts +2 -1
- package/dist/src/services/notion.d.ts.map +1 -1
- package/dist/src/services/notion.js +4 -1
- package/dist/src/services/notion.js.map +1 -1
- package/dist/src/services/sentry.d.ts +14 -0
- package/dist/src/services/sentry.d.ts.map +1 -0
- package/dist/src/services/sentry.js +43 -0
- package/dist/src/services/sentry.js.map +1 -0
- package/dist/src/services/slack.d.ts +31 -2
- package/dist/src/services/slack.d.ts.map +1 -1
- package/dist/src/services/slack.js +46 -3
- package/dist/src/services/slack.js.map +1 -1
- package/dist/src/services/stripe.d.ts +12 -0
- package/dist/src/services/stripe.d.ts.map +1 -0
- package/dist/src/services/stripe.js +14 -0
- package/dist/src/services/stripe.js.map +1 -0
- package/dist/src/services/telegram.d.ts +40 -0
- package/dist/src/services/telegram.d.ts.map +1 -0
- package/dist/src/services/telegram.js +73 -0
- package/dist/src/services/telegram.js.map +1 -0
- package/dist/src/services/yelp.d.ts +12 -0
- package/dist/src/services/yelp.d.ts.map +1 -0
- package/dist/src/services/yelp.js +16 -0
- package/dist/src/services/yelp.js.map +1 -0
- package/dist/src/services/zoom.d.ts +12 -0
- package/dist/src/services/zoom.d.ts.map +1 -0
- package/dist/src/services/zoom.js +18 -0
- package/dist/src/services/zoom.js.map +1 -0
- package/dist/tests/apiCredentialStore.test.js +2 -19
- package/dist/tests/apiCredentialStore.test.js.map +1 -1
- package/dist/tests/apiCredentials.test.js +139 -178
- package/dist/tests/apiCredentials.test.js.map +1 -1
- package/dist/tests/cli.test.js +755 -255
- package/dist/tests/cli.test.js.map +1 -1
- package/dist/tests/encryptedStorage.test.js +0 -4
- package/dist/tests/encryptedStorage.test.js.map +1 -1
- package/dist/tests/encryptedStorageKeyGeneration.test.d.ts +2 -0
- package/dist/tests/encryptedStorageKeyGeneration.test.d.ts.map +1 -0
- package/dist/tests/encryptedStorageKeyGeneration.test.js +22 -0
- package/dist/tests/encryptedStorageKeyGeneration.test.js.map +1 -0
- package/dist/tests/encryption.test.js +3 -35
- package/dist/tests/encryption.test.js.map +1 -1
- package/dist/tests/migrations.test.d.ts +2 -0
- package/dist/tests/migrations.test.d.ts.map +1 -0
- package/dist/tests/migrations.test.js +164 -0
- package/dist/tests/migrations.test.js.map +1 -0
- package/dist/tests/playwrightDownload.test.js +2 -65
- package/dist/tests/playwrightDownload.test.js.map +1 -1
- package/dist/tests/registry.test.js +147 -75
- package/dist/tests/registry.test.js.map +1 -1
- package/dist/tests/servicesAgainstRecordings.test.js +2 -2
- package/dist/tests/servicesAgainstRecordings.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -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 LinearServiceSession extends BrowserFollowupServiceSession {
|
|
8
8
|
private isLoggedIn;
|
|
9
9
|
onResponse(response: Response): void;
|
|
@@ -17,6 +17,7 @@ export declare class Linear extends Service {
|
|
|
17
17
|
readonly loginUrl = "https://linear.app/imbue/settings/account/security/api-keys/new";
|
|
18
18
|
readonly info = "https://linear.app/developers/graphql";
|
|
19
19
|
readonly credentialCheckCurlArguments: readonly ["-X", "POST", "-H", "Content-Type: application/json", "-d", "{\"query\": \"{ viewer { id } }\"}", "https://api.linear.app/graphql"];
|
|
20
|
+
setCredentialsExample(serviceName: string): string;
|
|
20
21
|
getSession(): LinearServiceSession;
|
|
21
22
|
}
|
|
22
23
|
export declare const LINEAR: Linear;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/services/linear.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/services/linear.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAoB,MAAM,gBAAgB,CAAC;AAO1F,cAAM,oBAAqB,SAAQ,6BAA6B;IAC9D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA+BpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,eAAe,CAAC,EAAE,cAAc,GAC/B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAgClC;AAED,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,qEAA0B;IAC3C,QAAQ,CAAC,IAAI,2CAA2C;IAExD,QAAQ,CAAC,4BAA4B,gJAQ1B;IAEX,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 { AuthorizationBare } 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 API key (also used as login URL)
|
|
9
9
|
const LINEAR_NEW_API_KEY_URL = 'https://linear.app/imbue/settings/account/security/api-keys/new';
|
|
@@ -83,6 +83,9 @@ export class Linear extends Service {
|
|
|
83
83
|
'{"query": "{ viewer { id } }"}',
|
|
84
84
|
'https://api.linear.app/graphql',
|
|
85
85
|
];
|
|
86
|
+
setCredentialsExample(serviceName) {
|
|
87
|
+
return `latchkey auth set ${serviceName} -H "Authorization: <token>"`;
|
|
88
|
+
}
|
|
86
89
|
getSession() {
|
|
87
90
|
return new LinearServiceSession(this);
|
|
88
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/services/linear.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/services/linear.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE1F,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,mEAAmE;AACnE,MAAM,sBAAsB,GAAG,iEAAiE,CAAC;AAEjG,MAAM,oBAAqB,SAAQ,6BAA6B;IACtD,UAAU,GAAG,KAAK,CAAC;IAE3B,UAAU,CAAC,QAAkB;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,qEAAqE;QACrE,uEAAuE;QACvE,wEAAwE;QACxE,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,uCAAuC,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;YAC7F,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC;oBACH,wDAAwD;oBACxD,QAAQ;yBACL,IAAI,EAAE;yBACN,IAAI,CAAC,CAAC,QAAiB,EAAE,EAAE;wBAC1B,MAAM,IAAI,GAAI,QAA+C,CAAC,IAAI,IAAI,EAAE,CAAC;wBACzE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,kBAAkB,CAAC,EAAE,CAAC;4BAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;wBACzB,CAAC;oBACH,CAAC,CAAC;yBACD,KAAK,CAAC,GAAG,EAAE;wBACV,2BAA2B;oBAC7B,CAAC,CAAC,CAAC;gBACP,CAAC;gBAAC,MAAM,CAAC;oBACP,gBAAgB;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAES,eAAe;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAES,KAAK,CAAC,sBAAsB,CACpC,OAAuB,EACvB,eAAgC;QAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gBAAgB,CAAC,uCAAuC,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAExC,uBAAuB;QACvB,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACtD,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5D,MAAM,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAEjD,0BAA0B;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC3D,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5D,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAE3B,8EAA8E;QAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QACpE,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAEnB,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;CACF;AAED,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,sBAAsB,CAAC;IAClC,IAAI,GAAG,uCAAuC,CAAC;IAE/C,4BAA4B,GAAG;QACtC,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,gCAAgC;QAChC,IAAI;QACJ,gCAAgC;QAChC,gCAAgC;KACxB,CAAC;IAEX,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,8BAA8B,CAAC;IACxE,CAAC;IAEQ,UAAU;QACjB,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { Service } from './base.js';
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
2
|
export declare class Mailchimp extends Service {
|
|
3
3
|
readonly name = "mailchimp";
|
|
4
4
|
readonly displayName = "Mailchimp";
|
|
5
5
|
readonly baseApiUrls: readonly ["https://api.mailchimp.com/", RegExp];
|
|
6
6
|
readonly loginUrl = "https://login.mailchimp.com/";
|
|
7
|
-
readonly info
|
|
7
|
+
readonly info = "https://mailchimp.com/developer/marketing/api/.";
|
|
8
8
|
readonly credentialCheckCurlArguments: readonly ["https://login.mailchimp.com/oauth2/metadata"];
|
|
9
|
+
setCredentialsExample(serviceName: string): string;
|
|
9
10
|
}
|
|
10
11
|
export declare const MAILCHIMP: Mailchimp;
|
|
11
12
|
//# sourceMappingURL=mailchimp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailchimp.d.ts","sourceRoot":"","sources":["../../../src/services/mailchimp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mailchimp.d.ts","sourceRoot":"","sources":["../../../src/services/mailchimp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,qBAAa,SAAU,SAAQ,OAAO;IACpC,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,WAAW,kDAGT;IACX,QAAQ,CAAC,QAAQ,kCAAkC;IACnD,QAAQ,CAAC,IAAI,qDAAqD;IAElE,QAAQ,CAAC,4BAA4B,2DAA4D;IAEjG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAGnD;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Service } from './base.js';
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
2
|
export class Mailchimp extends Service {
|
|
3
3
|
name = 'mailchimp';
|
|
4
4
|
displayName = 'Mailchimp';
|
|
@@ -7,10 +7,11 @@ export class Mailchimp extends Service {
|
|
|
7
7
|
/^https:\/\/[^/]+\.api\.mailchimp\.com\//,
|
|
8
8
|
];
|
|
9
9
|
loginUrl = 'https://login.mailchimp.com/';
|
|
10
|
-
info = 'https://mailchimp.com/developer/marketing/api/.
|
|
11
|
-
'Browser-based authentication is not supported. ' +
|
|
12
|
-
'Use `latchkey auth set mailchimp -H "Authorization: Bearer <token>"` to add credentials manually.';
|
|
10
|
+
info = 'https://mailchimp.com/developer/marketing/api/.';
|
|
13
11
|
credentialCheckCurlArguments = ['https://login.mailchimp.com/oauth2/metadata'];
|
|
12
|
+
setCredentialsExample(serviceName) {
|
|
13
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
14
|
+
}
|
|
14
15
|
}
|
|
15
16
|
export const MAILCHIMP = new Mailchimp();
|
|
16
17
|
//# sourceMappingURL=mailchimp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailchimp.js","sourceRoot":"","sources":["../../../src/services/mailchimp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mailchimp.js","sourceRoot":"","sources":["../../../src/services/mailchimp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,OAAO,SAAU,SAAQ,OAAO;IAC3B,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,WAAW,CAAC;IAC1B,WAAW,GAAG;QACrB,4BAA4B;QAC5B,yCAAyC;KACjC,CAAC;IACF,QAAQ,GAAG,8BAA8B,CAAC;IAC1C,IAAI,GAAG,iDAAiD,CAAC;IAEzD,4BAA4B,GAAG,CAAC,6CAA6C,CAAU,CAAC;IAEjG,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { Response, BrowserContext } from 'playwright';
|
|
10
10
|
import { ApiCredentials } from '../apiCredentials.js';
|
|
11
|
-
import { Service, BrowserFollowupServiceSession } from './base.js';
|
|
11
|
+
import { Service, BrowserFollowupServiceSession } from './core/base.js';
|
|
12
12
|
declare class NotionServiceSession extends BrowserFollowupServiceSession {
|
|
13
13
|
private isLoggedIn;
|
|
14
14
|
onResponse(response: Response): void;
|
|
@@ -22,6 +22,7 @@ export declare class Notion extends Service {
|
|
|
22
22
|
readonly loginUrl = "https://www.notion.so/profile/integrations/form/new-integration";
|
|
23
23
|
readonly info: string;
|
|
24
24
|
readonly credentialCheckCurlArguments: readonly ["-H", "Notion-Version: 2022-06-28", "https://api.notion.com/v1/users/me"];
|
|
25
|
+
setCredentialsExample(serviceName: string): string;
|
|
25
26
|
getSession(): NotionServiceSession;
|
|
26
27
|
}
|
|
27
28
|
export declare const NOTION: Notion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/services/notion.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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,
|
|
1
|
+
{"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/services/notion.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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;AAM1F,cAAM,oBAAqB,SAAQ,6BAA6B;IAC9D,OAAO,CAAC,UAAU,CAAS;IAE3B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IASpC,SAAS,CAAC,eAAe,IAAI,OAAO;cAIpB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAgEhG;AAED,qBAAa,MAAO,SAAQ,OAAO;IACjC,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,WAAW,uCAAwC;IAC5D,QAAQ,CAAC,QAAQ,qEAA2B;IAC5C,QAAQ,CAAC,IAAI,SAG2E;IAExF,QAAQ,CAAC,4BAA4B,sFAI1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,IAAI,oBAAoB;CAG5C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { AuthorizationBearer } from '../apiCredentials.js';
|
|
10
10
|
import { generateLatchkeyAppName } from '../playwrightUtils.js';
|
|
11
|
-
import { Service, BrowserFollowupServiceSession, LoginFailedError } from './base.js';
|
|
11
|
+
import { Service, BrowserFollowupServiceSession, LoginFailedError } from './core/base.js';
|
|
12
12
|
const DEFAULT_TIMEOUT_MS = 8000;
|
|
13
13
|
const NOTION_INTEGRATIONS_URL = 'https://www.notion.so/profile/integrations/form/new-integration';
|
|
14
14
|
class NotionServiceSession extends BrowserFollowupServiceSession {
|
|
@@ -94,6 +94,9 @@ export class Notion extends Service {
|
|
|
94
94
|
'Notion-Version: 2022-06-28',
|
|
95
95
|
'https://api.notion.com/v1/users/me',
|
|
96
96
|
];
|
|
97
|
+
setCredentialsExample(serviceName) {
|
|
98
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
99
|
+
}
|
|
97
100
|
getSession() {
|
|
98
101
|
return new NotionServiceSession(this);
|
|
99
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/services/notion.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAkB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/services/notion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ApiCredentialStatus, type ApiCredentials } from '../apiCredentials.js';
|
|
2
|
+
import { Service } from './core/base.js';
|
|
3
|
+
export declare class Sentry extends Service {
|
|
4
|
+
readonly name = "sentry";
|
|
5
|
+
readonly displayName = "Sentry";
|
|
6
|
+
readonly baseApiUrls: readonly ["https://sentry.io/api/"];
|
|
7
|
+
readonly loginUrl = "https://sentry.io/auth/login/";
|
|
8
|
+
readonly info = "https://docs.sentry.io/api/.";
|
|
9
|
+
readonly credentialCheckCurlArguments: readonly ["-H", "Content-Type: application/json", "https://sentry.io/api/0/"];
|
|
10
|
+
setCredentialsExample(serviceName: string): string;
|
|
11
|
+
checkApiCredentials(apiCredentials: ApiCredentials): ApiCredentialStatus;
|
|
12
|
+
}
|
|
13
|
+
export declare const SENTRY: Sentry;
|
|
14
|
+
//# sourceMappingURL=sentry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../../src/services/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAE9B,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,sCAAuC;IAC3D,QAAQ,CAAC,QAAQ,mCAAmC;IACpD,QAAQ,CAAC,IAAI,kCAAkC;IAE/C,QAAQ,CAAC,4BAA4B,gFAI1B;IAEX,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,mBAAmB,CAAC,cAAc,EAAE,cAAc,GAAG,mBAAmB;CAuBlF;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ApiCredentialStatus, ApiCredentialsUsageError, } from '../apiCredentials.js';
|
|
2
|
+
import { runCaptured } from '../curl.js';
|
|
3
|
+
import { Service } from './core/base.js';
|
|
4
|
+
export class Sentry extends Service {
|
|
5
|
+
name = 'sentry';
|
|
6
|
+
displayName = 'Sentry';
|
|
7
|
+
baseApiUrls = ['https://sentry.io/api/'];
|
|
8
|
+
loginUrl = 'https://sentry.io/auth/login/';
|
|
9
|
+
info = 'https://docs.sentry.io/api/.';
|
|
10
|
+
credentialCheckCurlArguments = [
|
|
11
|
+
'-H',
|
|
12
|
+
'Content-Type: application/json',
|
|
13
|
+
'https://sentry.io/api/0/',
|
|
14
|
+
];
|
|
15
|
+
setCredentialsExample(serviceName) {
|
|
16
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
17
|
+
}
|
|
18
|
+
checkApiCredentials(apiCredentials) {
|
|
19
|
+
let allCurlArgs;
|
|
20
|
+
try {
|
|
21
|
+
allCurlArgs = apiCredentials.injectIntoCurlCall(['-s', ...this.credentialCheckCurlArguments]);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (error instanceof ApiCredentialsUsageError) {
|
|
25
|
+
return ApiCredentialStatus.Missing;
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
const result = runCaptured(allCurlArgs, 10);
|
|
30
|
+
try {
|
|
31
|
+
const data = JSON.parse(result.stdout);
|
|
32
|
+
if (data.user) {
|
|
33
|
+
return ApiCredentialStatus.Valid;
|
|
34
|
+
}
|
|
35
|
+
return ApiCredentialStatus.Invalid;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return ApiCredentialStatus.Invalid;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export const SENTRY = new Sentry();
|
|
43
|
+
//# sourceMappingURL=sentry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/services/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAEnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,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,wBAAwB,CAAU,CAAC;IAClD,QAAQ,GAAG,+BAA+B,CAAC;IAC3C,IAAI,GAAG,8BAA8B,CAAC;IAEtC,4BAA4B,GAAG;QACtC,IAAI;QACJ,gCAAgC;QAChC,0BAA0B;KAClB,CAAC;IAEX,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,qCAAqC,CAAC;IAC/E,CAAC;IAEQ,mBAAmB,CAAC,cAA8B;QACzD,IAAI,WAA8B,CAAC;QACnC,IAAI,CAAC;YACH,WAAW,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;gBAC9C,OAAO,mBAAmB,CAAC,OAAO,CAAC;YACrC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAuB,CAAC;YAC7D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,mBAAmB,CAAC,KAAK,CAAC;YACnC,CAAC;YACD,OAAO,mBAAmB,CAAC,OAAO,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,mBAAmB,CAAC,OAAO,CAAC;QACrC,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -2,8 +2,36 @@
|
|
|
2
2
|
* Slack service implementation.
|
|
3
3
|
*/
|
|
4
4
|
import type { Response } from 'playwright';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ApiCredentialStatus, type ApiCredentials } from '../apiCredentials.js';
|
|
7
|
+
import { Service, SimpleServiceSession } from './core/base.js';
|
|
8
|
+
/**
|
|
9
|
+
* Slack-specific credentials (token + d cookie).
|
|
10
|
+
*/
|
|
11
|
+
export declare const SlackApiCredentialsSchema: z.ZodObject<{
|
|
12
|
+
objectType: z.ZodLiteral<"slack">;
|
|
13
|
+
token: z.ZodString;
|
|
14
|
+
dCookie: z.ZodString;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
objectType: "slack";
|
|
17
|
+
token: string;
|
|
18
|
+
dCookie: string;
|
|
19
|
+
}, {
|
|
20
|
+
objectType: "slack";
|
|
21
|
+
token: string;
|
|
22
|
+
dCookie: string;
|
|
23
|
+
}>;
|
|
24
|
+
export type SlackApiCredentialsData = z.infer<typeof SlackApiCredentialsSchema>;
|
|
25
|
+
export declare class SlackApiCredentials implements ApiCredentials {
|
|
26
|
+
readonly objectType: "slack";
|
|
27
|
+
readonly token: string;
|
|
28
|
+
readonly dCookie: string;
|
|
29
|
+
constructor(token: string, dCookie: string);
|
|
30
|
+
injectIntoCurlCall(curlArguments: readonly string[]): readonly string[];
|
|
31
|
+
isExpired(): boolean | undefined;
|
|
32
|
+
toJSON(): SlackApiCredentialsData;
|
|
33
|
+
static fromJSON(data: SlackApiCredentialsData): SlackApiCredentials;
|
|
34
|
+
}
|
|
7
35
|
declare class SlackServiceSession extends SimpleServiceSession {
|
|
8
36
|
private pendingDCookie;
|
|
9
37
|
protected getApiCredentialsFromResponse(response: Response): Promise<ApiCredentials | null>;
|
|
@@ -15,6 +43,7 @@ export declare class Slack extends Service {
|
|
|
15
43
|
readonly loginUrl = "https://slack.com/signin";
|
|
16
44
|
readonly info: string;
|
|
17
45
|
readonly credentialCheckCurlArguments: readonly ["https://slack.com/api/auth.test"];
|
|
46
|
+
setCredentialsExample(serviceName: string): string;
|
|
18
47
|
getSession(): SlackServiceSession;
|
|
19
48
|
checkApiCredentials(apiCredentials: ApiCredentials): ApiCredentialStatus;
|
|
20
49
|
}
|
|
@@ -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,mBAAmB,EAAE,cAAc,
|
|
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,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE/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,SAAS,MAAM,EAAE;IAUvE,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,sCAAuC;IAC3D,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,IAAI,mBAAmB;IAIjC,mBAAmB,CAAC,cAAc,EAAE,cAAc,GAAG,mBAAmB;CAgBlF;AAED,eAAO,MAAM,KAAK,OAAc,CAAC"}
|
|
@@ -1,9 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Slack service implementation.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { ApiCredentialStatus } from '../apiCredentials.js';
|
|
5
6
|
import { runCaptured } from '../curl.js';
|
|
6
|
-
import { Service, SimpleServiceSession } from './base.js';
|
|
7
|
+
import { Service, SimpleServiceSession } from './core/base.js';
|
|
8
|
+
/**
|
|
9
|
+
* Slack-specific credentials (token + d cookie).
|
|
10
|
+
*/
|
|
11
|
+
export const SlackApiCredentialsSchema = z.object({
|
|
12
|
+
objectType: z.literal('slack'),
|
|
13
|
+
token: z.string(),
|
|
14
|
+
dCookie: z.string(),
|
|
15
|
+
});
|
|
16
|
+
export class SlackApiCredentials {
|
|
17
|
+
objectType = 'slack';
|
|
18
|
+
token;
|
|
19
|
+
dCookie;
|
|
20
|
+
constructor(token, dCookie) {
|
|
21
|
+
this.token = token;
|
|
22
|
+
this.dCookie = dCookie;
|
|
23
|
+
}
|
|
24
|
+
injectIntoCurlCall(curlArguments) {
|
|
25
|
+
return [
|
|
26
|
+
'-H',
|
|
27
|
+
`Authorization: Bearer ${this.token}`,
|
|
28
|
+
'-H',
|
|
29
|
+
`Cookie: d=${this.dCookie}`,
|
|
30
|
+
...curlArguments,
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
isExpired() {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
toJSON() {
|
|
37
|
+
return {
|
|
38
|
+
objectType: this.objectType,
|
|
39
|
+
token: this.token,
|
|
40
|
+
dCookie: this.dCookie,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
static fromJSON(data) {
|
|
44
|
+
return new SlackApiCredentials(data.token, data.dCookie);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
7
47
|
class SlackServiceSession extends SimpleServiceSession {
|
|
8
48
|
pendingDCookie = null;
|
|
9
49
|
async getApiCredentialsFromResponse(response) {
|
|
@@ -46,11 +86,14 @@ export class Slack extends Service {
|
|
|
46
86
|
info = 'https://docs.slack.dev/apis/web-api/. ' +
|
|
47
87
|
'Credentials are extracted from the user session, not a bot token.';
|
|
48
88
|
credentialCheckCurlArguments = ['https://slack.com/api/auth.test'];
|
|
89
|
+
setCredentialsExample(serviceName) {
|
|
90
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer xoxb-your-token"`;
|
|
91
|
+
}
|
|
49
92
|
getSession() {
|
|
50
93
|
return new SlackServiceSession(this);
|
|
51
94
|
}
|
|
52
95
|
checkApiCredentials(apiCredentials) {
|
|
53
|
-
const result = runCaptured(['-s', ...
|
|
96
|
+
const result = runCaptured(apiCredentials.injectIntoCurlCall(['-s', ...this.credentialCheckCurlArguments]), 10);
|
|
54
97
|
try {
|
|
55
98
|
const data = JSON.parse(result.stdout);
|
|
56
99
|
if (data.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
|
+
export declare class Stripe extends Service {
|
|
3
|
+
readonly name = "stripe";
|
|
4
|
+
readonly displayName = "Stripe";
|
|
5
|
+
readonly baseApiUrls: readonly ["https://api.stripe.com/"];
|
|
6
|
+
readonly loginUrl = "https://dashboard.stripe.com/login";
|
|
7
|
+
readonly info = "https://docs.stripe.com/api.";
|
|
8
|
+
readonly credentialCheckCurlArguments: readonly ["https://api.stripe.com/v1/balance"];
|
|
9
|
+
setCredentialsExample(serviceName: string): string;
|
|
10
|
+
}
|
|
11
|
+
export declare const STRIPE: Stripe;
|
|
12
|
+
//# sourceMappingURL=stripe.d.ts.map
|
|
@@ -0,0 +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;CAGnD;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
|
+
export class Stripe extends Service {
|
|
3
|
+
name = 'stripe';
|
|
4
|
+
displayName = 'Stripe';
|
|
5
|
+
baseApiUrls = ['https://api.stripe.com/'];
|
|
6
|
+
loginUrl = 'https://dashboard.stripe.com/login';
|
|
7
|
+
info = 'https://docs.stripe.com/api.';
|
|
8
|
+
credentialCheckCurlArguments = ['https://api.stripe.com/v1/balance'];
|
|
9
|
+
setCredentialsExample(serviceName) {
|
|
10
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export const STRIPE = new Stripe();
|
|
14
|
+
//# sourceMappingURL=stripe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/services/stripe.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,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;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type ApiCredentials } from '../apiCredentials.js';
|
|
3
|
+
import { Service } from './core/base.js';
|
|
4
|
+
/**
|
|
5
|
+
* Telegram Bot API credentials.
|
|
6
|
+
* The bot token is embedded in the URL path as specified by the Telegram Bot API:
|
|
7
|
+
* https://api.telegram.org/bot<token>/METHOD_NAME
|
|
8
|
+
*/
|
|
9
|
+
export declare const TelegramBotCredentialsSchema: z.ZodObject<{
|
|
10
|
+
objectType: z.ZodLiteral<"telegramBot">;
|
|
11
|
+
token: z.ZodString;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
objectType: "telegramBot";
|
|
14
|
+
token: string;
|
|
15
|
+
}, {
|
|
16
|
+
objectType: "telegramBot";
|
|
17
|
+
token: string;
|
|
18
|
+
}>;
|
|
19
|
+
export type TelegramBotCredentialsData = z.infer<typeof TelegramBotCredentialsSchema>;
|
|
20
|
+
export declare class TelegramBotCredentials implements ApiCredentials {
|
|
21
|
+
readonly objectType: "telegramBot";
|
|
22
|
+
readonly token: string;
|
|
23
|
+
constructor(token: string);
|
|
24
|
+
injectIntoCurlCall(curlArguments: readonly string[]): readonly string[];
|
|
25
|
+
isExpired(): boolean | undefined;
|
|
26
|
+
toJSON(): TelegramBotCredentialsData;
|
|
27
|
+
static fromJSON(data: TelegramBotCredentialsData): TelegramBotCredentials;
|
|
28
|
+
}
|
|
29
|
+
export declare class Telegram extends Service {
|
|
30
|
+
readonly name = "telegram";
|
|
31
|
+
readonly displayName = "Telegram";
|
|
32
|
+
readonly baseApiUrls: readonly ["https://api.telegram.org/"];
|
|
33
|
+
readonly loginUrl = "https://web.telegram.org/";
|
|
34
|
+
readonly info = "https://core.telegram.org/bots/api.";
|
|
35
|
+
readonly credentialCheckCurlArguments: readonly ["https://api.telegram.org/getMe"];
|
|
36
|
+
setCredentialsExample(serviceName: string): string;
|
|
37
|
+
getCredentialsNoCurl(arguments_: readonly string[]): ApiCredentials;
|
|
38
|
+
}
|
|
39
|
+
export declare const TELEGRAM: Telegram;
|
|
40
|
+
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -0,0 +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,sBAAsB,CAAC;AAE3D,OAAO,EAAsC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAI7E;;;;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,SAAS,MAAM,EAAE;IAUvE,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,yCAAyC;IAEtD,QAAQ,CAAC,4BAA4B,8CAAqC;IAE1E,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIzC,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc;CAgB7E;AAUD,eAAO,MAAM,QAAQ,UAAiB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { extractUrlFromCurlArguments } from '../curl.js';
|
|
3
|
+
import { NoCurlCredentialsNotSupportedError, Service } from './core/base.js';
|
|
4
|
+
const BASE_API_URL = 'https://api.telegram.org/';
|
|
5
|
+
/**
|
|
6
|
+
* Telegram Bot API credentials.
|
|
7
|
+
* The bot token is embedded in the URL path as specified by the Telegram Bot API:
|
|
8
|
+
* https://api.telegram.org/bot<token>/METHOD_NAME
|
|
9
|
+
*/
|
|
10
|
+
export const TelegramBotCredentialsSchema = z.object({
|
|
11
|
+
objectType: z.literal('telegramBot'),
|
|
12
|
+
token: z.string(),
|
|
13
|
+
});
|
|
14
|
+
export class TelegramBotCredentials {
|
|
15
|
+
objectType = 'telegramBot';
|
|
16
|
+
token;
|
|
17
|
+
constructor(token) {
|
|
18
|
+
this.token = token;
|
|
19
|
+
}
|
|
20
|
+
injectIntoCurlCall(curlArguments) {
|
|
21
|
+
const url = extractUrlFromCurlArguments(curlArguments);
|
|
22
|
+
if (!url?.startsWith(BASE_API_URL)) {
|
|
23
|
+
return curlArguments;
|
|
24
|
+
}
|
|
25
|
+
const pathAfterBase = url.slice(BASE_API_URL.length);
|
|
26
|
+
const rewrittenUrl = `${BASE_API_URL}bot${this.token}/${pathAfterBase}`;
|
|
27
|
+
return curlArguments.map((argument) => (argument === url ? rewrittenUrl : argument));
|
|
28
|
+
}
|
|
29
|
+
isExpired() {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
toJSON() {
|
|
33
|
+
return {
|
|
34
|
+
objectType: this.objectType,
|
|
35
|
+
token: this.token,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
static fromJSON(data) {
|
|
39
|
+
return new TelegramBotCredentials(data.token);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export class Telegram extends Service {
|
|
43
|
+
name = 'telegram';
|
|
44
|
+
displayName = 'Telegram';
|
|
45
|
+
baseApiUrls = [BASE_API_URL];
|
|
46
|
+
loginUrl = 'https://web.telegram.org/';
|
|
47
|
+
info = 'https://core.telegram.org/bots/api.';
|
|
48
|
+
credentialCheckCurlArguments = [`${BASE_API_URL}getMe`];
|
|
49
|
+
setCredentialsExample(serviceName) {
|
|
50
|
+
return `latchkey auth set-nocurl ${serviceName} <bot-token>`;
|
|
51
|
+
}
|
|
52
|
+
getCredentialsNoCurl(arguments_) {
|
|
53
|
+
if (arguments_.length !== 1 || arguments_[0] === undefined) {
|
|
54
|
+
throw new TelegramCredentialError('Expected exactly one argument: the bot token.\n' +
|
|
55
|
+
'Example: latchkey auth set-nocurl telegram <bot-token>');
|
|
56
|
+
}
|
|
57
|
+
const token = arguments_[0];
|
|
58
|
+
if (!token.includes(':')) {
|
|
59
|
+
throw new TelegramCredentialError("The provided token doesn't look like a Telegram bot token (expected format: <id>:<hash>).\n" +
|
|
60
|
+
'Example: <bot-token>');
|
|
61
|
+
}
|
|
62
|
+
return new TelegramBotCredentials(token);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class TelegramCredentialError extends NoCurlCredentialsNotSupportedError {
|
|
66
|
+
constructor(message) {
|
|
67
|
+
super('telegram');
|
|
68
|
+
this.message = message;
|
|
69
|
+
this.name = 'TelegramCredentialError';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export const TELEGRAM = new Telegram();
|
|
73
|
+
//# sourceMappingURL=telegram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/services/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
|
+
export declare class Yelp extends Service {
|
|
3
|
+
readonly name = "yelp";
|
|
4
|
+
readonly displayName = "Yelp";
|
|
5
|
+
readonly baseApiUrls: readonly ["https://api.yelp.com/"];
|
|
6
|
+
readonly loginUrl = "https://www.yelp.com/login";
|
|
7
|
+
readonly info = "https://docs.developer.yelp.com/reference.";
|
|
8
|
+
readonly credentialCheckCurlArguments: readonly ["https://api.yelp.com/v3/businesses/search?location=NYC&limit=1"];
|
|
9
|
+
setCredentialsExample(serviceName: string): string;
|
|
10
|
+
}
|
|
11
|
+
export declare const YELP: Yelp;
|
|
12
|
+
//# sourceMappingURL=yelp.d.ts.map
|
|
@@ -0,0 +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;CAGnD;AAED,eAAO,MAAM,IAAI,MAAa,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
|
+
export class Yelp extends Service {
|
|
3
|
+
name = 'yelp';
|
|
4
|
+
displayName = 'Yelp';
|
|
5
|
+
baseApiUrls = ['https://api.yelp.com/'];
|
|
6
|
+
loginUrl = 'https://www.yelp.com/login';
|
|
7
|
+
info = 'https://docs.developer.yelp.com/reference.';
|
|
8
|
+
credentialCheckCurlArguments = [
|
|
9
|
+
'https://api.yelp.com/v3/businesses/search?location=NYC&limit=1',
|
|
10
|
+
];
|
|
11
|
+
setCredentialsExample(serviceName) {
|
|
12
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const YELP = new Yelp();
|
|
16
|
+
//# sourceMappingURL=yelp.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
|
+
export declare class Zoom extends Service {
|
|
3
|
+
readonly name = "zoom";
|
|
4
|
+
readonly displayName = "Zoom";
|
|
5
|
+
readonly baseApiUrls: readonly ["https://api.zoom.us/v2/"];
|
|
6
|
+
readonly loginUrl = "https://zoom.us/signin";
|
|
7
|
+
readonly info = "https://developers.zoom.us/docs/api/.";
|
|
8
|
+
readonly credentialCheckCurlArguments: readonly ["-H", "Content-Type: application/json", "https://api.zoom.us/v2/users?page_size=1"];
|
|
9
|
+
setCredentialsExample(serviceName: string): string;
|
|
10
|
+
}
|
|
11
|
+
export declare const ZOOM: Zoom;
|
|
12
|
+
//# sourceMappingURL=zoom.d.ts.map
|
|
@@ -0,0 +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;CAGnD;AAED,eAAO,MAAM,IAAI,MAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Service } from './core/base.js';
|
|
2
|
+
export class Zoom extends Service {
|
|
3
|
+
name = 'zoom';
|
|
4
|
+
displayName = 'Zoom';
|
|
5
|
+
baseApiUrls = ['https://api.zoom.us/v2/'];
|
|
6
|
+
loginUrl = 'https://zoom.us/signin';
|
|
7
|
+
info = 'https://developers.zoom.us/docs/api/.';
|
|
8
|
+
credentialCheckCurlArguments = [
|
|
9
|
+
'-H',
|
|
10
|
+
'Content-Type: application/json',
|
|
11
|
+
'https://api.zoom.us/v2/users?page_size=1',
|
|
12
|
+
];
|
|
13
|
+
setCredentialsExample(serviceName) {
|
|
14
|
+
return `latchkey auth set ${serviceName} -H "Authorization: Bearer <token>"`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export const ZOOM = new Zoom();
|
|
18
|
+
//# sourceMappingURL=zoom.js.map
|