@psavelis/enterprise-blockchain 0.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -2
- package/dist/aid-settlement/application/reconciler.d.ts +13 -0
- package/dist/aid-settlement/application/reconciler.d.ts.map +1 -0
- package/dist/aid-settlement/application/reconciler.js +77 -0
- package/dist/aid-settlement/domain/entities.d.ts +24 -0
- package/dist/aid-settlement/domain/entities.d.ts.map +1 -0
- package/dist/aid-settlement/domain/entities.js +1 -0
- package/dist/aid-settlement/domain/ports.d.ts +10 -0
- package/dist/aid-settlement/domain/ports.d.ts.map +1 -0
- package/dist/aid-settlement/domain/ports.js +1 -0
- package/dist/aid-settlement/index.d.ts +19 -0
- package/dist/aid-settlement/index.d.ts.map +1 -0
- package/dist/aid-settlement/index.js +23 -0
- package/dist/aid-settlement/infrastructure/in-memory-store.d.ts +12 -0
- package/dist/aid-settlement/infrastructure/in-memory-store.d.ts.map +1 -0
- package/dist/aid-settlement/infrastructure/in-memory-store.js +17 -0
- package/dist/credentialing/application/clearance-evaluator.d.ts +10 -0
- package/dist/credentialing/application/clearance-evaluator.d.ts.map +1 -0
- package/dist/credentialing/application/clearance-evaluator.js +63 -0
- package/dist/credentialing/domain/entities.d.ts +28 -0
- package/dist/credentialing/domain/entities.d.ts.map +1 -0
- package/dist/credentialing/domain/entities.js +1 -0
- package/dist/credentialing/domain/ports.d.ts +9 -0
- package/dist/credentialing/domain/ports.d.ts.map +1 -0
- package/dist/credentialing/domain/ports.js +1 -0
- package/dist/credentialing/index.d.ts +19 -0
- package/dist/credentialing/index.d.ts.map +1 -0
- package/dist/credentialing/index.js +23 -0
- package/dist/credentialing/infrastructure/in-memory-store.d.ts +11 -0
- package/dist/credentialing/infrastructure/in-memory-store.d.ts.map +1 -0
- package/dist/credentialing/infrastructure/in-memory-store.js +14 -0
- package/dist/hsm/application/asymmetric-key-service.d.ts +23 -0
- package/dist/hsm/application/asymmetric-key-service.d.ts.map +1 -0
- package/dist/hsm/application/asymmetric-key-service.js +109 -0
- package/dist/hsm/application/envelope-encryption-service.d.ts +18 -0
- package/dist/hsm/application/envelope-encryption-service.d.ts.map +1 -0
- package/dist/hsm/application/envelope-encryption-service.js +59 -0
- package/dist/hsm/application/symmetric-key-service.d.ts +34 -0
- package/dist/hsm/application/symmetric-key-service.d.ts.map +1 -0
- package/dist/hsm/application/symmetric-key-service.js +107 -0
- package/dist/hsm/domain/entities.d.ts +104 -0
- package/dist/hsm/domain/entities.d.ts.map +1 -0
- package/dist/hsm/domain/entities.js +10 -0
- package/dist/hsm/domain/ports.d.ts +20 -0
- package/dist/hsm/domain/ports.d.ts.map +1 -0
- package/dist/hsm/domain/ports.js +1 -0
- package/dist/hsm/index.d.ts +48 -0
- package/dist/hsm/index.d.ts.map +1 -0
- package/dist/hsm/index.js +97 -0
- package/dist/hsm/infrastructure/audit-log-factory.d.ts +59 -0
- package/dist/hsm/infrastructure/audit-log-factory.d.ts.map +1 -0
- package/dist/hsm/infrastructure/audit-log-factory.js +95 -0
- package/dist/hsm/infrastructure/audit-log.d.ts +8 -0
- package/dist/hsm/infrastructure/audit-log.d.ts.map +1 -0
- package/dist/hsm/infrastructure/audit-log.js +18 -0
- package/dist/hsm/infrastructure/file-audit-log.d.ts +55 -0
- package/dist/hsm/infrastructure/file-audit-log.d.ts.map +1 -0
- package/dist/hsm/infrastructure/file-audit-log.js +128 -0
- package/dist/hsm/infrastructure/key-store.d.ts +9 -0
- package/dist/hsm/infrastructure/key-store.d.ts.map +1 -0
- package/dist/hsm/infrastructure/key-store.js +12 -0
- package/dist/hsm/infrastructure/syslog-audit-log.d.ts +64 -0
- package/dist/hsm/infrastructure/syslog-audit-log.d.ts.map +1 -0
- package/dist/hsm/infrastructure/syslog-audit-log.js +167 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/integrations/besu-client/error-mapper.d.ts +9 -0
- package/dist/integrations/besu-client/error-mapper.d.ts.map +1 -0
- package/dist/integrations/besu-client/error-mapper.js +22 -0
- package/dist/integrations/besu-client/index.d.ts +65 -0
- package/dist/integrations/besu-client/index.d.ts.map +1 -0
- package/dist/integrations/besu-client/index.js +276 -0
- package/dist/integrations/besu-client/ports.d.ts +44 -0
- package/dist/integrations/besu-client/ports.d.ts.map +1 -0
- package/dist/integrations/besu-client/ports.js +1 -0
- package/dist/integrations/corda-gateway/index.d.ts +37 -0
- package/dist/integrations/corda-gateway/index.d.ts.map +1 -0
- package/dist/integrations/corda-gateway/index.js +234 -0
- package/dist/integrations/corda-gateway/ports.d.ts +33 -0
- package/dist/integrations/corda-gateway/ports.d.ts.map +1 -0
- package/dist/integrations/corda-gateway/ports.js +1 -0
- package/dist/integrations/fabric-gateway/index.d.ts +78 -0
- package/dist/integrations/fabric-gateway/index.d.ts.map +1 -0
- package/dist/integrations/fabric-gateway/index.js +214 -0
- package/dist/integrations/fabric-gateway/ports.d.ts +50 -0
- package/dist/integrations/fabric-gateway/ports.d.ts.map +1 -0
- package/dist/integrations/fabric-gateway/ports.js +1 -0
- package/dist/integrations/index.d.ts +19 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +19 -0
- package/dist/integrations/shared/env.d.ts +4 -0
- package/dist/integrations/shared/env.d.ts.map +1 -0
- package/dist/integrations/shared/env.js +24 -0
- package/dist/integrations/shared/retry.d.ts +79 -0
- package/dist/integrations/shared/retry.d.ts.map +1 -0
- package/dist/integrations/shared/retry.js +315 -0
- package/dist/mpc/adapters.d.ts +36 -0
- package/dist/mpc/adapters.d.ts.map +1 -0
- package/dist/mpc/adapters.js +46 -0
- package/dist/mpc/crypto.d.ts +2 -0
- package/dist/mpc/crypto.d.ts.map +1 -0
- package/dist/mpc/crypto.js +2 -0
- package/dist/mpc/dsa.d.ts +134 -0
- package/dist/mpc/dsa.d.ts.map +1 -0
- package/dist/mpc/dsa.js +127 -0
- package/dist/mpc/field.d.ts +127 -0
- package/dist/mpc/field.d.ts.map +1 -0
- package/dist/mpc/field.js +209 -0
- package/dist/mpc/hybrid-kem.d.ts +96 -0
- package/dist/mpc/hybrid-kem.d.ts.map +1 -0
- package/dist/mpc/hybrid-kem.js +136 -0
- package/dist/mpc/index.d.ts +135 -0
- package/dist/mpc/index.d.ts.map +1 -0
- package/dist/mpc/index.js +348 -0
- package/dist/mpc/kyber.d.ts +134 -0
- package/dist/mpc/kyber.d.ts.map +1 -0
- package/dist/mpc/kyber.js +143 -0
- package/dist/mpc/ports.d.ts +67 -0
- package/dist/mpc/ports.d.ts.map +1 -0
- package/dist/mpc/ports.js +9 -0
- package/dist/mpc/quantum.d.ts +80 -0
- package/dist/mpc/quantum.d.ts.map +1 -0
- package/dist/mpc/quantum.js +180 -0
- package/dist/p2mr/adapters.d.ts +31 -0
- package/dist/p2mr/adapters.d.ts.map +1 -0
- package/dist/p2mr/adapters.js +35 -0
- package/dist/p2mr/index.d.ts +63 -0
- package/dist/p2mr/index.d.ts.map +1 -0
- package/dist/p2mr/index.js +59 -0
- package/dist/p2mr/merkle-tree.d.ts +109 -0
- package/dist/p2mr/merkle-tree.d.ts.map +1 -0
- package/dist/p2mr/merkle-tree.js +239 -0
- package/dist/p2mr/p2mr-output.d.ts +142 -0
- package/dist/p2mr/p2mr-output.d.ts.map +1 -0
- package/dist/p2mr/p2mr-output.js +150 -0
- package/dist/p2mr/ports.d.ts +52 -0
- package/dist/p2mr/ports.d.ts.map +1 -0
- package/dist/p2mr/ports.js +9 -0
- package/dist/p2mr/script-interpreter.d.ts +92 -0
- package/dist/p2mr/script-interpreter.d.ts.map +1 -0
- package/dist/p2mr/script-interpreter.js +535 -0
- package/dist/p2mr/script-leaf.d.ts +70 -0
- package/dist/p2mr/script-leaf.d.ts.map +1 -0
- package/dist/p2mr/script-leaf.js +203 -0
- package/dist/p2mr/spend-proof.d.ts +95 -0
- package/dist/p2mr/spend-proof.d.ts.map +1 -0
- package/dist/p2mr/spend-proof.js +358 -0
- package/dist/p2mr/types.d.ts +209 -0
- package/dist/p2mr/types.d.ts.map +1 -0
- package/dist/p2mr/types.js +9 -0
- package/dist/privacy/application/view-projector.d.ts +13 -0
- package/dist/privacy/application/view-projector.d.ts.map +1 -0
- package/dist/privacy/application/view-projector.js +85 -0
- package/dist/privacy/domain/entities.d.ts +26 -0
- package/dist/privacy/domain/entities.d.ts.map +1 -0
- package/dist/privacy/domain/entities.js +1 -0
- package/dist/privacy/domain/ports.d.ts +7 -0
- package/dist/privacy/domain/ports.d.ts.map +1 -0
- package/dist/privacy/domain/ports.js +1 -0
- package/dist/privacy/index.d.ts +21 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +25 -0
- package/dist/privacy/infrastructure/in-memory-store.d.ts +8 -0
- package/dist/privacy/infrastructure/in-memory-store.d.ts.map +1 -0
- package/dist/privacy/infrastructure/in-memory-store.js +7 -0
- package/dist/protocols/besu-port.d.ts +80 -0
- package/dist/protocols/besu-port.d.ts.map +1 -0
- package/dist/protocols/besu-port.js +1 -0
- package/dist/protocols/corda-port.d.ts +103 -0
- package/dist/protocols/corda-port.d.ts.map +1 -0
- package/dist/protocols/corda-port.js +9 -0
- package/dist/protocols/credentialing-port.d.ts +11 -0
- package/dist/protocols/credentialing-port.d.ts.map +1 -0
- package/dist/protocols/credentialing-port.js +1 -0
- package/dist/protocols/fabric-port.d.ts +89 -0
- package/dist/protocols/fabric-port.d.ts.map +1 -0
- package/dist/protocols/fabric-port.js +9 -0
- package/dist/protocols/index.d.ts +14 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +7 -0
- package/dist/protocols/p2mr-port.d.ts +159 -0
- package/dist/protocols/p2mr-port.d.ts.map +1 -0
- package/dist/protocols/p2mr-port.js +12 -0
- package/dist/protocols/privacy-port.d.ts +9 -0
- package/dist/protocols/privacy-port.d.ts.map +1 -0
- package/dist/protocols/privacy-port.js +1 -0
- package/dist/protocols/traceability-port.d.ts +12 -0
- package/dist/protocols/traceability-port.d.ts.map +1 -0
- package/dist/protocols/traceability-port.js +1 -0
- package/dist/shared/collection-store.d.ts +12 -0
- package/dist/shared/collection-store.d.ts.map +1 -0
- package/dist/shared/collection-store.js +26 -0
- package/dist/shared/commit.d.ts +24 -0
- package/dist/shared/commit.d.ts.map +1 -0
- package/dist/shared/commit.js +50 -0
- package/dist/shared/crypto.d.ts +2 -0
- package/dist/shared/crypto.d.ts.map +1 -0
- package/dist/shared/crypto.js +4 -0
- package/dist/shared/date.d.ts +2 -0
- package/dist/shared/date.d.ts.map +1 -0
- package/dist/shared/date.js +3 -0
- package/dist/shared/index.d.ts +9 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +11 -0
- package/dist/shared/logger.d.ts +37 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +45 -0
- package/dist/shared/store.d.ts +25 -0
- package/dist/shared/store.d.ts.map +1 -0
- package/dist/shared/store.js +18 -0
- package/dist/shared/telemetry-sdk.d.ts +26 -0
- package/dist/shared/telemetry-sdk.d.ts.map +1 -0
- package/dist/shared/telemetry-sdk.js +97 -0
- package/dist/shared/telemetry.d.ts +86 -0
- package/dist/shared/telemetry.d.ts.map +1 -0
- package/dist/shared/telemetry.js +137 -0
- package/dist/stark-settlement/application/aggregator-service.d.ts +112 -0
- package/dist/stark-settlement/application/aggregator-service.d.ts.map +1 -0
- package/dist/stark-settlement/application/aggregator-service.js +256 -0
- package/dist/stark-settlement/application/ledger-service.d.ts +114 -0
- package/dist/stark-settlement/application/ledger-service.d.ts.map +1 -0
- package/dist/stark-settlement/application/ledger-service.js +318 -0
- package/dist/stark-settlement/application/settlement-service.d.ts +104 -0
- package/dist/stark-settlement/application/settlement-service.d.ts.map +1 -0
- package/dist/stark-settlement/application/settlement-service.js +251 -0
- package/dist/stark-settlement/domain/entities.d.ts +365 -0
- package/dist/stark-settlement/domain/entities.d.ts.map +1 -0
- package/dist/stark-settlement/domain/entities.js +29 -0
- package/dist/stark-settlement/domain/ports.d.ts +485 -0
- package/dist/stark-settlement/domain/ports.d.ts.map +1 -0
- package/dist/stark-settlement/domain/ports.js +14 -0
- package/dist/stark-settlement/domain/value-objects.d.ts +268 -0
- package/dist/stark-settlement/domain/value-objects.d.ts.map +1 -0
- package/dist/stark-settlement/domain/value-objects.js +500 -0
- package/dist/stark-settlement/index.d.ts +172 -0
- package/dist/stark-settlement/index.d.ts.map +1 -0
- package/dist/stark-settlement/index.js +193 -0
- package/dist/stark-settlement/infrastructure/adapters/audit-adapter.d.ts +52 -0
- package/dist/stark-settlement/infrastructure/adapters/audit-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/audit-adapter.js +154 -0
- package/dist/stark-settlement/infrastructure/adapters/bitcoin-adapter.d.ts +88 -0
- package/dist/stark-settlement/infrastructure/adapters/bitcoin-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/bitcoin-adapter.js +187 -0
- package/dist/stark-settlement/infrastructure/adapters/clock-adapter.d.ts +59 -0
- package/dist/stark-settlement/infrastructure/adapters/clock-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/clock-adapter.js +85 -0
- package/dist/stark-settlement/infrastructure/adapters/dilithium-adapter.d.ts +60 -0
- package/dist/stark-settlement/infrastructure/adapters/dilithium-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/dilithium-adapter.js +104 -0
- package/dist/stark-settlement/infrastructure/adapters/event-emitter-adapter.d.ts +115 -0
- package/dist/stark-settlement/infrastructure/adapters/event-emitter-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/event-emitter-adapter.js +191 -0
- package/dist/stark-settlement/infrastructure/adapters/fiat-adapter.d.ts +65 -0
- package/dist/stark-settlement/infrastructure/adapters/fiat-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/fiat-adapter.js +207 -0
- package/dist/stark-settlement/infrastructure/adapters/mock-stark-adapter.d.ts +73 -0
- package/dist/stark-settlement/infrastructure/adapters/mock-stark-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/mock-stark-adapter.js +287 -0
- package/dist/stark-settlement/infrastructure/adapters/solana-adapter.d.ts +78 -0
- package/dist/stark-settlement/infrastructure/adapters/solana-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/solana-adapter.js +172 -0
- package/dist/stark-settlement/infrastructure/adapters/starknet-proof-adapter.d.ts +56 -0
- package/dist/stark-settlement/infrastructure/adapters/starknet-proof-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/starknet-proof-adapter.js +261 -0
- package/dist/stark-settlement/infrastructure/adapters/stone-proof-adapter.d.ts +125 -0
- package/dist/stark-settlement/infrastructure/adapters/stone-proof-adapter.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/adapters/stone-proof-adapter.js +416 -0
- package/dist/stark-settlement/infrastructure/persistence/ledger-store.d.ts +68 -0
- package/dist/stark-settlement/infrastructure/persistence/ledger-store.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/persistence/ledger-store.js +238 -0
- package/dist/stark-settlement/infrastructure/persistence/offset-store.d.ts +30 -0
- package/dist/stark-settlement/infrastructure/persistence/offset-store.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/persistence/offset-store.js +57 -0
- package/dist/stark-settlement/infrastructure/persistence/outbox-store.d.ts +45 -0
- package/dist/stark-settlement/infrastructure/persistence/outbox-store.d.ts.map +1 -0
- package/dist/stark-settlement/infrastructure/persistence/outbox-store.js +171 -0
- package/dist/traceability/application/recall-assessor.d.ts +13 -0
- package/dist/traceability/application/recall-assessor.d.ts.map +1 -0
- package/dist/traceability/application/recall-assessor.js +74 -0
- package/dist/traceability/domain/entities.d.ts +23 -0
- package/dist/traceability/domain/entities.d.ts.map +1 -0
- package/dist/traceability/domain/entities.js +1 -0
- package/dist/traceability/domain/ports.d.ts +23 -0
- package/dist/traceability/domain/ports.d.ts.map +1 -0
- package/dist/traceability/domain/ports.js +1 -0
- package/dist/traceability/domain/recall.d.ts +12 -0
- package/dist/traceability/domain/recall.d.ts.map +1 -0
- package/dist/traceability/domain/recall.js +1 -0
- package/dist/traceability/index.d.ts +22 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +26 -0
- package/dist/traceability/infrastructure/in-memory-store.d.ts +13 -0
- package/dist/traceability/infrastructure/in-memory-store.d.ts.map +1 -0
- package/dist/traceability/infrastructure/in-memory-store.js +24 -0
- package/package.json +12 -9
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port interface for key-value storage.
|
|
3
|
+
*
|
|
4
|
+
* Domain services depend on this abstraction rather than on concrete Map
|
|
5
|
+
* instances, keeping infrastructure concerns (persistence, caching, replication)
|
|
6
|
+
* out of the domain layer.
|
|
7
|
+
*/
|
|
8
|
+
export interface ReadonlyStore<K, V> {
|
|
9
|
+
get(key: K): V | undefined;
|
|
10
|
+
has(key: K): boolean;
|
|
11
|
+
values(): IterableIterator<V>;
|
|
12
|
+
entries(): IterableIterator<[K, V]>;
|
|
13
|
+
}
|
|
14
|
+
export interface Store<K, V> extends ReadonlyStore<K, V> {
|
|
15
|
+
set(key: K, value: V): void;
|
|
16
|
+
}
|
|
17
|
+
export declare class InMemoryStore<K, V> implements Store<K, V> {
|
|
18
|
+
private readonly data;
|
|
19
|
+
set(key: K, value: V): void;
|
|
20
|
+
get(key: K): V | undefined;
|
|
21
|
+
has(key: K): boolean;
|
|
22
|
+
values(): IterableIterator<V>;
|
|
23
|
+
entries(): IterableIterator<[K, V]>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/shared/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC;IACrB,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC9B,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IACtD,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CAC7B;AAED,qBAAa,aAAa,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IAExC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAI1B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI7B,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAGpC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class InMemoryStore {
|
|
2
|
+
data = new Map();
|
|
3
|
+
set(key, value) {
|
|
4
|
+
this.data.set(key, value);
|
|
5
|
+
}
|
|
6
|
+
get(key) {
|
|
7
|
+
return this.data.get(key);
|
|
8
|
+
}
|
|
9
|
+
has(key) {
|
|
10
|
+
return this.data.has(key);
|
|
11
|
+
}
|
|
12
|
+
values() {
|
|
13
|
+
return this.data.values();
|
|
14
|
+
}
|
|
15
|
+
entries() {
|
|
16
|
+
return this.data.entries();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry SDK initialization.
|
|
3
|
+
*
|
|
4
|
+
* This module should be imported at application startup BEFORE any other
|
|
5
|
+
* imports to ensure proper instrumentation:
|
|
6
|
+
*
|
|
7
|
+
* import "@psavelis/enterprise-blockchain/shared/telemetry-sdk";
|
|
8
|
+
*
|
|
9
|
+
* The SDK is configured via standard OpenTelemetry environment variables:
|
|
10
|
+
* - OTEL_SERVICE_NAME: Service name (default: "enterprise-blockchain")
|
|
11
|
+
* - OTEL_EXPORTER_OTLP_ENDPOINT: OTLP collector endpoint (e.g., "http://localhost:4318")
|
|
12
|
+
* - OTEL_TRACES_EXPORTER: Trace exporter type (default: "otlp" if endpoint set)
|
|
13
|
+
* - OTEL_METRICS_EXPORTER: Metrics exporter type (default: "otlp" if endpoint set)
|
|
14
|
+
*
|
|
15
|
+
* Additional configuration:
|
|
16
|
+
* - OTEL_LOG_LEVEL: Set to "silent" to suppress console output
|
|
17
|
+
* - OTEL_REGISTER_SIGNAL_HANDLERS: Set to "false" to disable SIGTERM/SIGINT handlers
|
|
18
|
+
*
|
|
19
|
+
* If OTEL_EXPORTER_OTLP_ENDPOINT is not set, telemetry is disabled (no-op).
|
|
20
|
+
*
|
|
21
|
+
* Ref: https://opentelemetry.io/docs/languages/js/getting-started/nodejs/
|
|
22
|
+
*/
|
|
23
|
+
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
24
|
+
declare let sdk: NodeSDK | null;
|
|
25
|
+
export { sdk };
|
|
26
|
+
//# sourceMappingURL=telemetry-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-sdk.d.ts","sourceRoot":"","sources":["../../src/shared/telemetry-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAgClD,QAAA,IAAI,GAAG,EAAE,OAAO,GAAG,IAAW,CAAC;AA0D/B,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry SDK initialization.
|
|
3
|
+
*
|
|
4
|
+
* This module should be imported at application startup BEFORE any other
|
|
5
|
+
* imports to ensure proper instrumentation:
|
|
6
|
+
*
|
|
7
|
+
* import "@psavelis/enterprise-blockchain/shared/telemetry-sdk";
|
|
8
|
+
*
|
|
9
|
+
* The SDK is configured via standard OpenTelemetry environment variables:
|
|
10
|
+
* - OTEL_SERVICE_NAME: Service name (default: "enterprise-blockchain")
|
|
11
|
+
* - OTEL_EXPORTER_OTLP_ENDPOINT: OTLP collector endpoint (e.g., "http://localhost:4318")
|
|
12
|
+
* - OTEL_TRACES_EXPORTER: Trace exporter type (default: "otlp" if endpoint set)
|
|
13
|
+
* - OTEL_METRICS_EXPORTER: Metrics exporter type (default: "otlp" if endpoint set)
|
|
14
|
+
*
|
|
15
|
+
* Additional configuration:
|
|
16
|
+
* - OTEL_LOG_LEVEL: Set to "silent" to suppress console output
|
|
17
|
+
* - OTEL_REGISTER_SIGNAL_HANDLERS: Set to "false" to disable SIGTERM/SIGINT handlers
|
|
18
|
+
*
|
|
19
|
+
* If OTEL_EXPORTER_OTLP_ENDPOINT is not set, telemetry is disabled (no-op).
|
|
20
|
+
*
|
|
21
|
+
* Ref: https://opentelemetry.io/docs/languages/js/getting-started/nodejs/
|
|
22
|
+
*/
|
|
23
|
+
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
24
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
25
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
26
|
+
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
27
|
+
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
28
|
+
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
|
|
29
|
+
const endpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
30
|
+
const serviceName = process.env.OTEL_SERVICE_NAME ?? "enterprise-blockchain";
|
|
31
|
+
// Configuration flags for library-friendly behavior
|
|
32
|
+
const isSilent = process.env.OTEL_LOG_LEVEL === "silent";
|
|
33
|
+
const registerSignalHandlers = process.env.OTEL_REGISTER_SIGNAL_HANDLERS !== "false";
|
|
34
|
+
/**
|
|
35
|
+
* Internal logger that respects OTEL_LOG_LEVEL=silent.
|
|
36
|
+
* This prevents unwanted console output in tests, serverless, or CLI environments.
|
|
37
|
+
*/
|
|
38
|
+
const log = {
|
|
39
|
+
info: (message) => {
|
|
40
|
+
if (!isSilent) {
|
|
41
|
+
console.log(message);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
error: (message, error) => {
|
|
45
|
+
if (!isSilent) {
|
|
46
|
+
console.error(message, error);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
let sdk = null;
|
|
51
|
+
if (endpoint) {
|
|
52
|
+
const resource = resourceFromAttributes({
|
|
53
|
+
[ATTR_SERVICE_NAME]: serviceName,
|
|
54
|
+
});
|
|
55
|
+
const traceExporter = new OTLPTraceExporter({
|
|
56
|
+
url: `${endpoint}/v1/traces`,
|
|
57
|
+
});
|
|
58
|
+
const metricExporter = new OTLPMetricExporter({
|
|
59
|
+
url: `${endpoint}/v1/metrics`,
|
|
60
|
+
});
|
|
61
|
+
const metricReader = new PeriodicExportingMetricReader({
|
|
62
|
+
exporter: metricExporter,
|
|
63
|
+
exportIntervalMillis: 10_000, // Export metrics every 10 seconds
|
|
64
|
+
});
|
|
65
|
+
sdk = new NodeSDK({
|
|
66
|
+
resource,
|
|
67
|
+
traceExporter,
|
|
68
|
+
metricReader,
|
|
69
|
+
});
|
|
70
|
+
// Start the SDK. NodeSDK.start() is synchronous and returns void.
|
|
71
|
+
// Errors during startup will throw, so we wrap in try-catch for safety.
|
|
72
|
+
try {
|
|
73
|
+
sdk.start();
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
log.error("OpenTelemetry SDK failed to start:", err);
|
|
77
|
+
}
|
|
78
|
+
// Graceful shutdown handler - only register if enabled
|
|
79
|
+
if (registerSignalHandlers) {
|
|
80
|
+
const shutdown = () => {
|
|
81
|
+
sdk
|
|
82
|
+
?.shutdown()
|
|
83
|
+
.then(() => {
|
|
84
|
+
log.info("OpenTelemetry SDK shut down successfully");
|
|
85
|
+
})
|
|
86
|
+
.catch((err) => {
|
|
87
|
+
log.error("Error shutting down OpenTelemetry SDK:", err);
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
process.on("SIGTERM", shutdown);
|
|
91
|
+
process.on("SIGINT", shutdown);
|
|
92
|
+
}
|
|
93
|
+
log.info(`OpenTelemetry SDK initialized: service=${serviceName}, endpoint=${endpoint}`);
|
|
94
|
+
}
|
|
95
|
+
// When endpoint is not set, telemetry is a no-op - stay completely silent.
|
|
96
|
+
// This aligns with the module doc comment and prevents console noise in tests/apps.
|
|
97
|
+
export { sdk };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry instrumentation for distributed tracing and metrics.
|
|
3
|
+
*
|
|
4
|
+
* Provides tracer and meter factories that integrate with the OpenTelemetry
|
|
5
|
+
* SDK. When OTEL_EXPORTER_OTLP_ENDPOINT is set, telemetry is exported to
|
|
6
|
+
* the configured collector; otherwise, telemetry is a no-op.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* // First, initialize the SDK at application startup (side-effect import):
|
|
10
|
+
* import "@psavelis/enterprise-blockchain/shared/telemetry-sdk";
|
|
11
|
+
*
|
|
12
|
+
* // Then import helpers from this module:
|
|
13
|
+
* import { createTracer, createMeter } from "@psavelis/enterprise-blockchain/shared/telemetry";
|
|
14
|
+
* const tracer = createTracer("my-service");
|
|
15
|
+
* const meter = createMeter("my-service");
|
|
16
|
+
*
|
|
17
|
+
* NOTE: This module requires @opentelemetry/api as a peer dependency.
|
|
18
|
+
* It is NOT re-exported from the main shared index to preserve optional deps.
|
|
19
|
+
*
|
|
20
|
+
* Ref: OpenTelemetry Specification — https://opentelemetry.io/docs/specs/otel/
|
|
21
|
+
*/
|
|
22
|
+
import { context, propagation, SpanStatusCode, type Tracer, type Meter, type Span, type SpanOptions, type Context } from "@opentelemetry/api";
|
|
23
|
+
export type { Tracer, Meter, Span, SpanOptions, Context };
|
|
24
|
+
export { SpanStatusCode, context, propagation };
|
|
25
|
+
/**
|
|
26
|
+
* Service name for telemetry, read from OTEL_SERVICE_NAME or defaulting
|
|
27
|
+
* to "enterprise-blockchain".
|
|
28
|
+
*/
|
|
29
|
+
export declare const SERVICE_NAME: string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether telemetry export is enabled (OTEL_EXPORTER_OTLP_ENDPOINT is set).
|
|
32
|
+
*/
|
|
33
|
+
export declare function isTelemetryEnabled(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Create a tracer for distributed tracing.
|
|
36
|
+
*
|
|
37
|
+
* @param name - The name of the instrumentation scope (e.g., "fabric-gateway")
|
|
38
|
+
* @param version - Optional version string for the instrumentation
|
|
39
|
+
*/
|
|
40
|
+
export declare function createTracer(name: string, version?: string): Tracer;
|
|
41
|
+
/**
|
|
42
|
+
* Create a meter for metrics collection.
|
|
43
|
+
*
|
|
44
|
+
* @param name - The name of the instrumentation scope (e.g., "circuit-breaker")
|
|
45
|
+
* @param version - Optional version string for the instrumentation
|
|
46
|
+
*/
|
|
47
|
+
export declare function createMeter(name: string, version?: string): Meter;
|
|
48
|
+
/**
|
|
49
|
+
* Attribute keys for telemetry following OpenTelemetry semantic conventions.
|
|
50
|
+
*/
|
|
51
|
+
export declare const TelemetryAttributes: {
|
|
52
|
+
readonly SERVICE_NAME: "service.name";
|
|
53
|
+
readonly RETRY_ATTEMPT: "retry.attempt";
|
|
54
|
+
readonly RETRY_MAX_ATTEMPTS: "retry.max_attempts";
|
|
55
|
+
readonly RETRY_ERROR_CODE: "retry.error_code";
|
|
56
|
+
readonly RETRY_DELAY_MS: "retry.delay_ms";
|
|
57
|
+
readonly CIRCUIT_BREAKER_STATE: "circuit_breaker.state";
|
|
58
|
+
readonly CIRCUIT_BREAKER_FAILURES: "circuit_breaker.consecutive_failures";
|
|
59
|
+
readonly CIRCUIT_BREAKER_COOLDOWN_MS: "circuit_breaker.cooldown_ms";
|
|
60
|
+
readonly BLOCKCHAIN_PLATFORM: "blockchain.platform";
|
|
61
|
+
readonly BLOCKCHAIN_CHANNEL: "blockchain.channel";
|
|
62
|
+
readonly BLOCKCHAIN_CHAINCODE: "blockchain.chaincode";
|
|
63
|
+
readonly BLOCKCHAIN_TX_ID: "blockchain.transaction_id";
|
|
64
|
+
readonly BLOCKCHAIN_BLOCK_NUMBER: "blockchain.block_number";
|
|
65
|
+
readonly ERROR_TYPE: "error.type";
|
|
66
|
+
readonly ERROR_MESSAGE: "error.message";
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Helper to run a function within a new span.
|
|
70
|
+
*
|
|
71
|
+
* @param tracer - The tracer to use
|
|
72
|
+
* @param name - Span name
|
|
73
|
+
* @param fn - Function to execute within the span
|
|
74
|
+
* @param options - Optional span options
|
|
75
|
+
*/
|
|
76
|
+
export declare function withSpan<T>(tracer: Tracer, name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T>;
|
|
77
|
+
/**
|
|
78
|
+
* Helper to run a synchronous function within a new span.
|
|
79
|
+
*
|
|
80
|
+
* @param tracer - The tracer to use
|
|
81
|
+
* @param name - Span name
|
|
82
|
+
* @param fn - Function to execute within the span
|
|
83
|
+
* @param options - Optional span options
|
|
84
|
+
*/
|
|
85
|
+
export declare function withSpanSync<T>(tracer: Tracer, name: string, fn: (span: Span) => T, options?: SpanOptions): T;
|
|
86
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/shared/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAGL,OAAO,EACP,WAAW,EACX,cAAc,EACd,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,OAAO,EACb,MAAM,oBAAoB,CAAC;AAI5B,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,YAAY,QACiC,CAAC;AAE3D;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAEjE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;CAyBtB,CAAC;AAEX;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC,CAmBZ;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,CAAC,CAkBH"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry instrumentation for distributed tracing and metrics.
|
|
3
|
+
*
|
|
4
|
+
* Provides tracer and meter factories that integrate with the OpenTelemetry
|
|
5
|
+
* SDK. When OTEL_EXPORTER_OTLP_ENDPOINT is set, telemetry is exported to
|
|
6
|
+
* the configured collector; otherwise, telemetry is a no-op.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* // First, initialize the SDK at application startup (side-effect import):
|
|
10
|
+
* import "@psavelis/enterprise-blockchain/shared/telemetry-sdk";
|
|
11
|
+
*
|
|
12
|
+
* // Then import helpers from this module:
|
|
13
|
+
* import { createTracer, createMeter } from "@psavelis/enterprise-blockchain/shared/telemetry";
|
|
14
|
+
* const tracer = createTracer("my-service");
|
|
15
|
+
* const meter = createMeter("my-service");
|
|
16
|
+
*
|
|
17
|
+
* NOTE: This module requires @opentelemetry/api as a peer dependency.
|
|
18
|
+
* It is NOT re-exported from the main shared index to preserve optional deps.
|
|
19
|
+
*
|
|
20
|
+
* Ref: OpenTelemetry Specification — https://opentelemetry.io/docs/specs/otel/
|
|
21
|
+
*/
|
|
22
|
+
import { trace, metrics, context, propagation, SpanStatusCode, } from "@opentelemetry/api";
|
|
23
|
+
import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
|
|
24
|
+
export { SpanStatusCode, context, propagation };
|
|
25
|
+
/**
|
|
26
|
+
* Service name for telemetry, read from OTEL_SERVICE_NAME or defaulting
|
|
27
|
+
* to "enterprise-blockchain".
|
|
28
|
+
*/
|
|
29
|
+
export const SERVICE_NAME = process.env.OTEL_SERVICE_NAME ?? "enterprise-blockchain";
|
|
30
|
+
/**
|
|
31
|
+
* Whether telemetry export is enabled (OTEL_EXPORTER_OTLP_ENDPOINT is set).
|
|
32
|
+
*/
|
|
33
|
+
export function isTelemetryEnabled() {
|
|
34
|
+
return Boolean(process.env.OTEL_EXPORTER_OTLP_ENDPOINT);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Create a tracer for distributed tracing.
|
|
38
|
+
*
|
|
39
|
+
* @param name - The name of the instrumentation scope (e.g., "fabric-gateway")
|
|
40
|
+
* @param version - Optional version string for the instrumentation
|
|
41
|
+
*/
|
|
42
|
+
export function createTracer(name, version) {
|
|
43
|
+
return trace.getTracer(name, version);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a meter for metrics collection.
|
|
47
|
+
*
|
|
48
|
+
* @param name - The name of the instrumentation scope (e.g., "circuit-breaker")
|
|
49
|
+
* @param version - Optional version string for the instrumentation
|
|
50
|
+
*/
|
|
51
|
+
export function createMeter(name, version) {
|
|
52
|
+
return metrics.getMeter(name, version);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Attribute keys for telemetry following OpenTelemetry semantic conventions.
|
|
56
|
+
*/
|
|
57
|
+
export const TelemetryAttributes = {
|
|
58
|
+
// Service attributes
|
|
59
|
+
SERVICE_NAME: ATTR_SERVICE_NAME,
|
|
60
|
+
// Retry attributes
|
|
61
|
+
RETRY_ATTEMPT: "retry.attempt",
|
|
62
|
+
RETRY_MAX_ATTEMPTS: "retry.max_attempts",
|
|
63
|
+
RETRY_ERROR_CODE: "retry.error_code",
|
|
64
|
+
RETRY_DELAY_MS: "retry.delay_ms",
|
|
65
|
+
// Circuit breaker attributes
|
|
66
|
+
CIRCUIT_BREAKER_STATE: "circuit_breaker.state",
|
|
67
|
+
CIRCUIT_BREAKER_FAILURES: "circuit_breaker.consecutive_failures",
|
|
68
|
+
CIRCUIT_BREAKER_COOLDOWN_MS: "circuit_breaker.cooldown_ms",
|
|
69
|
+
// Blockchain attributes
|
|
70
|
+
BLOCKCHAIN_PLATFORM: "blockchain.platform",
|
|
71
|
+
BLOCKCHAIN_CHANNEL: "blockchain.channel",
|
|
72
|
+
BLOCKCHAIN_CHAINCODE: "blockchain.chaincode",
|
|
73
|
+
BLOCKCHAIN_TX_ID: "blockchain.transaction_id",
|
|
74
|
+
BLOCKCHAIN_BLOCK_NUMBER: "blockchain.block_number",
|
|
75
|
+
// Error attributes
|
|
76
|
+
ERROR_TYPE: "error.type",
|
|
77
|
+
ERROR_MESSAGE: "error.message",
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Helper to run a function within a new span.
|
|
81
|
+
*
|
|
82
|
+
* @param tracer - The tracer to use
|
|
83
|
+
* @param name - Span name
|
|
84
|
+
* @param fn - Function to execute within the span
|
|
85
|
+
* @param options - Optional span options
|
|
86
|
+
*/
|
|
87
|
+
export async function withSpan(tracer, name, fn, options) {
|
|
88
|
+
return tracer.startActiveSpan(name, options ?? {}, async (span) => {
|
|
89
|
+
try {
|
|
90
|
+
const result = await fn(span);
|
|
91
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
span.setStatus({
|
|
96
|
+
code: SpanStatusCode.ERROR,
|
|
97
|
+
message: err instanceof Error ? err.message : String(err),
|
|
98
|
+
});
|
|
99
|
+
if (err instanceof Error) {
|
|
100
|
+
span.recordException(err);
|
|
101
|
+
}
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
span.end();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Helper to run a synchronous function within a new span.
|
|
111
|
+
*
|
|
112
|
+
* @param tracer - The tracer to use
|
|
113
|
+
* @param name - Span name
|
|
114
|
+
* @param fn - Function to execute within the span
|
|
115
|
+
* @param options - Optional span options
|
|
116
|
+
*/
|
|
117
|
+
export function withSpanSync(tracer, name, fn, options) {
|
|
118
|
+
const span = tracer.startSpan(name, options);
|
|
119
|
+
try {
|
|
120
|
+
const result = fn(span);
|
|
121
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
span.setStatus({
|
|
126
|
+
code: SpanStatusCode.ERROR,
|
|
127
|
+
message: err instanceof Error ? err.message : String(err),
|
|
128
|
+
});
|
|
129
|
+
if (err instanceof Error) {
|
|
130
|
+
span.recordException(err);
|
|
131
|
+
}
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
span.end();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregator Service
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the tiered recursive STARK proof aggregation:
|
|
5
|
+
* - Tier-1: Aggregates 128 base proofs into a single Tier-1 proof
|
|
6
|
+
* - Tier-2: Aggregates 64 Tier-1 proofs into a final Block Proof
|
|
7
|
+
*
|
|
8
|
+
* The aggregator maintains idempotency keys through all tiers
|
|
9
|
+
* for exactly-once settlement semantics.
|
|
10
|
+
*
|
|
11
|
+
* @see domain/ports.ts for StarkProofGeneratorPort interface
|
|
12
|
+
*/
|
|
13
|
+
import type { BaseProof, Tier1Proof, Tier2BlockProof, AssetType, OutboxEntry, NetTransfer } from "../domain/entities.js";
|
|
14
|
+
import type { SettlementContext } from "../index.js";
|
|
15
|
+
/**
|
|
16
|
+
* Result of the aggregation process.
|
|
17
|
+
*/
|
|
18
|
+
export interface AggregationResult {
|
|
19
|
+
/** The generated block proof (null if not enough proofs) */
|
|
20
|
+
blockProof: Tier2BlockProof | null;
|
|
21
|
+
/** Number of base proofs processed */
|
|
22
|
+
baseProofsProcessed: number;
|
|
23
|
+
/** Number of Tier-1 proofs generated */
|
|
24
|
+
tier1ProofsGenerated: number;
|
|
25
|
+
/** Whether a block proof was generated */
|
|
26
|
+
blockGenerated: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Configuration for the aggregator service.
|
|
30
|
+
*/
|
|
31
|
+
export interface AggregatorConfig {
|
|
32
|
+
/** Number of base proofs per Tier-1 aggregation (default: 128) */
|
|
33
|
+
tier1BatchSize: number;
|
|
34
|
+
/** Number of Tier-1 proofs per Tier-2 block (default: 64) */
|
|
35
|
+
tier2BatchSize: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Aggregator service for recursive STARK proof composition.
|
|
39
|
+
*/
|
|
40
|
+
export declare class AggregatorService {
|
|
41
|
+
private readonly ctx;
|
|
42
|
+
private readonly config;
|
|
43
|
+
constructor(ctx: SettlementContext, config?: Partial<AggregatorConfig>);
|
|
44
|
+
/**
|
|
45
|
+
* Get the current batch sizes.
|
|
46
|
+
*/
|
|
47
|
+
getBatchSizes(): {
|
|
48
|
+
tier1: number;
|
|
49
|
+
tier2: number;
|
|
50
|
+
totalTxsPerBlock: number;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Process available proofs through the aggregation pipeline.
|
|
54
|
+
*
|
|
55
|
+
* Attempts to:
|
|
56
|
+
* 1. Aggregate base proofs into Tier-1 proofs
|
|
57
|
+
* 2. Aggregate Tier-1 proofs into a Tier-2 block proof
|
|
58
|
+
*
|
|
59
|
+
* @returns Aggregation result with statistics
|
|
60
|
+
*/
|
|
61
|
+
processAggregation(): Promise<AggregationResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Aggregate base proofs into a Tier-1 proof.
|
|
64
|
+
*/
|
|
65
|
+
aggregateTier1(baseProofs: readonly BaseProof[]): Promise<Tier1Proof>;
|
|
66
|
+
/**
|
|
67
|
+
* Aggregate Tier-1 proofs into a Tier-2 block proof.
|
|
68
|
+
*/
|
|
69
|
+
aggregateTier2(tier1Proofs: readonly Tier1Proof[]): Promise<Tier2BlockProof>;
|
|
70
|
+
/**
|
|
71
|
+
* Process proofs until a block is generated or no more proofs are available.
|
|
72
|
+
*
|
|
73
|
+
* Convenience method for demo/testing - processes multiple batches.
|
|
74
|
+
*/
|
|
75
|
+
processToBlockProof(): Promise<Tier2BlockProof | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Create outbox entries for a block proof.
|
|
78
|
+
*
|
|
79
|
+
* Computes net transfers per asset type and creates outbox entries
|
|
80
|
+
* for settlement.
|
|
81
|
+
*
|
|
82
|
+
* @param blockProof - The block proof to create entries for
|
|
83
|
+
* @param netTransfersByAsset - Pre-computed net transfers by asset type
|
|
84
|
+
*/
|
|
85
|
+
createOutboxEntries(blockProof: Tier2BlockProof, netTransfersByAsset: Map<AssetType, NetTransfer[]>): Promise<OutboxEntry[]>;
|
|
86
|
+
/**
|
|
87
|
+
* Compute net transfers from transaction history.
|
|
88
|
+
*
|
|
89
|
+
* Groups transactions by external address and computes the net
|
|
90
|
+
* amount change for each address.
|
|
91
|
+
*/
|
|
92
|
+
computeNetTransfers(transactions: ReadonlyArray<{
|
|
93
|
+
type: "deposit" | "transfer" | "withdrawal";
|
|
94
|
+
fromAccountId: string | null;
|
|
95
|
+
toAccountId: string | null;
|
|
96
|
+
amount: bigint;
|
|
97
|
+
}>, accountAddresses: Map<string, string>): Map<string, bigint>;
|
|
98
|
+
/**
|
|
99
|
+
* Verify a block proof.
|
|
100
|
+
*/
|
|
101
|
+
verifyBlockProof(blockProof: Tier2BlockProof): Promise<boolean>;
|
|
102
|
+
/**
|
|
103
|
+
* Get aggregation statistics.
|
|
104
|
+
*/
|
|
105
|
+
getStats(): Promise<{
|
|
106
|
+
pendingBaseProofs: number;
|
|
107
|
+
pendingTier1Proofs: number;
|
|
108
|
+
latestBlockNumber: bigint | null;
|
|
109
|
+
totalTxsPerBlock: number;
|
|
110
|
+
}>;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=aggregator-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregator-service.d.ts","sourceRoot":"","sources":["../../../src/stark-settlement/application/aggregator-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,SAAS,EACT,WAAW,EACX,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,sCAAsC;IACtC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;gBAGvB,GAAG,EAAE,iBAAiB,EACvC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAcpC;;OAEG;IACH,aAAa,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAY3E;;;;;;;;OAQG;IACG,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAoDtD;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAsC3E;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,SAAS,UAAU,EAAE,GACjC,OAAO,CAAC,eAAe,CAAC;IAiC3B;;;;OAIG;IACG,mBAAmB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAa5D;;;;;;;;OAQG;IACG,mBAAmB,CACvB,UAAU,EAAE,eAAe,EAC3B,mBAAmB,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,GACjD,OAAO,CAAC,WAAW,EAAE,CAAC;IAoCzB;;;;;OAKG;IACH,mBAAmB,CACjB,YAAY,EAAE,aAAa,CAAC;QAC1B,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;QAC5C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,EACF,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAiCtB;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CAgBH"}
|