@cobaltio/cobalt-js 9.2.1 → 9.3.0-beta.1

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 (41) hide show
  1. package/.github/workflows/npm-publish.yml +10 -2
  2. package/cobalt.d.ts +61 -20
  3. package/cobalt.js +377 -410
  4. package/cobalt.ts +120 -34
  5. package/docs/assets/hierarchy.js +1 -1
  6. package/docs/assets/navigation.js +1 -1
  7. package/docs/assets/search.js +1 -1
  8. package/docs/classes/Cobalt.html +32 -26
  9. package/docs/enums/AuthStatus.html +2 -2
  10. package/docs/enums/AuthType.html +2 -2
  11. package/docs/hierarchy.html +1 -1
  12. package/docs/interfaces/Application.html +14 -18
  13. package/docs/interfaces/AuthConfig.html +9 -0
  14. package/docs/interfaces/CobaltOptions.html +3 -3
  15. package/docs/interfaces/Config.html +2 -2
  16. package/docs/interfaces/ConfigField.html +4 -4
  17. package/docs/interfaces/ConfigPayload.html +4 -4
  18. package/docs/interfaces/ConfigWorkflow.html +2 -2
  19. package/docs/interfaces/ConnectedAccount.html +14 -0
  20. package/docs/interfaces/ExecuteWorkflowPayload.html +5 -5
  21. package/docs/interfaces/Execution.html +2 -2
  22. package/docs/interfaces/ExecutionFilters.html +8 -8
  23. package/docs/interfaces/GetExecutionsParams.html +9 -9
  24. package/docs/interfaces/InputField.html +9 -9
  25. package/docs/interfaces/KeyBasedParams.html +7 -0
  26. package/docs/interfaces/Label.html +3 -3
  27. package/docs/interfaces/OAuthParams.html +9 -0
  28. package/docs/interfaces/PublicWorkflow.html +8 -8
  29. package/docs/interfaces/PublicWorkflowPayload.html +4 -4
  30. package/docs/interfaces/PublicWorkflowsPayload.html +7 -7
  31. package/docs/interfaces/RuleOptions.html +2 -2
  32. package/docs/interfaces/UpdateConfigPayload.html +5 -5
  33. package/docs/interfaces/WorkflowPayload.html +4 -4
  34. package/docs/interfaces/WorkflowPayloadResponse.html +2 -2
  35. package/docs/llms.txt +282 -197
  36. package/docs/modules.html +1 -1
  37. package/docs/types/ExecutionSource.html +1 -1
  38. package/docs/types/ExecutionStatus.html +1 -1
  39. package/docs/types/ExecutionType.html +1 -1
  40. package/package.json +1 -1
  41. package/tsconfig.json +12 -12
package/cobalt.ts CHANGED
@@ -12,6 +12,22 @@ export enum AuthStatus {
12
12
  Expired = "expired",
13
13
  }
14
14
 
15
+ /** A connected account for an application. */
16
+ export interface ConnectedAccount {
17
+ /** The unique identifier for this connected account. */
18
+ connection_id: string;
19
+ /** The identifier of the auth config. */
20
+ auth_config_id: string;
21
+ /** The identifier (username, email, etc.) of the connected account. */
22
+ identifier: unknown;
23
+ /** The auth type used to connect the account. */
24
+ auth_type: AuthType;
25
+ /** The timestamp at which the account was connected. */
26
+ connectedAt: string;
27
+ /** The current status of the connection. */
28
+ status?: AuthStatus;
29
+ }
30
+
15
31
  /** An application in Cobalt. */
16
32
  export interface Application {
17
33
  /** Application ID */
@@ -37,16 +53,7 @@ export interface Application {
37
53
  [key in AuthType]: InputField[];
38
54
  };
39
55
  /** The list of connected accounts for this application */
40
- connected_accounts?: {
41
- /** The identifier (username, email, etc.) of the connected account. */
42
- identifier: unknown;
43
- /** The auth type used to connect the account. */
44
- auth_type: AuthType;
45
- /** The timestamp at which the account was connected. */
46
- connectedAt: string;
47
- /** The current status of the connection. */
48
- status?: AuthStatus;
49
- }[];
56
+ connected_accounts?: ConnectedAccount[];
50
57
  /**
51
58
  * The type of auth used by application.
52
59
  * @deprecated Check `auth_type_options` and `connected_accounts` for multiple auth types support.
@@ -69,6 +76,17 @@ export interface Application {
69
76
  auth_input_map?: InputField[];
70
77
  }
71
78
 
79
+ export interface AuthConfig {
80
+ /** The auth config ID. */
81
+ _id: string;
82
+ /** The display name of the auth config. */
83
+ name: string;
84
+ /** The description of the auth config. */
85
+ description?: string;
86
+ /** Whether the auth config is the default auth config for the application. */
87
+ is_default?: boolean;
88
+ }
89
+
72
90
  /** An Input field to take input from the user. */
