latchkey 1.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +66 -8
  2. package/dist/integrations/SKILL.md +15 -3
  3. package/dist/package.json +2 -2
  4. package/dist/scripts/codegen.js +1 -1
  5. package/dist/scripts/codegen.js.map +1 -1
  6. package/dist/src/apiCredentialStore.d.ts +1 -1
  7. package/dist/src/apiCredentialStore.d.ts.map +1 -1
  8. package/dist/src/apiCredentialStore.js +1 -1
  9. package/dist/src/apiCredentialStore.js.map +1 -1
  10. package/dist/src/apiCredentials.d.ts +13 -115
  11. package/dist/src/apiCredentials.d.ts.map +1 -1
  12. package/dist/src/apiCredentials.js +10 -101
  13. package/dist/src/apiCredentials.js.map +1 -1
  14. package/dist/src/apiCredentialsSerialization.d.ts +119 -0
  15. package/dist/src/apiCredentialsSerialization.d.ts.map +1 -0
  16. package/dist/src/apiCredentialsSerialization.js +90 -0
  17. package/dist/src/apiCredentialsSerialization.js.map +1 -0
  18. package/dist/src/browserConfig.d.ts +2 -33
  19. package/dist/src/browserConfig.d.ts.map +1 -1
  20. package/dist/src/browserConfig.js +6 -81
  21. package/dist/src/browserConfig.js.map +1 -1
  22. package/dist/src/cli.js +22 -0
  23. package/dist/src/cli.js.map +1 -1
  24. package/dist/src/cliCommands.d.ts +0 -1
  25. package/dist/src/cliCommands.d.ts.map +1 -1
  26. package/dist/src/cliCommands.js +148 -44
  27. package/dist/src/cliCommands.js.map +1 -1
  28. package/dist/src/config.d.ts +4 -3
  29. package/dist/src/config.d.ts.map +1 -1
  30. package/dist/src/config.js +17 -23
  31. package/dist/src/config.js.map +1 -1
  32. package/dist/src/configDataStore.d.ts +43 -0
  33. package/dist/src/configDataStore.d.ts.map +1 -0
  34. package/dist/src/configDataStore.js +108 -0
  35. package/dist/src/configDataStore.js.map +1 -0
  36. package/dist/src/curl.d.ts +10 -0
  37. package/dist/src/curl.d.ts.map +1 -1
  38. package/dist/src/curl.js +88 -0
  39. package/dist/src/curl.js.map +1 -1
  40. package/dist/src/encryptedStorage.d.ts +9 -0
  41. package/dist/src/encryptedStorage.d.ts.map +1 -1
  42. package/dist/src/encryptedStorage.js +12 -0
  43. package/dist/src/encryptedStorage.js.map +1 -1
  44. package/dist/src/index.d.ts +4 -2
  45. package/dist/src/index.d.ts.map +1 -1
  46. package/dist/src/index.js +4 -2
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/migrations.d.ts +9 -0
  49. package/dist/src/migrations.d.ts.map +1 -0
  50. package/dist/src/migrations.js +77 -0
  51. package/dist/src/migrations.js.map +1 -0
  52. package/dist/src/oauthUtils.d.ts +4 -1
  53. package/dist/src/oauthUtils.d.ts.map +1 -1
  54. package/dist/src/oauthUtils.js +1 -1
  55. package/dist/src/oauthUtils.js.map +1 -1
  56. package/dist/src/playwrightUtils.d.ts +2 -2
  57. package/dist/src/playwrightUtils.d.ts.map +1 -1
  58. package/dist/src/playwrightUtils.js +4 -4
  59. package/dist/src/playwrightUtils.js.map +1 -1
  60. package/dist/src/registeredService.d.ts +20 -0
  61. package/dist/src/registeredService.d.ts.map +1 -0
  62. package/dist/src/registeredService.js +34 -0
  63. package/dist/src/registeredService.js.map +1 -0
  64. package/dist/src/registeredServiceStore.d.ts +24 -0
  65. package/dist/src/registeredServiceStore.d.ts.map +1 -0
  66. package/dist/src/registeredServiceStore.js +70 -0
  67. package/dist/src/registeredServiceStore.js.map +1 -0
  68. package/dist/src/registry.d.ts +11 -1
  69. package/dist/src/registry.d.ts.map +1 -1
  70. package/dist/src/registry.js +70 -6
  71. package/dist/src/registry.js.map +1 -1
  72. package/dist/src/services/aws.d.ts +44 -0
  73. package/dist/src/services/aws.d.ts.map +1 -0
  74. package/dist/src/services/aws.js +237 -0
  75. package/dist/src/services/aws.js.map +1 -0
  76. package/dist/src/services/base.d.ts +14 -0
  77. package/dist/src/services/base.d.ts.map +1 -1
  78. package/dist/src/services/base.js +23 -11
  79. package/dist/src/services/base.js.map +1 -1
  80. package/dist/src/services/calendly.d.ts +12 -0
  81. package/dist/src/services/calendly.d.ts.map +1 -0
  82. package/dist/src/services/calendly.js +18 -0
  83. package/dist/src/services/calendly.js.map +1 -0
  84. package/dist/src/services/core/base.d.ts +141 -0
  85. package/dist/src/services/core/base.d.ts.map +1 -0
  86. package/dist/src/services/core/base.js +189 -0
  87. package/dist/src/services/core/base.js.map +1 -0
  88. package/dist/src/services/core/registered.d.ts +24 -0
  89. package/dist/src/services/core/registered.d.ts.map +1 -0
  90. package/dist/src/services/core/registered.js +53 -0
  91. package/dist/src/services/core/registered.js.map +1 -0
  92. package/dist/src/services/discord.d.ts +2 -1
  93. package/dist/src/services/discord.d.ts.map +1 -1
  94. package/dist/src/services/discord.js +4 -1
  95. package/dist/src/services/discord.js.map +1 -1
  96. package/dist/src/services/dropbox.d.ts +3 -2
  97. package/dist/src/services/dropbox.d.ts.map +1 -1
  98. package/dist/src/services/dropbox.js +6 -1
  99. package/dist/src/services/dropbox.js.map +1 -1
  100. package/dist/src/services/figma.d.ts +12 -0
  101. package/dist/src/services/figma.d.ts.map +1 -0
  102. package/dist/src/services/figma.js +14 -0
  103. package/dist/src/services/figma.js.map +1 -0
  104. package/dist/src/services/github.d.ts +2 -1
  105. package/dist/src/services/github.d.ts.map +1 -1
  106. package/dist/src/services/github.js +4 -1
  107. package/dist/src/services/github.js.map +1 -1
  108. package/dist/src/services/gitlab.d.ts +12 -0
  109. package/dist/src/services/gitlab.d.ts.map +1 -0
  110. package/dist/src/services/gitlab.js +14 -0
  111. package/dist/src/services/gitlab.js.map +1 -0
  112. package/dist/src/services/google/analytics.d.ts +11 -0
  113. package/dist/src/services/google/analytics.d.ts.map +1 -0
  114. package/dist/src/services/google/analytics.js +22 -0
  115. package/dist/src/services/google/analytics.js.map +1 -0
  116. package/dist/src/services/google/base.d.ts +73 -0
  117. package/dist/src/services/google/base.d.ts.map +1 -0
  118. package/dist/src/services/google/base.js +323 -0
  119. package/dist/src/services/google/base.js.map +1 -0
  120. package/dist/src/services/google/calendar.d.ts +11 -0
  121. package/dist/src/services/google/calendar.d.ts.map +1 -0
  122. package/dist/src/services/google/calendar.js +22 -0
  123. package/dist/src/services/google/calendar.js.map +1 -0
  124. package/dist/src/services/google/directions.d.ts +14 -0
  125. package/dist/src/services/google/directions.d.ts.map +1 -0
  126. package/dist/src/services/google/directions.js +49 -0
  127. package/dist/src/services/google/directions.js.map +1 -0
  128. package/dist/src/services/google/docs.d.ts +11 -0
  129. package/dist/src/services/google/docs.d.ts.map +1 -0
  130. package/dist/src/services/google/docs.js +19 -0
  131. package/dist/src/services/google/docs.js.map +1 -0
  132. package/dist/src/services/google/drive.d.ts +11 -0
  133. package/dist/src/services/google/drive.d.ts.map +1 -0
  134. package/dist/src/services/google/drive.js +19 -0
  135. package/dist/src/services/google/drive.js.map +1 -0
  136. package/dist/src/services/google/gmail.d.ts +11 -0
  137. package/dist/src/services/google/gmail.d.ts.map +1 -0
  138. package/dist/src/services/google/gmail.js +24 -0
  139. package/dist/src/services/google/gmail.js.map +1 -0
  140. package/dist/src/services/google/maps.d.ts +39 -0
  141. package/dist/src/services/google/maps.d.ts.map +1 -0
  142. package/dist/src/services/google/maps.js +94 -0
  143. package/dist/src/services/google/maps.js.map +1 -0
  144. package/dist/src/services/google/people.d.ts +11 -0
  145. package/dist/src/services/google/people.d.ts.map +1 -0
  146. package/dist/src/services/google/people.js +22 -0
  147. package/dist/src/services/google/people.js.map +1 -0
  148. package/dist/src/services/google/sheets.d.ts +11 -0
  149. package/dist/src/services/google/sheets.d.ts.map +1 -0
  150. package/dist/src/services/google/sheets.js +19 -0
  151. package/dist/src/services/google/sheets.js.map +1 -0
  152. package/dist/src/services/googleAnalytics.d.ts +11 -0
  153. package/dist/src/services/googleAnalytics.d.ts.map +1 -0
  154. package/dist/src/services/googleAnalytics.js +18 -0
  155. package/dist/src/services/googleAnalytics.js.map +1 -0
  156. package/dist/src/services/googleMaps.d.ts +12 -0
  157. package/dist/src/services/googleMaps.d.ts.map +1 -0
  158. package/dist/src/services/googleMaps.js +17 -0
  159. package/dist/src/services/googleMaps.js.map +1 -0
  160. package/dist/src/services/index.d.ts +21 -3
  161. package/dist/src/services/index.d.ts.map +1 -1
  162. package/dist/src/services/index.js +21 -3
  163. package/dist/src/services/index.js.map +1 -1
  164. package/dist/src/services/linear.d.ts +2 -1
  165. package/dist/src/services/linear.d.ts.map +1 -1
  166. package/dist/src/services/linear.js +4 -1
  167. package/dist/src/services/linear.js.map +1 -1
  168. package/dist/src/services/mailchimp.d.ts +3 -2
  169. package/dist/src/services/mailchimp.d.ts.map +1 -1
  170. package/dist/src/services/mailchimp.js +5 -4
  171. package/dist/src/services/mailchimp.js.map +1 -1
  172. package/dist/src/services/notion.d.ts +2 -1
  173. package/dist/src/services/notion.d.ts.map +1 -1
  174. package/dist/src/services/notion.js +4 -1
  175. package/dist/src/services/notion.js.map +1 -1
  176. package/dist/src/services/sentry.d.ts +14 -0
  177. package/dist/src/services/sentry.d.ts.map +1 -0
  178. package/dist/src/services/sentry.js +43 -0
  179. package/dist/src/services/sentry.js.map +1 -0
  180. package/dist/src/services/slack.d.ts +31 -2
  181. package/dist/src/services/slack.d.ts.map +1 -1
  182. package/dist/src/services/slack.js +46 -3
  183. package/dist/src/services/slack.js.map +1 -1
  184. package/dist/src/services/stripe.d.ts +12 -0
  185. package/dist/src/services/stripe.d.ts.map +1 -0
  186. package/dist/src/services/stripe.js +14 -0
  187. package/dist/src/services/stripe.js.map +1 -0
  188. package/dist/src/services/telegram.d.ts +40 -0
  189. package/dist/src/services/telegram.d.ts.map +1 -0
  190. package/dist/src/services/telegram.js +73 -0
  191. package/dist/src/services/telegram.js.map +1 -0
  192. package/dist/src/services/yelp.d.ts +12 -0
  193. package/dist/src/services/yelp.d.ts.map +1 -0
  194. package/dist/src/services/yelp.js +16 -0
  195. package/dist/src/services/yelp.js.map +1 -0
  196. package/dist/src/services/zoom.d.ts +12 -0
  197. package/dist/src/services/zoom.d.ts.map +1 -0
  198. package/dist/src/services/zoom.js +18 -0
  199. package/dist/src/services/zoom.js.map +1 -0
  200. package/dist/tests/apiCredentialStore.test.js +2 -19
  201. package/dist/tests/apiCredentialStore.test.js.map +1 -1
  202. package/dist/tests/apiCredentials.test.js +139 -178
  203. package/dist/tests/apiCredentials.test.js.map +1 -1
  204. package/dist/tests/cli.test.js +755 -255
  205. package/dist/tests/cli.test.js.map +1 -1
  206. package/dist/tests/encryptedStorage.test.js +0 -4
  207. package/dist/tests/encryptedStorage.test.js.map +1 -1
  208. package/dist/tests/encryptedStorageKeyGeneration.test.d.ts +2 -0
  209. package/dist/tests/encryptedStorageKeyGeneration.test.d.ts.map +1 -0
  210. package/dist/tests/encryptedStorageKeyGeneration.test.js +22 -0
  211. package/dist/tests/encryptedStorageKeyGeneration.test.js.map +1 -0
  212. package/dist/tests/encryption.test.js +3 -35
  213. package/dist/tests/encryption.test.js.map +1 -1
  214. package/dist/tests/migrations.test.d.ts +2 -0
  215. package/dist/tests/migrations.test.d.ts.map +1 -0
  216. package/dist/tests/migrations.test.js +164 -0
  217. package/dist/tests/migrations.test.js.map +1 -0
  218. package/dist/tests/playwrightDownload.test.js +2 -65
  219. package/dist/tests/playwrightDownload.test.js.map +1 -1
  220. package/dist/tests/registry.test.js +147 -75
  221. package/dist/tests/registry.test.js.map +1 -1
  222. package/dist/tests/servicesAgainstRecordings.test.js +2 -2
  223. package/dist/tests/servicesAgainstRecordings.test.js.map +1 -1
  224. package/package.json +2 -2
