@cobaltio/cobalt-js 8.7.2 → 8.9.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 CHANGED
@@ -56,4 +56,8 @@ cobalt.token = "COBALT_SESSION_TOKEN";
56
56
 
57
57
  # Documentation
58
58
 
59
- Read the [SDK documentation here](https://gocobalt.github.io/cobalt-js).
59
+ - You can read the [SDK documentation here](https://gocobalt.github.io/cobalt-js).
60
+
61
+ - [`llms.txt`](https://gocobalt.github.io/cobalt-js/llms.txt)
62
+
63
+ This documentation is also available in [llms.txt](https://llmstxt.org) format, which is a simple markdown standard that LLMs can consume easily.
package/cobalt.d.ts CHANGED
@@ -3,16 +3,21 @@
3
3
  */
4
4
  /** An application in Cobalt. */
5
5
  export interface Application {
6
+ /** Application ID */
7
+ app_id: string;
6
8
  /**The application name. */
7
9
  name: string;
8
10
  /**The application description. */
9
11
  description: string;
10
12
  /**The application icon. */
11
13
  icon: string;
12
- /**The application slug for native apps. */
13
- type: string;
14
- /** The application slug for custom apps. */
15
- slug?: string;
14
+ /**
15
+ * @deprecated Use `slug` instead.
16
+ * The application slug for native apps and `custom` for custom apps.
17
+ */
18
+ type: string | "custom";
19
+ /** The application slug. */
20
+ slug: string;
16
21
  /**The type of auth used by application. */
17
22
  auth_type: "oauth2" | "keybased";
18
23
  /** Whether the user has connected the application. */
@@ -21,6 +26,8 @@ export interface Application {
21
26
  reauth_required?: boolean;
22
27
  /** The fields required from the user to connect the application (for `keybased` auth type). */
23
28
  auth_input_map?: InputField[];
29
+ /** The categories/tags for the application. */
30
+ tags?: string[];
24
31
  }
25
32
  /** An Input field to take input from the user. */
26
33
  export interface InputField {
@@ -30,10 +37,19 @@ export interface InputField {
30
37
  type: string;
31
38
  /** Whether the field is required. */
32
39
  required: boolean;
40
+ /** Whether the field accepts multiple values. */
41
+ multiple?: boolean;
33
42
  /** The placeholder of the field. */
34
43
  placeholder: string;
35
44
  /** The label of the field. */
36
45
  label: string;
46
+ /** The help text for the field. */
47
+ help_text?: string;
48
+ /** The options for the field. */
49
+ options?: {
50
+ name?: string;
51
+ value: string;
52
+ }[];
37
53
  }
38
54
  /** The payload object for config. */
39
55
  export interface ConfigPayload {
@@ -77,6 +93,9 @@ export interface CobaltOptions {
77
93
  /** The session token. */
78
94
  token?: string;
79
95
  }
96
+ /**
97
+ * @deprecated
98
+ */
80
99
  export interface EcosystemLead {
81
100
  _id: string;
82
101
  name?: string;
@@ -84,6 +103,9 @@ export interface EcosystemLead {
84
103
  description?: string;
85
104
  created_at: string;
86
105
  }
106
+ /**
107
+ * @deprecated
108
+ */
87
109
  export interface EcosystemLeadPayload {
88
110
  slug: string;
89
111
  name?: string;
@@ -134,7 +156,92 @@ interface PaginationProps {
134
156
  page?: number;
135
157
  limit?: number;
136
158
  }
137
- type Config = any;
159
+ interface PaginatedResponse<T> {
160
+ docs: T[];
161
+ totalDocs: number;
162
+ limit: number;
163
+ totalPages: number;
164
+ page: number;
165
+ }
166
+ export interface Config {
167
+ slug: string;
168
+ config_id?: string;
169
+ fields?: ConfigField[];
170
+ workflows?: ConfigWorkflow[];
171
+ field_errors?: {
172
+ id: string;
173
+ name: string;
174
+ error: {
175
+ message: string;
176
+ error?: unknown;
177
+ };
178
+ }[];
179
+ }
180
+ export interface ConfigField {
181
+ id: string;
182
+ name: string;
183
+ field_type: "text" | "date" | "number" | "url" | "email" | "textarea" | "select" | "json" | "map" | "map_v2" | "rule_engine" | string;
184
+ options?: {
185
+ name?: string;
186
+ value: string;
187
+ }[];
188
+ parent?: string;
189
+ labels?: {
190
+ name?: string;
191
+ value: string;
192
+ }[];
193
+ multiple?: boolean;
194
+ required?: boolean;
195
+ hidden?: boolean;
196
+ value?: any;
197
+ /** The placeholder for the field. */
198
+ placeholder?: string;
199
+ /** The help text for the field. */
200
+ help_text?: string;
201
+ /** The page this field is associated with. */
202
+ associated_page?: string;
203
+ }
204
+ export interface ConfigWorkflow {
205
+ id: string;
206
+ name: string;
207
+ description?: string;
208
+ enabled: boolean;
209
+ fields?: ConfigField[];
210
+ }
211
+ export interface Execution {
212
+ _id: string;
213
+ id?: string;
214
+ name: string;
215
+ org_id: string;
216
+ associated_application: {
217
+ _id: string;
218
+ name: string;
219
+ icon?: string;
220
+ };
221
+ status: "COMPLETED" | "RUNNING" | "ERRORED" | "STOPPED" | "STOPPING" | "TIMED_OUT";
222
+ associated_workflow: {
223
+ _id: string;
224
+ name: string;
225
+ };
226
+ associated_trigger_application: {
227
+ _id: string;
228
+ name: string;
229
+ icon?: string;
230
+ app_type?: "custom" | string;
231
+ origin_trigger: {
232
+ _id: string;
233
+ name: string;
234
+ };
235
+ };
236
+ trigger_application_event?: string;
237
+ linked_account_id: string;
238
+ environment: "test" | "production";
239
+ config_id: string;
240
+ associated_event_id: string;
241
+ custom_trigger_id?: string;
242
+ custom_application_id?: string;
243
+ createdAt: string;
244
+ }
138
245
  declare class Cobalt {
139
246
  private baseUrl;
140
247
  token: string;
@@ -170,7 +277,7 @@ declare class Cobalt {
170
277
  */
171
278
  getApp(slug: string): Promise<Application>;
172
279
  /**
173
- * Returns all the enabled and ecosystem apps.
280
+ * Returns all the enabled apps.
174
281
  * @returns {Promise<Application[]>} The list of applications.
175
282
  */
176
283
  getApps(): Promise<Application[]>;
@@ -239,6 +346,7 @@ declare class Cobalt {
239
346
  */
240
347
  deleteConfig(slug: string, configId?: string): Promise<unknown>;
241
348
  /**
349
+ * @deprecated
242
350
  * Create a lead for an ecosystem app.
243
351
  * @param {EcosystemLeadPayload} payload The payload object for the lead.
244
352
  * @returns {Promise<EcosystemLead>}
@@ -279,14 +387,14 @@ declare class Cobalt {
279
387
  */
280
388
  getFieldOptions(lhs: string, slug: string, fieldId: string, workflowId?: string): Promise<RuleOptions>;
281
389
  /**
282
- *
390
+ * Returns the private workflows for the specified application.
283
391
  * @param {Object} params
284
392
  * @param {String} [params.slug]
285
393
  * @param {Number} [params.page]
286
394
  * @param {Number} [params.limit]
287
395
  * @returns
288
396
  */
289
- getWorkflows(params?: PublicWorkflowsPayload): Promise<PublicWorkflow[]>;
397
+ getWorkflows(params?: PublicWorkflowsPayload): Promise<PaginatedResponse<PublicWorkflow>>;
290
398
  /**
291
399
  * Create a public workflow for the linked account.
292
400
  * @param {Object} params
@@ -297,5 +405,25 @@ declare class Cobalt {
297
405
  * @returns {Promise<PublicWorkflow>} The created public workflow.
298
406
  */
299
407
  createWorkflow(params: PublicWorkflowPayload): Promise<PublicWorkflow>;
408
+ /**
409
+ * Delete the specified public workflow.
410
+ * @param {String} workflowId The workflow ID.
411
+ * @returns {Promise<unknown>}
412
+ */
413
+ deleteWorkflow(workflowId: string): Promise<unknown>;
414
+ /**
415
+ * Returns the workflow execution logs for the linked account.
416
+ * @param {Object} [params]
417
+ * @param {Number} [params.page]
418
+ * @param {Number} [params.limit]
419
+ * @returns {Promise<PaginatedResponse<Execution>>} The paginated workflow execution logs.
420
+ */
421
+ getExecutions({ page, limit }?: PaginationProps): Promise<PaginatedResponse<Execution>>;
422
+ /**
423
+ * Returns the specified workflow execution log.
424
+ * @param {String} executionId The execution ID.
425
+ * @returns {Promise<Execution>} The specified execution log.
426
+ */
427
+ getExecution(executionId: string): Promise<Execution>;
300
428
  }
301
429
  export { Cobalt };
package/cobalt.js CHANGED
@@ -94,12 +94,12 @@ class Cobalt {
94
94
  });
95
95
  }
96
96
  /**
97
- * Returns all the enabled and ecosystem apps.
97
+ * Returns all the enabled apps.
98
98
  * @returns {Promise<Application[]>} The list of applications.
99
99
  */
100
100
  getApps() {
101
101
  return __awaiter(this, void 0, void 0, function* () {
102
- const res = yield fetch(`${this.baseUrl}/api/v2/f-sdk/application?ecosystem=true`, {
102
+ const res = yield fetch(`${this.baseUrl}/api/v2/f-sdk/application`, {
103
103
  headers: {
104
104
  authorization: `Bearer ${this.token}`,
105
105
  },
@@ -346,6 +346,7 @@ class Cobalt {
346
346
  });
347
347
  }
348
348
  /**
349
+ * @deprecated
349
350
  * Create a lead for an ecosystem app.
350
351
  * @param {EcosystemLeadPayload} payload The payload object for the lead.
351
352
  * @returns {Promise<EcosystemLead>}
@@ -467,7 +468,7 @@ class Cobalt {
467
468
  });
468
469
  }
469
470
  /**
470
- *
471
+ * Returns the private workflows for the specified application.
471
472
  * @param {Object} params
472
473
  * @param {String} [params.slug]
473
474
  * @param {Number} [params.page]
@@ -498,6 +499,7 @@ class Cobalt {
498
499
  * @returns {Promise<PublicWorkflow>} The created public workflow.
499
500
  */
500
501
  createWorkflow(params) {
502
+ var _a;
501
503
  return __awaiter(this, void 0, void 0, function* () {
502
504
  const res = yield fetch(`${this.baseUrl}/api/v2/public/workflow`, {
503
505
  method: "POST",
@@ -515,6 +517,67 @@ class Cobalt {
515
517
  const error = yield res.json();
516
518
  throw error;
517
519
  }
520
+ const data = yield res.json();
521
+ return (_a = data === null || data === void 0 ? void 0 : data.workflow) !== null && _a !== void 0 ? _a : data;
522
+ });
523
+ }
524
+ /**
525
+ * Delete the specified public workflow.
526
+ * @param {String} workflowId The workflow ID.
527
+ * @returns {Promise<unknown>}
528
+ */
529
+ deleteWorkflow(workflowId) {
530
+ return __awaiter(this, void 0, void 0, function* () {
531
+ const res = yield fetch(`${this.baseUrl}/api/v2/public/workflow/${workflowId}`, {
532
+ method: "DELETE",
533
+ headers: {
534
+ authorization: `Bearer ${this.token}`,
535
+ },
536
+ });
537
+ if (res.status >= 400 && res.status < 600) {
538
+ const error = yield res.json();
539
+ throw error;
540
+ }
541
+ return yield res.json();
542
+ });
543
+ }
544
+ /**
545
+ * Returns the workflow execution logs for the linked account.
546
+ * @param {Object} [params]
547
+ * @param {Number} [params.page]
548
+ * @param {Number} [params.limit]
549
+ * @returns {Promise<PaginatedResponse<Execution>>} The paginated workflow execution logs.
550
+ */
551
+ getExecutions({ page = 1, limit = 10 } = {}) {
552
+ return __awaiter(this, void 0, void 0, function* () {
553
+ const res = yield fetch(`${this.baseUrl}/api/v2/public/execution?page=${page}&limit=${limit}`, {
554
+ headers: {
555
+ authorization: `Bearer ${this.token}`,
556
+ },
557
+ });
558
+ if (res.status >= 400 && res.status < 600) {
559
+ const error = yield res.json();
560
+ throw error;
561
+ }
562
+ return yield res.json();
563
+ });
564
+ }
565
+ /**
566
+ * Returns the specified workflow execution log.
567
+ * @param {String} executionId The execution ID.
568
+ * @returns {Promise<Execution>} The specified execution log.
569
+ */
570
+ getExecution(executionId) {
571
+ return __awaiter(this, void 0, void 0, function* () {
572
+ const res = yield fetch(`${this.baseUrl}/api/v2/public/execution/${executionId}`, {
573
+ headers: {
574
+ authorization: `Bearer ${this.token}`,
575
+ },
576
+ });
577
+ if (res.status >= 400 && res.status < 600) {
578
+ const error = yield res.json();
579
+ throw error;
580
+ }
518
581
  return yield res.json();
519
582
  });
520
583
  }
package/cobalt.ts CHANGED
@@ -4,16 +4,21 @@
4
4
 
5
5
  /** An application in Cobalt. */
6
6
  export interface Application {
7
+ /** Application ID */
8
+ app_id: string;
7
9
  /**The application name. */
8
10
  name: string;
9
11
  /**The application description. */
10
12
  description: string;
11
13
  /**The application icon. */
12
14
  icon: string;
13
- /**The application slug for native apps. */
14
- type: string;
15
- /** The application slug for custom apps. */
16
- slug?: string;
15
+ /**
16
+ * @deprecated Use `slug` instead.
17
+ * The application slug for native apps and `custom` for custom apps.
18
+ */
19
+ type: string | "custom";
20
+ /** The application slug. */
21
+ slug: string;
17
22
  /**The type of auth used by application. */
18
23
  auth_type: "oauth2" | "keybased";
19
24
  /** Whether the user has connected the application. */
@@ -22,6 +27,8 @@ export interface Application {
22
27
  reauth_required?: boolean;
23
28
  /** The fields required from the user to connect the application (for `keybased` auth type). */
24
29
  auth_input_map?: InputField[];
30
+ /** The categories/tags for the application. */
31
+ tags?: string[];
25
32
  }
26
33
 
27
34
  /** An Input field to take input from the user. */
@@ -32,10 +39,19 @@ export interface InputField {
32
39
  type: string;
33
40
  /** Whether the field is required. */
34
41
  required: boolean;
42
+ /** Whether the field accepts multiple values. */
43
+ multiple?: boolean;
35
44
  /** The placeholder of the field. */
36
45
  placeholder: string;
37
46
  /** The label of the field. */
38
47
  label: string;
48
+ /** The help text for the field. */
49
+ help_text?: string;
50
+ /** The options for the field. */
51
+ options?: {
52
+ name?: string;
53
+ value: string;
54
+ }[];
39
55
  }
40
56
 
41
57
  /** The payload object for config. */
@@ -85,6 +101,9 @@ export interface CobaltOptions {
85
101
  token?: string;
86
102
  }
87
103
 
104
+ /**
105
+ * @deprecated
106
+ */
88
107
  export interface EcosystemLead {
89
108
  _id: string;
90
109
  name?: string;
@@ -93,6 +112,9 @@ export interface EcosystemLead {
93
112
  created_at: string;
94
113
  }
95
114
 
115
+ /**
116
+ * @deprecated
117
+ */
96
118
  export interface EcosystemLeadPayload {
97
119
  slug: string;
98
120
  name?: string;
@@ -149,7 +171,97 @@ interface PaginationProps {
149
171
  limit?: number;
150
172
  }
151
173
 
152
- type Config = any;
174
+ interface PaginatedResponse<T> {
175
+ docs: T[];
176
+ totalDocs: number;
177
+ limit: number;
178
+ totalPages: number;
179
+ page: number;
180
+ }
181
+
182
+ export interface Config {
183
+ slug: string;
184
+ config_id?: string;
185
+ fields?: ConfigField[];
186
+ workflows?: ConfigWorkflow[];
187
+ field_errors?: {
188
+ id: string;
189
+ name: string;
190
+ error: {
191
+ message: string;
192
+ error?: unknown;
193
+ };
194
+ }[];
195
+ }
196
+
197
+ export interface ConfigField {
198
+ id: string;
199
+ name: string;
200
+ field_type: "text" | "date" | "number" | "url" | "email" | "textarea" | "select" | "json" | "map" | "map_v2" | "rule_engine" | string;
201
+ options?: {
202
+ name?: string;
203
+ value: string;
204
+ }[];
205
+ parent?: string;
206
+ labels?: {
207
+ name?: string;
208
+ value: string;
209
+ }[];
210
+ multiple?: boolean;
211
+ required?: boolean;
212
+ hidden?: boolean;
213
+ value?: any;
214
+ /** The placeholder for the field. */
215
+ placeholder?: string;
216
+ /** The help text for the field. */
217
+ help_text?: string;
218
+ /** The page this field is associated with. */
219
+ associated_page?: string;
220
+ }
221
+
222
+ export interface ConfigWorkflow {
223
+ id: string;
224
+ name: string;
225
+ description?: string;
226
+ enabled: boolean;
227
+ fields?: ConfigField[];
228
+ }
229
+
230
+ export interface Execution {
231
+ _id: string;
232
+ id?: string;
233
+ name: string;
234
+ org_id: string;
235
+ associated_application: {
236
+ _id: string;
237
+ name: string;
238
+ icon?: string;
239
+ },
240
+ status: "COMPLETED" | "RUNNING" | "ERRORED" | "STOPPED" | "STOPPING" | "TIMED_OUT",
241
+ associated_workflow: {
242
+ _id: string;
243
+ name: string;
244
+ },
245
+ associated_trigger_application: {
246
+ _id: string;
247
+ name: string;
248
+ icon?: string;
249
+ app_type?: "custom" | string;
250
+ origin_trigger: {
251
+ _id: string;
252
+ name: string;
253
+ }
254
+ },
255
+ trigger_application_event?: string;
256
+ linked_account_id: string;
257
+ environment: "test" | "production";
258
+ config_id: string;
259
+ associated_event_id: string;
260
+ custom_trigger_id?: string;
261
+ custom_application_id?: string;
262
+ createdAt: string;
263
+ }
264
+
153
265
  type Field = any;
154
266
 
155
267
  class Cobalt {
@@ -254,11 +366,11 @@ class Cobalt {
254
366
  }
255
367
 
256
368
  /**
257
- * Returns all the enabled and ecosystem apps.
369
+ * Returns all the enabled apps.
258
370
  * @returns {Promise<Application[]>} The list of applications.
259
371
  */
260
372
  public async getApps(): Promise<Application[]> {
261
- const res = await fetch(`${this.baseUrl}/api/v2/f-sdk/application?ecosystem=true`, {
373
+ const res = await fetch(`${this.baseUrl}/api/v2/f-sdk/application`, {
262
374
  headers: {
263
375
  authorization: `Bearer ${this.token}`,
264
376
  },
@@ -517,6 +629,7 @@ class Cobalt {
517
629
  }
518
630
 
519
631
  /**
632
+ * @deprecated
520
633
  * Create a lead for an ecosystem app.
521
634
  * @param {EcosystemLeadPayload} payload The payload object for the lead.
522
635
  * @returns {Promise<EcosystemLead>}
@@ -643,14 +756,14 @@ class Cobalt {
643
756
  }
644
757
 
645
758
  /**
646
- *
759
+ * Returns the private workflows for the specified application.
647
760
  * @param {Object} params
648
761
  * @param {String} [params.slug]
649
762
  * @param {Number} [params.page]
650
763
  * @param {Number} [params.limit]
651
764
  * @returns
652
765
  */
653
- async getWorkflows(params?: PublicWorkflowsPayload): Promise<PublicWorkflow[]> {
766
+ async getWorkflows(params?: PublicWorkflowsPayload): Promise<PaginatedResponse<PublicWorkflow>> {
654
767
  const res = await fetch(`${this.baseUrl}/api/v2/public/workflow?page=${params?.page || 1}&limit=${params?.limit || 100}${params?.slug ? `&slug=${params.slug}` : ""}`, {
655
768
  headers: {
656
769
  authorization: `Bearer ${this.token}`,
@@ -693,6 +806,70 @@ class Cobalt {
693
806
  throw error;
694
807
  }
695
808
 
809
+ const data = await res.json();
810
+ return data?.workflow ?? data;
811
+ }
812
+
813
+ /**
814
+ * Delete the specified public workflow.
815
+ * @param {String} workflowId The workflow ID.
816
+ * @returns {Promise<unknown>}
817
+ */
818
+ async deleteWorkflow(workflowId: string): Promise<unknown> {
819
+ const res = await fetch(`${this.baseUrl}/api/v2/public/workflow/${workflowId}`, {
820
+ method: "DELETE",
821
+ headers: {
822
+ authorization: `Bearer ${this.token}`,
823
+ },
824
+ });
825
+
826
+ if (res.status >= 400 && res.status < 600) {
827
+ const error = await res.json();
828
+ throw error;
829
+ }
830
+
831
+ return await res.json();
832
+ }
833
+
834
+ /**
835
+ * Returns the workflow execution logs for the linked account.
836
+ * @param {Object} [params]
837
+ * @param {Number} [params.page]
838
+ * @param {Number} [params.limit]
839
+ * @returns {Promise<PaginatedResponse<Execution>>} The paginated workflow execution logs.
840
+ */
841
+ async getExecutions({ page = 1, limit = 10 }: PaginationProps = {}): Promise<PaginatedResponse<Execution>> {
842
+ const res = await fetch(`${this.baseUrl}/api/v2/public/execution?page=${page}&limit=${limit}`, {
843
+ headers: {
844
+ authorization: `Bearer ${this.token}`,
845
+ },
846
+ });
847
+
848
+ if (res.status >= 400 && res.status < 600) {
849
+ const error = await res.json();
850
+ throw error;
851
+ }
852
+
853
+ return await res.json();
854
+ }
855
+
856
+ /**
857
+ * Returns the specified workflow execution log.
858
+ * @param {String} executionId The execution ID.
859
+ * @returns {Promise<Execution>} The specified execution log.
860
+ */
861
+ async getExecution(executionId: string): Promise<Execution> {
862
+ const res = await fetch(`${this.baseUrl}/api/v2/public/execution/${executionId}`, {
863
+ headers: {
864
+ authorization: `Bearer ${this.token}`,
865
+ },
866
+ });
867
+
868
+ if (res.status >= 400 && res.status < 600) {
869
+ const error = await res.json();
870
+ throw error;
871
+ }
872
+
696
873
  return await res.json();
697
874
  }
698
875
  }
@@ -1 +1 @@
1
- window.navigationData = "eJyN0sFKAzEQBuB3mfNisaDI3kQUhEKLIB6Kh9nsrA2dJqEziy2l7y5asLuQTnPN/8+XMGR5AKWdQg1PsUFWqCChrqAGxyhCMjmd36x0w1DB2ocW6tvpw7H6n3xMib1D9TGcx31Q2nboSCaDfMxM7+4HzOmiefrtSRYaNWwqdP5rgXuO2F6gBg2LenZR9qK0mdEFatQopqzH5YoW/BpSry+eOM+dYwuZYUOcnf9LrNFF37B3H3G77jh+Z41xpRyz1pRtltNSbksB/tYzWZ93kFvMe2pR6foHzvQstmSfVzf5+QNokXI8"
1
+ window.navigationData = "eJyVk9FKwzAUht/lXBeHA0V6J6IgDByCeCFepMmpC8uS0JzihvjuslW3FpOT7Lb/939pTpK3LyDcEtRw5xphCCrwglZQgzQiBAyz4fvFijYGKlhrq6C+nN98V8fmrfdGS0Ha2VNdW8KuFRLDbJRPNfOr65FmWOjJ77kQFU0IXmVb/ZFw7KN8+UGjUYzhkOc1S7EzTnCiXyKvenXdujXuk3H9IZzsXrqwC4SbBSb+a0L8U1XDzYAaFPoOpSBUkPJz24+B56+2Rdknb94x5QbyaH1P6eM+xZxkIRo00f4h4arLvjFasqc7Rcpl3PijZLk6lLtDgfy5N8g9/VHOaV68EoT5pxfhOG3JPLOTfP8BOa3d9A=="
@@ -1 +1 @@
1
- window.searchData = "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";
1
+ window.searchData = "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";