@xyo-network/chain-orchestration 1.18.0-rc.1 → 1.18.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/dist/neutral/actor/Actor.d.ts +4 -4
- package/dist/neutral/actor/Actor.d.ts.map +1 -1
- package/dist/neutral/archivists/index.d.ts +0 -1
- package/dist/neutral/archivists/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +52 -78
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/init/initServerNode.d.ts.map +1 -1
- package/package.json +7 -8
- package/src/actor/Actor.ts +10 -9
- package/src/actor/BalanceActor.ts +1 -1
- package/src/archivists/index.ts +0 -1
- package/src/init/initServerNode.ts +1 -0
- package/dist/neutral/archivists/PendingTransactions/archivist.d.ts +0 -4
- package/dist/neutral/archivists/PendingTransactions/archivist.d.ts.map +0 -1
- package/dist/neutral/archivists/PendingTransactions/index.d.ts +0 -2
- package/dist/neutral/archivists/PendingTransactions/index.d.ts.map +0 -1
- package/dist/neutral/archivists/PendingTransactions/local.d.ts +0 -7
- package/dist/neutral/archivists/PendingTransactions/local.d.ts.map +0 -1
- package/src/archivists/PendingTransactions/archivist.ts +0 -21
- package/src/archivists/PendingTransactions/index.ts +0 -1
- package/src/archivists/PendingTransactions/local.ts +0 -18
|
@@ -89,8 +89,8 @@ export declare class Actor<TParams extends ActorParams = ActorParams> extends Ab
|
|
|
89
89
|
mnemonic?: string | undefined;
|
|
90
90
|
};
|
|
91
91
|
services: {
|
|
92
|
-
accountBalanceViewerEndpoint
|
|
93
|
-
apiEndpoint
|
|
92
|
+
accountBalanceViewerEndpoint: string;
|
|
93
|
+
apiEndpoint: string;
|
|
94
94
|
};
|
|
95
95
|
storage: {
|
|
96
96
|
mongo?: {
|
|
@@ -190,8 +190,8 @@ export declare class Actor<TParams extends ActorParams = ActorParams> extends Ab
|
|
|
190
190
|
mnemonic?: string | undefined;
|
|
191
191
|
};
|
|
192
192
|
services: {
|
|
193
|
-
accountBalanceViewerEndpoint
|
|
194
|
-
apiEndpoint
|
|
193
|
+
accountBalanceViewerEndpoint: string;
|
|
194
|
+
apiEndpoint: string;
|
|
195
195
|
};
|
|
196
196
|
storage: {
|
|
197
197
|
mongo?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../../../src/actor/Actor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAChD,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EAGlB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EACL,KAAK,WAAW,EAAE,KAAK,MAAM,EAE7B,sBAAsB,EACtB,KAAK,8BAA8B,EACpC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,8BAA8B,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,IAAI,GAAG,IAAI,IAAI,eAAe,GAAG;IAC/E,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,YAAY,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;CACX,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,CAAA;AAEtC,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG;IACtF,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CACzB,CAAA;AAED,qBACa,KAAK,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAC9F,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAY;IACtF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAY;IAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAY;IACpF,OAAO,CAAC,OAAO,CAAQ;IAEvB,IAAI,WAAW,WAEd;IAED,IAAI,EAAE,WAEL;IAED,SAAS,KAAK,OAAO,oBAEpB;IAED,SAAS,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEnB;IAED,SAAS,KAAK,OAAO,iBAEpB;IAED,SAAS,KAAK,OAAO,mCAEpB;IAED,SAAS,KAAK,SAAS,WAEtB;WAEqB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../../../src/actor/Actor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAChD,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EAGlB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EACL,KAAK,WAAW,EAAE,KAAK,MAAM,EAE7B,sBAAsB,EACtB,KAAK,8BAA8B,EACpC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,8BAA8B,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,IAAI,GAAG,IAAI,IAAI,eAAe,GAAG;IAC/E,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,YAAY,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;CACX,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC,CAAA;AAEtC,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG;IACtF,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CACzB,CAAA;AAED,qBACa,KAAK,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;IAC9F,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAY;IACtF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAY;IAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAY;IACpF,OAAO,CAAC,OAAO,CAAQ;IAEvB,IAAI,WAAW,WAEd;IAED,IAAI,EAAE,WAEL;IAED,SAAS,KAAK,OAAO,oBAEpB;IAED,SAAS,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAEnB;IAED,SAAS,KAAK,OAAO,iBAEpB;IAED,SAAS,KAAK,OAAO,mCAEpB;IAED,SAAS,KAAK,SAAS,WAEtB;WAEqB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmB9E;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA+DnG;;OAEG;IACY,YAAY;IAM3B;;;OAGG;IACY,WAAW;CA+B3B"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * from './ChainFinalized/index.ts';
|
|
2
2
|
export * from './PendingBlocks/index.ts';
|
|
3
|
-
export * from './PendingTransactions/index.ts';
|
|
4
3
|
export * from './RejectedTransactions/index.ts';
|
|
5
4
|
export * from './StakeIntentState/index.ts';
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/archivists/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/archivists/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -45,20 +45,25 @@ var Actor = class extends AbstractCreatable {
|
|
|
45
45
|
const baseParams = await super.paramsHandler(params);
|
|
46
46
|
const id = params?.id ?? baseParams.name;
|
|
47
47
|
const displayName = params?.displayName ?? baseParams.name;
|
|
48
|
+
const account = assertEx(params?.account, () => `Account is required for actor ${id}.`);
|
|
49
|
+
const logger = baseParams.logger ?? new IdLogger(Base.defaultLogger ?? console, () => `[${displayName} (${id})] `);
|
|
48
50
|
const singletons = params?.context?.singletons ?? {};
|
|
51
|
+
const config = params?.context?.config ?? getDefaultConfig();
|
|
52
|
+
const context = params?.context ?? {
|
|
53
|
+
config,
|
|
54
|
+
locator: new ProviderFactoryLocator({
|
|
55
|
+
config,
|
|
56
|
+
logger,
|
|
57
|
+
singletons
|
|
58
|
+
})
|
|
59
|
+
};
|
|
49
60
|
return {
|
|
50
61
|
...baseParams,
|
|
51
|
-
account
|
|
52
|
-
context
|
|
53
|
-
config: getDefaultConfig(),
|
|
54
|
-
locator: new ProviderFactoryLocator({
|
|
55
|
-
config: getDefaultConfig(),
|
|
56
|
-
singletons
|
|
57
|
-
})
|
|
58
|
-
},
|
|
62
|
+
account,
|
|
63
|
+
context,
|
|
59
64
|
displayName,
|
|
60
65
|
id,
|
|
61
|
-
logger
|
|
66
|
+
logger
|
|
62
67
|
};
|
|
63
68
|
}
|
|
64
69
|
/**
|
|
@@ -176,7 +181,9 @@ var BalanceActor = class extends Actor {
|
|
|
176
181
|
if (this._updateMutex.isLocked()) return;
|
|
177
182
|
await this._updateMutex.runExclusive(async () => {
|
|
178
183
|
const head = await this.blockViewer.currentBlockHash();
|
|
179
|
-
await this.balanceService.accountBalances([],
|
|
184
|
+
await this.balanceService.accountBalances([], {
|
|
185
|
+
head
|
|
186
|
+
});
|
|
180
187
|
});
|
|
181
188
|
}
|
|
182
189
|
};
|
|
@@ -344,53 +351,20 @@ async function initPendingBlocksArchivist(context) {
|
|
|
344
351
|
}
|
|
345
352
|
__name(initPendingBlocksArchivist, "initPendingBlocksArchivist");
|
|
346
353
|
|
|
347
|
-
// src/archivists/
|
|
354
|
+
// src/archivists/RejectedTransactions/archivist.ts
|
|
348
355
|
import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
|
|
349
356
|
import { timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
|
|
350
357
|
import { Mutex as Mutex7 } from "async-mutex";
|
|
351
358
|
|
|
352
|
-
// src/archivists/
|
|
359
|
+
// src/archivists/RejectedTransactions/local.ts
|
|
360
|
+
import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
|
|
353
361
|
import { Mutex as Mutex6 } from "async-mutex";
|
|
354
362
|
var mutex5 = new Mutex6();
|
|
355
363
|
var singleton5;
|
|
356
|
-
var
|
|
364
|
+
var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
357
365
|
return await mutex5.runExclusive(async () => {
|
|
358
366
|
if (singleton5) return singleton5;
|
|
359
|
-
|
|
360
|
-
singleton5 = await getLocalPersistentArchivist("local-pending-transactions", "chain", "pending_transaction_bundles", root);
|
|
361
|
-
return singleton5;
|
|
362
|
-
});
|
|
363
|
-
}, "initLocalPendingTransactionsArchivist");
|
|
364
|
-
|
|
365
|
-
// src/archivists/PendingTransactions/archivist.ts
|
|
366
|
-
var mutex6 = new Mutex7();
|
|
367
|
-
var singleton6;
|
|
368
|
-
async function initPendingTransactionsArchivist(context) {
|
|
369
|
-
return await mutex6.runExclusive(async () => {
|
|
370
|
-
if (singleton6) return singleton6;
|
|
371
|
-
return await timeBudget3("initPendingTransactionsArchivist", context.logger, async () => {
|
|
372
|
-
const local = await startupSpanAsync3("PendingTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist(context));
|
|
373
|
-
singleton6 = local;
|
|
374
|
-
return singleton6;
|
|
375
|
-
}, 2e3, true);
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
__name(initPendingTransactionsArchivist, "initPendingTransactionsArchivist");
|
|
379
|
-
|
|
380
|
-
// src/archivists/RejectedTransactions/archivist.ts
|
|
381
|
-
import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
|
|
382
|
-
import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
|
|
383
|
-
import { Mutex as Mutex9 } from "async-mutex";
|
|
384
|
-
|
|
385
|
-
// src/archivists/RejectedTransactions/local.ts
|
|
386
|
-
import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
|
|
387
|
-
import { Mutex as Mutex8 } from "async-mutex";
|
|
388
|
-
var mutex7 = new Mutex8();
|
|
389
|
-
var singleton7;
|
|
390
|
-
var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
391
|
-
return await mutex7.runExclusive(async () => {
|
|
392
|
-
if (singleton7) return singleton7;
|
|
393
|
-
singleton7 = await MemoryArchivist.create({
|
|
367
|
+
singleton5 = await MemoryArchivist.create({
|
|
394
368
|
account: "random",
|
|
395
369
|
config: {
|
|
396
370
|
schema: MemoryArchivistConfigSchema,
|
|
@@ -398,20 +372,20 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
|
|
|
398
372
|
name: "localRejectedTransactions"
|
|
399
373
|
}
|
|
400
374
|
});
|
|
401
|
-
return
|
|
375
|
+
return singleton5;
|
|
402
376
|
});
|
|
403
377
|
}, "initLocalRejectedTransactionsArchivist");
|
|
404
378
|
|
|
405
379
|
// src/archivists/RejectedTransactions/archivist.ts
|
|
406
|
-
var
|
|
407
|
-
var
|
|
380
|
+
var mutex6 = new Mutex7();
|
|
381
|
+
var singleton6;
|
|
408
382
|
async function initRejectedTransactionsArchivist(params) {
|
|
409
|
-
return await
|
|
410
|
-
if (
|
|
411
|
-
return await
|
|
412
|
-
const local = await
|
|
413
|
-
|
|
414
|
-
return
|
|
383
|
+
return await mutex6.runExclusive(async () => {
|
|
384
|
+
if (singleton6) return singleton6;
|
|
385
|
+
return await timeBudget3("initRejectedTransactionsArchivist", params.logger, async () => {
|
|
386
|
+
const local = await startupSpanAsync3("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
|
|
387
|
+
singleton6 = local;
|
|
388
|
+
return singleton6;
|
|
415
389
|
}, 2e3, true);
|
|
416
390
|
});
|
|
417
391
|
}
|
|
@@ -419,34 +393,34 @@ __name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
|
|
|
419
393
|
|
|
420
394
|
// src/archivists/StakeIntentState/archivist.ts
|
|
421
395
|
import { assertEx as assertEx5 } from "@xylabs/sdk-js";
|
|
422
|
-
import { startupSpanAsync as
|
|
423
|
-
import { timeBudget as
|
|
424
|
-
import { Mutex as
|
|
396
|
+
import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
|
|
397
|
+
import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
|
|
398
|
+
import { Mutex as Mutex9 } from "async-mutex";
|
|
425
399
|
|
|
426
400
|
// src/archivists/StakeIntentState/local.ts
|
|
427
401
|
import { assertEx as assertEx4 } from "@xylabs/sdk-js";
|
|
428
|
-
import { Mutex as
|
|
429
|
-
var
|
|
430
|
-
var
|
|
402
|
+
import { Mutex as Mutex8 } from "async-mutex";
|
|
403
|
+
var mutex7 = new Mutex8();
|
|
404
|
+
var singleton7;
|
|
431
405
|
var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config }) => {
|
|
432
|
-
return await
|
|
433
|
-
if (
|
|
406
|
+
return await mutex7.runExclusive(async () => {
|
|
407
|
+
if (singleton7) return singleton7;
|
|
434
408
|
const { root } = config.storage;
|
|
435
|
-
|
|
436
|
-
return assertEx4(
|
|
409
|
+
singleton7 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
|
|
410
|
+
return assertEx4(singleton7, () => new Error("Failed to initialize stake intent state archivist"));
|
|
437
411
|
});
|
|
438
412
|
}, "initLocalStakeIntentStateArchivist");
|
|
439
413
|
|
|
440
414
|
// src/archivists/StakeIntentState/archivist.ts
|
|
441
|
-
var
|
|
442
|
-
var
|
|
415
|
+
var mutex8 = new Mutex9();
|
|
416
|
+
var singleton8;
|
|
443
417
|
var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (context) => {
|
|
444
|
-
return await
|
|
445
|
-
if (
|
|
446
|
-
return await
|
|
447
|
-
const local = await
|
|
448
|
-
|
|
449
|
-
return assertEx5(
|
|
418
|
+
return await mutex8.runExclusive(async () => {
|
|
419
|
+
if (singleton8) return singleton8;
|
|
420
|
+
return await timeBudget4("initStakeIntentStateArchivist", context.logger, async () => {
|
|
421
|
+
const local = await startupSpanAsync4("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(context));
|
|
422
|
+
singleton8 = local;
|
|
423
|
+
return assertEx5(singleton8, () => "StakeIntentStateArchivist is undefined");
|
|
450
424
|
}, 2e3, true);
|
|
451
425
|
});
|
|
452
426
|
}, "initStakeIntentStateArchivist");
|
|
@@ -698,8 +672,8 @@ __name(initBalanceSummaryMap, "initBalanceSummaryMap");
|
|
|
698
672
|
import { assertEx as assertEx11 } from "@xylabs/sdk-js";
|
|
699
673
|
import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
|
|
700
674
|
import { asAttachableModuleInstance } from "@xyo-network/module-model";
|
|
701
|
-
import { Mutex as
|
|
702
|
-
var initMutex = new
|
|
675
|
+
import { Mutex as Mutex10 } from "async-mutex";
|
|
676
|
+
var initMutex = new Mutex10();
|
|
703
677
|
var bridgedModuleDictionary = {};
|
|
704
678
|
var initBridgedModule = /* @__PURE__ */ __name(async ({ bridge, moduleName }) => {
|
|
705
679
|
return await initMutex.runExclusive(async () => {
|
|
@@ -1095,6 +1069,7 @@ async function initServerNode({ wallet, logger, config, node: providedNode, tran
|
|
|
1095
1069
|
transfersSummaryMap,
|
|
1096
1070
|
balancesSummaryMap
|
|
1097
1071
|
});
|
|
1072
|
+
assertEx14(await node.start(), () => "Failed to start node");
|
|
1098
1073
|
const writableChainArchivist = await writableChainArchivistFromNode(node);
|
|
1099
1074
|
const readonlyChainArchivist = await readonlyChainArchivistFromNode(node);
|
|
1100
1075
|
const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node);
|
|
@@ -1268,7 +1243,6 @@ export {
|
|
|
1268
1243
|
initFinalizedArchivist,
|
|
1269
1244
|
initHealthEndpoints,
|
|
1270
1245
|
initPendingBlocksArchivist,
|
|
1271
|
-
initPendingTransactionsArchivist,
|
|
1272
1246
|
initProducerAccount,
|
|
1273
1247
|
initRejectedTransactionsArchivist,
|
|
1274
1248
|
initSeedPhrase,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actor/Actor.ts","../../src/actor/BalanceActor.ts","../../src/actor/ValidatorActor.ts","../../src/archivists/ChainFinalized/archivist.ts","../../src/archivists/ChainFinalized/local.ts","../../src/archivists/lib/localPersistentArchivist.ts","../../src/archivists/PendingBlocks/archivist.ts","../../src/archivists/PendingBlocks/local.ts","../../src/archivists/PendingTransactions/archivist.ts","../../src/archivists/PendingTransactions/local.ts","../../src/archivists/RejectedTransactions/archivist.ts","../../src/archivists/RejectedTransactions/local.ts","../../src/archivists/StakeIntentState/archivist.ts","../../src/archivists/StakeIntentState/local.ts","../../src/buildTelemetryConfig.ts","../../src/createDeclarationIntentBlock.ts","../../src/evm/initEvmProvider.ts","../../src/evm/initInfuraProvider.ts","../../src/evm/initChainId.ts","../../src/evm/initJsonRpcProvider.ts","../../src/health/initHealthEndpoints.ts","../../src/host/implementation/DefaultHost.ts","../../src/host/implementation/DefaultServiceProvider.ts","../../src/host/model/ServiceCollection.ts","../../src/init/initBalanceSummaryMap.ts","../../src/init/initBridgedModule.ts","../../src/init/initChainStakeViewer.ts","../../src/init/initFinalizedArchivist.ts","../../src/init/initProducerAccount.ts","../../src/init/initSeedPhrase.ts","../../src/init/initServerNode.ts","../../src/manifest/getLocator.ts","../../src/manifest/loadNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts","../../src/init/initServerWallet.ts","../../src/init/initStatusReporter.ts","../../src/init/initTransferSummaryMap.ts","../../src/orchestrator/Orchestrator.ts"],"sourcesContent":["import type {\n CreatableInstance, CreatableParams, EmptyObject,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable,\n assertEx,\n Base, creatable, delay, IdLogger,\n} from '@xylabs/sdk-js'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport {\n type BaseContext, type Config,\n getDefaultConfig,\n ProviderFactoryLocator,\n type ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nexport type ActorContext = BaseContext & {\n config: Config\n locator: ProviderFactoryLocatorInstance\n}\n\nexport type ActorParams<T extends EmptyObject | void = void> = CreatableParams & {\n account: AccountInstance\n context: ActorContext\n displayName?: string\n id: string\n} & (T extends void ? EmptyObject : T)\n\nexport type ActorInstance<T extends ActorParams = ActorParams> = CreatableInstance<T> & {\n start(): Promise<boolean>\n stop(): Promise<boolean>\n}\n\n@creatable()\nexport class Actor<TParams extends ActorParams = ActorParams> extends AbstractCreatable<TParams> {\n protected readonly _intervals: Map<string, ReturnType<typeof setInterval>> = new Map()\n protected readonly _semaphores: Map<string, Semaphore> = new Map()\n protected readonly _timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n private _active = false\n\n get displayName() {\n return this.params.displayName!\n }\n\n get id() {\n return this.params.id\n }\n\n protected get account() {\n return this.params.account!\n }\n\n protected get config() {\n return this.context.config\n }\n\n protected get context() {\n return this.params.context\n }\n\n protected get locator() {\n return this.context.locator\n }\n\n protected get logPrefix() {\n return `[${this.displayName} (${this.id})] `\n }\n\n static override async paramsHandler<T extends ActorParams>(params?: Partial<T>) {\n const baseParams = await super.paramsHandler(params)\n const id = params?.id ?? baseParams.name\n const displayName = params?.displayName ?? baseParams.name\n const singletons = params?.context?.singletons ?? {}\n return {\n ...baseParams,\n account: assertEx(params?.account, () => `Account is required for actor ${id}.`),\n context: params?.context ?? {\n config: getDefaultConfig(),\n locator: new ProviderFactoryLocator({ config: getDefaultConfig(), singletons }),\n },\n displayName,\n id,\n logger: baseParams.logger ?? new IdLogger(Base.defaultLogger ?? console, () => `[${displayName} (${id})] `),\n }\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number) {\n if (!this._active) {\n this.logger?.warn(\n `Cannot register timer '${timerName}' because actor is not active.`,\n )\n return\n }\n\n let running = false\n\n this._semaphores.set(timerName, new Semaphore(1))\n\n const timeoutId = setTimeout(() => {\n const intervalId = setInterval(() => {\n const semaphore = this._semaphores.get(timerName)\n if (!this._active || !this._intervals.has(timerName) || !semaphore || running) return\n if (semaphore.isLocked()) {\n this.logger?.warn(\n `Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`,\n )\n return\n }\n semaphore.acquire().then(([, release]) => {\n const startTime = Date.now()\n running = true\n callback()\n .then(() => {\n const duration = Date.now() - startTime\n if (duration > periodMs) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`,\n )\n } else if (duration > 5000) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`,\n )\n }\n })\n .catch((error) => {\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${error}`)\n this.logger?.error(error.stack)\n })\n .finally(() => {\n release()\n running = false\n })\n }).catch((error) => {\n this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${error}`)\n })\n }, periodMs)\n\n // store interval so we can clear it on stop()\n this._intervals.set(timerName, intervalId)\n }, dueTimeMs)\n\n // store timeout so we can clear it on stop() if interval hasn't started yet\n this._timeouts.set(timerName, timeoutId)\n\n this.logger?.log(\n `Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`,\n )\n }\n\n /**\n * Called by the Orchestrator when the actor is activated.\n */\n override async startHandler() {\n await super.startHandler()\n this._active = true\n this.logger?.log('Started.')\n }\n\n /**\n * Called by the Orchestrator when the actor is deactivated.\n * Stop all running timers.\n */\n override async stopHandler() {\n await super.stopHandler()\n this._active = false\n this.logger?.log('Stopping all timers...')\n\n // wait for all semaphores to be free and acquire them to prevent new tasks from starting\n await Promise.all(\n [...this._semaphores.values()].map(async (semaphore) => {\n // Wait for any running tasks to complete\n while (semaphore.isLocked()) {\n this.logger?.log('Waiting for running timer task to complete...')\n await delay(500)\n }\n await semaphore.acquire()\n }),\n )\n\n this._semaphores.clear()\n\n for (const [, timeoutRef] of this._timeouts.entries()) {\n clearTimeout(timeoutRef)\n }\n this._timeouts.clear()\n\n for (const [, intervalRef] of this._intervals.entries()) {\n clearInterval(intervalRef)\n }\n this._intervals.clear()\n\n this.logger?.log('Stopped.')\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { Actor, type ActorParams } from './Actor.ts'\n\nexport type BalanceActorParams = ActorParams<\n Pick<ChainServiceCollectionV2, 'balance' | 'blockViewer'>\n & { config: Config }>\n\nexport class BalanceActor extends Actor<BalanceActorParams> {\n protected _updateMutex = new Mutex()\n\n protected get balanceService() {\n return assertEx(this.params.balance, () => 'balanceService not set')\n }\n\n protected get blockViewer() {\n return assertEx(this.params.blockViewer, () => 'blockViewer not set')\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('BalanceTimer', async () => {\n await this.updateBalance()\n }, 1000, 10_000/* 1000 */)\n }\n\n protected async updateBalance(): Promise<void> {\n if (this._updateMutex.isLocked()) return\n await this._updateMutex.runExclusive(async () => {\n const head = await this.blockViewer.currentBlockHash()\n await this.balanceService.accountBalances([], head)\n })\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx, creatable } from '@xylabs/sdk-js'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { processPendingBlocks } from '@xyo-network/chain-sdk'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-protocol'\nimport {\n BlockViewer,\n BlockViewerMoniker,\n MempoolViewer, MempoolViewerMoniker,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport { Actor, ActorParams } from './Actor.ts'\n\nexport type ValidatorActorParams = ActorParams<\n {\n account: AccountInstance\n blockViewer?: BlockViewer\n finalizedArchivist: ArchivistInstance\n mempoolViewer?: MempoolViewer\n }>\n\n@creatable()\nexport class ValidatorActor extends Actor<ValidatorActorParams> {\n protected _blockViewer: BlockViewer | undefined\n protected _lastValidatedBlock: BlockBoundWitness | undefined\n protected _lastValidatedBlockHash: Hash | undefined\n protected _mempoolViewer: MempoolViewer | undefined\n\n protected get blockViewer() {\n return this._blockViewer!\n }\n\n protected get finalizedArchivist() {\n return assertEx(this.params.finalizedArchivist, () => 'finalizedArchivist not set')\n }\n\n protected get mempoolViewer() {\n return this._mempoolViewer!\n }\n\n override async createHandler() {\n await super.createHandler()\n\n this._blockViewer = assertEx(\n this.params.blockViewer ?? await this.locator.getInstance<BlockViewer>(BlockViewerMoniker),\n () => 'Unable to locate a BlockViewer',\n )\n\n this._mempoolViewer = assertEx(\n this.params.mempoolViewer ?? await this.locator.getInstance<MempoolViewer>(MempoolViewerMoniker),\n () => 'Unable to locate a MempoolViewer',\n )\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('ValidatorActor', async () => {\n await this.spanAsync('processPendingBlocks', async () => {\n console.log('ValidatorActor: Processing pending blocks...')\n await processPendingBlocks({\n context: this.context,\n logger: this.logger,\n mempoolViewer: this.mempoolViewer,\n blockViewer: this.blockViewer,\n finalizedArchivist: this.finalizedArchivist,\n })\n })\n }, 2000, 1500/* 500 */)\n }\n\n protected async slashInvalidBlock(_block: BlockBoundWitness): Promise<boolean> {\n // TODO: Handle slashing logic\n const slashed = await Promise.resolve(true)\n return slashed\n }\n\n protected async validateBlock(block: BlockBoundWitness): Promise<boolean> {\n // TODO: Validate using validation logic\n const valid = await Promise.resolve(true)\n // Store the last validated block and its hash\n this._lastValidatedBlock = block\n this._lastValidatedBlockHash = await PayloadBuilder.hash(block)\n\n // Return the validation result\n return valid\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalChainFinalizedArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initChainFinalizedArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initChainFinalizedArchivist', context.logger, async () => {\n const local = await startupSpanAsync('ChainFinalizedArchivist:initLocal', () => initLocalChainFinalizedArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { CreatableProviderContext } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalChainFinalizedArchivist: Initializable<CreatableProviderContext, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-finalized-chain', 'chain', 'finalized', root)\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\nimport Path from 'node:path'\n\nimport { LmdbArchivist, LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { getStoreDirectory, type StoreKind } from '@xyo-network/chain-protocol'\n\nconst DEFAULT_STORAGE_ROOT = Path.join(process.cwd(), '.store')\n\n/**\n * Returns a local persistent archivist\n * @param name The name of the archivist\n * @param dbName The name of the database\n * @param storeName The name of the store\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns an archivist instance\n */\nexport const getLocalPersistentArchivist = (\n name: string,\n dbName: string,\n storeName: string,\n storageRoot?: string,\n kind: StoreKind = 'lmdb',\n): Promise<ArchivistInstance> => {\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n return LmdbArchivist.create({\n account: 'random',\n config: {\n name,\n clearStoreOnStart: false,\n dbName,\n location: getStoreDirectory(dbName, root, 'lmdb'),\n schema: LmdbArchivistConfigSchema,\n storeName,\n },\n })\n }\n }\n}\n\n/**\n * Deletes a local persistent archivist\n * @param dbName The name of the database\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns A promise that resolves when the archivist is deleted\n */\nexport const deleteLocalPersistentArchivist = async (dbName: string, storageRoot?: string, kind: StoreKind = 'lmdb'): Promise<void> => {\n await Promise.resolve()\n console.warn(`Deleting local persistent archivist for ${dbName} of kind ${kind}.`)\n let location = ''\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n location = getStoreDirectory(dbName, root, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalPendingBlocksArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initPendingBlocksArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initPendingBlocksArchivist', context.logger, async () => {\n const local = await startupSpanAsync('PendingBlocksArchivist:initLocal', () => initLocalPendingBlocksArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingBlocksArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-pending-blocks', 'chain', 'pending_block_bundles', root)\n return singleton\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalPendingTransactionsArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initPendingTransactionsArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initPendingTransactionsArchivist', context.logger, async () => {\n const local = await startupSpanAsync('PendingTransactionsArchivist:initLocal', () => initLocalPendingTransactionsArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingTransactionsArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-pending-transactions', 'chain', 'pending_transaction_bundles', root)\n return singleton\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { InitializableParams } from '@xyo-network/xl1-protocol'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalRejectedTransactionsArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initRejectedTransactionsArchivist(params: InitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initRejectedTransactionsArchivist', params.logger, async () => {\n const local = await startupSpanAsync('RejectedTransactionsArchivist:initLocal', () => initLocalRejectedTransactionsArchivist(params))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalRejectedTransactionsArchivist: Initializable<{}, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await MemoryArchivist.create({\n account: 'random',\n config: {\n schema: MemoryArchivistConfigSchema, max: 1000, name: 'localRejectedTransactions',\n },\n })\n return singleton\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalStakeIntentStateArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initStakeIntentStateArchivist: Initializable<ChainInitializableParams, ArchivistInstance>\n = async (context: ChainInitializableParams): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initStakeIntentStateArchivist', context.logger, async () => {\n const local = await startupSpanAsync('StakeIntentStateArchivist:initLocal', () => initLocalStakeIntentStateArchivist(context))\n singleton = local\n return assertEx(singleton, () => 'StakeIntentStateArchivist is undefined')\n }, 2000, true)\n })\n }\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalStakeIntentStateArchivist: Initializable<ChainInitializableParams,\n ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-stake-intent-state', 'stakeIntent', 'state', root)\n return assertEx(singleton, () => new Error('Failed to initialize stake intent state archivist'))\n })\n}\n","import type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport function buildTelemetryConfig(config: Config, serviceName: string, serviceVersion: string) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9464 } = config.telemetry?.metrics?.scrape ?? {}\n const telemetryConfig = {\n attributes: {\n serviceName,\n serviceVersion,\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n }\n return telemetryConfig\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport { buildNextBlock } from '@xyo-network/chain-sdk'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { createDeclarationIntent } from '@xyo-network/xl1-protocol-sdk'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport type { Provider } from 'ethers'\nimport type { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'\n\nlet provider: Promise<JsonRpcProvider> | undefined\n\nexport const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>; logger?: Logger }): Promise<Provider> => {\n if (provider) return provider\n if (canUseInfuraProvider(config)) {\n provider = initInfuraProvider(config)\n } else if (canUseJsonRpcProvider(config)) {\n provider = initJsonRpcProvider(config)\n }\n return assertEx(await provider, () => 'No provider available')\n}\n\nexport const canUseEvmProvider = ({ config }: { config: Pick<Config, 'evm'> }) => {\n return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = (config: Pick<Config, 'evm'>) => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraProvider(...providerConfig))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Pick<Config, 'evm'>): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Pick<Config, 'evm'>) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import {\n assertEx, hexFrom, isDefined, isHex,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const canUseChainId = (config: Pick<Config, 'evm'>): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Pick<Config, 'evm'>) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n const providerConfig = getJsonRpcProviderConfig(config)\n return Promise.resolve(new JsonRpcProvider(...providerConfig))\n}\n\nexport const canUseJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n return canUseChainId(config)\n && isDefined(config.evm.jsonRpc?.url)\n}\n\nexport const getJsonRpcProviderConfig = (config: Pick<Config, 'evm'>) => {\n const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')\n return [jsonRpcUrl, getChainId(config)] as const\n}\n","import type {\n IncomingMessage, Server, ServerResponse,\n} from 'node:http'\nimport http from 'node:http'\n\nimport type { CreatableStatus, Logger } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { Config, RuntimeStatusMonitor } from '@xyo-network/xl1-protocol-sdk'\n\nconst sendStatus = (res: ServerResponse, status: CreatableStatus, errorCode: number) => {\n const statusCode = status === 'started' ? 200 : errorCode\n res.writeHead(statusCode, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status }))\n}\n\nconst notFound = (res: ServerResponse) => {\n res.writeHead(404, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status: 'not found' }))\n}\n\n/**\n * Starts an HTTP server with Kubernetes health endpoints:\n * - /healthz\n * - /livez\n * - /readyz\n * @param port The port to listen on (default: 8080)\n */\nconst createHealthServer = (port: number, statusMonitor: RuntimeStatusMonitor, logger: Logger) => {\n const server = http.createServer((req: IncomingMessage, res: ServerResponse) => {\n const url = req.url ?? ''\n\n const status = statusMonitor.getGlobalStatus()\n\n switch (url) {\n case '/healthz': {\n sendStatus(res, status, 500)\n break\n }\n case '/livez': {\n sendStatus(res, status, 503)\n break\n }\n case '/readyz': {\n sendStatus(res, status, 503)\n break\n }\n default: {\n notFound(res)\n }\n }\n })\n\n server.listen(port, () => {\n logger.log(`Health server running on http://localhost:${port}`)\n logger.log(' - /healthz')\n logger.log(' - /livez')\n logger.log(' - /readyz')\n })\n return server\n}\n\nexport const initHealthEndpoints: Initializable<{ config: Config; logger: Logger; statusReporter: RuntimeStatusMonitor }, Server | undefined> = (params) => {\n const {\n config, logger, statusReporter,\n } = params\n const { healthCheckPort } = config.producer\n return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined\n}\n","import type { Host, ServiceProvider } from '../model/index.ts'\n\n/**\n * A generic host implementation that can be used as a starting point for\n * more complex host implementations.\n */\nexport class GenericHost implements Host {\n services: ServiceProvider\n\n constructor(services: ServiceProvider) {\n this.services = services\n }\n\n async start(): Promise<void> {\n await Promise.resolve()\n // Initialize or start your services here\n console.log('Host is starting...')\n }\n\n async stop(): Promise<void> {\n await Promise.resolve()\n // Stop or clean up services here\n console.log('Host is stopping...')\n }\n}\n","import type { ServiceProvider } from '../model/index.ts'\n\nexport class DefaultServiceProvider implements ServiceProvider {\n protected _services: Record<string, unknown>\n constructor(services: Record<string, unknown>) {\n this._services = services\n }\n\n getService<T>(serviceIdentifier: string): T | undefined {\n return this._services[serviceIdentifier] as T\n }\n}\n","import type { ServiceProvider } from './ServiceProvider.ts'\n\nexport interface ServiceCollection {\n build(): ServiceProvider\n}\n\n/**\n * Represents the lifetime of a service\n */\nexport const ServiceLifetime = {\n Singleton: 'Singleton',\n Transient: 'Transient',\n} as const\n\n/**\n * Describes a single service registration\n */\nexport interface ServiceDescriptor<T = unknown> {\n identifier: string | symbol\n implementationFactory: () => T\n lifetime: keyof typeof ServiceLifetime\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BalancesStepSummary, MapType } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initBalanceSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<BalancesStepSummary>>()\n }\n}\n","import type { Address, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; logger?: Logger; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import {\n asAddress,\n assertEx, type Logger, toAddress, toEthAddress,\n} from '@xylabs/sdk-js'\nimport type { EthereumChainStakeEventsParams, EthereumChainStakeViewerParams } from '@xyo-network/chain-sdk'\nimport { EthereumChainStakeEventsViewer, EthereumChainStakeViewer } from '@xyo-network/chain-sdk'\nimport { StakedXyoChainV2__factory } from '@xyo-network/typechain'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport type {\n Config,\n CreatableProviderContext, StakeViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { SimpleStakeViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'\n\nexport async function initEvmChainStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {\n const provider = await initEvmProvider({ config, logger })\n const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId\n const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider)\n const stakeEventsViewer = await EthereumChainStakeEventsViewer.create({\n contract, logger, context,\n } satisfies EthereumChainStakeEventsParams)\n assertEx(await stakeEventsViewer.start(), () => 'Failed to start EthereumChainStakeEvents reader')\n const stakeChainViewer = await EthereumChainStakeViewer.create({\n contract, stakeEventsViewer, logger, context,\n } satisfies EthereumChainStakeViewerParams)\n assertEx(await stakeChainViewer.start(), () => 'Failed to start EthereumChainStake viewer')\n return stakeChainViewer\n}\n\nexport async function initSimpleStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {\n const stakeViewer = await SimpleStakeViewer.create({\n context,\n chainId: asAddress(toAddress(1n), true),\n logger,\n positions: [],\n })\n assertEx(await stakeViewer.start(), () => 'Failed to start SimpleChainStake viewer')\n return stakeViewer\n}\n\nexport async function initStakeViewer({\n config, logger, context,\n}: {\n config: Config\n context: CreatableProviderContext\n logger?: Logger\n}): Promise<StakeViewer> {\n if (canUseEvmProvider({ config })) {\n return await initEvmChainStakeViewer(context, config, logger)\n } else {\n console.warn('[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.')\n return await initSimpleStakeViewer(context, config, logger)\n }\n}\n","import { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nasync function initMongoFinalizedArchivist(config: Config) {\n const payloadSdkConfig = {\n ...config.storage.mongo,\n collection: 'chain_validated',\n } satisfies MongoDBModuleParamsV2['payloadSdkConfig']\n return await MongoDBArchivistV2.create({ payloadSdkConfig })\n}\n\nexport async function initFinalizedArchivist(config: Config) {\n const finalizedArchivist = await initMongoFinalizedArchivist(config)\n return finalizedArchivist\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-protocol-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>\n = async ({ config, logger }): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.producer.mnemonic\n if (isUndefined(walletPhrase)) {\n logger?.warn('[Producer] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n logger?.warn(`[Producer] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n }\n","import { assertEx, isString } from '@xylabs/sdk-js'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nexport async function initSeedPhrase({\n config, logger, bios,\n}: ConfigContext<{ bios: BiosExternalInterface }>): Promise<string> {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { loadNode } from '../manifest/index.ts'\n\nasync function writableChainArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n )\n}\n\nasync function readonlyChainArchivistFromNode(node: NodeInstance) {\n return assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ))\n}\n\nasync function pendingTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n )\n}\n\nasync function pendingBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n )\n}\n\nexport async function initServerNode({\n wallet, logger, config, node: providedNode, transfersSummaryMap, balancesSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n node?: NodeInstance\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) {\n const node: NodeInstance = providedNode ?? await loadNode({\n wallet, logger, config, transfersSummaryMap, balancesSummaryMap,\n })\n const writableChainArchivist = await writableChainArchivistFromNode(node)\n const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)\n const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)\n const pendingBlocksArchivist = await pendingBlocksArchivistFromNode(node)\n return {\n node, writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n }\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async ({ config, logger}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n}>) => {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9465 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @returns A node with the xyo-chain modules registered\n */\nexport const loadNode = async ({\n wallet, config, balancesSummaryMap, transfersSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) => {\n const locator = await getLocator({\n config, balancesSummaryMap, transfersSummaryMap,\n })\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 50000\n },\n \"originArchivist\": \"Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/1\",\n \"name\": \"Transactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_transaction_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"Blocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_block_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nconst ChainNodeManifest = Chain as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nconst PendingNodeManifest = Pending as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n","import { isDefined } from '@xylabs/sdk-js'\nimport { boot } from '@xyo-network/bios'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { initSeedPhrase } from './initSeedPhrase.ts'\n\nexport async function initServerWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.api\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic)\n ? mnemonic\n : await initSeedPhrase({\n bios, config, logger,\n })\n return await HDWallet.fromPhrase(seedPhrase)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { RuntimeStatusMonitor } from '@xyo-network/xl1-protocol-sdk'\n\nexport function initStatusReporter({ logger }: { logger: Logger }) {\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n return statusReporter\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { MapType, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initTransferSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<TransfersStepSummary>>()\n }\n}\n","import type { CreatableInstance } from '@xylabs/sdk-js'\nimport { AbstractCreatable, creatable } from '@xylabs/sdk-js'\n\nimport type { ActorInstance } from '../actor/index.ts'\n\nexport interface OrchestratorInstance extends CreatableInstance {\n registerActor(actor: ActorInstance): Promise<void>\n}\n\n@creatable()\nexport class Orchestrator extends AbstractCreatable implements OrchestratorInstance {\n protected actors: ActorInstance[] = []\n protected keepAliveHandle: NodeJS.Timeout | null = null\n protected running = false\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: ActorInstance) {\n if (this.running) {\n // If the orchestrator is already running, activate the actor immediately\n await actor.start()\n }\n this.actors.push(actor)\n }\n\n /**\n * Starts the orchestrator: activates all actors.\n */\n override async startHandler() {\n await super.startHandler()\n if (this.running) {\n this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.log('[Orchestrator] Starting...')\n this.running = true\n for (const actor of this.actors) {\n await actor.start()\n }\n // This interval will fire every 24.8 days (2^31 - 1 ms), effectively never finishing\n this.keepAliveHandle = setInterval(() => {\n // No-op\n }, 2_147_483_647)\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n override async stopHandler() {\n await super.stopHandler()\n if (!this.running) {\n this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.log('[Orchestrator] Stopping...')\n for (const actor of this.actors) {\n await actor.stop()\n }\n this.running = false\n if (this.keepAliveHandle) clearInterval(this.keepAliveHandle)\n this.logger?.log('[Orchestrator] Stopped...')\n }\n}\n"],"mappings":"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","names":["AbstractCreatable","assertEx","Base","creatable","delay","IdLogger","getDefaultConfig","ProviderFactoryLocator","Semaphore","Actor","AbstractCreatable","_intervals","Map","_semaphores","_timeouts","_active","displayName","params","id","account","config","context","locator","logPrefix","paramsHandler","baseParams","name","singletons","assertEx","getDefaultConfig","ProviderFactoryLocator","logger","IdLogger","Base","defaultLogger","console","registerTimer","timerName","callback","dueTimeMs","periodMs","warn","running","set","Semaphore","timeoutId","setTimeout","intervalId","setInterval","semaphore","get","has","isLocked","acquire","then","release","startTime","Date","now","duration","catch","error","stack","finally","log","startHandler","stopHandler","Promise","all","values","map","delay","clear","timeoutRef","entries","clearTimeout","intervalRef","clearInterval","assertEx","Mutex","BalanceActor","Actor","_updateMutex","Mutex","balanceService","assertEx","params","balance","blockViewer","startHandler","registerTimer","updateBalance","isLocked","runExclusive","head","currentBlockHash","accountBalances","assertEx","creatable","processPendingBlocks","PayloadBuilder","BlockViewerMoniker","MempoolViewerMoniker","ValidatorActor","Actor","_blockViewer","_lastValidatedBlock","_lastValidatedBlockHash","_mempoolViewer","blockViewer","finalizedArchivist","assertEx","params","mempoolViewer","createHandler","locator","getInstance","BlockViewerMoniker","MempoolViewerMoniker","startHandler","registerTimer","spanAsync","console","log","processPendingBlocks","context","logger","slashInvalidBlock","_block","slashed","Promise","resolve","validateBlock","block","valid","PayloadBuilder","hash","startupSpanAsync","timeBudget","Mutex","Mutex","rm","Path","LmdbArchivist","LmdbArchivistConfigSchema","getStoreDirectory","DEFAULT_STORAGE_ROOT","Path","join","process","cwd","getLocalPersistentArchivist","name","dbName","storeName","storageRoot","kind","root","LmdbArchivist","create","account","config","clearStoreOnStart","location","getStoreDirectory","schema","LmdbArchivistConfigSchema","mutex","Mutex","singleton","initLocalChainFinalizedArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initChainFinalizedArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalChainFinalizedArchivist","startupSpanAsync","timeBudget","Mutex","Mutex","mutex","Mutex","singleton","initLocalPendingBlocksArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initPendingBlocksArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalPendingBlocksArchivist","startupSpanAsync","timeBudget","Mutex","Mutex","mutex","Mutex","singleton","initLocalPendingTransactionsArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initPendingTransactionsArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalPendingTransactionsArchivist","startupSpanAsync","timeBudget","Mutex","MemoryArchivist","MemoryArchivistConfigSchema","Mutex","mutex","Mutex","singleton","initLocalRejectedTransactionsArchivist","runExclusive","MemoryArchivist","create","account","config","schema","MemoryArchivistConfigSchema","max","name","mutex","Mutex","singleton","initRejectedTransactionsArchivist","params","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalRejectedTransactionsArchivist","assertEx","startupSpanAsync","timeBudget","Mutex","assertEx","Mutex","mutex","Mutex","singleton","initLocalStakeIntentStateArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","assertEx","Error","mutex","Mutex","singleton","initStakeIntentStateArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalStakeIntentStateArchivist","assertEx","buildTelemetryConfig","config","serviceName","serviceVersion","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","telemetryConfig","attributes","metricsConfig","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","assertEx","assertEx","isDefined","InfuraProvider","assertEx","hexFrom","isDefined","isHex","canUseChainId","config","isDefined","evm","chainId","getChainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","isDefined","evm","infura","projectId","projectSecret","assertEx","getChainId","assertEx","isDefined","JsonRpcProvider","initJsonRpcProvider","config","providerConfig","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","isDefined","evm","jsonRpc","url","jsonRpcUrl","assertEx","getChainId","provider","initEvmProvider","config","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","http","isDefined","sendStatus","res","status","errorCode","statusCode","writeHead","end","JSON","stringify","notFound","createHealthServer","port","statusMonitor","logger","server","http","createServer","req","url","getGlobalStatus","listen","log","initHealthEndpoints","params","config","statusReporter","healthCheckPort","producer","isDefined","undefined","GenericHost","services","start","Promise","resolve","console","log","stop","DefaultServiceProvider","_services","services","getService","serviceIdentifier","ServiceLifetime","Singleton","Transient","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initBalanceSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","asAddress","assertEx","toAddress","toEthAddress","EthereumChainStakeEventsViewer","EthereumChainStakeViewer","StakedXyoChainV2__factory","SimpleStakeViewer","initEvmChainStakeViewer","context","config","logger","provider","initEvmProvider","contractAddress","assertEx","chain","id","contract","StakedXyoChainV2__factory","connect","toEthAddress","stakeEventsViewer","EthereumChainStakeEventsViewer","create","start","stakeChainViewer","EthereumChainStakeViewer","initSimpleStakeViewer","stakeViewer","SimpleStakeViewer","chainId","asAddress","toAddress","positions","initStakeViewer","canUseEvmProvider","console","warn","MongoDBArchivistV2","initMongoFinalizedArchivist","config","payloadSdkConfig","storage","mongo","collection","MongoDBArchivistV2","create","initFinalizedArchivist","finalizedArchivist","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","initProducerAccount","config","logger","walletPhrase","producer","mnemonic","isUndefined","warn","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","assertEx","isString","HDWallet","initSeedPhrase","config","logger","bios","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","assertEx","asArchivistInstance","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","getLocator","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","loadNode","wallet","config","balancesSummaryMap","transfersSummaryMap","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","writableChainArchivistFromNode","node","asArchivistInstance","resolve","required","readonlyChainArchivistFromNode","assertEx","pendingTransactionsArchivistFromNode","pendingBlocksArchivistFromNode","initServerNode","wallet","logger","config","providedNode","transfersSummaryMap","balancesSummaryMap","loadNode","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","isDefined","boot","HDWallet","initServerWallet","config","logger","mnemonic","api","bios","boot","seedPhrase","isDefined","initSeedPhrase","HDWallet","fromPhrase","RuntimeStatusMonitor","initStatusReporter","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initTransferSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkTransferSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","AbstractCreatable","creatable","Orchestrator","AbstractCreatable","actors","keepAliveHandle","running","registerActor","actor","start","push","startHandler","logger","warn","log","setInterval","stopHandler","stop","clearInterval"]}
|
|
1
|
+
{"version":3,"sources":["../../src/actor/Actor.ts","../../src/actor/BalanceActor.ts","../../src/actor/ValidatorActor.ts","../../src/archivists/ChainFinalized/archivist.ts","../../src/archivists/ChainFinalized/local.ts","../../src/archivists/lib/localPersistentArchivist.ts","../../src/archivists/PendingBlocks/archivist.ts","../../src/archivists/PendingBlocks/local.ts","../../src/archivists/RejectedTransactions/archivist.ts","../../src/archivists/RejectedTransactions/local.ts","../../src/archivists/StakeIntentState/archivist.ts","../../src/archivists/StakeIntentState/local.ts","../../src/buildTelemetryConfig.ts","../../src/createDeclarationIntentBlock.ts","../../src/evm/initEvmProvider.ts","../../src/evm/initInfuraProvider.ts","../../src/evm/initChainId.ts","../../src/evm/initJsonRpcProvider.ts","../../src/health/initHealthEndpoints.ts","../../src/host/implementation/DefaultHost.ts","../../src/host/implementation/DefaultServiceProvider.ts","../../src/host/model/ServiceCollection.ts","../../src/init/initBalanceSummaryMap.ts","../../src/init/initBridgedModule.ts","../../src/init/initChainStakeViewer.ts","../../src/init/initFinalizedArchivist.ts","../../src/init/initProducerAccount.ts","../../src/init/initSeedPhrase.ts","../../src/init/initServerNode.ts","../../src/manifest/getLocator.ts","../../src/manifest/loadNode.ts","../../src/manifest/node.json","../../src/manifest/nodeManifest.ts","../../src/manifest/private/index.ts","../../src/manifest/public/Chain.json","../../src/manifest/public/Pending.json","../../src/manifest/public/index.ts","../../src/init/initServerWallet.ts","../../src/init/initStatusReporter.ts","../../src/init/initTransferSummaryMap.ts","../../src/orchestrator/Orchestrator.ts"],"sourcesContent":["import type {\n CreatableInstance, CreatableParams, EmptyObject,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable,\n assertEx,\n Base, creatable, delay, IdLogger,\n} from '@xylabs/sdk-js'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport {\n type BaseContext, type Config,\n getDefaultConfig,\n ProviderFactoryLocator,\n type ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { Semaphore } from 'async-mutex'\n\nexport type ActorContext = BaseContext & {\n config: Config\n locator: ProviderFactoryLocatorInstance\n}\n\nexport type ActorParams<T extends EmptyObject | void = void> = CreatableParams & {\n account: AccountInstance\n context: ActorContext\n displayName?: string\n id: string\n} & (T extends void ? EmptyObject : T)\n\nexport type ActorInstance<T extends ActorParams = ActorParams> = CreatableInstance<T> & {\n start(): Promise<boolean>\n stop(): Promise<boolean>\n}\n\n@creatable()\nexport class Actor<TParams extends ActorParams = ActorParams> extends AbstractCreatable<TParams> {\n protected readonly _intervals: Map<string, ReturnType<typeof setInterval>> = new Map()\n protected readonly _semaphores: Map<string, Semaphore> = new Map()\n protected readonly _timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n private _active = false\n\n get displayName() {\n return this.params.displayName!\n }\n\n get id() {\n return this.params.id\n }\n\n protected get account() {\n return this.params.account!\n }\n\n protected get config() {\n return this.context.config\n }\n\n protected get context() {\n return this.params.context\n }\n\n protected get locator() {\n return this.context.locator\n }\n\n protected get logPrefix() {\n return `[${this.displayName} (${this.id})] `\n }\n\n static override async paramsHandler<T extends ActorParams>(params?: Partial<T>) {\n const baseParams = await super.paramsHandler(params)\n const id = params?.id ?? baseParams.name\n const displayName = params?.displayName ?? baseParams.name\n const account = assertEx(params?.account, () => `Account is required for actor ${id}.`)\n const logger = baseParams.logger ?? new IdLogger(Base.defaultLogger ?? console, () => `[${displayName} (${id})] `)\n const singletons = params?.context?.singletons ?? {}\n const config = params?.context?.config ?? getDefaultConfig()\n const context = params?.context ?? {\n config,\n locator: new ProviderFactoryLocator({\n config, logger, singletons,\n }),\n }\n return {\n ...baseParams, account, context, displayName, id, logger,\n }\n }\n\n /**\n * The timer runs until the actor is deactivated (or you manually stop it).\n */\n registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number) {\n if (!this._active) {\n this.logger?.warn(\n `Cannot register timer '${timerName}' because actor is not active.`,\n )\n return\n }\n\n let running = false\n\n this._semaphores.set(timerName, new Semaphore(1))\n\n const timeoutId = setTimeout(() => {\n const intervalId = setInterval(() => {\n const semaphore = this._semaphores.get(timerName)\n if (!this._active || !this._intervals.has(timerName) || !semaphore || running) return\n if (semaphore.isLocked()) {\n this.logger?.warn(\n `Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`,\n )\n return\n }\n semaphore.acquire().then(([, release]) => {\n const startTime = Date.now()\n running = true\n callback()\n .then(() => {\n const duration = Date.now() - startTime\n if (duration > periodMs) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`,\n )\n } else if (duration > 5000) {\n this.logger?.warn(\n `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`,\n )\n }\n })\n .catch((error) => {\n this.logger?.error(`Error in timer '${this.name}:${timerName}': ${error}`)\n this.logger?.error(error.stack)\n })\n .finally(() => {\n release()\n running = false\n })\n }).catch((error) => {\n this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${error}`)\n })\n }, periodMs)\n\n // store interval so we can clear it on stop()\n this._intervals.set(timerName, intervalId)\n }, dueTimeMs)\n\n // store timeout so we can clear it on stop() if interval hasn't started yet\n this._timeouts.set(timerName, timeoutId)\n\n this.logger?.log(\n `Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`,\n )\n }\n\n /**\n * Called by the Orchestrator when the actor is activated.\n */\n override async startHandler() {\n await super.startHandler()\n this._active = true\n this.logger?.log('Started.')\n }\n\n /**\n * Called by the Orchestrator when the actor is deactivated.\n * Stop all running timers.\n */\n override async stopHandler() {\n await super.stopHandler()\n this._active = false\n this.logger?.log('Stopping all timers...')\n\n // wait for all semaphores to be free and acquire them to prevent new tasks from starting\n await Promise.all(\n [...this._semaphores.values()].map(async (semaphore) => {\n // Wait for any running tasks to complete\n while (semaphore.isLocked()) {\n this.logger?.log('Waiting for running timer task to complete...')\n await delay(500)\n }\n await semaphore.acquire()\n }),\n )\n\n this._semaphores.clear()\n\n for (const [, timeoutRef] of this._timeouts.entries()) {\n clearTimeout(timeoutRef)\n }\n this._timeouts.clear()\n\n for (const [, intervalRef] of this._intervals.entries()) {\n clearInterval(intervalRef)\n }\n this._intervals.clear()\n\n this.logger?.log('Stopped.')\n }\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { Actor, type ActorParams } from './Actor.ts'\n\nexport type BalanceActorParams = ActorParams<\n Pick<ChainServiceCollectionV2, 'balance' | 'blockViewer'>\n & { config: Config }>\n\nexport class BalanceActor extends Actor<BalanceActorParams> {\n protected _updateMutex = new Mutex()\n\n protected get balanceService() {\n return assertEx(this.params.balance, () => 'balanceService not set')\n }\n\n protected get blockViewer() {\n return assertEx(this.params.blockViewer, () => 'blockViewer not set')\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('BalanceTimer', async () => {\n await this.updateBalance()\n }, 1000, 10_000/* 1000 */)\n }\n\n protected async updateBalance(): Promise<void> {\n if (this._updateMutex.isLocked()) return\n await this._updateMutex.runExclusive(async () => {\n const head = await this.blockViewer.currentBlockHash()\n await this.balanceService.accountBalances([], { head })\n })\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { assertEx, creatable } from '@xylabs/sdk-js'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { processPendingBlocks } from '@xyo-network/chain-sdk'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-protocol'\nimport {\n BlockViewer,\n BlockViewerMoniker,\n MempoolViewer, MempoolViewerMoniker,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport { Actor, ActorParams } from './Actor.ts'\n\nexport type ValidatorActorParams = ActorParams<\n {\n account: AccountInstance\n blockViewer?: BlockViewer\n finalizedArchivist: ArchivistInstance\n mempoolViewer?: MempoolViewer\n }>\n\n@creatable()\nexport class ValidatorActor extends Actor<ValidatorActorParams> {\n protected _blockViewer: BlockViewer | undefined\n protected _lastValidatedBlock: BlockBoundWitness | undefined\n protected _lastValidatedBlockHash: Hash | undefined\n protected _mempoolViewer: MempoolViewer | undefined\n\n protected get blockViewer() {\n return this._blockViewer!\n }\n\n protected get finalizedArchivist() {\n return assertEx(this.params.finalizedArchivist, () => 'finalizedArchivist not set')\n }\n\n protected get mempoolViewer() {\n return this._mempoolViewer!\n }\n\n override async createHandler() {\n await super.createHandler()\n\n this._blockViewer = assertEx(\n this.params.blockViewer ?? await this.locator.getInstance<BlockViewer>(BlockViewerMoniker),\n () => 'Unable to locate a BlockViewer',\n )\n\n this._mempoolViewer = assertEx(\n this.params.mempoolViewer ?? await this.locator.getInstance<MempoolViewer>(MempoolViewerMoniker),\n () => 'Unable to locate a MempoolViewer',\n )\n }\n\n override async startHandler(): Promise<void> {\n await super.startHandler()\n this.registerTimer('ValidatorActor', async () => {\n await this.spanAsync('processPendingBlocks', async () => {\n console.log('ValidatorActor: Processing pending blocks...')\n await processPendingBlocks({\n context: this.context,\n logger: this.logger,\n mempoolViewer: this.mempoolViewer,\n blockViewer: this.blockViewer,\n finalizedArchivist: this.finalizedArchivist,\n })\n })\n }, 2000, 1500/* 500 */)\n }\n\n protected async slashInvalidBlock(_block: BlockBoundWitness): Promise<boolean> {\n // TODO: Handle slashing logic\n const slashed = await Promise.resolve(true)\n return slashed\n }\n\n protected async validateBlock(block: BlockBoundWitness): Promise<boolean> {\n // TODO: Validate using validation logic\n const valid = await Promise.resolve(true)\n // Store the last validated block and its hash\n this._lastValidatedBlock = block\n this._lastValidatedBlockHash = await PayloadBuilder.hash(block)\n\n // Return the validation result\n return valid\n }\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalChainFinalizedArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initChainFinalizedArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initChainFinalizedArchivist', context.logger, async () => {\n const local = await startupSpanAsync('ChainFinalizedArchivist:initLocal', () => initLocalChainFinalizedArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { CreatableProviderContext } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalChainFinalizedArchivist: Initializable<CreatableProviderContext, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-finalized-chain', 'chain', 'finalized', root)\n return singleton\n })\n}\n","import { rm } from 'node:fs/promises'\nimport Path from 'node:path'\n\nimport { LmdbArchivist, LmdbArchivistConfigSchema } from '@xyo-network/archivist-lmdb'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { getStoreDirectory, type StoreKind } from '@xyo-network/chain-protocol'\n\nconst DEFAULT_STORAGE_ROOT = Path.join(process.cwd(), '.store')\n\n/**\n * Returns a local persistent archivist\n * @param name The name of the archivist\n * @param dbName The name of the database\n * @param storeName The name of the store\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns an archivist instance\n */\nexport const getLocalPersistentArchivist = (\n name: string,\n dbName: string,\n storeName: string,\n storageRoot?: string,\n kind: StoreKind = 'lmdb',\n): Promise<ArchivistInstance> => {\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n return LmdbArchivist.create({\n account: 'random',\n config: {\n name,\n clearStoreOnStart: false,\n dbName,\n location: getStoreDirectory(dbName, root, 'lmdb'),\n schema: LmdbArchivistConfigSchema,\n storeName,\n },\n })\n }\n }\n}\n\n/**\n * Deletes a local persistent archivist\n * @param dbName The name of the database\n * @param storageRoot The root directory for storage (default is '.store' in the current working directory)\n * @param kind The kind of the archivist\n * @returns A promise that resolves when the archivist is deleted\n */\nexport const deleteLocalPersistentArchivist = async (dbName: string, storageRoot?: string, kind: StoreKind = 'lmdb'): Promise<void> => {\n await Promise.resolve()\n console.warn(`Deleting local persistent archivist for ${dbName} of kind ${kind}.`)\n let location = ''\n switch (kind) {\n case 'lmdb': {\n const root = storageRoot ?? DEFAULT_STORAGE_ROOT\n location = getStoreDirectory(dbName, root, 'lmdb')\n break\n }\n }\n await rm(location, { recursive: true, force: true })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalPendingBlocksArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initPendingBlocksArchivist(context: ChainInitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initPendingBlocksArchivist', context.logger, async () => {\n const local = await startupSpanAsync('PendingBlocksArchivist:initLocal', () => initLocalPendingBlocksArchivist(context))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalPendingBlocksArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-pending-blocks', 'chain', 'pending_block_bundles', root)\n return singleton\n })\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { InitializableParams } from '@xyo-network/xl1-protocol'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport { initLocalRejectedTransactionsArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport async function initRejectedTransactionsArchivist(params: InitializableParams) {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initRejectedTransactionsArchivist', params.logger, async () => {\n const local = await startupSpanAsync('RejectedTransactionsArchivist:initLocal', () => initLocalRejectedTransactionsArchivist(params))\n singleton = local\n return singleton\n }, 2000, true)\n })\n}\n","import { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalRejectedTransactionsArchivist: Initializable<{}, ArchivistInstance> = async (): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n singleton = await MemoryArchivist.create({\n account: 'random',\n config: {\n schema: MemoryArchivistConfigSchema, max: 1000, name: 'localRejectedTransactions',\n },\n })\n return singleton\n })\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { startupSpanAsync } from '@xyo-network/chain-utils'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { timeBudget } from '@xyo-network/xl1-protocol-sdk'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { initLocalStakeIntentStateArchivist } from './local.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initStakeIntentStateArchivist: Initializable<ChainInitializableParams, ArchivistInstance>\n = async (context: ChainInitializableParams): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n return await timeBudget('initStakeIntentStateArchivist', context.logger, async () => {\n const local = await startupSpanAsync('StakeIntentStateArchivist:initLocal', () => initLocalStakeIntentStateArchivist(context))\n singleton = local\n return assertEx(singleton, () => 'StakeIntentStateArchivist is undefined')\n }, 2000, true)\n })\n }\n","import { assertEx } from '@xylabs/sdk-js'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport type { ChainInitializableParams } from '../../ChainInitializableParams.ts'\nimport { getLocalPersistentArchivist } from '../lib/index.ts'\n\nconst mutex = new Mutex()\nlet singleton: ArchivistInstance | undefined\n\nexport const initLocalStakeIntentStateArchivist: Initializable<ChainInitializableParams,\n ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {\n return await mutex.runExclusive(async () => {\n if (singleton) return singleton\n const { root } = config.storage\n singleton = await getLocalPersistentArchivist('local-stake-intent-state', 'stakeIntent', 'state', root)\n return assertEx(singleton, () => new Error('Failed to initialize stake intent state archivist'))\n })\n}\n","import type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport function buildTelemetryConfig(config: Config, serviceName: string, serviceVersion: string) {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9464 } = config.telemetry?.metrics?.scrape ?? {}\n const telemetryConfig = {\n attributes: {\n serviceName,\n serviceVersion,\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n }\n return telemetryConfig\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport { buildNextBlock } from '@xyo-network/chain-sdk'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-protocol'\nimport { createDeclarationIntent } from '@xyo-network/xl1-protocol-sdk'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport type { Provider } from 'ethers'\nimport type { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'\n\nlet provider: Promise<JsonRpcProvider> | undefined\n\nexport const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>; logger?: Logger }): Promise<Provider> => {\n if (provider) return provider\n if (canUseInfuraProvider(config)) {\n provider = initInfuraProvider(config)\n } else if (canUseJsonRpcProvider(config)) {\n provider = initJsonRpcProvider(config)\n }\n return assertEx(await provider, () => 'No provider available')\n}\n\nexport const canUseEvmProvider = ({ config }: { config: Pick<Config, 'evm'> }) => {\n return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = (config: Pick<Config, 'evm'>) => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraProvider(...providerConfig))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Pick<Config, 'evm'>): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Pick<Config, 'evm'>) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import {\n assertEx, hexFrom, isDefined, isHex,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const canUseChainId = (config: Pick<Config, 'evm'>): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Pick<Config, 'evm'>) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n const providerConfig = getJsonRpcProviderConfig(config)\n return Promise.resolve(new JsonRpcProvider(...providerConfig))\n}\n\nexport const canUseJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n return canUseChainId(config)\n && isDefined(config.evm.jsonRpc?.url)\n}\n\nexport const getJsonRpcProviderConfig = (config: Pick<Config, 'evm'>) => {\n const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')\n return [jsonRpcUrl, getChainId(config)] as const\n}\n","import type {\n IncomingMessage, Server, ServerResponse,\n} from 'node:http'\nimport http from 'node:http'\n\nimport type { CreatableStatus, Logger } from '@xylabs/sdk-js'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport type { Config, RuntimeStatusMonitor } from '@xyo-network/xl1-protocol-sdk'\n\nconst sendStatus = (res: ServerResponse, status: CreatableStatus, errorCode: number) => {\n const statusCode = status === 'started' ? 200 : errorCode\n res.writeHead(statusCode, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status }))\n}\n\nconst notFound = (res: ServerResponse) => {\n res.writeHead(404, { 'Content-Type': 'application/json' })\n res.end(JSON.stringify({ status: 'not found' }))\n}\n\n/**\n * Starts an HTTP server with Kubernetes health endpoints:\n * - /healthz\n * - /livez\n * - /readyz\n * @param port The port to listen on (default: 8080)\n */\nconst createHealthServer = (port: number, statusMonitor: RuntimeStatusMonitor, logger: Logger) => {\n const server = http.createServer((req: IncomingMessage, res: ServerResponse) => {\n const url = req.url ?? ''\n\n const status = statusMonitor.getGlobalStatus()\n\n switch (url) {\n case '/healthz': {\n sendStatus(res, status, 500)\n break\n }\n case '/livez': {\n sendStatus(res, status, 503)\n break\n }\n case '/readyz': {\n sendStatus(res, status, 503)\n break\n }\n default: {\n notFound(res)\n }\n }\n })\n\n server.listen(port, () => {\n logger.log(`Health server running on http://localhost:${port}`)\n logger.log(' - /healthz')\n logger.log(' - /livez')\n logger.log(' - /readyz')\n })\n return server\n}\n\nexport const initHealthEndpoints: Initializable<{ config: Config; logger: Logger; statusReporter: RuntimeStatusMonitor }, Server | undefined> = (params) => {\n const {\n config, logger, statusReporter,\n } = params\n const { healthCheckPort } = config.producer\n return isDefined(healthCheckPort) ? createHealthServer(healthCheckPort, statusReporter, logger) : undefined\n}\n","import type { Host, ServiceProvider } from '../model/index.ts'\n\n/**\n * A generic host implementation that can be used as a starting point for\n * more complex host implementations.\n */\nexport class GenericHost implements Host {\n services: ServiceProvider\n\n constructor(services: ServiceProvider) {\n this.services = services\n }\n\n async start(): Promise<void> {\n await Promise.resolve()\n // Initialize or start your services here\n console.log('Host is starting...')\n }\n\n async stop(): Promise<void> {\n await Promise.resolve()\n // Stop or clean up services here\n console.log('Host is stopping...')\n }\n}\n","import type { ServiceProvider } from '../model/index.ts'\n\nexport class DefaultServiceProvider implements ServiceProvider {\n protected _services: Record<string, unknown>\n constructor(services: Record<string, unknown>) {\n this._services = services\n }\n\n getService<T>(serviceIdentifier: string): T | undefined {\n return this._services[serviceIdentifier] as T\n }\n}\n","import type { ServiceProvider } from './ServiceProvider.ts'\n\nexport interface ServiceCollection {\n build(): ServiceProvider\n}\n\n/**\n * Represents the lifetime of a service\n */\nexport const ServiceLifetime = {\n Singleton: 'Singleton',\n Transient: 'Transient',\n} as const\n\n/**\n * Describes a single service registration\n */\nexport interface ServiceDescriptor<T = unknown> {\n identifier: string | symbol\n implementationFactory: () => T\n lifetime: keyof typeof ServiceLifetime\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BalancesStepSummary, MapType } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initBalanceSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<BalancesStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkBalanceSummaryMap = new BaseMongoSdk<WithStorageMeta<BalancesStepSummary>>({ ...payloadSdkConfig, collection: 'balance_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<BalancesStepSummary>>>({\n sdk: sdkBalanceSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for BalanceSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<BalancesStepSummary>>()\n }\n}\n","import type { Address, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; logger?: Logger; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import {\n asAddress,\n assertEx, type Logger, toAddress, toEthAddress,\n} from '@xylabs/sdk-js'\nimport type { EthereumChainStakeEventsParams, EthereumChainStakeViewerParams } from '@xyo-network/chain-sdk'\nimport { EthereumChainStakeEventsViewer, EthereumChainStakeViewer } from '@xyo-network/chain-sdk'\nimport { StakedXyoChainV2__factory } from '@xyo-network/typechain'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport type {\n Config,\n CreatableProviderContext, StakeViewer,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { SimpleStakeViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { canUseEvmProvider, initEvmProvider } from '../evm/index.ts'\n\nexport async function initEvmChainStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {\n const provider = await initEvmProvider({ config, logger })\n const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId\n const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider)\n const stakeEventsViewer = await EthereumChainStakeEventsViewer.create({\n contract, logger, context,\n } satisfies EthereumChainStakeEventsParams)\n assertEx(await stakeEventsViewer.start(), () => 'Failed to start EthereumChainStakeEvents reader')\n const stakeChainViewer = await EthereumChainStakeViewer.create({\n contract, stakeEventsViewer, logger, context,\n } satisfies EthereumChainStakeViewerParams)\n assertEx(await stakeChainViewer.start(), () => 'Failed to start EthereumChainStake viewer')\n return stakeChainViewer\n}\n\nexport async function initSimpleStakeViewer(context: CreatableProviderContext, config: Config, logger?: Logger): Promise<StakeViewer> {\n const stakeViewer = await SimpleStakeViewer.create({\n context,\n chainId: asAddress(toAddress(1n), true),\n logger,\n positions: [],\n })\n assertEx(await stakeViewer.start(), () => 'Failed to start SimpleChainStake viewer')\n return stakeViewer\n}\n\nexport async function initStakeViewer({\n config, logger, context,\n}: {\n config: Config\n context: CreatableProviderContext\n logger?: Logger\n}): Promise<StakeViewer> {\n if (canUseEvmProvider({ config })) {\n return await initEvmChainStakeViewer(context, config, logger)\n } else {\n console.warn('[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.')\n return await initSimpleStakeViewer(context, config, logger)\n }\n}\n","import { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nasync function initMongoFinalizedArchivist(config: Config) {\n const payloadSdkConfig = {\n ...config.storage.mongo,\n collection: 'chain_validated',\n } satisfies MongoDBModuleParamsV2['payloadSdkConfig']\n return await MongoDBArchivistV2.create({ payloadSdkConfig })\n}\n\nexport async function initFinalizedArchivist(config: Config) {\n const finalizedArchivist = await initMongoFinalizedArchivist(config)\n return finalizedArchivist\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-protocol-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>\n = async ({ config, logger }): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.producer.mnemonic\n if (isUndefined(walletPhrase)) {\n logger?.warn('[Producer] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n logger?.warn(`[Producer] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n }\n","import { assertEx, isString } from '@xylabs/sdk-js'\nimport type { BiosExternalInterface } from '@xyo-network/bios-model'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n// TODO: Make nodejs version of bios support round tripping mnemonic between boots\nexport async function initSeedPhrase({\n config, logger, bios,\n}: ConfigContext<{ bios: BiosExternalInterface }>): Promise<string> {\n const storedSeedPhrase = await bios.seedPhraseStore.get('os')\n logger?.debug(`[API] Stored mnemonic: ${storedSeedPhrase}`)\n const { mnemonic } = config.api\n if (isString(storedSeedPhrase) && isString(mnemonic)) {\n logger?.warn('[API] Stored mnemonic does not match supplied. Updating stored mnemonic to supplied.')\n await bios.seedPhraseStore.set('os', mnemonic)\n } else {\n let seedPhrase: string\n if (isString(mnemonic)) {\n seedPhrase = mnemonic\n } else {\n seedPhrase = HDWallet.generateMnemonic()\n logger?.log('[API] No mnemonic provided, using random mnemonic. This is not recommended for production use.')\n logger?.log(`[API] Mnemonic: ${seedPhrase}`)\n }\n await bios.seedPhraseStore.set('os', seedPhrase)\n }\n return assertEx(await bios.seedPhraseStore.get('os'), () => 'Unable to acquire mnemonic from bios')\n}\n","import { assertEx } from '@xylabs/sdk-js'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { loadNode } from '../manifest/index.ts'\n\nasync function writableChainArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n )\n}\n\nasync function readonlyChainArchivistFromNode(node: NodeInstance) {\n return assertEx(asArchivistInstance(\n await node.resolve('Chain:Validated'),\n { required: true },\n ))\n}\n\nasync function pendingTransactionsArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Transactions'),\n { required: true },\n )\n}\n\nasync function pendingBlocksArchivistFromNode(node: NodeInstance) {\n return asArchivistInstance(\n await node.resolve('XYOChain:Pending:Blocks'),\n { required: true },\n )\n}\n\nexport async function initServerNode({\n wallet, logger, config, node: providedNode, transfersSummaryMap, balancesSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n node?: NodeInstance\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) {\n const node: NodeInstance = providedNode ?? await loadNode({\n wallet, logger, config, transfersSummaryMap, balancesSummaryMap,\n })\n assertEx(await node.start(), () => 'Failed to start node')\n const writableChainArchivist = await writableChainArchivistFromNode(node)\n const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)\n const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)\n const pendingBlocksArchivist = await pendingBlocksArchivistFromNode(node)\n return {\n node, writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,\n }\n}\n","import { type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport { isDefined } from '@xylabs/sdk-js'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { MongoDBArchivistV2 } from '@xyo-network/archivist-mongodb'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { initTelemetry } from '@xyo-network/chain-telemetry'\nimport { AbstractModule, LoggerModuleStatusReporter } from '@xyo-network/module-abstract'\nimport { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'\nimport type { MongoDBModuleParamsV2 } from '@xyo-network/module-model-mongodb'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\n/**\n * Used for retrieving a locator with the necessary modules registered for testing\n * operation of the node (entirely in memory)\n * @returns A locator with the necessary modules registered\n */\nexport const getLocator = async ({ config, logger}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n}>) => {\n const { otlpEndpoint } = config.telemetry?.otel ?? {}\n const { path: endpoint = '/metrics', port: port = 9465 } = config.telemetry?.metrics?.scrape ?? {}\n const { traceProvider, meterProvider } = await initTelemetry({\n attributes: {\n serviceName: 'xl1-api',\n serviceVersion: '1.0.0',\n },\n otlpEndpoint,\n metricsConfig: { endpoint, port },\n })\n\n if (isDefined(logger)) AbstractModule.defaultLogger = logger\n const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : undefined\n\n const locator = new ModuleFactoryLocator()\n // If there's a MongoDB configuration\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n const params: Partial<MongoDBModuleParamsV2> = {\n meterProvider, payloadSdkConfig, statusReporter, traceProvider,\n }\n // Register the MongoDB Archivist as the default\n locator.register(MongoDBArchivistV2.factory(params), undefined, true)\n }\n\n locator.register(MemoryArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(MemorySentinel.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n locator.register(ViewArchivist.factory({\n traceProvider, meterProvider, statusReporter,\n }))\n return locator\n}\n","import { ManifestWrapper } from '@xyo-network/manifest-wrapper'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type {\n BalancesStepSummary, MapType, TransfersStepSummary,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { getLocator } from './getLocator.ts'\nimport { NodeManifest } from './nodeManifest.ts'\nimport { PrivateChildManifests } from './private/index.ts'\nimport { PublicChildManifests } from './public/index.ts'\n\n/**\n * Creates a node with the xyo-chain modules registered\n * @returns A node with the xyo-chain modules registered\n */\nexport const loadNode = async ({\n wallet, config, balancesSummaryMap, transfersSummaryMap,\n}: ConfigContext<{\n balancesSummaryMap: MapType<string, WithStorageMeta<BalancesStepSummary>>\n transfersSummaryMap: MapType<string, WithStorageMeta<TransfersStepSummary>>\n wallet: WalletInstance\n}>) => {\n const locator = await getLocator({\n config, balancesSummaryMap, transfersSummaryMap,\n })\n const wrapper = new ManifestWrapper(NodeManifest, wallet, locator, PublicChildManifests, PrivateChildManifests)\n const [node, ...childNodes] = await wrapper.loadNodes()\n if (childNodes?.length > 0) {\n await Promise.all(childNodes.map(childNode => node.register(childNode)))\n await Promise.all(childNodes.map(childNode => node.attach(childNode.address, true)))\n }\n return node\n}\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"44'/60'/1\",\n \"name\": \"XYOChain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": []\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}\n","import type { PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport node from './node.json' with { type: 'json' }\n\n/**\n * Root Node Manifest\n */\nexport const NodeManifest = node as PackageManifestPayload\n","/**\n * Private Child Manifests\n */\nexport const PrivateChildManifests = []\n","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"1\",\n \"name\": \"Chain\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [\n {\n \"config\": {\n \"accountPath\": \"1/1'/1'\",\n \"name\": \"Validated\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"chain_validated\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"1/1/1\",\n \"name\": \"Finalized\",\n \"allowedQueries\": [\n \"network.xyo.query.archivist.get\",\n \"network.xyo.query.archivist.next\"\n ],\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 50000\n },\n \"originArchivist\": \"Validated\",\n \"schema\": \"network.xyo.archivist.view.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","{\n \"$schema\": \"https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json\",\n \"nodes\": [\n {\n \"config\": {\n \"accountPath\": \"2\",\n \"name\": \"Pending\",\n \"schema\": \"network.xyo.node.config\"\n },\n \"modules\": {\n \"private\": [],\n \"public\": [\n {\n \"config\": {\n \"accountPath\": \"2/1/1\",\n \"name\": \"Transactions\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"labels\": {\n \"network.xyo.storage.class\": \"mongodb\"\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_transaction_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n },\n {\n \"config\": {\n \"accountPath\": \"2/1/2\",\n \"name\": \"Blocks\",\n \"getCache\": {\n \"enabled\": true,\n \"maxEntries\": 5000\n },\n \"payloadSdkConfig\": {\n \"collection\": \"pending_block_bundles\"\n },\n \"schema\": \"network.xyo.archivist.config\"\n }\n }\n ]\n }\n }\n ],\n \"schema\": \"network.xyo.manifest\"\n}","import type { ModuleManifest, PackageManifestPayload } from '@xyo-network/manifest-model'\n\nimport Chain from './Chain.json' with { type: 'json' }\nimport Pending from './Pending.json' with { type: 'json' }\n\n/**\n * Chain Node Manifest\n */\nconst ChainNodeManifest = Chain as PackageManifestPayload\n/**\n * Pending Node Manifest\n */\nconst PendingNodeManifest = Pending as PackageManifestPayload\n/**\n * Public Child Manifests\n */\nexport const PublicChildManifests: ModuleManifest[] = [\n ...ChainNodeManifest.nodes,\n ...PendingNodeManifest.nodes,\n]\n","import { isDefined } from '@xylabs/sdk-js'\nimport { boot } from '@xyo-network/bios'\nimport { HDWallet } from '@xyo-network/wallet'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\nimport { initSeedPhrase } from './initSeedPhrase.ts'\n\nexport async function initServerWallet({ config, logger }: ConfigContext) {\n const { mnemonic } = config.api\n const bios = await boot()\n const seedPhrase = isDefined(mnemonic)\n ? mnemonic\n : await initSeedPhrase({\n bios, config, logger,\n })\n return await HDWallet.fromPhrase(seedPhrase)\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { RuntimeStatusMonitor } from '@xyo-network/xl1-protocol-sdk'\n\nexport function initStatusReporter({ logger }: { logger: Logger }) {\n const statusReporter = new RuntimeStatusMonitor(logger)\n statusReporter.onGlobalTransition({ to: 'started' }, () => {\n logger.log('All services started.')\n })\n statusReporter.onGlobalTransition({ to: 'error' }, () => {\n logger.error('Producer encountered an unhandled error!')\n // eslint-disable-next-line unicorn/no-process-exit\n process.exit(1)\n })\n return statusReporter\n}\n","import { BaseMongoSdk, type BaseMongoSdkPrivateConfig } from '@xylabs/mongo'\nimport type { Hash } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport { MongoMap } from '@xyo-network/chain-protocol'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { MapType, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk'\nimport { hasMongoConfig, MemoryMap } from '@xyo-network/xl1-protocol-sdk'\n\nimport type { ConfigContext } from '../ConfigContext.ts'\n\nexport async function initTransferSummaryMap({ config, logger }: ConfigContext): Promise<MapType<string, WithStorageMeta<TransfersStepSummary>>> {\n const mongoConfig = config.storage?.mongo\n if (hasMongoConfig(mongoConfig)) {\n // Create the MongoDB SDK from the configuration\n const {\n connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName,\n } = mongoConfig\n const payloadSdkConfig: BaseMongoSdkPrivateConfig = {\n dbConnectionString, dbDomain, dbName, dbPassword, dbUserName,\n }\n\n const sdkTransferSummaryMap = new BaseMongoSdk<WithStorageMeta<TransfersStepSummary>>({ ...payloadSdkConfig, collection: 'transfer_summary_map' })\n const result = await MongoMap.create<MongoMap<Hash, WithStorageMeta<TransfersStepSummary>>>({\n sdk: sdkTransferSummaryMap,\n getCache: { enabled: true, maxEntries: 5000 },\n })\n assertEx(await result.start(), () => 'Failed to start transfer summary map')\n return result\n } else {\n logger?.warn('[API] Mongo configuration not found. Using MemoryMap for TransferSummaryMap.')\n return new MemoryMap<string, WithStorageMeta<TransfersStepSummary>>()\n }\n}\n","import type { CreatableInstance } from '@xylabs/sdk-js'\nimport { AbstractCreatable, creatable } from '@xylabs/sdk-js'\n\nimport type { ActorInstance } from '../actor/index.ts'\n\nexport interface OrchestratorInstance extends CreatableInstance {\n registerActor(actor: ActorInstance): Promise<void>\n}\n\n@creatable()\nexport class Orchestrator extends AbstractCreatable implements OrchestratorInstance {\n protected actors: ActorInstance[] = []\n protected keepAliveHandle: NodeJS.Timeout | null = null\n protected running = false\n\n /**\n * Registers an actor.\n * (We won't activate the actor until `start()` is called.)\n */\n async registerActor(actor: ActorInstance) {\n if (this.running) {\n // If the orchestrator is already running, activate the actor immediately\n await actor.start()\n }\n this.actors.push(actor)\n }\n\n /**\n * Starts the orchestrator: activates all actors.\n */\n override async startHandler() {\n await super.startHandler()\n if (this.running) {\n this.logger?.warn('[Orchestrator] Already started.')\n return\n }\n\n this.logger?.log('[Orchestrator] Starting...')\n this.running = true\n for (const actor of this.actors) {\n await actor.start()\n }\n // This interval will fire every 24.8 days (2^31 - 1 ms), effectively never finishing\n this.keepAliveHandle = setInterval(() => {\n // No-op\n }, 2_147_483_647)\n }\n\n /**\n * Stops the orchestrator: deactivates all actors.\n */\n override async stopHandler() {\n await super.stopHandler()\n if (!this.running) {\n this.logger?.log('[Orchestrator] Already stopped.')\n return\n }\n\n this.logger?.log('[Orchestrator] Stopping...')\n for (const actor of this.actors) {\n await actor.stop()\n }\n this.running = false\n if (this.keepAliveHandle) clearInterval(this.keepAliveHandle)\n this.logger?.log('[Orchestrator] Stopped...')\n }\n}\n"],"mappings":";;;;AAGA,SACEA,mBACAC,UACAC,MAAMC,WAAWC,OAAOC,gBACnB;AAEP,SAEEC,kBACAC,8BAEK;AACP,SAASC,iBAAiB;;;;;;;;AAoBnB,IAAMC,QAAN,cAA+DC,kBAAAA;SAAAA;;;EACjDC,aAA0D,oBAAIC,IAAAA;EAC9DC,cAAsC,oBAAID,IAAAA;EAC1CE,YAAwD,oBAAIF,IAAAA;EACvEG,UAAU;EAElB,IAAIC,cAAc;AAChB,WAAO,KAAKC,OAAOD;EACrB;EAEA,IAAIE,KAAK;AACP,WAAO,KAAKD,OAAOC;EACrB;EAEA,IAAcC,UAAU;AACtB,WAAO,KAAKF,OAAOE;EACrB;EAEA,IAAcC,SAAS;AACrB,WAAO,KAAKC,QAAQD;EACtB;EAEA,IAAcC,UAAU;AACtB,WAAO,KAAKJ,OAAOI;EACrB;EAEA,IAAcC,UAAU;AACtB,WAAO,KAAKD,QAAQC;EACtB;EAEA,IAAcC,YAAY;AACxB,WAAO,IAAI,KAAKP,WAAW,KAAK,KAAKE,EAAE;EACzC;EAEA,aAAsBM,cAAqCP,QAAqB;AAC9E,UAAMQ,aAAa,MAAM,MAAMD,cAAcP,MAAAA;AAC7C,UAAMC,KAAKD,QAAQC,MAAMO,WAAWC;AACpC,UAAMV,cAAcC,QAAQD,eAAeS,WAAWC;AACtD,UAAMP,UAAUQ,SAASV,QAAQE,SAAS,MAAM,iCAAiCD,EAAAA,GAAK;AACtF,UAAMU,SAASH,WAAWG,UAAU,IAAIC,SAASC,KAAKC,iBAAiBC,SAAS,MAAM,IAAIhB,WAAAA,KAAgBE,EAAAA,KAAO;AACjH,UAAMe,aAAahB,QAAQI,SAASY,cAAc,CAAC;AACnD,UAAMb,SAASH,QAAQI,SAASD,UAAUc,iBAAAA;AAC1C,UAAMb,UAAUJ,QAAQI,WAAW;MACjCD;MACAE,SAAS,IAAIa,uBAAuB;QAClCf;QAAQQ;QAAQK;MAClB,CAAA;IACF;AACA,WAAO;MACL,GAAGR;MAAYN;MAASE;MAASL;MAAaE;MAAIU;IACpD;EACF;;;;EAKAQ,cAAcC,WAAmBC,UAA+BC,WAAmBC,UAAkB;AACnG,QAAI,CAAC,KAAKzB,SAAS;AACjB,WAAKa,QAAQa,KACX,0BAA0BJ,SAAAA,gCAAyC;AAErE;IACF;AAEA,QAAIK,UAAU;AAEd,SAAK7B,YAAY8B,IAAIN,WAAW,IAAIO,UAAU,CAAA,CAAA;AAE9C,UAAMC,YAAYC,WAAW,MAAA;AAC3B,YAAMC,aAAaC,YAAY,MAAA;AAC7B,cAAMC,YAAY,KAAKpC,YAAYqC,IAAIb,SAAAA;AACvC,YAAI,CAAC,KAAKtB,WAAW,CAAC,KAAKJ,WAAWwC,IAAId,SAAAA,KAAc,CAACY,aAAaP,QAAS;AAC/E,YAAIO,UAAUG,SAAQ,GAAI;AACxB,eAAKxB,QAAQa,KACX,mBAAmB,KAAKf,IAAI,IAAIW,SAAAA,0DAAmE;AAErG;QACF;AACAY,kBAAUI,QAAO,EAAGC,KAAK,CAAC,CAAA,EAAGC,OAAAA,MAAQ;AACnC,gBAAMC,YAAYC,KAAKC,IAAG;AAC1BhB,oBAAU;AACVJ,mBAAAA,EACGgB,KAAK,MAAA;AACJ,kBAAMK,WAAWF,KAAKC,IAAG,IAAKF;AAC9B,gBAAIG,WAAWnB,UAAU;AACvB,mBAAKZ,QAAQa,KACX,UAAU,KAAKf,IAAI,IAAIW,SAAAA,4BAAqCsB,QAAAA,wBAAgCnB,QAAAA,MAAc;YAE9G,WAAWmB,WAAW,KAAM;AAC1B,mBAAK/B,QAAQa,KACX,UAAU,KAAKf,IAAI,IAAIW,SAAAA,4BAAqCsB,QAAAA,kBAA0B;YAE1F;UACF,CAAA,EACCC,MAAM,CAACC,UAAAA;AACN,iBAAKjC,QAAQiC,MAAM,mBAAmB,KAAKnC,IAAI,IAAIW,SAAAA,MAAewB,KAAAA,EAAO;AACzE,iBAAKjC,QAAQiC,MAAMA,MAAMC,KAAK;UAChC,CAAA,EACCC,QAAQ,MAAA;AACPR,oBAAAA;AACAb,sBAAU;UACZ,CAAA;QACJ,CAAA,EAAGkB,MAAM,CAACC,UAAAA;AACR,eAAKjC,QAAQiC,MAAM,wCAAwC,KAAKnC,IAAI,IAAIW,SAAAA,MAAewB,KAAAA,EAAO;QAChG,CAAA;MACF,GAAGrB,QAAAA;AAGH,WAAK7B,WAAWgC,IAAIN,WAAWU,UAAAA;IACjC,GAAGR,SAAAA;AAGH,SAAKzB,UAAU6B,IAAIN,WAAWQ,SAAAA;AAE9B,SAAKjB,QAAQoC,IACX,UAAU,KAAKtC,IAAI,IAAIW,SAAAA,kCAA2CE,SAAAA,uBAAgCC,QAAAA,KAAa;EAEnH;;;;EAKA,MAAeyB,eAAe;AAC5B,UAAM,MAAMA,aAAAA;AACZ,SAAKlD,UAAU;AACf,SAAKa,QAAQoC,IAAI,UAAA;EACnB;;;;;EAMA,MAAeE,cAAc;AAC3B,UAAM,MAAMA,YAAAA;AACZ,SAAKnD,UAAU;AACf,SAAKa,QAAQoC,IAAI,wBAAA;AAGjB,UAAMG,QAAQC,IACZ;SAAI,KAAKvD,YAAYwD,OAAM;MAAIC,IAAI,OAAOrB,cAAAA;AAExC,aAAOA,UAAUG,SAAQ,GAAI;AAC3B,aAAKxB,QAAQoC,IAAI,+CAAA;AACjB,cAAMO,MAAM,GAAA;MACd;AACA,YAAMtB,UAAUI,QAAO;IACzB,CAAA,CAAA;AAGF,SAAKxC,YAAY2D,MAAK;AAEtB,eAAW,CAAA,EAAGC,UAAAA,KAAe,KAAK3D,UAAU4D,QAAO,GAAI;AACrDC,mBAAaF,UAAAA;IACf;AACA,SAAK3D,UAAU0D,MAAK;AAEpB,eAAW,CAAA,EAAGI,WAAAA,KAAgB,KAAKjE,WAAW+D,QAAO,GAAI;AACvDG,oBAAcD,WAAAA;IAChB;AACA,SAAKjE,WAAW6D,MAAK;AAErB,SAAK5C,QAAQoC,IAAI,UAAA;EACnB;AACF;;;;;;ACtMA,SAASc,YAAAA,iBAAgB;AAEzB,SAASC,aAAa;AAQf,IAAMC,eAAN,cAA2BC,MAAAA;EAVlC,OAUkCA;;;EACtBC,eAAe,IAAIC,MAAAA;EAE7B,IAAcC,iBAAiB;AAC7B,WAAOC,UAAS,KAAKC,OAAOC,SAAS,MAAM,wBAAA;EAC7C;EAEA,IAAcC,cAAc;AAC1B,WAAOH,UAAS,KAAKC,OAAOE,aAAa,MAAM,qBAAA;EACjD;EAEA,MAAeC,eAA8B;AAC3C,UAAM,MAAMA,aAAAA;AACZ,SAAKC;MAAc;MAAgB,YAAA;AACjC,cAAM,KAAKC,cAAa;MAC1B;MAAG;MAAM;;IAAc;EACzB;EAEA,MAAgBA,gBAA+B;AAC7C,QAAI,KAAKT,aAAaU,SAAQ,EAAI;AAClC,UAAM,KAAKV,aAAaW,aAAa,YAAA;AACnC,YAAMC,OAAO,MAAM,KAAKN,YAAYO,iBAAgB;AACpD,YAAM,KAAKX,eAAeY,gBAAgB,CAAA,GAAI;QAAEF;MAAK,CAAA;IACvD,CAAA;EACF;AACF;;;AClCA,SAASG,YAAAA,WAAUC,aAAAA,kBAAiB;AAGpC,SAASC,4BAA4B;AACrC,SAASC,sBAAsB;AAE/B,SAEEC,oBACeC,4BACV;;;;;;;;AAaA,IAAMC,iBAAN,cAA6BC,MAAAA;SAAAA;;;EACxBC;EACAC;EACAC;EACAC;EAEV,IAAcC,cAAc;AAC1B,WAAO,KAAKJ;EACd;EAEA,IAAcK,qBAAqB;AACjC,WAAOC,UAAS,KAAKC,OAAOF,oBAAoB,MAAM,4BAAA;EACxD;EAEA,IAAcG,gBAAgB;AAC5B,WAAO,KAAKL;EACd;EAEA,MAAeM,gBAAgB;AAC7B,UAAM,MAAMA,cAAAA;AAEZ,SAAKT,eAAeM,UAClB,KAAKC,OAAOH,eAAe,MAAM,KAAKM,QAAQC,YAAyBC,kBAAAA,GACvE,MAAM,gCAAA;AAGR,SAAKT,iBAAiBG,UACpB,KAAKC,OAAOC,iBAAiB,MAAM,KAAKE,QAAQC,YAA2BE,oBAAAA,GAC3E,MAAM,kCAAA;EAEV;EAEA,MAAeC,eAA8B;AAC3C,UAAM,MAAMA,aAAAA;AACZ,SAAKC;MAAc;MAAkB,YAAA;AACnC,cAAM,KAAKC,UAAU,wBAAwB,YAAA;AAC3CC,kBAAQC,IAAI,8CAAA;AACZ,gBAAMC,qBAAqB;YACzBC,SAAS,KAAKA;YACdC,QAAQ,KAAKA;YACbb,eAAe,KAAKA;YACpBJ,aAAa,KAAKA;YAClBC,oBAAoB,KAAKA;UAC3B,CAAA;QACF,CAAA;MACF;MAAG;MAAM;;IAAW;EACtB;EAEA,MAAgBiB,kBAAkBC,QAA6C;AAE7E,UAAMC,UAAU,MAAMC,QAAQC,QAAQ,IAAA;AACtC,WAAOF;EACT;EAEA,MAAgBG,cAAcC,OAA4C;AAExE,UAAMC,QAAQ,MAAMJ,QAAQC,QAAQ,IAAA;AAEpC,SAAKzB,sBAAsB2B;AAC3B,SAAK1B,0BAA0B,MAAM4B,eAAeC,KAAKH,KAAAA;AAGzD,WAAOC;EACT;AACF;;;;;;ACvFA,SAASG,wBAAwB;AACjC,SAASC,kBAAkB;AAC3B,SAASC,SAAAA,cAAa;;;ACAtB,SAASC,SAAAA,cAAa;;;ACHtB,SAASC,UAAU;AACnB,OAAOC,UAAU;AAEjB,SAASC,eAAeC,iCAAiC;AAEzD,SAASC,yBAAyC;AAElD,IAAMC,uBAAuBC,KAAKC,KAAKC,QAAQC,IAAG,GAAI,QAAA;AAW/C,IAAMC,8BAA8B,wBACzCC,MACAC,QACAC,WACAC,aACAC,OAAkB,WAAM;AAExB,UAAQA,MAAAA;IACN,KAAK,QAAQ;AACX,YAAMC,OAAOF,eAAeT;AAC5B,aAAOY,cAAcC,OAAO;QAC1BC,SAAS;QACTC,QAAQ;UACNT;UACAU,mBAAmB;UACnBT;UACAU,UAAUC,kBAAkBX,QAAQI,MAAM,MAAA;UAC1CQ,QAAQC;UACRZ;QACF;MACF,CAAA;IACF;EACF;AACF,GAvB2C;;;ADX3C,IAAMa,QAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEG,IAAMC,mCAA+F,8BAAO,EAAEC,OAAM,MAAE;AAC3H,SAAO,MAAMJ,MAAMK,aAAa,YAAA;AAC9B,QAAIH,UAAW,QAAOA;AACtB,UAAM,EAAEI,KAAI,IAAKF,OAAOG;AACxBL,gBAAY,MAAMM,4BAA4B,yBAAyB,SAAS,aAAaF,IAAAA;AAC7F,WAAOJ;EACT,CAAA;AACF,GAP4G;;;ADF5G,IAAMO,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEJ,eAAsBC,4BAA4BC,SAAiC;AACjF,SAAO,MAAMJ,OAAMK,aAAa,YAAA;AAC9B,QAAIH,WAAW,QAAOA;AACtB,WAAO,MAAMI,WAAW,+BAA+BF,QAAQG,QAAQ,YAAA;AACrE,YAAMC,QAAQ,MAAMC,iBAAiB,qCAAqC,MAAMC,iCAAiCN,OAAAA,CAAAA;AACjHF,MAAAA,aAAYM;AACZ,aAAON;IACT,GAAG,KAAM,IAAA;EACX,CAAA;AACF;AATsBC;;;AGVtB,SAASQ,oBAAAA,yBAAwB;AACjC,SAASC,cAAAA,mBAAkB;AAC3B,SAASC,SAAAA,cAAa;;;ACAtB,SAASC,SAAAA,cAAa;AAItB,IAAMC,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEG,IAAMC,kCAAwF,8BAAO,EAAEC,OAAM,MAAE;AACpH,SAAO,MAAMJ,OAAMK,aAAa,YAAA;AAC9B,QAAIH,WAAW,QAAOA;AACtB,UAAM,EAAEI,KAAI,IAAKF,OAAOG;AACxBL,IAAAA,aAAY,MAAMM,4BAA4B,wBAAwB,SAAS,yBAAyBF,IAAAA;AACxG,WAAOJ;EACT,CAAA;AACF,GAPqG;;;ADFrG,IAAMO,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEJ,eAAsBC,2BAA2BC,SAAiC;AAChF,SAAO,MAAMJ,OAAMK,aAAa,YAAA;AAC9B,QAAIH,WAAW,QAAOA;AACtB,WAAO,MAAMI,YAAW,8BAA8BF,QAAQG,QAAQ,YAAA;AACpE,YAAMC,QAAQ,MAAMC,kBAAiB,oCAAoC,MAAMC,gCAAgCN,OAAAA,CAAAA;AAC/GF,MAAAA,aAAYM;AACZ,aAAON;IACT,GAAG,KAAM,IAAA;EACX,CAAA;AACF;AATsBC;;;AEVtB,SAASQ,oBAAAA,yBAAwB;AAEjC,SAASC,cAAAA,mBAAkB;AAC3B,SAASC,SAAAA,cAAa;;;ACJtB,SAASC,iBAAiBC,mCAAmC;AAG7D,SAASC,SAAAA,cAAa;AAEtB,IAAMC,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEG,IAAMC,yCAA+E,mCAAA;AAC1F,SAAO,MAAMH,OAAMI,aAAa,YAAA;AAC9B,QAAIF,WAAW,QAAOA;AACtBA,IAAAA,aAAY,MAAMG,gBAAgBC,OAAO;MACvCC,SAAS;MACTC,QAAQ;QACNC,QAAQC;QAA6BC,KAAK;QAAMC,MAAM;MACxD;IACF,CAAA;AACA,WAAOV;EACT,CAAA;AACF,GAX4F;;;ADA5F,IAAMW,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEJ,eAAsBC,kCAAkCC,QAA2B;AACjF,SAAO,MAAMJ,OAAMK,aAAa,YAAA;AAC9B,QAAIH,WAAW,QAAOA;AACtB,WAAO,MAAMI,YAAW,qCAAqCF,OAAOG,QAAQ,YAAA;AAC1E,YAAMC,QAAQ,MAAMC,kBAAiB,2CAA2C,MAAMC,uCAAuCN,MAAAA,CAAAA;AAC7HF,MAAAA,aAAYM;AACZ,aAAON;IACT,GAAG,KAAM,IAAA;EACX,CAAA;AACF;AATsBC;;;AEXtB,SAASQ,YAAAA,iBAAgB;AAEzB,SAASC,oBAAAA,yBAAwB;AAEjC,SAASC,cAAAA,mBAAkB;AAC3B,SAASC,SAAAA,cAAa;;;ACLtB,SAASC,YAAAA,iBAAgB;AAGzB,SAASC,SAAAA,cAAa;AAKtB,IAAMC,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEG,IAAMC,qCACU,8BAAO,EAAEC,OAAM,MAAE;AACtC,SAAO,MAAMJ,OAAMK,aAAa,YAAA;AAC9B,QAAIH,WAAW,QAAOA;AACtB,UAAM,EAAEI,KAAI,IAAKF,OAAOG;AACxBL,IAAAA,aAAY,MAAMM,4BAA4B,4BAA4B,eAAe,SAASF,IAAAA;AAClG,WAAOG,UAASP,YAAW,MAAM,IAAIQ,MAAM,mDAAA,CAAA;EAC7C,CAAA;AACF,GAPuB;;;ADFvB,IAAMC,SAAQ,IAAIC,OAAAA;AAClB,IAAIC;AAEG,IAAMC,gCACT,8BAAOC,YAAAA;AACP,SAAO,MAAMJ,OAAMK,aAAa,YAAA;AAC9B,QAAIH,WAAW,QAAOA;AACtB,WAAO,MAAMI,YAAW,iCAAiCF,QAAQG,QAAQ,YAAA;AACvE,YAAMC,QAAQ,MAAMC,kBAAiB,uCAAuC,MAAMC,mCAAmCN,OAAAA,CAAAA;AACrHF,MAAAA,aAAYM;AACZ,aAAOG,UAAST,YAAW,MAAM,wCAAA;IACnC,GAAG,KAAM,IAAA;EACX,CAAA;AACF,GATE;;;AEZG,SAASU,qBAAqBC,QAAgBC,aAAqBC,gBAAsB;AAC9F,QAAM,EAAEC,aAAY,IAAKH,OAAOI,WAAWC,QAAQ,CAAC;AACpD,QAAM,EAAEC,MAAMC,WAAW,YAAYC,OAAa,KAAI,IAAKR,OAAOI,WAAWK,SAASC,UAAU,CAAC;AACjG,QAAMC,kBAAkB;IACtBC,YAAY;MACVX;MACAC;IACF;IACAC;IACAU,eAAe;MAAEN;MAAUC;IAAK;EAClC;AACA,SAAOG;AACT;AAZgBZ;;;ACDhB,SAASe,sBAAsB;AAG/B,SAASC,+BAA+B;AAExC,eAAsBC,oCAAoCC,WAA4CC,iBAAkCC,OAAoB;AAC1J,QAAMC,6BAA6BC,wBACjCH,gBAAgBI,SAChB,YACAH,MAAM,CAAA,GACNA,MAAM,CAAA,CAAE;AAEV,SAAO,MAAMI,eACXN,WACA,CAAA,GACA;IAACG;KACD;IAACF;GAAgB;AAErB;AAbsBF;;;ACLtB,SAASQ,YAAAA,iBAAgB;;;ACDzB,SAASC,YAAAA,WAAUC,aAAAA,kBAAiB;AAEpC,SAASC,sBAAsB;;;ACF/B,SACEC,YAAAA,WAAUC,SAASC,WAAWC,aACzB;AAGA,IAAMC,gBAAgB,wBAACC,WAAAA;AAC5B,SAAOC,UAAUD,OAAOE,IAAIC,OAAO;AACrC,GAF6B;AAItB,IAAMC,aAAa,wBAACJ,WAAAA;AACzB,QAAMG,UAAUE,UAASL,OAAOE,IAAIC,SAAS,MAAM,4BAAA;AACnD,MAAIG,MAAMH,SAAS;IAAEI,QAAQ;EAAK,CAAA,GAAI;AACpC,UAAMC,MAAMC,QAAQN,OAAAA;AACpB,UAAMO,SAASC,OAAOC,SAASJ,KAAK,EAAA;AACpC,WAAOE;EACT,OAAO;AACL,UAAMA,SAASC,OAAOC,SAAST,SAAS,EAAA;AACxC,WAAOO;EACT;AACF,GAV0B;;;ADH1B,IAAIG;AAEG,IAAMC,qBAAqB,wBAACC,WAAAA;AACjC,MAAIF,SAAU,QAAOA;AACrB,QAAMG,iBAAiBC,wBAAwBF,MAAAA;AAC/CF,aAAWK,QAAQC,QAAQ,IAAIC,eAAAA,GAAkBJ,cAAAA,CAAAA;AACjD,SAAOH;AACT,GALkC;AAO3B,IAAMQ,uBAAuB,wBAACN,WAAAA;AACnC,SAAOO,cAAcP,MAAAA,KAChBQ,WAAUR,OAAOS,KAAKC,QAAQC,SAAAA,KAC9BH,WAAUR,OAAOS,KAAKC,QAAQE,aAAAA;AACrC,GAJoC;AAM7B,IAAMV,0BAA0B,wBAACF,WAAAA;AACtC,QAAMW,YAAYE,UAASb,OAAOS,KAAKC,QAAQC,WAAW,MAAM,qCAAA;AAChE,QAAMC,gBAAgBC,UAASb,OAAOS,KAAKC,QAAQE,eAAe,MAAM,yCAAA;AACxE,SAAO;IAACE,WAAWd,MAAAA;IAASW;IAAWC;;AACzC,GAJuC;;;AErBvC,SAASG,YAAAA,WAAUC,aAAAA,kBAAiB;AAEpC,SAASC,uBAAuB;AAIzB,IAAMC,sBAAsB,wBAACC,WAAAA;AAClC,QAAMC,iBAAiBC,yBAAyBF,MAAAA;AAChD,SAAOG,QAAQC,QAAQ,IAAIC,gBAAAA,GAAmBJ,cAAAA,CAAAA;AAChD,GAHmC;AAK5B,IAAMK,wBAAwB,wBAACN,WAAAA;AACpC,SAAOO,cAAcP,MAAAA,KAChBQ,WAAUR,OAAOS,IAAIC,SAASC,GAAAA;AACrC,GAHqC;AAK9B,IAAMT,2BAA2B,wBAACF,WAAAA;AACvC,QAAMY,aAAaC,UAASb,OAAOS,IAAIC,SAASC,KAAK,MAAM,gCAAA;AAC3D,SAAO;IAACC;IAAYE,WAAWd,MAAAA;;AACjC,GAHwC;;;AHPxC,IAAIe;AAEG,IAAMC,kBAAkB,8BAAO,EAAEC,OAAM,MAAoD;AAChG,MAAIF,SAAU,QAAOA;AACrB,MAAIG,qBAAqBD,MAAAA,GAAS;AAChCF,eAAWI,mBAAmBF,MAAAA;EAChC,WAAWG,sBAAsBH,MAAAA,GAAS;AACxCF,eAAWM,oBAAoBJ,MAAAA;EACjC;AACA,SAAOK,UAAS,MAAMP,UAAU,MAAM,uBAAA;AACxC,GAR+B;AAUxB,IAAMQ,oBAAoB,wBAAC,EAAEN,OAAM,MAAmC;AAC3E,SAAOC,qBAAqBD,MAAAA,KAAWG,sBAAsBH,MAAAA;AAC/D,GAFiC;;;AIlBjC,OAAOO,UAAU;AAGjB,SAASC,aAAAA,kBAAiB;AAI1B,IAAMC,aAAa,wBAACC,KAAqBC,QAAyBC,cAAAA;AAChE,QAAMC,aAAaF,WAAW,YAAY,MAAMC;AAChDF,MAAII,UAAUD,YAAY;IAAE,gBAAgB;EAAmB,CAAA;AAC/DH,MAAIK,IAAIC,KAAKC,UAAU;IAAEN;EAAO,CAAA,CAAA;AAClC,GAJmB;AAMnB,IAAMO,WAAW,wBAACR,QAAAA;AAChBA,MAAII,UAAU,KAAK;IAAE,gBAAgB;EAAmB,CAAA;AACxDJ,MAAIK,IAAIC,KAAKC,UAAU;IAAEN,QAAQ;EAAY,CAAA,CAAA;AAC/C,GAHiB;AAYjB,IAAMQ,qBAAqB,wBAACC,MAAcC,eAAqCC,WAAAA;AAC7E,QAAMC,SAASC,KAAKC,aAAa,CAACC,KAAsBhB,QAAAA;AACtD,UAAMiB,MAAMD,IAAIC,OAAO;AAEvB,UAAMhB,SAASU,cAAcO,gBAAe;AAE5C,YAAQD,KAAAA;MACN,KAAK,YAAY;AACflB,mBAAWC,KAAKC,QAAQ,GAAA;AACxB;MACF;MACA,KAAK,UAAU;AACbF,mBAAWC,KAAKC,QAAQ,GAAA;AACxB;MACF;MACA,KAAK,WAAW;AACdF,mBAAWC,KAAKC,QAAQ,GAAA;AACxB;MACF;MACA,SAAS;AACPO,iBAASR,GAAAA;MACX;IACF;EACF,CAAA;AAEAa,SAAOM,OAAOT,MAAM,MAAA;AAClBE,WAAOQ,IAAI,6CAA6CV,IAAAA,EAAM;AAC9DE,WAAOQ,IAAI,aAAA;AACXR,WAAOQ,IAAI,WAAA;AACXR,WAAOQ,IAAI,YAAA;EACb,CAAA;AACA,SAAOP;AACT,GAhC2B;AAkCpB,IAAMQ,sBAAmI,wBAACC,WAAAA;AAC/I,QAAM,EACJC,QAAQX,QAAQY,eAAc,IAC5BF;AACJ,QAAM,EAAEG,gBAAe,IAAKF,OAAOG;AACnC,SAAOC,WAAUF,eAAAA,IAAmBhB,mBAAmBgB,iBAAiBD,gBAAgBZ,MAAAA,IAAUgB;AACpG,GANgJ;;;ACxDzI,IAAMC,cAAN,MAAMA;EAJb,OAIaA;;;EACXC;EAEA,YAAYA,UAA2B;AACrC,SAAKA,WAAWA;EAClB;EAEA,MAAMC,QAAuB;AAC3B,UAAMC,QAAQC,QAAO;AAErBC,YAAQC,IAAI,qBAAA;EACd;EAEA,MAAMC,OAAsB;AAC1B,UAAMJ,QAAQC,QAAO;AAErBC,YAAQC,IAAI,qBAAA;EACd;AACF;;;ACtBO,IAAME,yBAAN,MAAMA;EAAb,OAAaA;;;EACDC;EACV,YAAYC,UAAmC;AAC7C,SAAKD,YAAYC;EACnB;EAEAC,WAAcC,mBAA0C;AACtD,WAAO,KAAKH,UAAUG,iBAAAA;EACxB;AACF;;;ACFO,IAAMC,kBAAkB;EAC7BC,WAAW;EACXC,WAAW;AACb;;;ACZA,SAASC,oBAAoD;AAE7D,SAASC,YAAAA,kBAAgB;AACzB,SAASC,gBAAgB;AAGzB,SAASC,gBAAgBC,iBAAiB;AAI1C,eAAsBC,sBAAsB,EAAEC,QAAQC,OAAM,GAAiB;AAC3E,QAAMC,cAAcF,OAAOG,SAASC;AACpC,MAAIC,eAAeH,WAAAA,GAAc;AAE/B,UAAM,EACJI,kBAAkBC,oBAAoBC,UAAUC,QAAQC,QAAQC,UAAUC,UAAUC,YAAYC,UAAUC,WAAU,IAClHb;AACJ,UAAMc,mBAA8C;MAClDT;MAAoBI;MAAUF;MAAQI;MAAYE;IACpD;AAEA,UAAME,uBAAuB,IAAIC,aAAmD;MAAE,GAAGF;MAAkBG,YAAY;IAAsB,CAAA;AAC7I,UAAMC,SAAS,MAAMC,SAASC,OAA6D;MACzFC,KAAKN;MACLO,UAAU;QAAEC,SAAS;QAAMC,YAAY;MAAK;IAC9C,CAAA;AACAC,IAAAA,WAAS,MAAMP,OAAOQ,MAAK,GAAI,MAAM,sCAAA;AACrC,WAAOR;EACT,OAAO;AACLnB,YAAQ4B,KAAK,6EAAA;AACb,WAAO,IAAIC,UAAAA;EACb;AACF;AAtBsB/B;;;ACTtB,SAASgC,YAAAA,kBAAgB;AAEzB,SAASC,qCAAqC;AAG9C,SAASC,kCAAkC;AAE3C,SAASC,SAAAA,eAAa;AAEtB,IAAMC,YAAY,IAAIC,QAAAA;AAGtB,IAAMC,0BAAmD,CAAC;AAEnD,IAAMC,oBAET,8BAAO,EAAEC,QAAQC,WAAU,MAAE;AAC/B,SAAO,MAAML,UAAUM,aAAa,YAAA;AAClC,UAAMC,WAAWL,0BAA0BE,OAAOI,OAAO,IAAIH,UAAAA;AAC7D,QAAIE,SAAU,QAAOA;AACrB,UAAME,MAAMC,WAAS,MAAMN,OAAOO,QAAQN,UAAAA,GAAa,MAAM,qBAAqBA,UAAAA,EAAY;AAC9F,UAAMO,iBAAiBF,WAASG,2BAA2BJ,GAAAA,GAAM,MAAM,qBAAqBJ,UAAAA,gCAA0C;AAEtI,QAAIS,YAAYZ,wBAAwBE,OAAOI,OAAO;AACtD,QAAIM,cAAcC,QAAW;AAC3BD,kBAAY,CAAC;AACbZ,8BAAwBE,OAAOI,OAAO,IAAIM;IAC5C;AAEAA,cAAUT,UAAAA,IAAcO;AACxB,WAAOA;EACT,CAAA;AACF,GAhBI;AAkBG,IAAMI,6BAET,8BAAO,EAAEZ,QAAQC,WAAU,MAAE;AAC/B,SAAOK,WACLO,8BAA8B,MAAMd,kBAAkB;IAAEC;IAAQC;EAAW,CAAA,CAAA,GAC3E,MAAM,qBAAqBA,UAAAA,mCAA6C;AAE5E,GALI;;;ACrCJ,SACEa,WACAC,YAAAA,YAAuBC,WAAWC,oBAC7B;AAEP,SAASC,gCAAgCC,gCAAgC;AACzE,SAASC,iCAAiC;AAM1C,SAASC,yBAAyB;AAIlC,eAAsBC,wBAAwBC,SAAmCC,QAAgBC,QAAe;AAC9G,QAAMC,YAAW,MAAMC,gBAAgB;IAAEH;IAAQC;EAAO,CAAA;AACxD,QAAMG,kBAAkBC,WAASL,OAAOM,MAAMC,IAAI,MAAM,4BAAA;AACxD,QAAMC,WAAWC,0BAA0BC,QAAQC,aAAaP,eAAAA,GAAkBF,SAAAA;AAClF,QAAMU,oBAAoB,MAAMC,+BAA+BC,OAAO;IACpEN;IAAUP;IAAQF;EACpB,CAAA;AACAM,EAAAA,WAAS,MAAMO,kBAAkBG,MAAK,GAAI,MAAM,iDAAA;AAChD,QAAMC,mBAAmB,MAAMC,yBAAyBH,OAAO;IAC7DN;IAAUI;IAAmBX;IAAQF;EACvC,CAAA;AACAM,EAAAA,WAAS,MAAMW,iBAAiBD,MAAK,GAAI,MAAM,2CAAA;AAC/C,SAAOC;AACT;AAbsBlB;AAetB,eAAsBoB,sBAAsBnB,SAAmCC,QAAgBC,QAAe;AAC5G,QAAMkB,cAAc,MAAMC,kBAAkBN,OAAO;IACjDf;IACAsB,SAASC,UAAUC,UAAU,EAAE,GAAG,IAAA;IAClCtB;IACAuB,WAAW,CAAA;EACb,CAAA;AACAnB,EAAAA,WAAS,MAAMc,YAAYJ,MAAK,GAAI,MAAM,yCAAA;AAC1C,SAAOI;AACT;AATsBD;AAWtB,eAAsBO,gBAAgB,EACpCzB,QAAQC,QAAQF,QAAO,GAKxB;AACC,MAAI2B,kBAAkB;IAAE1B;EAAO,CAAA,GAAI;AACjC,WAAO,MAAMF,wBAAwBC,SAASC,QAAQC,MAAAA;EACxD,OAAO;AACL0B,YAAQC,KAAK,qIAAA;AACb,WAAO,MAAMV,sBAAsBnB,SAASC,QAAQC,MAAAA;EACtD;AACF;AAbsBwB;;;AC1CtB,SAASI,0BAA0B;AAInC,eAAeC,4BAA4BC,QAAc;AACvD,QAAMC,mBAAmB;IACvB,GAAGD,OAAOE,QAAQC;IAClBC,YAAY;EACd;AACA,SAAO,MAAMC,mBAAmBC,OAAO;IAAEL;EAAiB,CAAA;AAC5D;AANeF;AAQf,eAAsBQ,uBAAuBP,QAAc;AACzD,QAAMQ,qBAAqB,MAAMT,4BAA4BC,MAAAA;AAC7D,SAAOQ;AACT;AAHsBD;;;ACXtB,SAASE,mBAAmB;AAC5B,SAASC,gBAAgB;AAIzB,SAASC,eAAeC,uCAAuC;AAE/D,IAAIC;AAEG,IAAMC,sBACT,8BAAO,EAAEC,QAAQC,OAAM,MAAE;AACzB,MAAIH,wBAAyB,QAAOA;AACpC,MAAII,eAAeF,OAAOG,SAASC;AACnC,MAAIC,YAAYH,YAAAA,GAAe;AAC7BD,YAAQK,KAAK,0CAAA;AACb,UAAMC,iBAAiBC,SAASC,iBAAgB;AAChDR,YAAQK,KAAK;;EAEjBC,cAAAA;;KAEG;AACCL,mBAAeK;EACjB;AACA,QAAMG,SAAS,MAAMC,gCAAgCT,YAAAA;AACrD,QAAMU,UAAU,MAAMF,OAAOG,WAAWC,cAAcC,GAAG;AACzDjB,4BAA0Bc;AAC1B,SAAOd;AACT,GAjBE;;;ACXJ,SAASkB,YAAAA,YAAUC,gBAAgB;AAEnC,SAASC,YAAAA,iBAAgB;AAKzB,eAAsBC,eAAe,EACnCC,QAAQC,QAAQC,KAAI,GAC2B;AAC/C,QAAMC,mBAAmB,MAAMD,KAAKE,gBAAgBC,IAAI,IAAA;AACxDJ,UAAQK,MAAM,0BAA0BH,gBAAAA,EAAkB;AAC1D,QAAM,EAAEI,SAAQ,IAAKP,OAAOQ;AAC5B,MAAIC,SAASN,gBAAAA,KAAqBM,SAASF,QAAAA,GAAW;AACpDN,YAAQS,KAAK,sFAAA;AACb,UAAMR,KAAKE,gBAAgBO,IAAI,MAAMJ,QAAAA;EACvC,OAAO;AACL,QAAIK;AACJ,QAAIH,SAASF,QAAAA,GAAW;AACtBK,mBAAaL;IACf,OAAO;AACLK,mBAAaC,UAASC,iBAAgB;AACtCb,cAAQc,IAAI,gGAAA;AACZd,cAAQc,IAAI,mBAAmBH,UAAAA,EAAY;IAC7C;AACA,UAAMV,KAAKE,gBAAgBO,IAAI,MAAMC,UAAAA;EACvC;AACA,SAAOI,WAAS,MAAMd,KAAKE,gBAAgBC,IAAI,IAAA,GAAO,MAAM,sCAAA;AAC9D;AArBsBN;;;ACPtB,SAASkB,YAAAA,kBAAgB;AACzB,SAASC,2BAA2B;;;ACApC,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,mBAAAA,wBAAuB;AAChC,SAASC,sBAAAA,2BAA0B;AACnC,SAASC,qBAAqB;AAC9B,SAASC,qBAAqB;AAC9B,SAASC,gBAAgBC,kCAAkC;AAC3D,SAASC,4BAA4B;AAGrC,SAASC,sBAAsB;AAI/B,SAASC,kBAAAA,uBAAsB;AASxB,IAAMC,aAAa,8BAAO,EAAEC,QAAQC,OAAM,MAG/C;AACA,QAAM,EAAEC,aAAY,IAAKF,OAAOG,WAAWC,QAAQ,CAAC;AACpD,QAAM,EAAEC,MAAMC,WAAW,YAAYC,OAAa,KAAI,IAAKP,OAAOG,WAAWK,SAASC,UAAU,CAAC;AACjG,QAAM,EAAEC,eAAeC,cAAa,IAAK,MAAMC,cAAc;IAC3DC,YAAY;MACVC,aAAa;MACbC,gBAAgB;IAClB;IACAb;IACAc,eAAe;MAAEV;MAAUC;IAAK;EAClC,CAAA;AAEA,MAAIU,WAAUhB,MAAAA,EAASiB,gBAAeC,gBAAgBlB;AACtD,QAAMmB,iBAAiBnB,SAAS,IAAIoB,2BAA2BpB,MAAAA,IAAUqB;AAEzE,QAAMC,UAAU,IAAIC,qBAAAA;AAEpB,QAAMC,cAAczB,OAAO0B,SAASC;AACpC,MAAIC,gBAAeH,WAAAA,GAAc;AAE/B,UAAM,EACJI,kBAAkBC,oBAAoBC,UAAUC,QAAQC,QAAQC,UAAUC,UAAUC,YAAYC,UAAUC,WAAU,IAClHb;AACJ,UAAMc,mBAA8C;MAClDT;MAAoBI;MAAUF;MAAQI;MAAYE;IACpD;AACA,UAAME,SAAyC;MAC7C7B;MAAe4B;MAAkBnB;MAAgBV;IACnD;AAEAa,YAAQkB,SAASC,oBAAmBC,QAAQH,MAAAA,GAASlB,QAAW,IAAA;EAClE;AAEAC,UAAQkB,SAASG,iBAAgBD,QAAQ;IACvCjC;IAAeC;IAAeS;EAChC,CAAA,CAAA;AACAG,UAAQkB,SAASI,eAAeF,QAAQ;IACtCjC;IAAeC;IAAeS;EAChC,CAAA,CAAA;AACAG,UAAQkB,SAASK,cAAcH,QAAQ;IACrCjC;IAAeC;IAAeS;EAChC,CAAA,CAAA;AACA,SAAOG;AACT,GA9C0B;;;ACvB1B,SAASwB,uBAAuB;;;ACAhC;AAAA,EACE,SAAW;AAAA,EACX,OAAS;AAAA,IACP;AAAA,MACE,QAAU;AAAA,QACR,aAAe;AAAA,QACf,MAAQ;AAAA,QACR,QAAU;AAAA,MACZ;AAAA,MACA,SAAW;AAAA,QACT,SAAW,CAAC;AAAA,QACZ,QAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAU;AACZ;;;ACTO,IAAMC,eAAeC;;;ACJrB,IAAMC,wBAAwB,CAAA;;;ACHrC;AAAA,EACE,SAAW;AAAA,EACX,OAAS;AAAA,IACP;AAAA,MACE,QAAU;AAAA,QACR,aAAe;AAAA,QACf,MAAQ;AAAA,QACR,QAAU;AAAA,MACZ;AAAA,MACA,SAAW;AAAA,QACT,SAAW;AAAA,UACT;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,UAAY;AAAA,gBACV,SAAW;AAAA,gBACX,YAAc;AAAA,cAChB;AAAA,cACA,kBAAoB;AAAA,gBAClB,YAAc;AAAA,cAChB;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAU;AAAA,UACR;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,gBAAkB;AAAA,gBAChB;AAAA,gBACA;AAAA,cACF;AAAA,cACA,UAAY;AAAA,gBACV,SAAW;AAAA,gBACX,YAAc;AAAA,cAChB;AAAA,cACA,iBAAmB;AAAA,cACnB,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAU;AACZ;;;AChDA;AAAA,EACE,SAAW;AAAA,EACX,OAAS;AAAA,IACP;AAAA,MACE,QAAU;AAAA,QACR,aAAe;AAAA,QACf,MAAQ;AAAA,QACR,QAAU;AAAA,MACZ;AAAA,MACA,SAAW;AAAA,QACT,SAAW,CAAC;AAAA,QACZ,QAAU;AAAA,UACR;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,UAAY;AAAA,gBACV,SAAW;AAAA,gBACX,YAAc;AAAA,cAChB;AAAA,cACA,QAAU;AAAA,gBACR,6BAA6B;AAAA,cAC/B;AAAA,cACA,kBAAoB;AAAA,gBAClB,YAAc;AAAA,cAChB;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAU;AAAA,cACR,aAAe;AAAA,cACf,MAAQ;AAAA,cACR,UAAY;AAAA,gBACV,SAAW;AAAA,gBACX,YAAc;AAAA,cAChB;AAAA,cACA,kBAAoB;AAAA,gBAClB,YAAc;AAAA,cAChB;AAAA,cACA,QAAU;AAAA,YACZ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,QAAU;AACZ;;;ACxCA,IAAMC,oBAAoBC;AAI1B,IAAMC,sBAAsBC;AAIrB,IAAMC,uBAAyC;KACjDJ,kBAAkBK;KAClBH,oBAAoBG;;;;ANDlB,IAAMC,WAAW,8BAAO,EAC7BC,QAAQC,QAAQC,oBAAoBC,oBAAmB,MAKvD;AACA,QAAMC,UAAU,MAAMC,WAAW;IAC/BJ;IAAQC;IAAoBC;EAC9B,CAAA;AACA,QAAMG,UAAU,IAAIC,gBAAgBC,cAAcR,QAAQI,SAASK,sBAAsBC,qBAAAA;AACzF,QAAM,CAACC,MAAM,GAAGC,UAAAA,IAAc,MAAMN,QAAQO,UAAS;AACrD,MAAID,YAAYE,SAAS,GAAG;AAC1B,UAAMC,QAAQC,IAAIJ,WAAWK,IAAIC,CAAAA,cAAaP,KAAKQ,SAASD,SAAAA,CAAAA,CAAAA;AAC5D,UAAMH,QAAQC,IAAIJ,WAAWK,IAAIC,CAAAA,cAAaP,KAAKS,OAAOF,UAAUG,SAAS,IAAA,CAAA,CAAA;EAC/E;AACA,SAAOV;AACT,GAjBwB;;;AFLxB,eAAeW,+BAA+BC,MAAkB;AAC9D,SAAOC,oBACL,MAAMD,KAAKE,QAAQ,iBAAA,GACnB;IAAEC,UAAU;EAAK,CAAA;AAErB;AALeJ;AAOf,eAAeK,+BAA+BJ,MAAkB;AAC9D,SAAOK,WAASJ,oBACd,MAAMD,KAAKE,QAAQ,iBAAA,GACnB;IAAEC,UAAU;EAAK,CAAA,CAAA;AAErB;AALeC;AAOf,eAAeE,qCAAqCN,MAAkB;AACpE,SAAOC,oBACL,MAAMD,KAAKE,QAAQ,+BAAA,GACnB;IAAEC,UAAU;EAAK,CAAA;AAErB;AALeG;AAOf,eAAeC,+BAA+BP,MAAkB;AAC9D,SAAOC,oBACL,MAAMD,KAAKE,QAAQ,yBAAA,GACnB;IAAEC,UAAU;EAAK,CAAA;AAErB;AALeI;AAOf,eAAsBC,eAAe,EACnCC,QAAQC,QAAQC,QAAQX,MAAMY,cAAcC,qBAAqBC,mBAAkB,GAMnF;AACA,QAAMd,OAAqBY,gBAAgB,MAAMG,SAAS;IACxDN;IAAQC;IAAQC;IAAQE;IAAqBC;EAC/C,CAAA;AACAT,EAAAA,WAAS,MAAML,KAAKgB,MAAK,GAAI,MAAM,sBAAA;AACnC,QAAMC,yBAAyB,MAAMlB,+BAA+BC,IAAAA;AACpE,QAAMkB,yBAAyB,MAAMd,+BAA+BJ,IAAAA;AACpE,QAAMmB,+BAA+B,MAAMb,qCAAqCN,IAAAA;AAChF,QAAMoB,yBAAyB,MAAMb,+BAA+BP,IAAAA;AACpE,SAAO;IACLA;IAAMiB;IAAwBC;IAAwBC;IAA8BC;EACtF;AACF;AAnBsBZ;;;ASxCtB,SAASa,aAAAA,kBAAiB;AAC1B,SAASC,YAAY;AACrB,SAASC,YAAAA,iBAAgB;AAKzB,eAAsBC,iBAAiB,EAAEC,QAAQC,OAAM,GAAiB;AACtE,QAAM,EAAEC,SAAQ,IAAKF,OAAOG;AAC5B,QAAMC,OAAO,MAAMC,KAAAA;AACnB,QAAMC,aAAaC,WAAUL,QAAAA,IACzBA,WACA,MAAMM,eAAe;IACnBJ;IAAMJ;IAAQC;EAChB,CAAA;AACJ,SAAO,MAAMQ,UAASC,WAAWJ,UAAAA;AACnC;AATsBP;;;ACNtB,SAASY,4BAA4B;AAE9B,SAASC,mBAAmB,EAAEC,OAAM,GAAsB;AAC/D,QAAMC,iBAAiB,IAAIC,qBAAqBF,MAAAA;AAChDC,iBAAeE,mBAAmB;IAAEC,IAAI;EAAU,GAAG,MAAA;AACnDJ,WAAOK,IAAI,uBAAA;EACb,CAAA;AACAJ,iBAAeE,mBAAmB;IAAEC,IAAI;EAAQ,GAAG,MAAA;AACjDJ,WAAOM,MAAM,0CAAA;AAEbC,YAAQC,KAAK,CAAA;EACf,CAAA;AACA,SAAOP;AACT;AAXgBF;;;ACHhB,SAASU,gBAAAA,qBAAoD;AAE7D,SAASC,YAAAA,kBAAgB;AACzB,SAASC,YAAAA,iBAAgB;AAGzB,SAASC,kBAAAA,iBAAgBC,aAAAA,kBAAiB;AAI1C,eAAsBC,uBAAuB,EAAEC,QAAQC,OAAM,GAAiB;AAC5E,QAAMC,cAAcF,OAAOG,SAASC;AACpC,MAAIC,gBAAeH,WAAAA,GAAc;AAE/B,UAAM,EACJI,kBAAkBC,oBAAoBC,UAAUC,QAAQC,QAAQC,UAAUC,UAAUC,YAAYC,UAAUC,WAAU,IAClHb;AACJ,UAAMc,mBAA8C;MAClDT;MAAoBI;MAAUF;MAAQI;MAAYE;IACpD;AAEA,UAAME,wBAAwB,IAAIC,cAAoD;MAAE,GAAGF;MAAkBG,YAAY;IAAuB,CAAA;AAChJ,UAAMC,SAAS,MAAMC,UAASC,OAA8D;MAC1FC,KAAKN;MACLO,UAAU;QAAEC,SAAS;QAAMC,YAAY;MAAK;IAC9C,CAAA;AACAC,IAAAA,WAAS,MAAMP,OAAOQ,MAAK,GAAI,MAAM,sCAAA;AACrC,WAAOR;EACT,OAAO;AACLnB,YAAQ4B,KAAK,8EAAA;AACb,WAAO,IAAIC,WAAAA;EACb;AACF;AAtBsB/B;;;ACTtB,SAASgC,qBAAAA,oBAAmBC,aAAAA,kBAAiB;;;;;;;;AAStC,IAAMC,eAAN,cAA2BC,mBAAAA;SAAAA;;;EACtBC,SAA0B,CAAA;EAC1BC,kBAAyC;EACzCC,UAAU;;;;;EAMpB,MAAMC,cAAcC,OAAsB;AACxC,QAAI,KAAKF,SAAS;AAEhB,YAAME,MAAMC,MAAK;IACnB;AACA,SAAKL,OAAOM,KAAKF,KAAAA;EACnB;;;;EAKA,MAAeG,eAAe;AAC5B,UAAM,MAAMA,aAAAA;AACZ,QAAI,KAAKL,SAAS;AAChB,WAAKM,QAAQC,KAAK,iCAAA;AAClB;IACF;AAEA,SAAKD,QAAQE,IAAI,4BAAA;AACjB,SAAKR,UAAU;AACf,eAAWE,SAAS,KAAKJ,QAAQ;AAC/B,YAAMI,MAAMC,MAAK;IACnB;AAEA,SAAKJ,kBAAkBU,YAAY,MAAA;IAEnC,GAAG,UAAA;EACL;;;;EAKA,MAAeC,cAAc;AAC3B,UAAM,MAAMA,YAAAA;AACZ,QAAI,CAAC,KAAKV,SAAS;AACjB,WAAKM,QAAQE,IAAI,iCAAA;AACjB;IACF;AAEA,SAAKF,QAAQE,IAAI,4BAAA;AACjB,eAAWN,SAAS,KAAKJ,QAAQ;AAC/B,YAAMI,MAAMS,KAAI;IAClB;AACA,SAAKX,UAAU;AACf,QAAI,KAAKD,gBAAiBa,eAAc,KAAKb,eAAe;AAC5D,SAAKO,QAAQE,IAAI,2BAAA;EACnB;AACF;;;;","names":["AbstractCreatable","assertEx","Base","creatable","delay","IdLogger","getDefaultConfig","ProviderFactoryLocator","Semaphore","Actor","AbstractCreatable","_intervals","Map","_semaphores","_timeouts","_active","displayName","params","id","account","config","context","locator","logPrefix","paramsHandler","baseParams","name","assertEx","logger","IdLogger","Base","defaultLogger","console","singletons","getDefaultConfig","ProviderFactoryLocator","registerTimer","timerName","callback","dueTimeMs","periodMs","warn","running","set","Semaphore","timeoutId","setTimeout","intervalId","setInterval","semaphore","get","has","isLocked","acquire","then","release","startTime","Date","now","duration","catch","error","stack","finally","log","startHandler","stopHandler","Promise","all","values","map","delay","clear","timeoutRef","entries","clearTimeout","intervalRef","clearInterval","assertEx","Mutex","BalanceActor","Actor","_updateMutex","Mutex","balanceService","assertEx","params","balance","blockViewer","startHandler","registerTimer","updateBalance","isLocked","runExclusive","head","currentBlockHash","accountBalances","assertEx","creatable","processPendingBlocks","PayloadBuilder","BlockViewerMoniker","MempoolViewerMoniker","ValidatorActor","Actor","_blockViewer","_lastValidatedBlock","_lastValidatedBlockHash","_mempoolViewer","blockViewer","finalizedArchivist","assertEx","params","mempoolViewer","createHandler","locator","getInstance","BlockViewerMoniker","MempoolViewerMoniker","startHandler","registerTimer","spanAsync","console","log","processPendingBlocks","context","logger","slashInvalidBlock","_block","slashed","Promise","resolve","validateBlock","block","valid","PayloadBuilder","hash","startupSpanAsync","timeBudget","Mutex","Mutex","rm","Path","LmdbArchivist","LmdbArchivistConfigSchema","getStoreDirectory","DEFAULT_STORAGE_ROOT","Path","join","process","cwd","getLocalPersistentArchivist","name","dbName","storeName","storageRoot","kind","root","LmdbArchivist","create","account","config","clearStoreOnStart","location","getStoreDirectory","schema","LmdbArchivistConfigSchema","mutex","Mutex","singleton","initLocalChainFinalizedArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initChainFinalizedArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalChainFinalizedArchivist","startupSpanAsync","timeBudget","Mutex","Mutex","mutex","Mutex","singleton","initLocalPendingBlocksArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","mutex","Mutex","singleton","initPendingBlocksArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalPendingBlocksArchivist","startupSpanAsync","timeBudget","Mutex","MemoryArchivist","MemoryArchivistConfigSchema","Mutex","mutex","Mutex","singleton","initLocalRejectedTransactionsArchivist","runExclusive","MemoryArchivist","create","account","config","schema","MemoryArchivistConfigSchema","max","name","mutex","Mutex","singleton","initRejectedTransactionsArchivist","params","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalRejectedTransactionsArchivist","assertEx","startupSpanAsync","timeBudget","Mutex","assertEx","Mutex","mutex","Mutex","singleton","initLocalStakeIntentStateArchivist","config","runExclusive","root","storage","getLocalPersistentArchivist","assertEx","Error","mutex","Mutex","singleton","initStakeIntentStateArchivist","context","runExclusive","timeBudget","logger","local","startupSpanAsync","initLocalStakeIntentStateArchivist","assertEx","buildTelemetryConfig","config","serviceName","serviceVersion","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","telemetryConfig","attributes","metricsConfig","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","assertEx","assertEx","isDefined","InfuraProvider","assertEx","hexFrom","isDefined","isHex","canUseChainId","config","isDefined","evm","chainId","getChainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","isDefined","evm","infura","projectId","projectSecret","assertEx","getChainId","assertEx","isDefined","JsonRpcProvider","initJsonRpcProvider","config","providerConfig","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","isDefined","evm","jsonRpc","url","jsonRpcUrl","assertEx","getChainId","provider","initEvmProvider","config","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","http","isDefined","sendStatus","res","status","errorCode","statusCode","writeHead","end","JSON","stringify","notFound","createHealthServer","port","statusMonitor","logger","server","http","createServer","req","url","getGlobalStatus","listen","log","initHealthEndpoints","params","config","statusReporter","healthCheckPort","producer","isDefined","undefined","GenericHost","services","start","Promise","resolve","console","log","stop","DefaultServiceProvider","_services","services","getService","serviceIdentifier","ServiceLifetime","Singleton","Transient","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initBalanceSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkBalanceSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","asAddress","assertEx","toAddress","toEthAddress","EthereumChainStakeEventsViewer","EthereumChainStakeViewer","StakedXyoChainV2__factory","SimpleStakeViewer","initEvmChainStakeViewer","context","config","logger","provider","initEvmProvider","contractAddress","assertEx","chain","id","contract","StakedXyoChainV2__factory","connect","toEthAddress","stakeEventsViewer","EthereumChainStakeEventsViewer","create","start","stakeChainViewer","EthereumChainStakeViewer","initSimpleStakeViewer","stakeViewer","SimpleStakeViewer","chainId","asAddress","toAddress","positions","initStakeViewer","canUseEvmProvider","console","warn","MongoDBArchivistV2","initMongoFinalizedArchivist","config","payloadSdkConfig","storage","mongo","collection","MongoDBArchivistV2","create","initFinalizedArchivist","finalizedArchivist","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","initProducerAccount","config","logger","walletPhrase","producer","mnemonic","isUndefined","warn","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO","assertEx","isString","HDWallet","initSeedPhrase","config","logger","bios","storedSeedPhrase","seedPhraseStore","get","debug","mnemonic","api","isString","warn","set","seedPhrase","HDWallet","generateMnemonic","log","assertEx","assertEx","asArchivistInstance","isDefined","MemoryArchivist","MongoDBArchivistV2","ViewArchivist","initTelemetry","AbstractModule","LoggerModuleStatusReporter","ModuleFactoryLocator","MemorySentinel","hasMongoConfig","getLocator","config","logger","otlpEndpoint","telemetry","otel","path","endpoint","port","metrics","scrape","traceProvider","meterProvider","initTelemetry","attributes","serviceName","serviceVersion","metricsConfig","isDefined","AbstractModule","defaultLogger","statusReporter","LoggerModuleStatusReporter","undefined","locator","ModuleFactoryLocator","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","params","register","MongoDBArchivistV2","factory","MemoryArchivist","MemorySentinel","ViewArchivist","ManifestWrapper","NodeManifest","node","PrivateChildManifests","ChainNodeManifest","Chain","PendingNodeManifest","Pending","PublicChildManifests","nodes","loadNode","wallet","config","balancesSummaryMap","transfersSummaryMap","locator","getLocator","wrapper","ManifestWrapper","NodeManifest","PublicChildManifests","PrivateChildManifests","node","childNodes","loadNodes","length","Promise","all","map","childNode","register","attach","address","writableChainArchivistFromNode","node","asArchivistInstance","resolve","required","readonlyChainArchivistFromNode","assertEx","pendingTransactionsArchivistFromNode","pendingBlocksArchivistFromNode","initServerNode","wallet","logger","config","providedNode","transfersSummaryMap","balancesSummaryMap","loadNode","start","writableChainArchivist","readonlyChainArchivist","pendingTransactionsArchivist","pendingBlocksArchivist","isDefined","boot","HDWallet","initServerWallet","config","logger","mnemonic","api","bios","boot","seedPhrase","isDefined","initSeedPhrase","HDWallet","fromPhrase","RuntimeStatusMonitor","initStatusReporter","logger","statusReporter","RuntimeStatusMonitor","onGlobalTransition","to","log","error","process","exit","BaseMongoSdk","assertEx","MongoMap","hasMongoConfig","MemoryMap","initTransferSummaryMap","config","logger","mongoConfig","storage","mongo","hasMongoConfig","connectionString","dbConnectionString","database","dbName","domain","dbDomain","password","dbPassword","username","dbUserName","payloadSdkConfig","sdkTransferSummaryMap","BaseMongoSdk","collection","result","MongoMap","create","sdk","getCache","enabled","maxEntries","assertEx","start","warn","MemoryMap","AbstractCreatable","creatable","Orchestrator","AbstractCreatable","actors","keepAliveHandle","running","registerActor","actor","start","push","startHandler","logger","warn","log","setInterval","stopHandler","stop","clearInterval"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initServerNode.d.ts","sourceRoot":"","sources":["../../../src/init/initServerNode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,mBAAmB,EAAE,OAAO,EAAE,oBAAoB,EACnD,MAAM,+BAA+B,CAAA;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA+BxD,wBAAsB,cAAc,CAAC,EACnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,GACpF,EAAE,aAAa,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACzE,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAC3E,MAAM,EAAE,cAAc,CAAA;CACvB,CAAC;;;;;;
|
|
1
|
+
{"version":3,"file":"initServerNode.d.ts","sourceRoot":"","sources":["../../../src/init/initServerNode.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EACV,mBAAmB,EAAE,OAAO,EAAE,oBAAoB,EACnD,MAAM,+BAA+B,CAAA;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA+BxD,wBAAsB,cAAc,CAAC,EACnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,GACpF,EAAE,aAAa,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAA;IACzE,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAA;IAC3E,MAAM,EAAE,cAAc,CAAA;CACvB,CAAC;;;;;;GAYD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/chain-orchestration",
|
|
4
|
-
"version": "1.18.0
|
|
4
|
+
"version": "1.18.0",
|
|
5
5
|
"description": "XYO Layer One SDK Orchestration",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
"@xyo-network/archivist-view": "~5.2.17",
|
|
49
49
|
"@xyo-network/bios": "~7.2.0",
|
|
50
50
|
"@xyo-network/bridge-model": "~5.2.17",
|
|
51
|
-
"@xyo-network/chain-protocol": "~1.18.0
|
|
52
|
-
"@xyo-network/chain-sdk": "~1.18.0
|
|
53
|
-
"@xyo-network/chain-telemetry": "~1.18.0
|
|
54
|
-
"@xyo-network/chain-utils": "~1.18.0
|
|
51
|
+
"@xyo-network/chain-protocol": "~1.18.0",
|
|
52
|
+
"@xyo-network/chain-sdk": "~1.18.0",
|
|
53
|
+
"@xyo-network/chain-telemetry": "~1.18.0",
|
|
54
|
+
"@xyo-network/chain-utils": "~1.18.0",
|
|
55
55
|
"@xyo-network/manifest-wrapper": "~5.2.17",
|
|
56
56
|
"@xyo-network/module-abstract": "~5.2.17",
|
|
57
57
|
"@xyo-network/module-factory-locator": "~5.2.17",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@xyo-network/typechain": "~4.0.11",
|
|
62
62
|
"@xyo-network/wallet": "~5.2.17",
|
|
63
63
|
"@xyo-network/xl1-protocol": "~1.14.17",
|
|
64
|
-
"@xyo-network/xl1-protocol-sdk": "~1.18.0
|
|
64
|
+
"@xyo-network/xl1-protocol-sdk": "~1.18.0",
|
|
65
65
|
"async-mutex": "~0.5.0",
|
|
66
66
|
"ethers": "^6.16.0"
|
|
67
67
|
},
|
|
@@ -87,6 +87,5 @@
|
|
|
87
87
|
"engineStrict": true,
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "restricted"
|
|
90
|
-
}
|
|
91
|
-
"stableVersion": "1.17.7"
|
|
90
|
+
}
|
|
92
91
|
}
|
package/src/actor/Actor.ts
CHANGED
|
@@ -71,17 +71,18 @@ export class Actor<TParams extends ActorParams = ActorParams> extends AbstractCr
|
|
|
71
71
|
const baseParams = await super.paramsHandler(params)
|
|
72
72
|
const id = params?.id ?? baseParams.name
|
|
73
73
|
const displayName = params?.displayName ?? baseParams.name
|
|
74
|
+
const account = assertEx(params?.account, () => `Account is required for actor ${id}.`)
|
|
75
|
+
const logger = baseParams.logger ?? new IdLogger(Base.defaultLogger ?? console, () => `[${displayName} (${id})] `)
|
|
74
76
|
const singletons = params?.context?.singletons ?? {}
|
|
77
|
+
const config = params?.context?.config ?? getDefaultConfig()
|
|
78
|
+
const context = params?.context ?? {
|
|
79
|
+
config,
|
|
80
|
+
locator: new ProviderFactoryLocator({
|
|
81
|
+
config, logger, singletons,
|
|
82
|
+
}),
|
|
83
|
+
}
|
|
75
84
|
return {
|
|
76
|
-
...baseParams,
|
|
77
|
-
account: assertEx(params?.account, () => `Account is required for actor ${id}.`),
|
|
78
|
-
context: params?.context ?? {
|
|
79
|
-
config: getDefaultConfig(),
|
|
80
|
-
locator: new ProviderFactoryLocator({ config: getDefaultConfig(), singletons }),
|
|
81
|
-
},
|
|
82
|
-
displayName,
|
|
83
|
-
id,
|
|
84
|
-
logger: baseParams.logger ?? new IdLogger(Base.defaultLogger ?? console, () => `[${displayName} (${id})] `),
|
|
85
|
+
...baseParams, account, context, displayName, id, logger,
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
|
|
@@ -30,7 +30,7 @@ export class BalanceActor extends Actor<BalanceActorParams> {
|
|
|
30
30
|
if (this._updateMutex.isLocked()) return
|
|
31
31
|
await this._updateMutex.runExclusive(async () => {
|
|
32
32
|
const head = await this.blockViewer.currentBlockHash()
|
|
33
|
-
await this.balanceService.accountBalances([], head)
|
|
33
|
+
await this.balanceService.accountBalances([], { head })
|
|
34
34
|
})
|
|
35
35
|
}
|
|
36
36
|
}
|
package/src/archivists/index.ts
CHANGED
|
@@ -49,6 +49,7 @@ export async function initServerNode({
|
|
|
49
49
|
const node: NodeInstance = providedNode ?? await loadNode({
|
|
50
50
|
wallet, logger, config, transfersSummaryMap, balancesSummaryMap,
|
|
51
51
|
})
|
|
52
|
+
assertEx(await node.start(), () => 'Failed to start node')
|
|
52
53
|
const writableChainArchivist = await writableChainArchivistFromNode(node)
|
|
53
54
|
const readonlyChainArchivist = await readonlyChainArchivistFromNode(node)
|
|
54
55
|
const pendingTransactionsArchivist = await pendingTransactionsArchivistFromNode(node)
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
2
|
-
import type { ChainInitializableParams } from '../../ChainInitializableParams.ts';
|
|
3
|
-
export declare function initPendingTransactionsArchivist(context: ChainInitializableParams): Promise<ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, import("@xyo-network/payload-model").Payload>>;
|
|
4
|
-
//# sourceMappingURL=archivist.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archivist.d.ts","sourceRoot":"","sources":["../../../../src/archivists/PendingTransactions/archivist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAMjF,wBAAsB,gCAAgC,CAAC,OAAO,EAAE,wBAAwB,kTASvF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/archivists/PendingTransactions/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ArchivistInstance } from '@xyo-network/archivist-model';
|
|
2
|
-
import type { Initializable } from '@xyo-network/xl1-protocol';
|
|
3
|
-
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
4
|
-
export declare const initLocalPendingTransactionsArchivist: Initializable<{
|
|
5
|
-
config: Config;
|
|
6
|
-
}, ArchivistInstance>;
|
|
7
|
-
//# sourceMappingURL=local.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/archivists/PendingTransactions/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAQ3D,eAAO,MAAM,qCAAqC,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,iBAAiB,CAOtG,CAAA"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
2
|
-
import { startupSpanAsync } from '@xyo-network/chain-utils'
|
|
3
|
-
import { timeBudget } from '@xyo-network/xl1-protocol-sdk'
|
|
4
|
-
import { Mutex } from 'async-mutex'
|
|
5
|
-
|
|
6
|
-
import type { ChainInitializableParams } from '../../ChainInitializableParams.ts'
|
|
7
|
-
import { initLocalPendingTransactionsArchivist } from './local.ts'
|
|
8
|
-
|
|
9
|
-
const mutex = new Mutex()
|
|
10
|
-
let singleton: ArchivistInstance | undefined
|
|
11
|
-
|
|
12
|
-
export async function initPendingTransactionsArchivist(context: ChainInitializableParams) {
|
|
13
|
-
return await mutex.runExclusive(async () => {
|
|
14
|
-
if (singleton) return singleton
|
|
15
|
-
return await timeBudget('initPendingTransactionsArchivist', context.logger, async () => {
|
|
16
|
-
const local = await startupSpanAsync('PendingTransactionsArchivist:initLocal', () => initLocalPendingTransactionsArchivist(context))
|
|
17
|
-
singleton = local
|
|
18
|
-
return singleton
|
|
19
|
-
}, 2000, true)
|
|
20
|
-
})
|
|
21
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './archivist.ts'
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { ArchivistInstance } from '@xyo-network/archivist-model'
|
|
2
|
-
import type { Initializable } from '@xyo-network/xl1-protocol'
|
|
3
|
-
import type { Config } from '@xyo-network/xl1-protocol-sdk'
|
|
4
|
-
import { Mutex } from 'async-mutex'
|
|
5
|
-
|
|
6
|
-
import { getLocalPersistentArchivist } from '../lib/index.ts'
|
|
7
|
-
|
|
8
|
-
const mutex = new Mutex()
|
|
9
|
-
let singleton: ArchivistInstance | undefined
|
|
10
|
-
|
|
11
|
-
export const initLocalPendingTransactionsArchivist: Initializable<{ config: Config }, ArchivistInstance> = async ({ config }): Promise<ArchivistInstance> => {
|
|
12
|
-
return await mutex.runExclusive(async () => {
|
|
13
|
-
if (singleton) return singleton
|
|
14
|
-
const { root } = config.storage
|
|
15
|
-
singleton = await getLocalPersistentArchivist('local-pending-transactions', 'chain', 'pending_transaction_bundles', root)
|
|
16
|
-
return singleton
|
|
17
|
-
})
|
|
18
|
-
}
|