@originals/sdk 1.4.2 → 1.4.5
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/adapters/FeeOracleMock.d.ts +6 -0
- package/dist/adapters/FeeOracleMock.js +8 -0
- package/{src/adapters/index.ts → dist/adapters/index.d.ts} +0 -1
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/providers/OrdHttpProvider.d.ts +56 -0
- package/dist/adapters/providers/OrdHttpProvider.js +110 -0
- package/dist/adapters/providers/OrdMockProvider.d.ts +70 -0
- package/dist/adapters/providers/OrdMockProvider.js +75 -0
- package/dist/adapters/types.d.ts +71 -0
- package/dist/adapters/types.js +1 -0
- package/dist/bitcoin/BitcoinManager.d.ts +15 -0
- package/dist/bitcoin/BitcoinManager.js +262 -0
- package/dist/bitcoin/BroadcastClient.d.ts +30 -0
- package/dist/bitcoin/BroadcastClient.js +35 -0
- package/dist/bitcoin/OrdinalsClient.d.ts +21 -0
- package/dist/bitcoin/OrdinalsClient.js +105 -0
- package/dist/bitcoin/PSBTBuilder.d.ts +24 -0
- package/dist/bitcoin/PSBTBuilder.js +80 -0
- package/dist/bitcoin/fee-calculation.d.ts +14 -0
- package/{src/bitcoin/fee-calculation.ts → dist/bitcoin/fee-calculation.js} +5 -12
- package/dist/bitcoin/providers/OrdNodeProvider.d.ts +38 -0
- package/dist/bitcoin/providers/OrdNodeProvider.js +67 -0
- package/dist/bitcoin/providers/OrdinalsProvider.d.ts +33 -0
- package/dist/bitcoin/providers/OrdinalsProvider.js +50 -0
- package/dist/bitcoin/providers/types.d.ts +63 -0
- package/dist/bitcoin/providers/types.js +1 -0
- package/dist/bitcoin/transactions/commit.d.ts +89 -0
- package/dist/bitcoin/transactions/commit.js +311 -0
- package/dist/bitcoin/transactions/index.d.ts +7 -0
- package/{src/bitcoin/transactions/index.ts → dist/bitcoin/transactions/index.js} +1 -6
- package/dist/bitcoin/transfer.d.ts +9 -0
- package/dist/bitcoin/transfer.js +26 -0
- package/dist/bitcoin/utxo-selection.d.ts +78 -0
- package/dist/bitcoin/utxo-selection.js +237 -0
- package/dist/bitcoin/utxo.d.ts +26 -0
- package/dist/bitcoin/utxo.js +78 -0
- package/dist/contexts/credentials-v1.json +195 -0
- package/dist/contexts/credentials-v2-examples.json +5 -0
- package/dist/contexts/credentials-v2.json +301 -0
- package/dist/contexts/credentials.json +195 -0
- package/dist/contexts/data-integrity-v2.json +81 -0
- package/dist/contexts/dids.json +57 -0
- package/dist/contexts/ed255192020.json +93 -0
- package/dist/contexts/ordinals-plus.json +23 -0
- package/dist/contexts/originals.json +22 -0
- package/dist/core/OriginalsSDK.d.ts +158 -0
- package/dist/core/OriginalsSDK.js +274 -0
- package/dist/crypto/Multikey.d.ts +30 -0
- package/dist/crypto/Multikey.js +149 -0
- package/dist/crypto/Signer.d.ts +21 -0
- package/dist/crypto/Signer.js +196 -0
- package/dist/crypto/noble-init.d.ts +18 -0
- package/dist/crypto/noble-init.js +106 -0
- package/dist/did/BtcoDidResolver.d.ts +57 -0
- package/dist/did/BtcoDidResolver.js +166 -0
- package/dist/did/DIDManager.d.ts +101 -0
- package/dist/did/DIDManager.js +493 -0
- package/dist/did/Ed25519Verifier.d.ts +30 -0
- package/dist/did/Ed25519Verifier.js +59 -0
- package/dist/did/KeyManager.d.ts +17 -0
- package/dist/did/KeyManager.js +207 -0
- package/dist/did/WebVHManager.d.ts +100 -0
- package/dist/did/WebVHManager.js +312 -0
- package/dist/did/createBtcoDidDocument.d.ts +10 -0
- package/dist/did/createBtcoDidDocument.js +42 -0
- package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +23 -0
- package/dist/did/providers/OrdinalsClientProviderAdapter.js +51 -0
- package/dist/events/EventEmitter.d.ts +115 -0
- package/dist/events/EventEmitter.js +198 -0
- package/dist/events/index.d.ts +7 -0
- package/dist/events/index.js +6 -0
- package/dist/events/types.d.ts +286 -0
- package/dist/events/types.js +9 -0
- package/dist/examples/basic-usage.d.ts +3 -0
- package/dist/examples/basic-usage.js +62 -0
- package/dist/examples/create-module-original.d.ts +32 -0
- package/dist/examples/create-module-original.js +376 -0
- package/dist/examples/full-lifecycle-flow.d.ts +56 -0
- package/dist/examples/full-lifecycle-flow.js +419 -0
- package/dist/examples/run.d.ts +12 -0
- package/dist/examples/run.js +51 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +52 -0
- package/dist/kinds/KindRegistry.d.ts +76 -0
- package/dist/kinds/KindRegistry.js +216 -0
- package/dist/kinds/index.d.ts +33 -0
- package/{src/kinds/index.ts → dist/kinds/index.js} +6 -44
- package/dist/kinds/types.d.ts +363 -0
- package/dist/kinds/types.js +25 -0
- package/dist/kinds/validators/AgentValidator.d.ts +14 -0
- package/dist/kinds/validators/AgentValidator.js +155 -0
- package/dist/kinds/validators/AppValidator.d.ts +14 -0
- package/dist/kinds/validators/AppValidator.js +135 -0
- package/dist/kinds/validators/DatasetValidator.d.ts +14 -0
- package/dist/kinds/validators/DatasetValidator.js +148 -0
- package/dist/kinds/validators/DocumentValidator.d.ts +14 -0
- package/dist/kinds/validators/DocumentValidator.js +180 -0
- package/dist/kinds/validators/MediaValidator.d.ts +14 -0
- package/dist/kinds/validators/MediaValidator.js +172 -0
- package/dist/kinds/validators/ModuleValidator.d.ts +14 -0
- package/dist/kinds/validators/ModuleValidator.js +140 -0
- package/dist/kinds/validators/base.d.ts +96 -0
- package/dist/kinds/validators/base.js +218 -0
- package/{src/kinds/validators/index.ts → dist/kinds/validators/index.d.ts} +0 -2
- package/dist/kinds/validators/index.js +10 -0
- package/dist/lifecycle/BatchOperations.d.ts +147 -0
- package/dist/lifecycle/BatchOperations.js +251 -0
- package/dist/lifecycle/LifecycleManager.d.ts +362 -0
- package/dist/lifecycle/LifecycleManager.js +1692 -0
- package/dist/lifecycle/OriginalsAsset.d.ts +164 -0
- package/dist/lifecycle/OriginalsAsset.js +380 -0
- package/dist/lifecycle/ProvenanceQuery.d.ts +126 -0
- package/dist/lifecycle/ProvenanceQuery.js +220 -0
- package/dist/lifecycle/ResourceVersioning.d.ts +73 -0
- package/dist/lifecycle/ResourceVersioning.js +127 -0
- package/dist/migration/MigrationManager.d.ts +86 -0
- package/dist/migration/MigrationManager.js +412 -0
- package/dist/migration/audit/AuditLogger.d.ts +51 -0
- package/dist/migration/audit/AuditLogger.js +156 -0
- package/dist/migration/checkpoint/CheckpointManager.d.ts +31 -0
- package/dist/migration/checkpoint/CheckpointManager.js +96 -0
- package/dist/migration/checkpoint/CheckpointStorage.d.ts +26 -0
- package/dist/migration/checkpoint/CheckpointStorage.js +89 -0
- package/dist/migration/index.d.ts +22 -0
- package/{src/migration/index.ts → dist/migration/index.js} +0 -6
- package/dist/migration/operations/BaseMigration.d.ts +48 -0
- package/dist/migration/operations/BaseMigration.js +83 -0
- package/dist/migration/operations/PeerToBtcoMigration.d.ts +25 -0
- package/dist/migration/operations/PeerToBtcoMigration.js +67 -0
- package/dist/migration/operations/PeerToWebvhMigration.d.ts +19 -0
- package/dist/migration/operations/PeerToWebvhMigration.js +46 -0
- package/dist/migration/operations/WebvhToBtcoMigration.d.ts +25 -0
- package/dist/migration/operations/WebvhToBtcoMigration.js +67 -0
- package/dist/migration/rollback/RollbackManager.d.ts +29 -0
- package/dist/migration/rollback/RollbackManager.js +146 -0
- package/dist/migration/state/StateMachine.d.ts +25 -0
- package/dist/migration/state/StateMachine.js +76 -0
- package/dist/migration/state/StateTracker.d.ts +36 -0
- package/dist/migration/state/StateTracker.js +123 -0
- package/dist/migration/types.d.ts +306 -0
- package/dist/migration/types.js +33 -0
- package/dist/migration/validation/BitcoinValidator.d.ts +13 -0
- package/dist/migration/validation/BitcoinValidator.js +83 -0
- package/dist/migration/validation/CredentialValidator.d.ts +13 -0
- package/dist/migration/validation/CredentialValidator.js +46 -0
- package/dist/migration/validation/DIDCompatibilityValidator.d.ts +16 -0
- package/dist/migration/validation/DIDCompatibilityValidator.js +127 -0
- package/dist/migration/validation/LifecycleValidator.d.ts +10 -0
- package/dist/migration/validation/LifecycleValidator.js +52 -0
- package/dist/migration/validation/StorageValidator.d.ts +10 -0
- package/dist/migration/validation/StorageValidator.js +65 -0
- package/dist/migration/validation/ValidationPipeline.d.ts +29 -0
- package/dist/migration/validation/ValidationPipeline.js +180 -0
- package/dist/resources/ResourceManager.d.ts +231 -0
- package/dist/resources/ResourceManager.js +573 -0
- package/{src/resources/index.ts → dist/resources/index.d.ts} +3 -13
- package/dist/resources/index.js +10 -0
- package/dist/resources/types.d.ts +93 -0
- package/dist/resources/types.js +80 -0
- package/dist/storage/LocalStorageAdapter.d.ts +11 -0
- package/dist/storage/LocalStorageAdapter.js +53 -0
- package/dist/storage/MemoryStorageAdapter.d.ts +6 -0
- package/dist/storage/MemoryStorageAdapter.js +21 -0
- package/dist/storage/StorageAdapter.d.ts +16 -0
- package/dist/storage/StorageAdapter.js +1 -0
- package/{src/storage/index.ts → dist/storage/index.d.ts} +0 -1
- package/dist/storage/index.js +2 -0
- package/dist/types/bitcoin.d.ts +84 -0
- package/dist/types/bitcoin.js +1 -0
- package/dist/types/common.d.ts +82 -0
- package/dist/types/common.js +1 -0
- package/dist/types/credentials.d.ts +75 -0
- package/dist/types/credentials.js +1 -0
- package/dist/types/did.d.ts +26 -0
- package/dist/types/did.js +1 -0
- package/{src/types/index.ts → dist/types/index.d.ts} +0 -2
- package/dist/types/index.js +5 -0
- package/dist/types/network.d.ts +78 -0
- package/dist/types/network.js +145 -0
- package/dist/utils/EventLogger.d.ts +71 -0
- package/dist/utils/EventLogger.js +232 -0
- package/dist/utils/Logger.d.ts +106 -0
- package/dist/utils/Logger.js +257 -0
- package/dist/utils/MetricsCollector.d.ts +110 -0
- package/dist/utils/MetricsCollector.js +264 -0
- package/dist/utils/bitcoin-address.d.ts +38 -0
- package/dist/utils/bitcoin-address.js +113 -0
- package/dist/utils/cbor.d.ts +2 -0
- package/dist/utils/cbor.js +9 -0
- package/dist/utils/encoding.d.ts +37 -0
- package/dist/utils/encoding.js +120 -0
- package/dist/utils/hash.d.ts +1 -0
- package/dist/utils/hash.js +5 -0
- package/dist/utils/retry.d.ts +10 -0
- package/dist/utils/retry.js +35 -0
- package/dist/utils/satoshi-validation.d.ts +60 -0
- package/dist/utils/satoshi-validation.js +156 -0
- package/dist/utils/serialization.d.ts +14 -0
- package/dist/utils/serialization.js +76 -0
- package/dist/utils/telemetry.d.ts +17 -0
- package/dist/utils/telemetry.js +24 -0
- package/dist/utils/validation.d.ts +5 -0
- package/dist/utils/validation.js +98 -0
- package/dist/vc/CredentialManager.d.ts +329 -0
- package/dist/vc/CredentialManager.js +615 -0
- package/dist/vc/Issuer.d.ts +27 -0
- package/dist/vc/Issuer.js +70 -0
- package/dist/vc/Verifier.d.ts +16 -0
- package/dist/vc/Verifier.js +50 -0
- package/dist/vc/cryptosuites/bbs.d.ts +44 -0
- package/dist/vc/cryptosuites/bbs.js +213 -0
- package/dist/vc/cryptosuites/bbsSimple.d.ts +9 -0
- package/dist/vc/cryptosuites/bbsSimple.js +12 -0
- package/dist/vc/cryptosuites/eddsa.d.ts +30 -0
- package/dist/vc/cryptosuites/eddsa.js +81 -0
- package/dist/vc/documentLoader.d.ts +16 -0
- package/dist/vc/documentLoader.js +59 -0
- package/dist/vc/proofs/data-integrity.d.ts +21 -0
- package/dist/vc/proofs/data-integrity.js +15 -0
- package/dist/vc/utils/jsonld.d.ts +2 -0
- package/dist/vc/utils/jsonld.js +15 -0
- package/package.json +5 -1
- package/.eslintrc.json +0 -33
- package/src/adapters/FeeOracleMock.ts +0 -9
- package/src/adapters/providers/OrdHttpProvider.ts +0 -126
- package/src/adapters/providers/OrdMockProvider.ts +0 -101
- package/src/adapters/types.ts +0 -66
- package/src/bitcoin/BitcoinManager.ts +0 -330
- package/src/bitcoin/BroadcastClient.ts +0 -54
- package/src/bitcoin/OrdinalsClient.ts +0 -119
- package/src/bitcoin/PSBTBuilder.ts +0 -106
- package/src/bitcoin/providers/OrdNodeProvider.ts +0 -92
- package/src/bitcoin/providers/OrdinalsProvider.ts +0 -56
- package/src/bitcoin/providers/types.ts +0 -59
- package/src/bitcoin/transactions/commit.ts +0 -465
- package/src/bitcoin/transfer.ts +0 -43
- package/src/bitcoin/utxo-selection.ts +0 -322
- package/src/bitcoin/utxo.ts +0 -113
- package/src/contexts/credentials-v1.json +0 -237
- package/src/contexts/credentials-v2-examples.json +0 -5
- package/src/contexts/credentials-v2.json +0 -340
- package/src/contexts/credentials.json +0 -237
- package/src/contexts/data-integrity-v2.json +0 -81
- package/src/contexts/dids.json +0 -58
- package/src/contexts/ed255192020.json +0 -93
- package/src/contexts/ordinals-plus.json +0 -23
- package/src/contexts/originals.json +0 -22
- package/src/core/OriginalsSDK.ts +0 -416
- package/src/crypto/Multikey.ts +0 -194
- package/src/crypto/Signer.ts +0 -254
- package/src/crypto/noble-init.ts +0 -121
- package/src/did/BtcoDidResolver.ts +0 -227
- package/src/did/DIDManager.ts +0 -694
- package/src/did/Ed25519Verifier.ts +0 -68
- package/src/did/KeyManager.ts +0 -236
- package/src/did/WebVHManager.ts +0 -498
- package/src/did/createBtcoDidDocument.ts +0 -59
- package/src/did/providers/OrdinalsClientProviderAdapter.ts +0 -68
- package/src/events/EventEmitter.ts +0 -222
- package/src/events/index.ts +0 -19
- package/src/events/types.ts +0 -331
- package/src/examples/basic-usage.ts +0 -78
- package/src/examples/create-module-original.ts +0 -435
- package/src/examples/full-lifecycle-flow.ts +0 -514
- package/src/examples/run.ts +0 -60
- package/src/index.ts +0 -150
- package/src/kinds/KindRegistry.ts +0 -290
- package/src/kinds/types.ts +0 -470
- package/src/kinds/validators/AgentValidator.ts +0 -257
- package/src/kinds/validators/AppValidator.ts +0 -211
- package/src/kinds/validators/DatasetValidator.ts +0 -242
- package/src/kinds/validators/DocumentValidator.ts +0 -311
- package/src/kinds/validators/MediaValidator.ts +0 -269
- package/src/kinds/validators/ModuleValidator.ts +0 -225
- package/src/kinds/validators/base.ts +0 -276
- package/src/lifecycle/BatchOperations.ts +0 -373
- package/src/lifecycle/LifecycleManager.ts +0 -2126
- package/src/lifecycle/OriginalsAsset.ts +0 -524
- package/src/lifecycle/ProvenanceQuery.ts +0 -280
- package/src/lifecycle/ResourceVersioning.ts +0 -163
- package/src/migration/MigrationManager.ts +0 -527
- package/src/migration/audit/AuditLogger.ts +0 -176
- package/src/migration/checkpoint/CheckpointManager.ts +0 -112
- package/src/migration/checkpoint/CheckpointStorage.ts +0 -101
- package/src/migration/operations/BaseMigration.ts +0 -126
- package/src/migration/operations/PeerToBtcoMigration.ts +0 -105
- package/src/migration/operations/PeerToWebvhMigration.ts +0 -62
- package/src/migration/operations/WebvhToBtcoMigration.ts +0 -105
- package/src/migration/rollback/RollbackManager.ts +0 -170
- package/src/migration/state/StateMachine.ts +0 -92
- package/src/migration/state/StateTracker.ts +0 -156
- package/src/migration/types.ts +0 -344
- package/src/migration/validation/BitcoinValidator.ts +0 -107
- package/src/migration/validation/CredentialValidator.ts +0 -62
- package/src/migration/validation/DIDCompatibilityValidator.ts +0 -151
- package/src/migration/validation/LifecycleValidator.ts +0 -64
- package/src/migration/validation/StorageValidator.ts +0 -79
- package/src/migration/validation/ValidationPipeline.ts +0 -213
- package/src/resources/ResourceManager.ts +0 -655
- package/src/resources/types.ts +0 -202
- package/src/storage/LocalStorageAdapter.ts +0 -61
- package/src/storage/MemoryStorageAdapter.ts +0 -29
- package/src/storage/StorageAdapter.ts +0 -25
- package/src/types/bitcoin.ts +0 -98
- package/src/types/common.ts +0 -92
- package/src/types/credentials.ts +0 -88
- package/src/types/did.ts +0 -31
- package/src/types/external-shims.d.ts +0 -53
- package/src/types/network.ts +0 -175
- package/src/utils/EventLogger.ts +0 -298
- package/src/utils/Logger.ts +0 -322
- package/src/utils/MetricsCollector.ts +0 -358
- package/src/utils/bitcoin-address.ts +0 -130
- package/src/utils/cbor.ts +0 -12
- package/src/utils/encoding.ts +0 -127
- package/src/utils/hash.ts +0 -6
- package/src/utils/retry.ts +0 -46
- package/src/utils/satoshi-validation.ts +0 -196
- package/src/utils/serialization.ts +0 -96
- package/src/utils/telemetry.ts +0 -40
- package/src/utils/validation.ts +0 -119
- package/src/vc/CredentialManager.ts +0 -918
- package/src/vc/Issuer.ts +0 -100
- package/src/vc/Verifier.ts +0 -47
- package/src/vc/cryptosuites/bbs.ts +0 -253
- package/src/vc/cryptosuites/bbsSimple.ts +0 -21
- package/src/vc/cryptosuites/eddsa.ts +0 -99
- package/src/vc/documentLoader.ts +0 -67
- package/src/vc/proofs/data-integrity.ts +0 -33
- package/src/vc/utils/jsonld.ts +0 -18
- package/tests/__mocks__/bbs-signatures.js +0 -17
- package/tests/__mocks__/mf-base58.js +0 -24
- package/tests/fixtures/did-documents.ts +0 -247
- package/tests/index.test.ts +0 -21
- package/tests/integration/BatchOperations.test.ts +0 -531
- package/tests/integration/CompleteLifecycle.e2e.test.ts +0 -735
- package/tests/integration/CredentialManager.test.ts +0 -42
- package/tests/integration/DIDManager.test.ts +0 -41
- package/tests/integration/DidPeerToWebVhFlow.test.ts +0 -351
- package/tests/integration/Events.test.ts +0 -435
- package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +0 -25
- package/tests/integration/LifecycleManager.test.ts +0 -21
- package/tests/integration/MultikeyFlow.test.ts +0 -52
- package/tests/integration/TelemetryIntegration.test.ts +0 -395
- package/tests/integration/WebVhPublish.test.ts +0 -48
- package/tests/integration/createTypedOriginal.test.ts +0 -379
- package/tests/integration/migration/peer-to-webvh.test.ts +0 -172
- package/tests/manual/test-commit-creation.ts +0 -323
- package/tests/mocks/MockKeyStore.ts +0 -38
- package/tests/mocks/adapters/MemoryStorageAdapter.ts +0 -24
- package/tests/mocks/adapters/MockFeeOracle.ts +0 -11
- package/tests/mocks/adapters/MockOrdinalsProvider.ts +0 -76
- package/tests/mocks/adapters/OrdMockProvider.test.ts +0 -176
- package/tests/mocks/adapters/index.ts +0 -6
- package/tests/performance/BatchOperations.perf.test.ts +0 -403
- package/tests/performance/logging.perf.test.ts +0 -336
- package/tests/sdk.test.ts +0 -43
- package/tests/security/bitcoin-penetration-tests.test.ts +0 -622
- package/tests/setup.bun.ts +0 -69
- package/tests/setup.jest.ts +0 -23
- package/tests/stress/batch-operations-stress.test.ts +0 -571
- package/tests/unit/adapters/FeeOracleMock.test.ts +0 -40
- package/tests/unit/bitcoin/BitcoinManager.test.ts +0 -293
- package/tests/unit/bitcoin/BroadcastClient.test.ts +0 -52
- package/tests/unit/bitcoin/OrdNodeProvider.test.ts +0 -53
- package/tests/unit/bitcoin/OrdinalsClient.test.ts +0 -381
- package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +0 -102
- package/tests/unit/bitcoin/PSBTBuilder.test.ts +0 -84
- package/tests/unit/bitcoin/fee-calculation.test.ts +0 -261
- package/tests/unit/bitcoin/transactions/commit.test.ts +0 -649
- package/tests/unit/bitcoin/transfer.test.ts +0 -31
- package/tests/unit/bitcoin/utxo-selection-new.test.ts +0 -502
- package/tests/unit/bitcoin/utxo.more.test.ts +0 -39
- package/tests/unit/bitcoin/utxo.selection.test.ts +0 -38
- package/tests/unit/core/OriginalsSDK.test.ts +0 -152
- package/tests/unit/crypto/Multikey.test.ts +0 -206
- package/tests/unit/crypto/Signer.test.ts +0 -408
- package/tests/unit/did/BtcoDidResolver.test.ts +0 -611
- package/tests/unit/did/DIDManager.more.test.ts +0 -43
- package/tests/unit/did/DIDManager.test.ts +0 -185
- package/tests/unit/did/Ed25519Verifier.test.ts +0 -160
- package/tests/unit/did/KeyManager.test.ts +0 -452
- package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +0 -45
- package/tests/unit/did/WebVHManager.test.ts +0 -435
- package/tests/unit/did/createBtcoDidDocument.test.ts +0 -67
- package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +0 -159
- package/tests/unit/events/EventEmitter.test.ts +0 -407
- package/tests/unit/kinds/KindRegistry.test.ts +0 -329
- package/tests/unit/kinds/types.test.ts +0 -409
- package/tests/unit/kinds/validators.test.ts +0 -651
- package/tests/unit/lifecycle/BatchOperations.test.ts +0 -527
- package/tests/unit/lifecycle/LifecycleManager.cleanapi.test.ts +0 -441
- package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +0 -312
- package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +0 -18
- package/tests/unit/lifecycle/LifecycleManager.test.ts +0 -213
- package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +0 -30
- package/tests/unit/lifecycle/OriginalsAsset.test.ts +0 -176
- package/tests/unit/lifecycle/ProvenanceQuery.test.ts +0 -577
- package/tests/unit/lifecycle/ResourceVersioning.test.ts +0 -651
- package/tests/unit/resources/ResourceManager.test.ts +0 -740
- package/tests/unit/storage/MemoryStorageAdapter.test.ts +0 -93
- package/tests/unit/types/network.test.ts +0 -255
- package/tests/unit/utils/EventIntegration.test.ts +0 -384
- package/tests/unit/utils/Logger.test.ts +0 -473
- package/tests/unit/utils/MetricsCollector.test.ts +0 -358
- package/tests/unit/utils/bitcoin-address.test.ts +0 -250
- package/tests/unit/utils/cbor.test.ts +0 -35
- package/tests/unit/utils/encoding.test.ts +0 -318
- package/tests/unit/utils/hash.test.ts +0 -12
- package/tests/unit/utils/retry.test.ts +0 -100
- package/tests/unit/utils/satoshi-validation.test.ts +0 -354
- package/tests/unit/utils/serialization.test.ts +0 -124
- package/tests/unit/utils/telemetry.test.ts +0 -52
- package/tests/unit/utils/validation.test.ts +0 -141
- package/tests/unit/vc/CredentialManager.helpers.test.ts +0 -527
- package/tests/unit/vc/CredentialManager.test.ts +0 -487
- package/tests/unit/vc/Issuer.test.ts +0 -107
- package/tests/unit/vc/Verifier.test.ts +0 -525
- package/tests/unit/vc/bbs.test.ts +0 -282
- package/tests/unit/vc/cryptosuites/eddsa.test.ts +0 -398
- package/tests/unit/vc/documentLoader.test.ts +0 -121
- package/tests/unit/vc/proofs/data-integrity.test.ts +0 -24
- package/tsconfig.json +0 -31
- package/tsconfig.test.json +0 -15
package/tests/setup.jest.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// Ensure globalThis.crypto is available for noble libraries in Node test env
|
|
2
|
-
import { webcrypto } from 'node:crypto';
|
|
3
|
-
import * as ed25519 from '@noble/ed25519';
|
|
4
|
-
import { createHash } from 'node:crypto';
|
|
5
|
-
|
|
6
|
-
// Ensure Jest matchers are properly extended
|
|
7
|
-
import 'jest';
|
|
8
|
-
|
|
9
|
-
if (typeof globalThis.crypto === 'undefined') {
|
|
10
|
-
// @ts-ignore
|
|
11
|
-
globalThis.crypto = webcrypto as unknown as Crypto;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// Configure noble ed25519 to use sha512 via Node crypto
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
ed25519.etc.sha512Sync = (...msgs: Uint8Array[]) => {
|
|
17
|
-
const hasher = createHash('sha512');
|
|
18
|
-
for (const m of msgs) hasher.update(Buffer.from(m));
|
|
19
|
-
return new Uint8Array(hasher.digest());
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
@@ -1,571 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Batch Operations Stress and Load Testing
|
|
3
|
-
*
|
|
4
|
-
* This test suite performs stress testing on batch operations,
|
|
5
|
-
* migration processes, and concurrent transaction handling.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { describe, it, expect, beforeEach } from 'bun:test';
|
|
9
|
-
import { OriginalsSDK } from '../../src/core/OriginalsSDK';
|
|
10
|
-
import { OrdMockProvider } from '../../src/adapters/providers/OrdMockProvider';
|
|
11
|
-
import { BatchOperationExecutor } from '../../src/lifecycle/BatchOperations';
|
|
12
|
-
import { MemoryKeyStore } from '../../src/storage/MemoryKeyStore';
|
|
13
|
-
import type { AssetResource, OriginalsConfig } from '../../src/types';
|
|
14
|
-
|
|
15
|
-
describe('Batch Operations Stress Tests', () => {
|
|
16
|
-
let sdk: OriginalsSDK;
|
|
17
|
-
let config: OriginalsConfig;
|
|
18
|
-
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
config = {
|
|
21
|
-
network: 'regtest',
|
|
22
|
-
defaultKeyType: 'ES256K',
|
|
23
|
-
ordinalsProvider: new OrdMockProvider(),
|
|
24
|
-
enableLogging: false
|
|
25
|
-
};
|
|
26
|
-
sdk = OriginalsSDK.create(config);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
describe('1. Batch Size Scaling Tests', () => {
|
|
30
|
-
it('should handle 10 assets (baseline)', async () => {
|
|
31
|
-
const batchSize = 10;
|
|
32
|
-
const resourcesList = createTestResourcesList(batchSize);
|
|
33
|
-
|
|
34
|
-
const startTime = Date.now();
|
|
35
|
-
const result = await sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
36
|
-
continueOnError: false,
|
|
37
|
-
maxConcurrent: 1
|
|
38
|
-
});
|
|
39
|
-
const duration = Date.now() - startTime;
|
|
40
|
-
|
|
41
|
-
expect(result.successful).toHaveLength(batchSize);
|
|
42
|
-
expect(result.failed).toHaveLength(0);
|
|
43
|
-
|
|
44
|
-
logPerformanceMetrics('10 assets batch', batchSize, duration, result);
|
|
45
|
-
}, 30000);
|
|
46
|
-
|
|
47
|
-
it('should handle 100 assets (typical load)', async () => {
|
|
48
|
-
const batchSize = 100;
|
|
49
|
-
const resourcesList = createTestResourcesList(batchSize);
|
|
50
|
-
|
|
51
|
-
const startTime = Date.now();
|
|
52
|
-
const result = await sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
53
|
-
continueOnError: true,
|
|
54
|
-
maxConcurrent: 5
|
|
55
|
-
});
|
|
56
|
-
const duration = Date.now() - startTime;
|
|
57
|
-
|
|
58
|
-
expect(result.totalProcessed).toBe(batchSize);
|
|
59
|
-
expect(result.successful.length + result.failed.length).toBe(batchSize);
|
|
60
|
-
|
|
61
|
-
logPerformanceMetrics('100 assets batch', batchSize, duration, result);
|
|
62
|
-
}, 60000);
|
|
63
|
-
|
|
64
|
-
it('should handle 1000 assets (stress test)', async () => {
|
|
65
|
-
const batchSize = 1000;
|
|
66
|
-
const resourcesList = createTestResourcesList(batchSize);
|
|
67
|
-
|
|
68
|
-
const startTime = Date.now();
|
|
69
|
-
const result = await sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
70
|
-
continueOnError: true,
|
|
71
|
-
maxConcurrent: 10
|
|
72
|
-
});
|
|
73
|
-
const duration = Date.now() - startTime;
|
|
74
|
-
|
|
75
|
-
expect(result.totalProcessed).toBe(batchSize);
|
|
76
|
-
|
|
77
|
-
logPerformanceMetrics('1000 assets batch', batchSize, duration, result);
|
|
78
|
-
|
|
79
|
-
// Performance expectations
|
|
80
|
-
const avgTimePerAsset = duration / batchSize;
|
|
81
|
-
expect(avgTimePerAsset).toBeLessThan(100); // Should average < 100ms per asset
|
|
82
|
-
|
|
83
|
-
console.log(`[STRESS] Average time per asset: ${avgTimePerAsset.toFixed(2)}ms`);
|
|
84
|
-
}, 120000);
|
|
85
|
-
|
|
86
|
-
it('should handle 10000 assets (breaking point test)', async () => {
|
|
87
|
-
const batchSize = 10000;
|
|
88
|
-
const resourcesList = createTestResourcesList(batchSize);
|
|
89
|
-
|
|
90
|
-
const startTime = Date.now();
|
|
91
|
-
const startMemory = process.memoryUsage().heapUsed;
|
|
92
|
-
|
|
93
|
-
const result = await sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
94
|
-
continueOnError: true,
|
|
95
|
-
maxConcurrent: 20,
|
|
96
|
-
timeoutMs: 60000
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const duration = Date.now() - startTime;
|
|
100
|
-
const endMemory = process.memoryUsage().heapUsed;
|
|
101
|
-
const memoryDelta = (endMemory - startMemory) / 1024 / 1024; // MB
|
|
102
|
-
|
|
103
|
-
expect(result.totalProcessed).toBe(batchSize);
|
|
104
|
-
|
|
105
|
-
logPerformanceMetrics('10000 assets batch', batchSize, duration, result);
|
|
106
|
-
|
|
107
|
-
console.log(`[STRESS] Memory usage: ${memoryDelta.toFixed(2)}MB`);
|
|
108
|
-
console.log(`[STRESS] Memory per asset: ${(memoryDelta / batchSize * 1024).toFixed(2)}KB`);
|
|
109
|
-
|
|
110
|
-
// Memory should not grow unreasonably
|
|
111
|
-
expect(memoryDelta).toBeLessThan(500); // Should use < 500MB for 10k assets
|
|
112
|
-
}, 300000);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
describe('2. Concurrent Batch Operation Tests', () => {
|
|
116
|
-
it('should handle 1 concurrent batch (baseline)', async () => {
|
|
117
|
-
const result = await runConcurrentBatches(1, 50);
|
|
118
|
-
|
|
119
|
-
expect(result.allSuccessful).toBeGreaterThan(0);
|
|
120
|
-
|
|
121
|
-
logConcurrencyMetrics('1 concurrent batch', 1, 50, result);
|
|
122
|
-
}, 60000);
|
|
123
|
-
|
|
124
|
-
it('should handle 10 concurrent batches', async () => {
|
|
125
|
-
const result = await runConcurrentBatches(10, 20);
|
|
126
|
-
|
|
127
|
-
expect(result.allSuccessful).toBeGreaterThan(0);
|
|
128
|
-
|
|
129
|
-
logConcurrencyMetrics('10 concurrent batches', 10, 20, result);
|
|
130
|
-
}, 120000);
|
|
131
|
-
|
|
132
|
-
it('should handle 100 concurrent batches (high concurrency)', async () => {
|
|
133
|
-
const result = await runConcurrentBatches(100, 10);
|
|
134
|
-
|
|
135
|
-
expect(result.totalBatches).toBe(100);
|
|
136
|
-
|
|
137
|
-
logConcurrencyMetrics('100 concurrent batches', 100, 10, result);
|
|
138
|
-
|
|
139
|
-
// Calculate error rate
|
|
140
|
-
const errorRate = (result.allFailed / result.totalItems) * 100;
|
|
141
|
-
expect(errorRate).toBeLessThan(5); // < 5% error rate acceptable under high load
|
|
142
|
-
|
|
143
|
-
console.log(`[STRESS] Error rate under high concurrency: ${errorRate.toFixed(2)}%`);
|
|
144
|
-
}, 300000);
|
|
145
|
-
|
|
146
|
-
it('should handle mixed concurrent operations', async () => {
|
|
147
|
-
const operations = [
|
|
148
|
-
sdk.lifecycle.batchCreateAssets(createTestResourcesList(50)),
|
|
149
|
-
sdk.lifecycle.batchCreateAssets(createTestResourcesList(50)),
|
|
150
|
-
sdk.lifecycle.batchCreateAssets(createTestResourcesList(50)),
|
|
151
|
-
];
|
|
152
|
-
|
|
153
|
-
const startTime = Date.now();
|
|
154
|
-
const results = await Promise.all(operations);
|
|
155
|
-
const duration = Date.now() - startTime;
|
|
156
|
-
|
|
157
|
-
const totalSuccessful = results.reduce((sum, r) => sum + r.successful.length, 0);
|
|
158
|
-
const totalFailed = results.reduce((sum, r) => sum + r.failed.length, 0);
|
|
159
|
-
|
|
160
|
-
console.log(`[STRESS] Mixed concurrent operations:`);
|
|
161
|
-
console.log(` - Total successful: ${totalSuccessful}`);
|
|
162
|
-
console.log(` - Total failed: ${totalFailed}`);
|
|
163
|
-
console.log(` - Duration: ${duration}ms`);
|
|
164
|
-
console.log(` - Throughput: ${(totalSuccessful / (duration / 1000)).toFixed(2)} assets/sec`);
|
|
165
|
-
}, 120000);
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
describe('3. Batch Inscription Stress Tests', () => {
|
|
169
|
-
it('should handle batch inscription with single transaction mode', async () => {
|
|
170
|
-
// Create assets first
|
|
171
|
-
const resourcesList = createTestResourcesList(10);
|
|
172
|
-
const createResult = await sdk.lifecycle.batchCreateAssets(resourcesList);
|
|
173
|
-
|
|
174
|
-
expect(createResult.successful).toHaveLength(10);
|
|
175
|
-
|
|
176
|
-
const assets = createResult.successful.map(s => s.result);
|
|
177
|
-
|
|
178
|
-
// Inscribe in batch with single transaction
|
|
179
|
-
const startTime = Date.now();
|
|
180
|
-
const inscribeResult = await sdk.lifecycle.batchInscribeOnBitcoin(assets, {
|
|
181
|
-
singleTransaction: true,
|
|
182
|
-
feeRate: 10,
|
|
183
|
-
continueOnError: false
|
|
184
|
-
});
|
|
185
|
-
const duration = Date.now() - startTime;
|
|
186
|
-
|
|
187
|
-
expect(inscribeResult.successful).toHaveLength(10);
|
|
188
|
-
|
|
189
|
-
console.log(`[STRESS] Batch inscription (single tx):`);
|
|
190
|
-
console.log(` - Assets: 10`);
|
|
191
|
-
console.log(` - Duration: ${duration}ms`);
|
|
192
|
-
console.log(` - Mode: Single transaction`);
|
|
193
|
-
}, 60000);
|
|
194
|
-
|
|
195
|
-
it('should handle batch inscription with individual transactions', async () => {
|
|
196
|
-
const resourcesList = createTestResourcesList(10);
|
|
197
|
-
const createResult = await sdk.lifecycle.batchCreateAssets(resourcesList);
|
|
198
|
-
const assets = createResult.successful.map(s => s.result);
|
|
199
|
-
|
|
200
|
-
const startTime = Date.now();
|
|
201
|
-
const inscribeResult = await sdk.lifecycle.batchInscribeOnBitcoin(assets, {
|
|
202
|
-
singleTransaction: false,
|
|
203
|
-
feeRate: 10,
|
|
204
|
-
continueOnError: true,
|
|
205
|
-
maxConcurrent: 3
|
|
206
|
-
});
|
|
207
|
-
const duration = Date.now() - startTime;
|
|
208
|
-
|
|
209
|
-
expect(inscribeResult.totalProcessed).toBe(10);
|
|
210
|
-
|
|
211
|
-
console.log(`[STRESS] Batch inscription (individual txs):`);
|
|
212
|
-
console.log(` - Assets: 10`);
|
|
213
|
-
console.log(` - Duration: ${duration}ms`);
|
|
214
|
-
console.log(` - Mode: Individual transactions`);
|
|
215
|
-
console.log(` - Concurrency: 3`);
|
|
216
|
-
}, 60000);
|
|
217
|
-
|
|
218
|
-
it('should compare cost savings between modes', async () => {
|
|
219
|
-
const resourcesList = createTestResourcesList(50);
|
|
220
|
-
const createResult = await sdk.lifecycle.batchCreateAssets(resourcesList);
|
|
221
|
-
const assets = createResult.successful.map(s => s.result);
|
|
222
|
-
|
|
223
|
-
// Test single transaction mode
|
|
224
|
-
const singleTxStart = Date.now();
|
|
225
|
-
const singleTxResult = await sdk.lifecycle.batchInscribeOnBitcoin(
|
|
226
|
-
assets.slice(0, 25),
|
|
227
|
-
{
|
|
228
|
-
singleTransaction: true,
|
|
229
|
-
feeRate: 10
|
|
230
|
-
}
|
|
231
|
-
);
|
|
232
|
-
const singleTxDuration = Date.now() - singleTxStart;
|
|
233
|
-
|
|
234
|
-
// Test individual transaction mode
|
|
235
|
-
const individualTxStart = Date.now();
|
|
236
|
-
const individualTxResult = await sdk.lifecycle.batchInscribeOnBitcoin(
|
|
237
|
-
assets.slice(25, 50),
|
|
238
|
-
{
|
|
239
|
-
singleTransaction: false,
|
|
240
|
-
feeRate: 10,
|
|
241
|
-
maxConcurrent: 5
|
|
242
|
-
}
|
|
243
|
-
);
|
|
244
|
-
const individualTxDuration = Date.now() - individualTxStart;
|
|
245
|
-
|
|
246
|
-
console.log(`[STRESS] Cost comparison:`);
|
|
247
|
-
console.log(` Single TX mode:`);
|
|
248
|
-
console.log(` - Duration: ${singleTxDuration}ms`);
|
|
249
|
-
console.log(` - Assets: 25`);
|
|
250
|
-
console.log(` Individual TX mode:`);
|
|
251
|
-
console.log(` - Duration: ${individualTxDuration}ms`);
|
|
252
|
-
console.log(` - Assets: 25`);
|
|
253
|
-
console.log(` - Concurrency: 5`);
|
|
254
|
-
console.log(` Performance ratio: ${(individualTxDuration / singleTxDuration).toFixed(2)}x`);
|
|
255
|
-
}, 120000);
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
describe('4. Migration Operation Stress Tests', () => {
|
|
259
|
-
it('should handle 1000 assets migrating through layers', async () => {
|
|
260
|
-
const batchSize = 1000;
|
|
261
|
-
const resourcesList = createTestResourcesList(batchSize);
|
|
262
|
-
|
|
263
|
-
// Create assets (did:peer layer)
|
|
264
|
-
const createResult = await sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
265
|
-
maxConcurrent: 10
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
expect(createResult.successful).toHaveLength(batchSize);
|
|
269
|
-
|
|
270
|
-
const startTime = Date.now();
|
|
271
|
-
let migratedCount = 0;
|
|
272
|
-
|
|
273
|
-
// Migrate to did:webvh layer
|
|
274
|
-
for (const { result: asset } of createResult.successful.slice(0, 100)) {
|
|
275
|
-
try {
|
|
276
|
-
await sdk.lifecycle.publishToWeb(asset, 'localhost:3000');
|
|
277
|
-
migratedCount++;
|
|
278
|
-
} catch (error) {
|
|
279
|
-
// Expected to fail in test environment
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
const duration = Date.now() - startTime;
|
|
284
|
-
|
|
285
|
-
console.log(`[STRESS] Migration stress test:`);
|
|
286
|
-
console.log(` - Assets created: ${batchSize}`);
|
|
287
|
-
console.log(` - Assets migrated: ${migratedCount}`);
|
|
288
|
-
console.log(` - Duration: ${duration}ms`);
|
|
289
|
-
console.log(` - Avg time per migration: ${migratedCount > 0 ? (duration / migratedCount).toFixed(2) : 'N/A'}ms`);
|
|
290
|
-
}, 120000);
|
|
291
|
-
|
|
292
|
-
it('should handle concurrent migrations', async () => {
|
|
293
|
-
const resourcesList = createTestResourcesList(30);
|
|
294
|
-
const createResult = await sdk.lifecycle.batchCreateAssets(resourcesList);
|
|
295
|
-
const assets = createResult.successful.map(s => s.result);
|
|
296
|
-
|
|
297
|
-
const startTime = Date.now();
|
|
298
|
-
|
|
299
|
-
// Attempt concurrent migrations
|
|
300
|
-
const migrations = assets.slice(0, 10).map(asset =>
|
|
301
|
-
sdk.lifecycle.publishToWeb(asset, 'localhost:3000').catch(e => e)
|
|
302
|
-
);
|
|
303
|
-
|
|
304
|
-
await Promise.allSettled(migrations);
|
|
305
|
-
|
|
306
|
-
const duration = Date.now() - startTime;
|
|
307
|
-
|
|
308
|
-
console.log(`[STRESS] Concurrent migrations:`);
|
|
309
|
-
console.log(` - Concurrent operations: 10`);
|
|
310
|
-
console.log(` - Duration: ${duration}ms`);
|
|
311
|
-
}, 60000);
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
describe('5. Error Recovery and Retry Stress Tests', () => {
|
|
315
|
-
it('should handle batch with 50% failure rate and retry', async () => {
|
|
316
|
-
const executor = new BatchOperationExecutor();
|
|
317
|
-
let callCount = 0;
|
|
318
|
-
|
|
319
|
-
const items = Array.from({ length: 100 }, (_, i) => i);
|
|
320
|
-
|
|
321
|
-
const result = await executor.execute(
|
|
322
|
-
items,
|
|
323
|
-
async (item) => {
|
|
324
|
-
callCount++;
|
|
325
|
-
// Simulate 50% failure on first attempt
|
|
326
|
-
if (callCount % 2 === 0 && callCount <= 100) {
|
|
327
|
-
throw new Error('Simulated failure');
|
|
328
|
-
}
|
|
329
|
-
return item * 2;
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
continueOnError: true,
|
|
333
|
-
retryCount: 2,
|
|
334
|
-
retryDelay: 10,
|
|
335
|
-
maxConcurrent: 5
|
|
336
|
-
}
|
|
337
|
-
);
|
|
338
|
-
|
|
339
|
-
console.log(`[STRESS] Error recovery test:`);
|
|
340
|
-
console.log(` - Total items: 100`);
|
|
341
|
-
console.log(` - Successful: ${result.successful.length}`);
|
|
342
|
-
console.log(` - Failed: ${result.failed.length}`);
|
|
343
|
-
console.log(` - Total calls (with retries): ${callCount}`);
|
|
344
|
-
console.log(` - Duration: ${result.totalDuration}ms`);
|
|
345
|
-
}, 60000);
|
|
346
|
-
|
|
347
|
-
it('should handle exponential backoff under stress', async () => {
|
|
348
|
-
const executor = new BatchOperationExecutor();
|
|
349
|
-
const retryTimes: number[] = [];
|
|
350
|
-
|
|
351
|
-
const items = Array.from({ length: 10 }, (_, i) => i);
|
|
352
|
-
|
|
353
|
-
await executor.execute(
|
|
354
|
-
items,
|
|
355
|
-
async (item, index) => {
|
|
356
|
-
retryTimes.push(Date.now());
|
|
357
|
-
if (retryTimes.length <= 20) { // Fail first few
|
|
358
|
-
throw new Error('Force retry');
|
|
359
|
-
}
|
|
360
|
-
return item;
|
|
361
|
-
},
|
|
362
|
-
{
|
|
363
|
-
continueOnError: true,
|
|
364
|
-
retryCount: 3,
|
|
365
|
-
retryDelay: 100,
|
|
366
|
-
maxConcurrent: 1
|
|
367
|
-
}
|
|
368
|
-
);
|
|
369
|
-
|
|
370
|
-
// Analyze retry delays
|
|
371
|
-
const delays: number[] = [];
|
|
372
|
-
for (let i = 1; i < Math.min(retryTimes.length, 10); i++) {
|
|
373
|
-
delays.push(retryTimes[i] - retryTimes[i - 1]);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
console.log(`[STRESS] Exponential backoff analysis:`);
|
|
377
|
-
console.log(` - Retry delays: ${delays.map(d => d + 'ms').join(', ')}`);
|
|
378
|
-
console.log(` - Average delay: ${(delays.reduce((a, b) => a + b, 0) / delays.length).toFixed(2)}ms`);
|
|
379
|
-
}, 30000);
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
describe('6. Memory and Resource Tests', () => {
|
|
383
|
-
it('should not leak memory during repeated batch operations', async () => {
|
|
384
|
-
const iterations = 10;
|
|
385
|
-
const batchSize = 100;
|
|
386
|
-
|
|
387
|
-
const memoryReadings: number[] = [];
|
|
388
|
-
|
|
389
|
-
for (let i = 0; i < iterations; i++) {
|
|
390
|
-
const resourcesList = createTestResourcesList(batchSize);
|
|
391
|
-
|
|
392
|
-
await sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
393
|
-
maxConcurrent: 5
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
// Force garbage collection if available
|
|
397
|
-
if (global.gc) {
|
|
398
|
-
global.gc();
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
const memUsage = process.memoryUsage().heapUsed / 1024 / 1024; // MB
|
|
402
|
-
memoryReadings.push(memUsage);
|
|
403
|
-
|
|
404
|
-
console.log(`[STRESS] Iteration ${i + 1}: ${memUsage.toFixed(2)}MB`);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
// Check for memory leak (memory shouldn't grow linearly)
|
|
408
|
-
const firstHalf = memoryReadings.slice(0, 5).reduce((a, b) => a + b) / 5;
|
|
409
|
-
const secondHalf = memoryReadings.slice(5).reduce((a, b) => a + b) / 5;
|
|
410
|
-
const growth = ((secondHalf - firstHalf) / firstHalf) * 100;
|
|
411
|
-
|
|
412
|
-
console.log(`[STRESS] Memory growth: ${growth.toFixed(2)}%`);
|
|
413
|
-
expect(Math.abs(growth)).toBeLessThan(50); // Memory shouldn't grow > 50%
|
|
414
|
-
}, 180000);
|
|
415
|
-
|
|
416
|
-
it('should handle resource cleanup after timeout', async () => {
|
|
417
|
-
const executor = new BatchOperationExecutor();
|
|
418
|
-
|
|
419
|
-
const result = await executor.execute(
|
|
420
|
-
[1, 2, 3, 4, 5],
|
|
421
|
-
async (item) => {
|
|
422
|
-
// Simulate long-running operation
|
|
423
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
424
|
-
return item * 2;
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
timeoutMs: 50, // Timeout before completion
|
|
428
|
-
continueOnError: true
|
|
429
|
-
}
|
|
430
|
-
);
|
|
431
|
-
|
|
432
|
-
expect(result.failed.length).toBeGreaterThan(0);
|
|
433
|
-
console.log(`[STRESS] Timeout handling: ${result.failed.length} operations timed out`);
|
|
434
|
-
}, 10000);
|
|
435
|
-
});
|
|
436
|
-
|
|
437
|
-
describe('7. Throughput Benchmarks', () => {
|
|
438
|
-
it('should measure peak throughput for asset creation', async () => {
|
|
439
|
-
const testDuration = 5000; // 5 seconds
|
|
440
|
-
const startTime = Date.now();
|
|
441
|
-
let totalCreated = 0;
|
|
442
|
-
|
|
443
|
-
while (Date.now() - startTime < testDuration) {
|
|
444
|
-
const batch = createTestResourcesList(10);
|
|
445
|
-
const result = await sdk.lifecycle.batchCreateAssets(batch, {
|
|
446
|
-
maxConcurrent: 5
|
|
447
|
-
});
|
|
448
|
-
totalCreated += result.successful.length;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
const actualDuration = Date.now() - startTime;
|
|
452
|
-
const throughput = (totalCreated / actualDuration) * 1000; // per second
|
|
453
|
-
|
|
454
|
-
console.log(`[BENCHMARK] Asset creation throughput:`);
|
|
455
|
-
console.log(` - Total created: ${totalCreated}`);
|
|
456
|
-
console.log(` - Duration: ${actualDuration}ms`);
|
|
457
|
-
console.log(` - Throughput: ${throughput.toFixed(2)} assets/sec`);
|
|
458
|
-
|
|
459
|
-
expect(throughput).toBeGreaterThan(10); // Should create at least 10 assets/sec
|
|
460
|
-
}, 10000);
|
|
461
|
-
});
|
|
462
|
-
});
|
|
463
|
-
|
|
464
|
-
// Helper functions
|
|
465
|
-
|
|
466
|
-
function createTestResourcesList(count: number): AssetResource[][] {
|
|
467
|
-
return Array.from({ length: count }, (_, i) => [
|
|
468
|
-
{
|
|
469
|
-
id: `resource-${i}-${Date.now()}`,
|
|
470
|
-
type: 'DigitalArt',
|
|
471
|
-
contentType: 'application/json',
|
|
472
|
-
hash: Buffer.from(`hash-${i}`).toString('hex'),
|
|
473
|
-
content: JSON.stringify({ test: `data-${i}` })
|
|
474
|
-
}
|
|
475
|
-
]);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
interface ConcurrencyResult {
|
|
479
|
-
totalBatches: number;
|
|
480
|
-
totalItems: number;
|
|
481
|
-
allSuccessful: number;
|
|
482
|
-
allFailed: number;
|
|
483
|
-
duration: number;
|
|
484
|
-
avgBatchDuration: number;
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
async function runConcurrentBatches(
|
|
488
|
-
batchCount: number,
|
|
489
|
-
itemsPerBatch: number
|
|
490
|
-
): Promise<ConcurrencyResult> {
|
|
491
|
-
const config: OriginalsConfig = {
|
|
492
|
-
network: 'regtest',
|
|
493
|
-
defaultKeyType: 'ES256K',
|
|
494
|
-
ordinalsProvider: new OrdMockProvider(),
|
|
495
|
-
enableLogging: false
|
|
496
|
-
};
|
|
497
|
-
|
|
498
|
-
const startTime = Date.now();
|
|
499
|
-
|
|
500
|
-
const batches = Array.from({ length: batchCount }, () => {
|
|
501
|
-
const sdk = OriginalsSDK.create(config);
|
|
502
|
-
const resourcesList = createTestResourcesList(itemsPerBatch);
|
|
503
|
-
return sdk.lifecycle.batchCreateAssets(resourcesList, {
|
|
504
|
-
maxConcurrent: 1,
|
|
505
|
-
continueOnError: true
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
|
|
509
|
-
const results = await Promise.all(batches);
|
|
510
|
-
const duration = Date.now() - startTime;
|
|
511
|
-
|
|
512
|
-
const allSuccessful = results.reduce((sum, r) => sum + r.successful.length, 0);
|
|
513
|
-
const allFailed = results.reduce((sum, r) => sum + r.failed.length, 0);
|
|
514
|
-
const avgBatchDuration = results.reduce((sum, r) => sum + r.totalDuration, 0) / batchCount;
|
|
515
|
-
|
|
516
|
-
return {
|
|
517
|
-
totalBatches: batchCount,
|
|
518
|
-
totalItems: batchCount * itemsPerBatch,
|
|
519
|
-
allSuccessful,
|
|
520
|
-
allFailed,
|
|
521
|
-
duration,
|
|
522
|
-
avgBatchDuration
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
function logPerformanceMetrics(
|
|
527
|
-
testName: string,
|
|
528
|
-
itemCount: number,
|
|
529
|
-
duration: number,
|
|
530
|
-
result: any
|
|
531
|
-
): void {
|
|
532
|
-
const throughput = (itemCount / duration) * 1000; // items per second
|
|
533
|
-
|
|
534
|
-
console.log(`\n[PERFORMANCE] ${testName}:`);
|
|
535
|
-
console.log(` - Total items: ${itemCount}`);
|
|
536
|
-
console.log(` - Successful: ${result.successful.length}`);
|
|
537
|
-
console.log(` - Failed: ${result.failed.length}`);
|
|
538
|
-
console.log(` - Duration: ${duration}ms`);
|
|
539
|
-
console.log(` - Throughput: ${throughput.toFixed(2)} items/sec`);
|
|
540
|
-
console.log(` - Avg time per item: ${(duration / itemCount).toFixed(2)}ms`);
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
function logConcurrencyMetrics(
|
|
544
|
-
testName: string,
|
|
545
|
-
batchCount: number,
|
|
546
|
-
itemsPerBatch: number,
|
|
547
|
-
result: ConcurrencyResult
|
|
548
|
-
): void {
|
|
549
|
-
const throughput = (result.totalItems / result.duration) * 1000;
|
|
550
|
-
|
|
551
|
-
console.log(`\n[CONCURRENCY] ${testName}:`);
|
|
552
|
-
console.log(` - Concurrent batches: ${batchCount}`);
|
|
553
|
-
console.log(` - Items per batch: ${itemsPerBatch}`);
|
|
554
|
-
console.log(` - Total items: ${result.totalItems}`);
|
|
555
|
-
console.log(` - Successful: ${result.allSuccessful}`);
|
|
556
|
-
console.log(` - Failed: ${result.allFailed}`);
|
|
557
|
-
console.log(` - Total duration: ${result.duration}ms`);
|
|
558
|
-
console.log(` - Avg batch duration: ${result.avgBatchDuration.toFixed(2)}ms`);
|
|
559
|
-
console.log(` - Overall throughput: ${throughput.toFixed(2)} items/sec`);
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
console.log('\n=== Batch Operations Stress Test Suite Complete ===\n');
|
|
563
|
-
console.log('This test suite validates performance and stability under:');
|
|
564
|
-
console.log('- Varying batch sizes (10 to 10,000 assets)');
|
|
565
|
-
console.log('- High concurrency (up to 100 concurrent batches)');
|
|
566
|
-
console.log('- Batch inscription modes (single tx vs individual txs)');
|
|
567
|
-
console.log('- Migration operations under load');
|
|
568
|
-
console.log('- Error recovery and retry mechanisms');
|
|
569
|
-
console.log('- Memory and resource management');
|
|
570
|
-
console.log('- Throughput benchmarks');
|
|
571
|
-
console.log('\n=================================================\n');
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect } from 'bun:test';
|
|
2
|
-
import { FeeOracleMock } from '../../../src/adapters/FeeOracleMock';
|
|
3
|
-
|
|
4
|
-
describe('FeeOracleMock', () => {
|
|
5
|
-
test('constructor initializes with default fee rate', async () => {
|
|
6
|
-
const oracle = new FeeOracleMock();
|
|
7
|
-
const rate = await oracle.estimateFeeRate();
|
|
8
|
-
expect(rate).toBe(7);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
test('constructor accepts custom fee rate', async () => {
|
|
12
|
-
const oracle = new FeeOracleMock(10);
|
|
13
|
-
const rate = await oracle.estimateFeeRate();
|
|
14
|
-
expect(rate).toBe(10);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
test('estimateFeeRate returns rate for 1 block', async () => {
|
|
18
|
-
const oracle = new FeeOracleMock(7);
|
|
19
|
-
const rate = await oracle.estimateFeeRate(1);
|
|
20
|
-
expect(rate).toBe(7);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test('estimateFeeRate decreases for higher target blocks', async () => {
|
|
24
|
-
const oracle = new FeeOracleMock(7);
|
|
25
|
-
const rate = await oracle.estimateFeeRate(3);
|
|
26
|
-
expect(rate).toBe(5); // 7 - (3 - 1) = 5
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test('estimateFeeRate returns minimum of 1', async () => {
|
|
30
|
-
const oracle = new FeeOracleMock(2);
|
|
31
|
-
const rate = await oracle.estimateFeeRate(10);
|
|
32
|
-
expect(rate).toBe(1); // Math.max(1, 2 - 9) = 1
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test('estimateFeeRate works without target blocks parameter', async () => {
|
|
36
|
-
const oracle = new FeeOracleMock(5);
|
|
37
|
-
const rate = await oracle.estimateFeeRate();
|
|
38
|
-
expect(rate).toBe(5);
|
|
39
|
-
});
|
|
40
|
-
});
|