@ar.io/sdk 1.2.0-alpha.9 → 1.2.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.
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safeDecode = void 0;
4
+ /**
5
+ * Copyright (C) 2022-2024 Permanent Data Solutions, Inc. All Rights Reserved.
6
+ *
7
+ * This program is free software: you can redistribute it and/or modify
8
+ * it under the terms of the GNU Affero General Public License as published by
9
+ * the Free Software Foundation, either version 3 of the License, or
10
+ * (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ * GNU Affero General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Affero General Public License
18
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
19
+ */
20
+ function safeDecode(data) {
21
+ try {
22
+ return JSON.parse(data);
23
+ }
24
+ catch (e) {
25
+ return data;
26
+ }
27
+ }
28
+ exports.safeDecode = safeDecode;
@@ -18,4 +18,4 @@
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.version = void 0;
20
20
  // AUTOMATICALLY GENERATED FILE - DO NOT TOUCH
21
- exports.version = '1.2.0-alpha.9';
21
+ exports.version = '1.2.0';
@@ -16,6 +16,13 @@ export class AoANTReadable {
16
16
  throw new InvalidContractConfigurationError();
17
17
  }
18
18
  }
19
+ async getState() {
20
+ const tags = [{ name: 'Action', value: 'State' }];
21
+ const res = await this.process.read({
22
+ tags,
23
+ });
24
+ return res;
25
+ }
19
26
  async getInfo() {
20
27
  const tags = [{ name: 'Action', value: 'Info' }];
21
28
  const info = await this.process.read({
@@ -35,7 +42,7 @@ export class AoANTReadable {
35
42
  async getRecord({ undername }) {
36
43
  const tags = [
37
44
  { name: 'Sub-Domain', value: undername },
38
- { name: 'Action', value: 'Get-Record' },
45
+ { name: 'Action', value: 'Record' },
39
46
  ];
40
47
  const record = await this.process.read({
41
48
  tags,
@@ -51,7 +58,7 @@ export class AoANTReadable {
51
58
  * ````
52
59
  */
53
60
  async getRecords() {
54
- const tags = [{ name: 'Action', value: 'Get-Records' }];
61
+ const tags = [{ name: 'Action', value: 'Records' }];
55
62
  const records = await this.process.read({
56
63
  tags,
57
64
  });
@@ -78,7 +85,7 @@ export class AoANTReadable {
78
85
  * ```
79
86
  */
80
87
  async getControllers() {
81
- const tags = [{ name: 'Action', value: 'Get-Controllers' }];
88
+ const tags = [{ name: 'Action', value: 'Controllers' }];
82
89
  const controllers = await this.process.read({
83
90
  tags,
84
91
  });
@@ -178,7 +185,7 @@ export class AoANTWriteable extends AoANTReadable {
178
185
  */
179
186
  async addController({ controller, }) {
180
187
  const tags = [
181
- { name: 'Action', value: 'Set-Controller' },
188
+ { name: 'Action', value: 'Add-Controller' },
182
189
  { name: 'Controller', value: controller },
183
190
  ];
184
191
  return this.process.send({
@@ -16,6 +16,7 @@
16
16
  */
17
17
  import { connect } from '@permaweb/aoconnect';
18
18
  import { createData } from 'arbundles';
19
+ import { safeDecode } from '../../utils/json.js';
19
20
  import { version } from '../../version.js';
20
21
  import { WriteInteractionError } from '../error.js';
21
22
  import { DefaultLogger } from '../logger.js';
@@ -57,18 +58,22 @@ export class AOProcess {
57
58
  process: this.processId,
58
59
  tags,
59
60
  });
61
+ if (result.Messages.length === 0) {
62
+ throw new Error(`Process ${this.processId} does not support provided action.`);
63
+ }
60
64
  const tagsOutput = result.Messages[0].Tags;
61
65
  const error = tagsOutput.find((tag) => tag.name === 'Error');
62
66
  if (error) {
63
67
  throw new Error(`${error.Value}: ${result.Messages[0].Data}`);
64
68
  }
65
- if (result.Messages.length === 0) {
66
- throw new Error('Process does not support provided action.');
67
- }
68
69
  this.logger.debug(`Read interaction result`, {
69
70
  result: result.Messages[0].Data,
70
71
  });
71
- const response = JSON.parse(result.Messages[0].Data);
72
+ // return empty object if no data is returned
73
+ if (result.Messages[0].Data === undefined) {
74
+ return {};
75
+ }
76
+ const response = safeDecode(result.Messages[0].Data);
72
77
  return response;
73
78
  }
74
79
  catch (e) {
@@ -128,7 +133,13 @@ export class AOProcess {
128
133
  const result = output.Messages[0].Data;
129
134
  throw new WriteInteractionError(`${error.Value}: ${result}`);
130
135
  }
131
- const resultData = JSON.parse(output.Messages[0].Data);
136
+ if (output.Messages.length === 0) {
137
+ throw new Error(`Process ${this.processId} does not support provided action.`);
138
+ }
139
+ if (output.Messages[0].Data === undefined) {
140
+ return { id: messageId };
141
+ }
142
+ const resultData = safeDecode(output.Messages[0].Data);
132
143
  this.logger.debug('Message result data', {
133
144
  resultData,
134
145
  messageId,
@@ -57,31 +57,47 @@ export class IOReadable {
57
57
  }
58
58
  this.arweave = arweave;
59
59
  }
60
- async getEpoch(epoch) {
60
+ async getInfo() {
61
+ return this.process.read({
62
+ tags: [{ name: 'Action', value: 'Info' }],
63
+ });
64
+ }
65
+ async getEpochSettings(params) {
61
66
  const allTags = [
62
- { name: 'Action', value: 'Epoch' },
67
+ { name: 'Action', value: 'Epoch-Settings' },
63
68
  {
64
- // TODO: default this to the current network time
65
69
  name: 'Timestamp',
66
- value: epoch.timestamp?.toString() ?? '',
70
+ value: params?.timestamp?.toString() ??
71
+ (await this.arweave.blocks.getCurrent().catch(() => {
72
+ return { timestamp: Date.now() }; // fallback to current time
73
+ })).timestamp.toString(),
67
74
  },
68
75
  {
69
- name: 'BlockHeight',
70
- value: epoch?.blockHeight?.toString(),
76
+ name: 'Epoch-Index',
77
+ value: params?.epochIndex?.toString(),
78
+ },
79
+ ];
80
+ const prunedTags = allTags.filter((tag) => tag.value !== undefined);
81
+ return this.process.read({
82
+ tags: prunedTags,
83
+ });
84
+ }
85
+ async getEpoch(epoch) {
86
+ const allTags = [
87
+ { name: 'Action', value: 'Epoch' },
88
+ {
89
+ name: 'Timestamp',
90
+ value: epoch?.timestamp?.toString() ??
91
+ (await this.arweave.blocks.getCurrent().catch(() => {
92
+ return { timestamp: Date.now() }; // fallback to current time
93
+ })).timestamp.toString(),
71
94
  },
72
95
  {
73
- name: 'EpochIndex',
96
+ name: 'Epoch-Index',
74
97
  value: epoch?.epochIndex?.toString(),
75
98
  },
76
99
  ];
77
100
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
78
- // if it only contains the action, add default timestamp
79
- if (prunedTags.length === 1) {
80
- prunedTags.push({
81
- name: 'Timestamp',
82
- value: (await this.arweave.blocks.getCurrent()).timestamp.toString(),
83
- });
84
- }
85
101
  return this.process.read({
86
102
  tags: prunedTags,
87
103
  });
@@ -101,13 +117,13 @@ export class IOReadable {
101
117
  }
102
118
  async getArNSReservedNames() {
103
119
  return this.process.read({
104
- tags: [{ name: 'Action', value: 'ReservedNames' }],
120
+ tags: [{ name: 'Action', value: 'Reserved-Names' }],
105
121
  });
106
122
  }
107
123
  async getArNSReservedName({ name, }) {
108
124
  return this.process.read({
109
125
  tags: [
110
- { name: 'Action', value: 'ReservedName' },
126
+ { name: 'Action', value: 'Reserved-Name' },
111
127
  { name: 'Name', value: name },
112
128
  ],
113
129
  });
@@ -142,125 +158,98 @@ export class IOReadable {
142
158
  return this.process.read({
143
159
  tags: [
144
160
  { name: 'Action', value: 'Epoch' },
145
- { name: 'Timestamp', value: `${Date.now()}` },
161
+ {
162
+ name: 'Timestamp',
163
+ value: (await this.arweave.blocks.getCurrent().catch(() => {
164
+ return { timestamp: Date.now() }; // fallback to current time
165
+ })).timestamp.toString(),
166
+ },
146
167
  ],
147
168
  });
148
169
  }
149
170
  async getPrescribedObservers(epoch) {
150
171
  const allTags = [
151
- { name: 'Action', value: 'EpochPrescribedObservers' },
172
+ { name: 'Action', value: 'Epoch-Prescribed-Observers' },
152
173
  {
153
174
  name: 'Timestamp',
154
- value: epoch.timestamp?.toString(),
175
+ value: epoch?.timestamp?.toString() ??
176
+ (await this.arweave.blocks.getCurrent().catch(() => {
177
+ return { timestamp: Date.now() }; // fallback to current time
178
+ })).timestamp.toString(),
155
179
  },
156
180
  {
157
- name: 'BlockHeight',
158
- value: epoch?.blockHeight?.toString(),
159
- },
160
- {
161
- name: 'EpochIndex',
181
+ name: 'Epoch-Index',
162
182
  value: epoch?.epochIndex?.toString(),
163
183
  },
164
184
  ];
165
185
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
166
- // if it only contains the action, add default timestamp
167
- if (prunedTags.length === 1) {
168
- prunedTags.push({
169
- name: 'Timestamp',
170
- value: `${Date.now()}`,
171
- });
172
- }
173
186
  return this.process.read({
174
187
  tags: prunedTags,
175
188
  });
176
189
  }
177
190
  async getPrescribedNames(epoch) {
178
191
  const allTags = [
179
- { name: 'Action', value: 'EpochPrescribedNames' },
192
+ { name: 'Action', value: 'Epoch-Prescribed-Names' },
180
193
  {
181
194
  name: 'Timestamp',
182
- value: epoch.timestamp?.toString(),
183
- },
184
- {
185
- name: 'BlockHeight',
186
- value: epoch?.blockHeight?.toString(),
195
+ value: epoch?.timestamp?.toString() ??
196
+ (await this.arweave.blocks.getCurrent().catch(() => {
197
+ return { timestamp: Date.now() }; // fallback to current time
198
+ })).timestamp.toString(),
187
199
  },
188
200
  {
189
- name: 'EpochIndex',
201
+ name: 'Epoch-Index',
190
202
  value: epoch?.epochIndex?.toString(),
191
203
  },
192
204
  ];
193
205
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
194
- // if it only contains the action, add default timestamp
195
- if (prunedTags.length === 1) {
196
- prunedTags.push({
197
- name: 'Timestamp',
198
- value: `${Date.now()}`, // TODO; replace with fetch the current network time
199
- });
200
- }
201
206
  return this.process.read({
202
207
  tags: prunedTags,
203
208
  });
204
209
  }
205
210
  async getObservations(epoch) {
206
211
  const allTags = [
207
- { name: 'Action', value: 'EpochObservations' },
212
+ { name: 'Action', value: 'Epoch-Observations' },
208
213
  {
209
214
  name: 'Timestamp',
210
- value: epoch.timestamp?.toString(),
211
- },
212
- {
213
- name: 'BlockHeight',
214
- value: epoch?.blockHeight?.toString(),
215
+ value: epoch?.timestamp?.toString() ??
216
+ (await this.arweave.blocks.getCurrent().catch(() => {
217
+ return { timestamp: `${Date.now()}` }; // fallback to current time
218
+ })).timestamp.toString(),
215
219
  },
216
220
  {
217
- name: 'EpochIndex',
221
+ name: 'Epoch-Index',
218
222
  value: epoch?.epochIndex?.toString(),
219
223
  },
220
224
  ];
221
225
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
222
- // if it only contains the action, add default timestamp
223
- if (prunedTags.length === 1) {
224
- prunedTags.push({
225
- name: 'Timestamp',
226
- value: (await this.arweave.blocks.getCurrent()).timestamp.toString(),
227
- });
228
- }
229
226
  return this.process.read({
230
227
  tags: prunedTags,
231
228
  });
232
229
  }
233
230
  async getDistributions(epoch) {
234
231
  const allTags = [
235
- { name: 'Action', value: 'EpochDistributions' },
232
+ { name: 'Action', value: 'Epoch-Distributions' },
236
233
  {
237
234
  name: 'Timestamp',
238
- value: epoch.timestamp?.toString() ?? '',
235
+ value: epoch?.timestamp?.toString() ??
236
+ (await this.arweave.blocks.getCurrent().catch(() => {
237
+ return { timestamp: Date.now() }; // fallback to current time
238
+ })).timestamp.toString(),
239
239
  },
240
240
  {
241
- name: 'BlockHeight',
242
- value: epoch?.blockHeight?.toString(),
243
- },
244
- {
245
- name: 'EpochIndex',
241
+ name: 'Epoch-Index',
246
242
  value: epoch?.epochIndex?.toString(),
247
243
  },
248
244
  ];
249
245
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
250
- // if it only contains the action, add default timestamp
251
- if (prunedTags.length === 1) {
252
- prunedTags.push({
253
- name: 'Timestamp',
254
- value: (await this.arweave.blocks.getCurrent()).timestamp.toString(),
255
- });
256
- }
257
246
  return this.process.read({
258
247
  tags: prunedTags,
259
248
  });
260
249
  }
261
250
  async getTokenCost({ intent, purchaseType, years, name, quantity, }) {
262
251
  const allTags = [
263
- { name: 'Action', value: 'TokenCost' },
252
+ { name: 'Action', value: 'Token-Cost' },
264
253
  {
265
254
  name: 'Intent',
266
255
  value: intent,
@@ -278,9 +267,15 @@ export class IOReadable {
278
267
  value: quantity?.toString(),
279
268
  },
280
269
  {
281
- name: 'PurchaseType',
270
+ name: 'Purchase-Type',
282
271
  value: purchaseType,
283
272
  },
273
+ {
274
+ name: 'Timestamp',
275
+ value: (await this.arweave.blocks.getCurrent().catch(() => {
276
+ return { timestamp: Date.now() }; // fallback to current time
277
+ })).timestamp.toString(),
278
+ },
284
279
  ];
285
280
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
286
281
  return this.process.read({
@@ -337,17 +332,17 @@ export class IOWriteable extends IOReadable {
337
332
  const { tags = [] } = options || {};
338
333
  const allTags = [
339
334
  ...tags,
340
- { name: 'Action', value: 'JoinNetwork' },
335
+ { name: 'Action', value: 'Join-Network' },
341
336
  {
342
- name: 'OperatorStake',
337
+ name: 'Operator-Stake',
343
338
  value: operatorStake.valueOf().toString(),
344
339
  },
345
340
  {
346
- name: 'AllowDelegatedStaking',
341
+ name: 'Allow-Delegated-Staking',
347
342
  value: allowDelegatedStaking.toString(),
348
343
  },
349
344
  {
350
- name: 'DelegateRewardShareRatio',
345
+ name: 'Delegate-Reward-Share-Ratio',
351
346
  value: delegateRewardShareRatio.toString(),
352
347
  },
353
348
  {
@@ -359,7 +354,7 @@ export class IOWriteable extends IOReadable {
359
354
  value: label,
360
355
  },
361
356
  {
362
- name: 'MinDelegatedStake',
357
+ name: 'Min-Delegated-Stake',
363
358
  value: minDelegatedStake.valueOf().toString(),
364
359
  },
365
360
  {
@@ -379,11 +374,11 @@ export class IOWriteable extends IOReadable {
379
374
  value: protocol,
380
375
  },
381
376
  {
382
- name: 'AutoStake',
377
+ name: 'Auto-Stake',
383
378
  value: autoStake.toString(),
384
379
  },
385
380
  {
386
- name: 'ObserverAddress',
381
+ name: 'Observer-Address',
387
382
  value: observerAddress,
388
383
  },
389
384
  ];
@@ -397,27 +392,27 @@ export class IOWriteable extends IOReadable {
397
392
  const { tags = [] } = options || {};
398
393
  const allTags = [
399
394
  ...tags,
400
- { name: 'Action', value: 'UpdateGatewaySettings' },
395
+ { name: 'Action', value: 'Update-Gateway-Settings' },
401
396
  { name: 'Label', value: label },
402
397
  { name: 'Note', value: note },
403
398
  { name: 'FQDN', value: fqdn },
404
399
  { name: 'Port', value: port?.toString() },
405
400
  { name: 'Properties', value: properties },
406
401
  { name: 'Protocol', value: protocol },
407
- { name: 'ObserverAddress', value: observerAddress },
402
+ { name: 'Observer-Address', value: observerAddress },
408
403
  {
409
- name: 'AllowDelegatedStaking',
404
+ name: 'Allow-Delegated-Staking',
410
405
  value: allowDelegatedStaking?.toString(),
411
406
  },
412
407
  {
413
- name: 'DelegateRewardShareRatio',
408
+ name: 'Delegate-Reward-Share-Ratio',
414
409
  value: delegateRewardShareRatio?.toString(),
415
410
  },
416
411
  {
417
- name: 'MinDelegatedStake',
412
+ name: 'Min-Delegated-Stake',
418
413
  value: minDelegatedStake?.valueOf().toString(),
419
414
  },
420
- { name: 'AutoStake', value: autoStake?.toString() },
415
+ { name: 'Auto-Stake', value: autoStake?.toString() },
421
416
  ];
422
417
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
423
418
  return this.process.send({
@@ -431,7 +426,7 @@ export class IOWriteable extends IOReadable {
431
426
  signer: this.signer,
432
427
  tags: [
433
428
  ...tags,
434
- { name: 'Action', value: 'DelegateStake' },
429
+ { name: 'Action', value: 'Delegate-Stake' },
435
430
  { name: 'Target', value: params.target },
436
431
  { name: 'Quantity', value: params.stakeQty.valueOf().toString() },
437
432
  ],
@@ -443,7 +438,7 @@ export class IOWriteable extends IOReadable {
443
438
  signer: this.signer,
444
439
  tags: [
445
440
  ...tags,
446
- { name: 'Action', value: 'DecreaseDelegateStake' },
441
+ { name: 'Action', value: 'Decrease-Delegate-Stake' },
447
442
  { name: 'Target', value: params.target },
448
443
  { name: 'Quantity', value: params.decreaseQty.valueOf().toString() },
449
444
  ],
@@ -455,7 +450,7 @@ export class IOWriteable extends IOReadable {
455
450
  signer: this.signer,
456
451
  tags: [
457
452
  ...tags,
458
- { name: 'Action', value: 'IncreaseOperatorStake' },
453
+ { name: 'Action', value: 'Increase-Operator-Stake' },
459
454
  { name: 'Quantity', value: params.increaseQty.valueOf().toString() },
460
455
  ],
461
456
  });
@@ -466,7 +461,7 @@ export class IOWriteable extends IOReadable {
466
461
  signer: this.signer,
467
462
  tags: [
468
463
  ...tags,
469
- { name: 'Action', value: 'DecreaseOperatorStake' },
464
+ { name: 'Action', value: 'Decrease-Operator-Stake' },
470
465
  { name: 'Quantity', value: params.decreaseQty.valueOf().toString() },
471
466
  ],
472
467
  });
@@ -477,13 +472,13 @@ export class IOWriteable extends IOReadable {
477
472
  signer: this.signer,
478
473
  tags: [
479
474
  ...tags,
480
- { name: 'Action', value: 'SaveObservations' },
475
+ { name: 'Action', value: 'Save-Observations' },
481
476
  {
482
- name: 'ReportTxId',
477
+ name: 'Report-Tx-Id',
483
478
  value: params.reportTxId,
484
479
  },
485
480
  {
486
- name: 'FailedGateways',
481
+ name: 'Failed-Gateways',
487
482
  value: params.failedGateways.join(','),
488
483
  },
489
484
  ],
@@ -497,11 +492,11 @@ export class IOWriteable extends IOReadable {
497
492
  const { tags = [] } = options || {};
498
493
  const allTags = [
499
494
  ...tags,
500
- { name: 'Action', value: 'BuyRecord' },
495
+ { name: 'Action', value: 'Buy-Record' },
501
496
  { name: 'Name', value: params.name },
502
497
  { name: 'Years', value: params.years?.toString() ?? '1' },
503
- { name: 'ProcessId', value: params.processId },
504
- { name: 'PurchaseType', value: params.type || 'lease' },
498
+ { name: 'Process-Id', value: params.processId },
499
+ { name: 'Purchase-Type', value: params.type || 'lease' },
505
500
  ];
506
501
  const prunedTags = allTags.filter((tag) => tag.value !== undefined);
507
502
  return this.process.send({
@@ -515,7 +510,7 @@ export class IOWriteable extends IOReadable {
515
510
  signer: this.signer,
516
511
  tags: [
517
512
  ...tags,
518
- { name: 'Action', value: 'ExtendLease' },
513
+ { name: 'Action', value: 'Extend-Lease' },
519
514
  { name: 'Name', value: params.name },
520
515
  { name: 'Years', value: params.years.toString() },
521
516
  ],
@@ -527,7 +522,7 @@ export class IOWriteable extends IOReadable {
527
522
  signer: this.signer,
528
523
  tags: [
529
524
  ...tags,
530
- { name: 'Action', value: 'IncreaseUndernameLimit' },
525
+ { name: 'Action', value: 'Increase-Undername-Limit' },
531
526
  { name: 'Name', value: params.name },
532
527
  { name: 'Quantity', value: params.increaseCount.toString() },
533
528
  ],
@@ -21,8 +21,11 @@ export const FQDN_REGEX = new RegExp('^(?:(?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Z
21
21
  export const SORT_KEY_REGEX = new RegExp('^[0-9]{12},[0-9]{13},[a-fA-F0-9]{64}$');
22
22
  export const ARNS_TESTNET_REGISTRY_TX = process.env.ARNS_REGISTRY_TX ?? 'bLAgYxAdX2Ry-nt6aH2ixgvJXbpsEYm28NgJgyqfs-U';
23
23
  export const ARNS_DEVNET_REGISTRY_TX = '_NctcA2sRy1-J4OmIQZbYFPM17piNcbdBPH2ncX2RL8';
24
- export const ioDevnetProcessId = 'GaQrvEMKBpkjofgnBi_B3IgIDmY_XYelVLB6GcRGrHc';
24
+ export const IO_DEVNET_PROCESS_ID = 'GaQrvEMKBpkjofgnBi_B3IgIDmY_XYelVLB6GcRGrHc';
25
+ // backwards compatibility - TODO: remove in v2.0.0
26
+ export const ioDevnetProcessId = IO_DEVNET_PROCESS_ID;
27
+ export const IO_TESTNET_PROCESS_ID = 'agYcCFJtrMG6cqMuZfskIkFTGvUPddICmtQSBIoPdiA';
25
28
  export const MIO_PER_IO = 1_000_000;
26
- export const AOS_MODULE_ID = '9afQ1PLf2mrshqCTZEzzJTR2gWaC9zNPnYgYEqg1Pt4';
27
- export const ANT_LUA_ID = 'obPBMsBWmG5q2qODj3y-zdKiuhZaJC_nuBaQRvORKkU';
29
+ export const AOS_MODULE_ID = 'cbn0KKrBZH7hdNkNokuXLtGryrWM--PjSTBqIzw9Kkk';
30
+ export const ANT_LUA_ID = '3OlGzE5mrsN2GsxCYM0Tae1KzWepGOr5a94deOWmApM';
28
31
  export const DEFAULT_SCHEDULER_ID = '_GQ33BkPtZrqxA84vM8Zk-N2aO0toNNu_C-l-rawrBA';