@@ -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,WAAW,CAAC;AAOrF,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;IAEF,UAAU,IAAI,oBAAoB;CAG5C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
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":"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"}
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/services/linear.ts"],"names":[],"mappings":"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"}
@@ -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: string;
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,WAAW,CAAC;AAEpC,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,SAGyF;IAEtG,QAAQ,CAAC,4BAA4B,2DAA4D;CAClG;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
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,WAAW,CAAC;AAEpC,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,GACX,kDAAkD;QAClD,iDAAiD;QACjD,mGAAmG,CAAC;IAE7F,4BAA4B,GAAG,CAAC,6CAA6C,CAAU,CAAC;CAClG;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
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,WAAW,CAAC;AAMrF,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;IAEF,UAAU,IAAI,oBAAoB;CAG5C;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
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":"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"}
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 { ApiCredentialStatus, ApiCredentials } from '../apiCredentials.js';
6
- import { Service, SimpleServiceSession } from './base.js';
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,EAAuB,MAAM,sBAAsB,CAAC;AAEhG,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE1D,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;IAE5E,UAAU,IAAI,mBAAmB;IAIjC,mBAAmB,CAAC,cAAc,EAAE,cAAc,GAAG,mBAAmB;CAgBlF;AAED,eAAO,MAAM,KAAK,OAAc,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 { ApiCredentialStatus, SlackApiCredentials } from '../apiCredentials.js';
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', ...apiCredentials.asCurlArguments(), ...this.credentialCheckCurlArguments], 10);
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,mBAAmB,EAAkB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,mBAAoB,SAAQ,oBAAoB;IAC5C,cAAc,GAAkB,IAAI,CAAC;IAEnC,KAAK,CAAC,6BAA6B,CAC3C,QAAkB;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,yCAAyC;QACzC,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAE9B,uEAAuE;QACvE,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,oCAAoC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3E,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,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,0BAA0B,CAAC;IACtC,IAAI,GACX,wCAAwC;QACxC,mEAAmE,CAAC;IAE7D,4BAA4B,GAAG,CAAC,iCAAiC,CAAU,CAAC;IAE5E,UAAU;QACjB,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEQ,mBAAmB,CAAC,cAA8B;QACzD,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,eAAe,EAAE,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,EACjF,EAAE,CACH,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAqB,CAAC;YAC3D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,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,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/services/slack.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAuB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAIH,MAAM,OAAO,mBAAmB;IACrB,UAAU,GAAG,OAAgB,CAAC;IAC9B,KAAK,CAAS;IACd,OAAO,CAAS;IAEzB,YAAY,KAAa,EAAE,OAAe;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,kBAAkB,CAAC,aAAgC;QACjD,OAAO;YACL,IAAI;YACJ,yBAAyB,IAAI,CAAC,KAAK,EAAE;YACrC,IAAI;YACJ,aAAa,IAAI,CAAC,OAAO,EAAE;YAC3B,GAAG,aAAa;SACjB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAA6B;QAC3C,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;CACF;AAED,MAAM,mBAAoB,SAAQ,oBAAoB;IAC5C,cAAc,GAAkB,IAAI,CAAC;IAEnC,KAAK,CAAC,6BAA6B,CAC3C,QAAkB;QAElB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,yCAAyC;QACzC,IAAI,CAAC,wCAAwC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAE9B,uEAAuE;QACvE,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,oCAAoC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3E,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,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,0BAA0B,CAAC;IACtC,IAAI,GACX,wCAAwC;QACxC,mEAAmE,CAAC;IAE7D,4BAA4B,GAAG,CAAC,iCAAiC,CAAU,CAAC;IAErF,qBAAqB,CAAC,WAAmB;QACvC,OAAO,qBAAqB,WAAW,6CAA6C,CAAC;IACvF,CAAC;IAEQ,UAAU;QACjB,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEQ,mBAAmB,CAAC,cAA8B;QACzD,MAAM,MAAM,GAAG,WAAW,CACxB,cAAc,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAC/E,EAAE,CACH,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAqB,CAAC;YAC3D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,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,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC"}
@@ -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":"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;AAE7E,MAAM,YAAY,GAAG,2BAA2B,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH,MAAM,OAAO,sBAAsB;IACxB,UAAU,GAAG,aAAsB,CAAC;IACpC,KAAK,CAAS;IAEvB,YAAY,KAAa;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,kBAAkB,CAAC,aAAgC;QACjD,MAAM,GAAG,GAAG,2BAA2B,CAAC,aAAyB,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,GAAG,YAAY,MAAM,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;QACxE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,SAAS;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAgC;QAC9C,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,OAAO;IAC1B,IAAI,GAAG,UAAU,CAAC;IAClB,WAAW,GAAG,UAAU,CAAC;IACzB,WAAW,GAAG,CAAC,YAAY,CAAU,CAAC;IACtC,QAAQ,GAAG,2BAA2B,CAAC;IACvC,IAAI,GAAG,qCAAqC,CAAC;IAE7C,4BAA4B,GAAG,CAAC,GAAG,YAAY,OAAO,CAAU,CAAC;IAE1E,qBAAqB,CAAC,WAAmB;QACvC,OAAO,4BAA4B,WAAW,cAAc,CAAC;IAC/D,CAAC;IAEQ,oBAAoB,CAAC,UAA6B;QACzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,uBAAuB,CAC/B,iDAAiD;gBAC/C,wDAAwD,CAC3D,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,uBAAuB,CAC/B,6FAA6F;gBAC3F,sBAAsB,CACzB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,uBAAwB,SAAQ,kCAAkC;IACtE,YAAY,OAAe;QACzB,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC"}
@@ -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