73
91
  export interface InputField {
74
92
  /** Key name of the field. */
@@ -92,6 +110,26 @@ export interface InputField {
92
110
  }[];
93
111
  }
94
112
 
113
+ export interface OAuthParams {
114
+ /** The application slug. */
115
+ slug: string;
116
+ /** The identifier of the auth config. */
117
+ authConfig?: string;
118
+ /** The key value pairs of auth data. */
119
+ payload?: Record<string, string>;
120
+ /** Whether to close the authentication window automatically. */
121
+ autoClose?: boolean;
122
+ }
123
+
124
+ export interface KeyBasedParams {
125
+ /** The application slug. */
126
+ slug: string;
127
+ /** The identifier of the auth config. */
128
+ authConfig?: string;
129
+ /** The key value pairs of auth data. */
130
+ payload?: Record<string, string>;
131
+ }
132
+
95
133
  /** The payload object for config. */
96
134
  export interface ConfigPayload {
97
135
  /** The application slug. */
@@ -482,16 +520,47 @@ class Cobalt {
482
520
  return data;
483
521
  }
484
522
 
523
+ /**
524
+ * Returns the auth configs for the specified application.
525
+ * @param {String} slug The application slug.
526
+ * @returns {Promise<AuthConfig[]>} The auth configs.
527
+ */
528
+ public async getAuthConfigs(slug: string): Promise<AuthConfig[]> {
529
+ const res = await fetch(`${this.baseUrl}/api/v2/public/slug/${slug}/auth-config`, {
530
+ headers: {
531
+ authorization: `Bearer ${this.token}`,
532
+ },
533
+ });
534
+
535
+ if (res.status >= 400 && res.status < 600) {
536
+ const error = await res.json();
537
+ throw error;
538
+ }
539
+
540
+ const data = await res.json();
541
+ return data.docs || [];
542
+ }
543
+
485
544
  /**
486
545
  * Returns the auth URL that users can use to authenticate themselves to the
487
546
  * specified application.
488
547
  * @private
489
- * @param {String} slug The application slug.
490
- * @param {Object.<string, string>} [params] The key value pairs of auth data.
548
+ * @param {OAuthParams} params The OAuth parameters.
491
549
  * @returns {Promise<String>} The auth URL where users can authenticate themselves.
492
550
  */
493
- private async getOAuthUrl(slug: string, params?: Record<string, string>): Promise<string> {
494
- const res = await fetch(`${this.baseUrl}/api/v1/${slug}/integrate?${new URLSearchParams(params).toString()}`, {
551
+ private async getOAuthUrl({
552
+ slug,
553
+ authConfig,
554
+ payload,
555
+ }: OAuthParams): Promise<string> {
556
+ const queryParams = new URLSearchParams();
557
+ if (authConfig) queryParams.append("auth_config_id", authConfig);
558
+ if (typeof payload === "object") {
559
+ for (const [ key, value ] of Object.entries(payload)) {
560
+ queryParams.append(key, value);
561
+ }
562
+ }
563
+ const res = await fetch(`${this.baseUrl}/api/v1/${slug}/integrate?${queryParams.toString()}`, {
495
564
  headers: {
496
565
  authorization: `Bearer ${this.token}`,
497
566
  },
@@ -509,13 +578,17 @@ class Cobalt {
509
578
  /**
510
579
  * Handle OAuth for the specified application.
511
580
  * @private
512
- * @param {String} slug The application slug.
513
- * @param {Object.<string, string>} [params] The key value pairs of auth data.
581
+ * @param {OAuthParams} params The OAuth parameters.
514
582
  * @returns {Promise<Boolean>} Whether the user authenticated.
515
583
  */
516
- private async oauth(slug: string, params?: Record<string, string>): Promise<boolean> {
584
+ private async oauth({
585
+ slug,
586
+ authConfig,
587
+ payload,
588
+ autoClose = true,
589
+ }: OAuthParams): Promise<boolean> {
517
590
  return new Promise((resolve, reject) => {
518
- this.getOAuthUrl(slug, params)
591
+ this.getOAuthUrl({ slug, authConfig, payload })
519
592
  .then(oauthUrl => {
520
593
  const connectWindow = window.open(oauthUrl);
521
594
 
@@ -523,9 +596,10 @@ class Cobalt {
523
596
  const interval = setInterval(() => {
524
597
  this.getApp(slug)
525
598
  .then(app => {
526
- if (app && app.connected_accounts?.filter(a => a.auth_type === AuthType.OAuth2).some(a => a.status === AuthStatus.Active)) {
599
+ const oauthAccounts = app.connected_accounts?.filter(a => a.auth_type === AuthType.OAuth2 && a.status !== AuthStatus.Expired);
600
+ if (app && oauthAccounts?.some(a => authConfig ? a.auth_config_id === authConfig : true)) {
527
601
  // close auth window
528
- connectWindow && connectWindow.close();
602
+ if (autoClose) connectWindow && connectWindow.close();
529
603
  // clear interval
530
604
  clearInterval(interval);
531
605
  // resovle status
@@ -554,12 +628,15 @@ class Cobalt {
554
628
 
555
629
  /**
556
630
  * Save auth data for the specified keybased application.
557
- * @param {String} slug The application slug.
558
- * @param {Object.<string, string>} [payload] The key value pairs of auth data.
631
+ * @param {KeyBasedParams} params The key based parameters.
559
632
  * @returns {Promise<Boolean>} Whether the auth data was saved successfully.
560
633
  */
561
- private async keybased(slug: string, payload?: Record<string, string>): Promise<boolean> {
562
- const res = await fetch(`${this.baseUrl}/api/v2/app/${slug}/save`, {
634
+ private async keybased({
635
+ slug,
636
+ authConfig,
637
+ payload,
638
+ }: KeyBasedParams): Promise<boolean> {
639
+ const res = await fetch(`${this.baseUrl}/api/v2/app/${slug}/save?auth_config_id=${authConfig}`, {
563
640
  method: "POST",
564
641
  headers: {
565
642
  authorization: `Bearer ${this.token}`,
@@ -583,28 +660,34 @@ class Cobalt {
583
660
  * Connects the specified application using the provided authentication type and optional auth data.
584
661
  * @param params - The parameters for connecting the application.
585
662
  * @param params.slug - The application slug.
663
+ * @param params.authConfig - The identifier of the auth config.
586
664
  * @param params.type - The authentication type to use. If not provided, it defaults to `keybased` if payload is provided, otherwise `oauth2`.
587
665
  * @param params.payload - key-value pairs of authentication data required for the specified auth type.
666
+ * @param params.autoClose - Whether to close the authentication window automatically. If not provided, it defaults to `true`.
588
667
  * @returns A promise that resolves to true if the connection was successful, otherwise false.
589
668
  * @throws Throws an error if the authentication type is invalid or the connection fails.
590
669
  */
591
670
  public async connect({
592
671
  slug,
672
+ authConfig,
593
673
  type,
594
674
  payload,
675
+ autoClose = true,
595
676
  }: {
596
677
  slug: string;
678
+ authConfig?: string;
597
679
  type?: AuthType;
598
680
  payload?: Record<string, string>;
681
+ autoClose?: boolean;
599
682
  }): Promise<boolean> {
600
683
  switch (type) {
601
684
  case AuthType.OAuth2:
602
- return this.oauth(slug, payload);
685
+ return this.oauth({ slug, authConfig, payload, autoClose });
603
686
  case AuthType.KeyBased:
604
- return this.keybased(slug, payload);
687
+ return this.keybased({ slug, authConfig, payload });
605
688
  default:
606
- if (payload) return this.keybased(slug, payload);
607
- return this.oauth(slug);
689
+ if (payload) return this.keybased({ slug, authConfig, payload });
690
+ return this.oauth({ slug, authConfig });
608
691
  }
609
692
  }
610
693
 
@@ -612,10 +695,15 @@ class Cobalt {
612
695
  * Disconnect the specified application and remove any associated data from Cobalt.
613
696
  * @param {String} slug The application slug.
614
697
  * @param {AuthType} [type] The authentication type to use. If not provided, it'll remove all the connected accounts.
698
+ * @param {String} [authConfig] The identifier of the auth config.
615
699
  * @returns {Promise<unknown>}
616
700
  */
617
- public async disconnect(slug: string, type?: AuthType): Promise<unknown> {
618
- const res = await fetch(`${this.baseUrl}/api/v1/linked-acc/integration/${slug}${type ? `?auth_type=${type}` : ""}`, {
701
+ public async disconnect(slug: string, type?: AuthType, authConfig?: string): Promise<unknown> {
702
+ const queryParams = new URLSearchParams();
703
+ if (type) queryParams.append("auth_type", type);
704
+ if (authConfig) queryParams.append("auth_config_id", authConfig);
705
+
706
+ const res = await fetch(`${this.baseUrl}/api/v1/linked-acc/integration/${slug}?${queryParams.toString()}`, {
619
707
  method: "DELETE",
620
708
  headers: {
621
709
  authorization: `Bearer ${this.token}`,
@@ -680,14 +768,12 @@ class Cobalt {
680
768
  * Returns the specified config.
681
769
  * @param {String} slug The application slug.
682
770
  * @param {String} [configId] The unique ID of the config.
683
- * @param {Boolean} [excludeOptions] Whether to exclude the options from the fields in the response.
684
771
  * @returns {Promise<Config>} The specified config.
685
772
  */
686
- async getConfig(slug: string, configId: string, excludeOptions?: boolean): Promise<Config> {
773
+ async getConfig(slug: string, configId: string): Promise<Config> {
687
774
  const res = await fetch(`${this.baseUrl}/api/v2/f-sdk/slug/${slug}/config${configId ? `/${configId}` : ""}`, {
688
775
  headers: {
689
776
  authorization: `Bearer ${this.token}`,
690
- ...(excludeOptions ? { disable_field_options: "true" } : {}),
691
777
  },
692
778
  });
693
779
 
@@ -865,7 +951,7 @@ class Cobalt {
865
951
  const value = rest[key];
866
952
  if (value !== undefined && value !== "") query.set(key, String(value));
867
953
  }
868
-
954
+
869
955
  const res = await fetch(`${this.baseUrl}/api/v2/public/workflow?${query}`, {
870
956
  headers: {
871
957
  authorization: `Bearer ${this.token}`,
@@ -1 +1 @@
1
- window.hierarchyData = "eJyNjj0LwjAQhv/LzalaRYfs6uouHUJypcF8QO4KQsl/97IUEUGnF94vngVKzkyg7/3uMCgoOAa07HMSbwExmyQTETScn2jnll18YCwECh4+OdD740nBXIJ0fJJkNBZp+1nfTByDbGwwJO/A5Lq279ZNCycfXMHUiPp+qApE3hiuyOsv3Uwx8RfGl8UfJLXWF/BbYLU="
1
+ window.hierarchyData = "eJyNjj0LwjAQhv/LzanSgorZ1bW7dAjJlQYvKVxSEEr+u5eliAg6vfB+8azA85wT6HvbngcFjCOhzX6O4q0gZpVoAoKGyxPtUrOrp4ycQMHDRwe6OxwVLEzS8VGS0VhM+8/6bsqBZGPJJHmHnFxT9822qeHkyTHGStSdhqJA5I3hhnn7Tb1hE35hfFn8QVJKeQEFbmDR"
@@ -1 +1 @@
1
- window.navigationData = "eJyVlc1OwzAQhN8l54rSSOWnN4RahIRE1II4IA5OsqVWncSK16IV4t1xWtLEqbMx152ZL7a1m33/DhB2GMyCO42bFTLUKhgFkuHG1CDXmRo3ysUGM2HkLc/TYHbzM7LSL3sJrmxV70/eFzET2OQSwZQCNT7W7dwktL4ppeAJQ17kTZznCOWaJYbQ0m1MOL06O8CzrHzKCbIcNCpf888eRiUNhxccREoQDvowJmJ7UTAK9OcYRr0V5XYtii+CVVso2HwHiUaordQB3dZheF8jnFQvxIILk3R3QtdEAR8AT3YVsZJlbqbDR2Efc6mxv0samYI8sRiEM39QqGikYzNVZFPYFn8Y1RNOpz9a+bOVB3ypBVB/jJZOYV5lyhCGJ9bho7A+7/mPl+xYl6CkuRf4YGuv1+CtCl0mLSyavdEauaPcIV3eXk+moZPW2WVdmmOhETR7t3VY5wuuJn38AjhljHY="
1
+ window.navigationData = "eJyVll9PwjAUxb/LnokICf7hDYkYowkEND4YH0p3kYXSNutthBi/uxs4to7urr72nPPrbXN3u/fvCGGH0TAaWVwvkKE1USfSDNfZGki7Nd1SuVjjVmTyJpFxNLz56Tjpl70GXzZfb06O1ZIJLHNcMGPAdI/rbq7Xd/bUWiScYaJkGU8kQrpiPCNUdBfTH1zVSh8ruUo+/ZSTTEGO1U51vpnxchwHjWqsJaSO3DFJQMQE4aC3Y2ZsLxSjQH+OdtSbSjcrob4IVmFpgUngCPGIc2UlNuEcEwW83wG3CMXe1In91nZ4U3ue1CDEJBFZ0t9adRMFfAA82c2MpWzrZ3p8FPZRaovNbVfKFOQJ9nfMQEyU5Voo2DNbgvAyDgoVnebfPFFERacwM7vM5g/Z+a4lHEb1qdcZjjbhbBMAn1sB1Fis6BTmVccMoX0seXwUNuQ+/3GTNescjM7OBSHYwhs0DBbKpryCxeyFrYyBo1wjXd5e9wZ9L6326tdpnqefoLl/ATXW+a9AQfr4Bb3G8gw="
@@ -1 +1 @@
1
- window.searchData = "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";
1
+ window.searchData = "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";