@originals/sdk 1.2.0 → 1.4.3
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/package.json +4 -1
- package/.eslintrc.json +0 -33
- package/.turbo/turbo-build.log +0 -1
- package/dist/adapters/FeeOracleMock.d.ts +0 -6
- package/dist/adapters/FeeOracleMock.js +0 -8
- package/dist/adapters/index.d.ts +0 -4
- package/dist/adapters/index.js +0 -4
- package/dist/adapters/providers/OrdHttpProvider.d.ts +0 -56
- package/dist/adapters/providers/OrdHttpProvider.js +0 -110
- package/dist/adapters/providers/OrdMockProvider.d.ts +0 -70
- package/dist/adapters/providers/OrdMockProvider.js +0 -75
- package/dist/adapters/types.d.ts +0 -71
- package/dist/adapters/types.js +0 -1
- package/dist/bitcoin/BitcoinManager.d.ts +0 -15
- package/dist/bitcoin/BitcoinManager.js +0 -262
- package/dist/bitcoin/BroadcastClient.d.ts +0 -30
- package/dist/bitcoin/BroadcastClient.js +0 -35
- package/dist/bitcoin/OrdinalsClient.d.ts +0 -21
- package/dist/bitcoin/OrdinalsClient.js +0 -105
- package/dist/bitcoin/PSBTBuilder.d.ts +0 -24
- package/dist/bitcoin/PSBTBuilder.js +0 -80
- package/dist/bitcoin/fee-calculation.d.ts +0 -14
- package/dist/bitcoin/fee-calculation.js +0 -31
- package/dist/bitcoin/providers/OrdNodeProvider.d.ts +0 -38
- package/dist/bitcoin/providers/OrdNodeProvider.js +0 -67
- package/dist/bitcoin/providers/OrdinalsProvider.d.ts +0 -33
- package/dist/bitcoin/providers/OrdinalsProvider.js +0 -50
- package/dist/bitcoin/providers/types.d.ts +0 -63
- package/dist/bitcoin/providers/types.js +0 -1
- package/dist/bitcoin/transactions/commit.d.ts +0 -89
- package/dist/bitcoin/transactions/commit.js +0 -311
- package/dist/bitcoin/transactions/index.d.ts +0 -7
- package/dist/bitcoin/transactions/index.js +0 -8
- package/dist/bitcoin/transfer.d.ts +0 -9
- package/dist/bitcoin/transfer.js +0 -26
- package/dist/bitcoin/utxo-selection.d.ts +0 -78
- package/dist/bitcoin/utxo-selection.js +0 -237
- package/dist/bitcoin/utxo.d.ts +0 -26
- package/dist/bitcoin/utxo.js +0 -78
- package/dist/contexts/credentials-v1.json +0 -195
- package/dist/contexts/credentials-v2-examples.json +0 -5
- package/dist/contexts/credentials-v2.json +0 -301
- package/dist/contexts/credentials.json +0 -195
- package/dist/contexts/data-integrity-v2.json +0 -81
- package/dist/contexts/dids.json +0 -57
- package/dist/contexts/ed255192020.json +0 -93
- package/dist/contexts/ordinals-plus.json +0 -23
- package/dist/contexts/originals.json +0 -22
- package/dist/core/OriginalsSDK.d.ts +0 -158
- package/dist/core/OriginalsSDK.js +0 -274
- package/dist/crypto/Multikey.d.ts +0 -30
- package/dist/crypto/Multikey.js +0 -149
- package/dist/crypto/Signer.d.ts +0 -21
- package/dist/crypto/Signer.js +0 -196
- package/dist/crypto/noble-init.d.ts +0 -18
- package/dist/crypto/noble-init.js +0 -106
- package/dist/did/BtcoDidResolver.d.ts +0 -57
- package/dist/did/BtcoDidResolver.js +0 -166
- package/dist/did/DIDManager.d.ts +0 -101
- package/dist/did/DIDManager.js +0 -493
- package/dist/did/Ed25519Verifier.d.ts +0 -30
- package/dist/did/Ed25519Verifier.js +0 -59
- package/dist/did/KeyManager.d.ts +0 -17
- package/dist/did/KeyManager.js +0 -207
- package/dist/did/WebVHManager.d.ts +0 -100
- package/dist/did/WebVHManager.js +0 -304
- package/dist/did/createBtcoDidDocument.d.ts +0 -10
- package/dist/did/createBtcoDidDocument.js +0 -42
- package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +0 -23
- package/dist/did/providers/OrdinalsClientProviderAdapter.js +0 -51
- package/dist/events/EventEmitter.d.ts +0 -115
- package/dist/events/EventEmitter.js +0 -198
- package/dist/events/index.d.ts +0 -7
- package/dist/events/index.js +0 -6
- package/dist/events/types.d.ts +0 -286
- package/dist/events/types.js +0 -9
- package/dist/examples/basic-usage.d.ts +0 -3
- package/dist/examples/basic-usage.js +0 -62
- package/dist/examples/run.d.ts +0 -1
- package/dist/examples/run.js +0 -4
- package/dist/index.d.ts +0 -39
- package/dist/index.js +0 -47
- package/dist/lifecycle/BatchOperations.d.ts +0 -147
- package/dist/lifecycle/BatchOperations.js +0 -251
- package/dist/lifecycle/LifecycleManager.d.ts +0 -116
- package/dist/lifecycle/LifecycleManager.js +0 -971
- package/dist/lifecycle/OriginalsAsset.d.ts +0 -164
- package/dist/lifecycle/OriginalsAsset.js +0 -380
- package/dist/lifecycle/ProvenanceQuery.d.ts +0 -126
- package/dist/lifecycle/ProvenanceQuery.js +0 -220
- package/dist/lifecycle/ResourceVersioning.d.ts +0 -73
- package/dist/lifecycle/ResourceVersioning.js +0 -127
- package/dist/migration/MigrationManager.d.ts +0 -86
- package/dist/migration/MigrationManager.js +0 -412
- package/dist/migration/audit/AuditLogger.d.ts +0 -51
- package/dist/migration/audit/AuditLogger.js +0 -156
- package/dist/migration/checkpoint/CheckpointManager.d.ts +0 -31
- package/dist/migration/checkpoint/CheckpointManager.js +0 -96
- package/dist/migration/checkpoint/CheckpointStorage.d.ts +0 -26
- package/dist/migration/checkpoint/CheckpointStorage.js +0 -89
- package/dist/migration/index.d.ts +0 -22
- package/dist/migration/index.js +0 -27
- package/dist/migration/operations/BaseMigration.d.ts +0 -48
- package/dist/migration/operations/BaseMigration.js +0 -83
- package/dist/migration/operations/PeerToBtcoMigration.d.ts +0 -25
- package/dist/migration/operations/PeerToBtcoMigration.js +0 -67
- package/dist/migration/operations/PeerToWebvhMigration.d.ts +0 -19
- package/dist/migration/operations/PeerToWebvhMigration.js +0 -46
- package/dist/migration/operations/WebvhToBtcoMigration.d.ts +0 -25
- package/dist/migration/operations/WebvhToBtcoMigration.js +0 -67
- package/dist/migration/rollback/RollbackManager.d.ts +0 -29
- package/dist/migration/rollback/RollbackManager.js +0 -146
- package/dist/migration/state/StateMachine.d.ts +0 -25
- package/dist/migration/state/StateMachine.js +0 -76
- package/dist/migration/state/StateTracker.d.ts +0 -36
- package/dist/migration/state/StateTracker.js +0 -123
- package/dist/migration/types.d.ts +0 -306
- package/dist/migration/types.js +0 -33
- package/dist/migration/validation/BitcoinValidator.d.ts +0 -13
- package/dist/migration/validation/BitcoinValidator.js +0 -83
- package/dist/migration/validation/CredentialValidator.d.ts +0 -13
- package/dist/migration/validation/CredentialValidator.js +0 -46
- package/dist/migration/validation/DIDCompatibilityValidator.d.ts +0 -16
- package/dist/migration/validation/DIDCompatibilityValidator.js +0 -127
- package/dist/migration/validation/LifecycleValidator.d.ts +0 -10
- package/dist/migration/validation/LifecycleValidator.js +0 -52
- package/dist/migration/validation/StorageValidator.d.ts +0 -10
- package/dist/migration/validation/StorageValidator.js +0 -65
- package/dist/migration/validation/ValidationPipeline.d.ts +0 -29
- package/dist/migration/validation/ValidationPipeline.js +0 -180
- package/dist/storage/LocalStorageAdapter.d.ts +0 -11
- package/dist/storage/LocalStorageAdapter.js +0 -53
- package/dist/storage/MemoryStorageAdapter.d.ts +0 -6
- package/dist/storage/MemoryStorageAdapter.js +0 -21
- package/dist/storage/StorageAdapter.d.ts +0 -16
- package/dist/storage/StorageAdapter.js +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -2
- package/dist/types/bitcoin.d.ts +0 -84
- package/dist/types/bitcoin.js +0 -1
- package/dist/types/common.d.ts +0 -82
- package/dist/types/common.js +0 -1
- package/dist/types/credentials.d.ts +0 -75
- package/dist/types/credentials.js +0 -1
- package/dist/types/did.d.ts +0 -26
- package/dist/types/did.js +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.js +0 -5
- package/dist/types/network.d.ts +0 -78
- package/dist/types/network.js +0 -145
- package/dist/utils/EventLogger.d.ts +0 -71
- package/dist/utils/EventLogger.js +0 -232
- package/dist/utils/Logger.d.ts +0 -106
- package/dist/utils/Logger.js +0 -257
- package/dist/utils/MetricsCollector.d.ts +0 -110
- package/dist/utils/MetricsCollector.js +0 -264
- package/dist/utils/bitcoin-address.d.ts +0 -38
- package/dist/utils/bitcoin-address.js +0 -113
- package/dist/utils/cbor.d.ts +0 -2
- package/dist/utils/cbor.js +0 -9
- package/dist/utils/encoding.d.ts +0 -37
- package/dist/utils/encoding.js +0 -120
- package/dist/utils/hash.d.ts +0 -1
- package/dist/utils/hash.js +0 -5
- package/dist/utils/retry.d.ts +0 -10
- package/dist/utils/retry.js +0 -35
- package/dist/utils/satoshi-validation.d.ts +0 -60
- package/dist/utils/satoshi-validation.js +0 -156
- package/dist/utils/serialization.d.ts +0 -14
- package/dist/utils/serialization.js +0 -76
- package/dist/utils/telemetry.d.ts +0 -17
- package/dist/utils/telemetry.js +0 -24
- package/dist/utils/validation.d.ts +0 -5
- package/dist/utils/validation.js +0 -98
- package/dist/vc/CredentialManager.d.ts +0 -22
- package/dist/vc/CredentialManager.js +0 -227
- package/dist/vc/Issuer.d.ts +0 -27
- package/dist/vc/Issuer.js +0 -70
- package/dist/vc/Verifier.d.ts +0 -16
- package/dist/vc/Verifier.js +0 -50
- package/dist/vc/cryptosuites/bbs.d.ts +0 -44
- package/dist/vc/cryptosuites/bbs.js +0 -213
- package/dist/vc/cryptosuites/bbsSimple.d.ts +0 -9
- package/dist/vc/cryptosuites/bbsSimple.js +0 -12
- package/dist/vc/cryptosuites/eddsa.d.ts +0 -30
- package/dist/vc/cryptosuites/eddsa.js +0 -81
- package/dist/vc/documentLoader.d.ts +0 -16
- package/dist/vc/documentLoader.js +0 -59
- package/dist/vc/proofs/data-integrity.d.ts +0 -21
- package/dist/vc/proofs/data-integrity.js +0 -15
- package/dist/vc/utils/jsonld.d.ts +0 -2
- package/dist/vc/utils/jsonld.js +0 -15
- package/src/adapters/FeeOracleMock.ts +0 -9
- package/src/adapters/index.ts +0 -5
- 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/fee-calculation.ts +0 -38
- 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/transactions/index.ts +0 -13
- 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 -489
- 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/run.ts +0 -5
- package/src/index.ts +0 -84
- package/src/lifecycle/BatchOperations.ts +0 -373
- package/src/lifecycle/LifecycleManager.ts +0 -1218
- 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/index.ts +0 -33
- 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/storage/LocalStorageAdapter.ts +0 -61
- package/src/storage/MemoryStorageAdapter.ts +0 -29
- package/src/storage/StorageAdapter.ts +0 -25
- package/src/storage/index.ts +0 -3
- 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/index.ts +0 -7
- 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 -273
- 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/test/logs/did_webvh_QmNTn9Kkp8dQ75WrF9xqJ2kuDp9QhKc3aPiERRMj8XoTBN_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmNu4MNr8Lr5txx5gYNhuhZDchXsZEu3hJXKYuphpWTPDp_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmR9MrGZACzjKETA8SBRNCKG11HxU85c4bVR2qN5eDCfsD_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmUc5suaqRM2P4nrXxZwqYMfqzhdMqjuL7oJaJbEpCQVCd_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmUkiB2RCV2VZ1RTXsCebWN25Eiy9TLvpzDWAJNjhgvB4X_example_com_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmUoRTe8UMwpAQXZSAW7pjAgZK1tq2X3C6Kfxq3UXGcaGy_example_com_secret.jsonl +0 -1
- package/test/logs/did_webvh_QmWWot3chx1t6KwTmcE5i2FeDZ5JMkQw3qXycsKDVmJ9Be_example_com_users_alice.jsonl +0 -1
- package/test/logs/did_webvh_QmWvVgALL5kjZdpgR7KZay7J8UiiUr834kkRmWeFAxjAuC_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmWwaRQHUZAFcKihFC6xR6tRTTrQhHPTku6azf1egWbpy1_example_com_users_alice.jsonl +0 -1
- package/test/logs/did_webvh_QmXJLtkz23r7AozbtXsZMKWnVU6rd38CkVtjdWuATU3Yp6_example_com_users_alice123_profile.jsonl +0 -1
- package/test/logs/did_webvh_QmYsce448po14oDE1wXbyaP6wY9HQgHSKLwdezn1k577SF_example_com_my_org_user_name_test_123.jsonl +0 -1
- package/test/logs/did_webvh_QmZBeNzzqajxdfwcDUPZ4P8C5YSXyRztrAwmPiKuKUxmAK_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmZhJsqxizwVbRtqCUkmE6XQunSxtxMt3gbTYadVBNAaEq_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmZk7NHU2D57RzzbMq4tWW9gBa9AqtVTWfiRM6RFdwGVj2_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmZshSXp9w8ovH62zGGBS1b5pGGPsuYiu1VQ935sga2hWF_example_com_level1_level2.jsonl +0 -1
- package/test/logs/did_webvh_QmbWAmw7HQL7vKJyCsctZihXf1rmT4sGvggKCPKWcUWjw1_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmbdLUMbYs3juR39TLB6hhrFWLcNg45ybUzeBJCS1MhCh1_example_com_C_Windows_System32.jsonl +0 -1
- package/test/logs/did_webvh_QmcaQ1Ma4gkSbae85aCm8Mv4rvdT2Sb2RR3JzYwrm5XBq8_example_com_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmcbA7WQhsBqZSoDpKJHjV8Q5o53h8vmgJhQfo6rqTY5ho_example_com.jsonl +0 -1
- package/test/logs/did_webvh_Qmdy8uWr2gkUJrXsThynAug3DASTWwb3onEj89LKmMGZYB_example_com.jsonl +0 -1
- package/tests/__mocks__/bbs-signatures.js +0 -17
- package/tests/__mocks__/mf-base58.js +0 -24
- package/tests/e2e/README.md +0 -97
- package/tests/e2e/example.spec.ts +0 -78
- 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/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/lifecycle/BatchOperations.test.ts +0 -527
- 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/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.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
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metrics Collector for Originals SDK
|
|
3
|
-
*
|
|
4
|
-
* Features:
|
|
5
|
-
* - Track operation counts and performance
|
|
6
|
-
* - Asset lifecycle metrics (created, migrated, transferred)
|
|
7
|
-
* - Error tracking by error code
|
|
8
|
-
* - Cache statistics (optional)
|
|
9
|
-
* - Export in JSON and Prometheus formats
|
|
10
|
-
* - Memory-efficient storage
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* MetricsCollector class
|
|
14
|
-
*/
|
|
15
|
-
export class MetricsCollector {
|
|
16
|
-
constructor() {
|
|
17
|
-
this.assetsCreatedCount = 0;
|
|
18
|
-
this.assetsMigratedMap = new Map();
|
|
19
|
-
this.assetsTransferredCount = 0;
|
|
20
|
-
this.operationMetrics = new Map();
|
|
21
|
-
this.errorCounts = new Map();
|
|
22
|
-
this.cacheHits = 0;
|
|
23
|
-
this.cacheMisses = 0;
|
|
24
|
-
this.startTime = new Date().toISOString();
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Record an operation with timing and success status
|
|
28
|
-
*/
|
|
29
|
-
recordOperation(operation, duration, success) {
|
|
30
|
-
if (!this.operationMetrics.has(operation)) {
|
|
31
|
-
this.operationMetrics.set(operation, {
|
|
32
|
-
count: 0,
|
|
33
|
-
totalTime: 0,
|
|
34
|
-
minTime: Infinity,
|
|
35
|
-
maxTime: -Infinity,
|
|
36
|
-
errorCount: 0
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
const metrics = this.operationMetrics.get(operation);
|
|
40
|
-
metrics.count++;
|
|
41
|
-
metrics.totalTime += duration;
|
|
42
|
-
metrics.minTime = Math.min(metrics.minTime, duration);
|
|
43
|
-
metrics.maxTime = Math.max(metrics.maxTime, duration);
|
|
44
|
-
if (!success) {
|
|
45
|
-
metrics.errorCount++;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Start tracking an operation, returns completion function
|
|
50
|
-
*/
|
|
51
|
-
startOperation(operation) {
|
|
52
|
-
const startTime = performance.now();
|
|
53
|
-
return (success = true) => {
|
|
54
|
-
const duration = performance.now() - startTime;
|
|
55
|
-
this.recordOperation(operation, duration, success);
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Record an asset creation
|
|
60
|
-
*/
|
|
61
|
-
recordAssetCreated() {
|
|
62
|
-
this.assetsCreatedCount++;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Record an asset migration between layers
|
|
66
|
-
*/
|
|
67
|
-
recordMigration(from, to) {
|
|
68
|
-
// Create transition key
|
|
69
|
-
const fromShort = from.split(':')[1]; // "peer", "webvh", "btco"
|
|
70
|
-
const toShort = to.split(':')[1];
|
|
71
|
-
const transitionKey = `${fromShort}→${toShort}`;
|
|
72
|
-
const current = this.assetsMigratedMap.get(transitionKey) || 0;
|
|
73
|
-
this.assetsMigratedMap.set(transitionKey, current + 1);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Record an asset transfer
|
|
77
|
-
*/
|
|
78
|
-
recordTransfer() {
|
|
79
|
-
this.assetsTransferredCount++;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Record an error by error code
|
|
83
|
-
*/
|
|
84
|
-
recordError(code, operation) {
|
|
85
|
-
// Track error by code
|
|
86
|
-
const current = this.errorCounts.get(code) || 0;
|
|
87
|
-
this.errorCounts.set(code, current + 1);
|
|
88
|
-
// If operation is provided, increment its error count
|
|
89
|
-
if (operation && this.operationMetrics.has(operation)) {
|
|
90
|
-
this.operationMetrics.get(operation).errorCount++;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Record a cache hit
|
|
95
|
-
*/
|
|
96
|
-
recordCacheHit() {
|
|
97
|
-
this.cacheHits++;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Record a cache miss
|
|
101
|
-
*/
|
|
102
|
-
recordCacheMiss() {
|
|
103
|
-
this.cacheMisses++;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get a snapshot of all metrics
|
|
107
|
-
*/
|
|
108
|
-
getMetrics() {
|
|
109
|
-
const operationTimes = {};
|
|
110
|
-
for (const [operation, metrics] of this.operationMetrics.entries()) {
|
|
111
|
-
operationTimes[operation] = {
|
|
112
|
-
count: metrics.count,
|
|
113
|
-
totalTime: metrics.totalTime,
|
|
114
|
-
avgTime: metrics.count > 0 ? metrics.totalTime / metrics.count : 0,
|
|
115
|
-
minTime: metrics.minTime === Infinity ? 0 : metrics.minTime,
|
|
116
|
-
maxTime: metrics.maxTime === -Infinity ? 0 : metrics.maxTime,
|
|
117
|
-
errorCount: metrics.errorCount
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
const assetsMigrated = {};
|
|
121
|
-
for (const [key, count] of this.assetsMigratedMap.entries()) {
|
|
122
|
-
assetsMigrated[key] = count;
|
|
123
|
-
}
|
|
124
|
-
const errors = {};
|
|
125
|
-
for (const [code, count] of this.errorCounts.entries()) {
|
|
126
|
-
errors[code] = count;
|
|
127
|
-
}
|
|
128
|
-
const totalCacheRequests = this.cacheHits + this.cacheMisses;
|
|
129
|
-
const cacheStats = totalCacheRequests > 0 ? {
|
|
130
|
-
hits: this.cacheHits,
|
|
131
|
-
misses: this.cacheMisses,
|
|
132
|
-
hitRate: this.cacheHits / totalCacheRequests
|
|
133
|
-
} : undefined;
|
|
134
|
-
return {
|
|
135
|
-
assetsCreated: this.assetsCreatedCount,
|
|
136
|
-
assetsMigrated,
|
|
137
|
-
assetsTransferred: this.assetsTransferredCount,
|
|
138
|
-
operationTimes,
|
|
139
|
-
errors,
|
|
140
|
-
cacheStats,
|
|
141
|
-
startTime: this.startTime,
|
|
142
|
-
uptime: Date.now() - new Date(this.startTime).getTime()
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Get metrics for a specific operation
|
|
147
|
-
*/
|
|
148
|
-
getOperationMetrics(operation) {
|
|
149
|
-
const metrics = this.operationMetrics.get(operation);
|
|
150
|
-
if (!metrics) {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
return {
|
|
154
|
-
count: metrics.count,
|
|
155
|
-
totalTime: metrics.totalTime,
|
|
156
|
-
avgTime: metrics.count > 0 ? metrics.totalTime / metrics.count : 0,
|
|
157
|
-
minTime: metrics.minTime === Infinity ? 0 : metrics.minTime,
|
|
158
|
-
maxTime: metrics.maxTime === -Infinity ? 0 : metrics.maxTime,
|
|
159
|
-
errorCount: metrics.errorCount
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Reset all metrics
|
|
164
|
-
*/
|
|
165
|
-
reset() {
|
|
166
|
-
this.assetsCreatedCount = 0;
|
|
167
|
-
this.assetsMigratedMap.clear();
|
|
168
|
-
this.assetsTransferredCount = 0;
|
|
169
|
-
this.operationMetrics.clear();
|
|
170
|
-
this.errorCounts.clear();
|
|
171
|
-
this.cacheHits = 0;
|
|
172
|
-
this.cacheMisses = 0;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Export metrics in the specified format
|
|
176
|
-
*/
|
|
177
|
-
export(format) {
|
|
178
|
-
if (format === 'json') {
|
|
179
|
-
return this.exportJSON();
|
|
180
|
-
}
|
|
181
|
-
else if (format === 'prometheus') {
|
|
182
|
-
return this.exportPrometheus();
|
|
183
|
-
}
|
|
184
|
-
throw new Error(`Unsupported export format: ${format}`);
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Export metrics as JSON
|
|
188
|
-
*/
|
|
189
|
-
exportJSON() {
|
|
190
|
-
return JSON.stringify(this.getMetrics(), null, 2);
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Export metrics in Prometheus format
|
|
194
|
-
*/
|
|
195
|
-
exportPrometheus() {
|
|
196
|
-
const lines = [];
|
|
197
|
-
const metrics = this.getMetrics();
|
|
198
|
-
// Asset metrics
|
|
199
|
-
lines.push('# HELP originals_assets_created_total Total number of assets created');
|
|
200
|
-
lines.push('# TYPE originals_assets_created_total counter');
|
|
201
|
-
lines.push(`originals_assets_created_total ${metrics.assetsCreated}`);
|
|
202
|
-
lines.push('');
|
|
203
|
-
lines.push('# HELP originals_assets_transferred_total Total number of assets transferred');
|
|
204
|
-
lines.push('# TYPE originals_assets_transferred_total counter');
|
|
205
|
-
lines.push(`originals_assets_transferred_total ${metrics.assetsTransferred}`);
|
|
206
|
-
lines.push('');
|
|
207
|
-
// Migration metrics
|
|
208
|
-
lines.push('# HELP originals_assets_migrated_total Total number of assets migrated by layer transition');
|
|
209
|
-
lines.push('# TYPE originals_assets_migrated_total counter');
|
|
210
|
-
for (const [transition, count] of Object.entries(metrics.assetsMigrated)) {
|
|
211
|
-
const [from, to] = transition.split('→');
|
|
212
|
-
lines.push(`originals_assets_migrated_total{from="${from}",to="${to}"} ${count}`);
|
|
213
|
-
}
|
|
214
|
-
lines.push('');
|
|
215
|
-
// Operation metrics
|
|
216
|
-
for (const [operation, opMetrics] of Object.entries(metrics.operationTimes)) {
|
|
217
|
-
const safeOpName = operation.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
218
|
-
lines.push(`# HELP originals_operation_${safeOpName}_total Total number of ${operation} operations`);
|
|
219
|
-
lines.push(`# TYPE originals_operation_${safeOpName}_total counter`);
|
|
220
|
-
lines.push(`originals_operation_${safeOpName}_total ${opMetrics.count}`);
|
|
221
|
-
lines.push('');
|
|
222
|
-
lines.push(`# HELP originals_operation_${safeOpName}_duration_milliseconds Duration of ${operation} operations`);
|
|
223
|
-
lines.push(`# TYPE originals_operation_${safeOpName}_duration_milliseconds summary`);
|
|
224
|
-
lines.push(`originals_operation_${safeOpName}_duration_milliseconds{quantile="0.0"} ${opMetrics.minTime}`);
|
|
225
|
-
lines.push(`originals_operation_${safeOpName}_duration_milliseconds{quantile="0.5"} ${opMetrics.avgTime}`);
|
|
226
|
-
lines.push(`originals_operation_${safeOpName}_duration_milliseconds{quantile="1.0"} ${opMetrics.maxTime}`);
|
|
227
|
-
lines.push(`originals_operation_${safeOpName}_duration_milliseconds_sum ${opMetrics.totalTime}`);
|
|
228
|
-
lines.push(`originals_operation_${safeOpName}_duration_milliseconds_count ${opMetrics.count}`);
|
|
229
|
-
lines.push('');
|
|
230
|
-
lines.push(`# HELP originals_operation_${safeOpName}_errors_total Total number of errors in ${operation} operations`);
|
|
231
|
-
lines.push(`# TYPE originals_operation_${safeOpName}_errors_total counter`);
|
|
232
|
-
lines.push(`originals_operation_${safeOpName}_errors_total ${opMetrics.errorCount}`);
|
|
233
|
-
lines.push('');
|
|
234
|
-
}
|
|
235
|
-
// Error metrics
|
|
236
|
-
lines.push('# HELP originals_errors_total Total number of errors by code');
|
|
237
|
-
lines.push('# TYPE originals_errors_total counter');
|
|
238
|
-
for (const [code, count] of Object.entries(metrics.errors)) {
|
|
239
|
-
lines.push(`originals_errors_total{code="${code}"} ${count}`);
|
|
240
|
-
}
|
|
241
|
-
lines.push('');
|
|
242
|
-
// Cache metrics
|
|
243
|
-
if (metrics.cacheStats) {
|
|
244
|
-
lines.push('# HELP originals_cache_hits_total Total number of cache hits');
|
|
245
|
-
lines.push('# TYPE originals_cache_hits_total counter');
|
|
246
|
-
lines.push(`originals_cache_hits_total ${metrics.cacheStats.hits}`);
|
|
247
|
-
lines.push('');
|
|
248
|
-
lines.push('# HELP originals_cache_misses_total Total number of cache misses');
|
|
249
|
-
lines.push('# TYPE originals_cache_misses_total counter');
|
|
250
|
-
lines.push(`originals_cache_misses_total ${metrics.cacheStats.misses}`);
|
|
251
|
-
lines.push('');
|
|
252
|
-
lines.push('# HELP originals_cache_hit_rate Cache hit rate');
|
|
253
|
-
lines.push('# TYPE originals_cache_hit_rate gauge');
|
|
254
|
-
lines.push(`originals_cache_hit_rate ${metrics.cacheStats.hitRate}`);
|
|
255
|
-
lines.push('');
|
|
256
|
-
}
|
|
257
|
-
// System metrics
|
|
258
|
-
lines.push('# HELP originals_uptime_milliseconds SDK uptime in milliseconds');
|
|
259
|
-
lines.push('# TYPE originals_uptime_milliseconds gauge');
|
|
260
|
-
lines.push(`originals_uptime_milliseconds ${metrics.uptime}`);
|
|
261
|
-
lines.push('');
|
|
262
|
-
return lines.join('\n');
|
|
263
|
-
}
|
|
264
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bitcoin network types supported by the validation
|
|
3
|
-
*/
|
|
4
|
-
export type BitcoinNetwork = 'mainnet' | 'regtest' | 'signet';
|
|
5
|
-
/**
|
|
6
|
-
* Validates a Bitcoin address format and checksum for the given network.
|
|
7
|
-
*
|
|
8
|
-
* This function uses bitcoinjs-lib's address.toOutputScript() which performs:
|
|
9
|
-
* - Format validation (bech32, base58check)
|
|
10
|
-
* - Checksum verification
|
|
11
|
-
* - Network prefix validation
|
|
12
|
-
*
|
|
13
|
-
* @param address - The Bitcoin address to validate
|
|
14
|
-
* @param network - The network to validate against ('mainnet', 'regtest', 'signet')
|
|
15
|
-
* @returns true if the address is valid for the network
|
|
16
|
-
* @throws Error with descriptive message if validation fails
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* // Valid mainnet address
|
|
21
|
-
* validateBitcoinAddress('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'mainnet'); // true
|
|
22
|
-
*
|
|
23
|
-
* // Invalid checksum
|
|
24
|
-
* validateBitcoinAddress('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdd', 'mainnet'); // throws
|
|
25
|
-
*
|
|
26
|
-
* // Wrong network
|
|
27
|
-
* validateBitcoinAddress('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'testnet'); // throws
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export declare function validateBitcoinAddress(address: string, network: BitcoinNetwork): boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Validates a Bitcoin address and returns a boolean instead of throwing
|
|
33
|
-
*
|
|
34
|
-
* @param address - The Bitcoin address to validate
|
|
35
|
-
* @param network - The network to validate against
|
|
36
|
-
* @returns true if valid, false otherwise
|
|
37
|
-
*/
|
|
38
|
-
export declare function isValidBitcoinAddress(address: string, network: BitcoinNetwork): boolean;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import * as bitcoin from 'bitcoinjs-lib';
|
|
2
|
-
/**
|
|
3
|
-
* Maps our network names to bitcoinjs-lib network configurations
|
|
4
|
-
*/
|
|
5
|
-
const getNetwork = (network) => {
|
|
6
|
-
switch (network) {
|
|
7
|
-
case 'mainnet':
|
|
8
|
-
return bitcoin.networks.bitcoin;
|
|
9
|
-
case 'regtest':
|
|
10
|
-
// Regtest uses testnet parameters but with bcrt prefix
|
|
11
|
-
// However, since many regtest addresses in tests use testnet format,
|
|
12
|
-
// we accept both testnet and regtest addresses for regtest network
|
|
13
|
-
return bitcoin.networks.regtest;
|
|
14
|
-
case 'signet':
|
|
15
|
-
// Signet uses the same bech32 prefix as testnet (tb1)
|
|
16
|
-
return bitcoin.networks.testnet;
|
|
17
|
-
default:
|
|
18
|
-
throw new Error(`Unsupported network: ${network}`);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Validates a Bitcoin address format and checksum for the given network.
|
|
23
|
-
*
|
|
24
|
-
* This function uses bitcoinjs-lib's address.toOutputScript() which performs:
|
|
25
|
-
* - Format validation (bech32, base58check)
|
|
26
|
-
* - Checksum verification
|
|
27
|
-
* - Network prefix validation
|
|
28
|
-
*
|
|
29
|
-
* @param address - The Bitcoin address to validate
|
|
30
|
-
* @param network - The network to validate against ('mainnet', 'regtest', 'signet')
|
|
31
|
-
* @returns true if the address is valid for the network
|
|
32
|
-
* @throws Error with descriptive message if validation fails
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* // Valid mainnet address
|
|
37
|
-
* validateBitcoinAddress('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'mainnet'); // true
|
|
38
|
-
*
|
|
39
|
-
* // Invalid checksum
|
|
40
|
-
* validateBitcoinAddress('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdd', 'mainnet'); // throws
|
|
41
|
-
*
|
|
42
|
-
* // Wrong network
|
|
43
|
-
* validateBitcoinAddress('bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq', 'testnet'); // throws
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
export function validateBitcoinAddress(address, network) {
|
|
47
|
-
// Input validation
|
|
48
|
-
if (!address || typeof address !== 'string') {
|
|
49
|
-
throw new Error('Address must be a non-empty string');
|
|
50
|
-
}
|
|
51
|
-
const trimmedAddress = address.trim();
|
|
52
|
-
if (trimmedAddress.length === 0) {
|
|
53
|
-
throw new Error('Address cannot be empty');
|
|
54
|
-
}
|
|
55
|
-
// Check for mock/test addresses that should not be allowed in production
|
|
56
|
-
if (/^(mock-|test-)/i.test(trimmedAddress)) {
|
|
57
|
-
throw new Error('Mock or test addresses are not valid Bitcoin addresses');
|
|
58
|
-
}
|
|
59
|
-
// Validate address length (Bitcoin addresses are typically 26-90 characters)
|
|
60
|
-
if (trimmedAddress.length < 26 || trimmedAddress.length > 90) {
|
|
61
|
-
throw new Error(`Invalid address length: ${trimmedAddress.length} characters (expected 26-90)`);
|
|
62
|
-
}
|
|
63
|
-
try {
|
|
64
|
-
// Get the appropriate network configuration
|
|
65
|
-
const networkConfig = getNetwork(network);
|
|
66
|
-
// Use bitcoinjs-lib to validate the address format and checksum
|
|
67
|
-
// This will throw if the address is invalid
|
|
68
|
-
bitcoin.address.toOutputScript(trimmedAddress, networkConfig);
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
// For regtest, also try testnet network as many tools use testnet addresses for regtest
|
|
73
|
-
if (network === 'regtest') {
|
|
74
|
-
try {
|
|
75
|
-
bitcoin.address.toOutputScript(trimmedAddress, bitcoin.networks.testnet);
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
// Fall through to error handling below
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Parse the error to provide more specific feedback
|
|
83
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
84
|
-
// Check for common error patterns and provide helpful messages
|
|
85
|
-
if (errorMessage.includes('Invalid checksum') || errorMessage.includes('checksum')) {
|
|
86
|
-
throw new Error(`Invalid Bitcoin address checksum for address: ${trimmedAddress}`);
|
|
87
|
-
}
|
|
88
|
-
if (errorMessage.includes('Invalid prefix') || errorMessage.includes('prefix')) {
|
|
89
|
-
throw new Error(`Invalid address prefix for ${network} network: ${trimmedAddress}`);
|
|
90
|
-
}
|
|
91
|
-
if (errorMessage.includes('too short') || errorMessage.includes('too long')) {
|
|
92
|
-
throw new Error(`Invalid address length for ${network}: ${trimmedAddress}`);
|
|
93
|
-
}
|
|
94
|
-
// Generic invalid address error
|
|
95
|
-
throw new Error(`Invalid Bitcoin address for ${network} network: ${trimmedAddress} (${errorMessage})`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Validates a Bitcoin address and returns a boolean instead of throwing
|
|
100
|
-
*
|
|
101
|
-
* @param address - The Bitcoin address to validate
|
|
102
|
-
* @param network - The network to validate against
|
|
103
|
-
* @returns true if valid, false otherwise
|
|
104
|
-
*/
|
|
105
|
-
export function isValidBitcoinAddress(address, network) {
|
|
106
|
-
try {
|
|
107
|
-
validateBitcoinAddress(address, network);
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
}
|
package/dist/utils/cbor.d.ts
DELETED
package/dist/utils/cbor.js
DELETED
package/dist/utils/encoding.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export declare function encodeBase64UrlMultibase(bytes: Uint8Array): string;
|
|
2
|
-
export declare function decodeBase64UrlMultibase(s: string): Uint8Array;
|
|
3
|
-
export declare function hexToBytes(hex: string): Uint8Array;
|
|
4
|
-
export declare const MULTIBASE_BASE58BTC_HEADER = "z";
|
|
5
|
-
export declare const MULTIBASE_BASE64URL_HEADER = "u";
|
|
6
|
-
export declare const MULTICODEC_ED25519_PUB_HEADER: Uint8Array<ArrayBuffer>;
|
|
7
|
-
export declare const MULTICODEC_ED25519_PRIV_HEADER: Uint8Array<ArrayBuffer>;
|
|
8
|
-
export declare const MULTICODEC_X25519_PUB_HEADER: Uint8Array<ArrayBuffer>;
|
|
9
|
-
export declare const MULTICODEC_X25519_PRIV_HEADER: Uint8Array<ArrayBuffer>;
|
|
10
|
-
export declare const MULTICODEC_SECP256K1_PUB_HEADER: Uint8Array<ArrayBuffer>;
|
|
11
|
-
export declare const MULTICODEC_SECP256K1_PRIV_HEADER: Uint8Array<ArrayBuffer>;
|
|
12
|
-
export declare const MULTICODEC_BLS12381_G2_PUB_HEADER: Uint8Array<ArrayBuffer>;
|
|
13
|
-
export declare const MULTICODEC_BLS12381_G2_PRIV_HEADER: Uint8Array<ArrayBuffer>;
|
|
14
|
-
export declare const base64: {
|
|
15
|
-
encode: (unencoded: any) => string;
|
|
16
|
-
decode: (encoded: any) => Uint8Array;
|
|
17
|
-
};
|
|
18
|
-
export declare const utf8: {
|
|
19
|
-
encode: (unencoded: string) => Uint8Array;
|
|
20
|
-
decode: (encoded: Uint8Array) => string;
|
|
21
|
-
};
|
|
22
|
-
export declare const base64url: {
|
|
23
|
-
encode: (unencoded: any) => string;
|
|
24
|
-
decode: (encoded: any) => Uint8Array;
|
|
25
|
-
};
|
|
26
|
-
export declare const base58: {
|
|
27
|
-
encode: (unencoded: Uint8Array) => string;
|
|
28
|
-
decode: (encoded: string) => Uint8Array;
|
|
29
|
-
};
|
|
30
|
-
export declare const multibase: {
|
|
31
|
-
encode: (val: Uint8Array, encoding: "base58btc" | "base64url") => string;
|
|
32
|
-
decode: (val: string) => Uint8Array;
|
|
33
|
-
};
|
|
34
|
-
export declare const multikey: {
|
|
35
|
-
encode: (header: Uint8Array, val: Uint8Array) => string;
|
|
36
|
-
decode: (header: Uint8Array, val: string) => Uint8Array;
|
|
37
|
-
};
|
package/dist/utils/encoding.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import b58 from 'b58';
|
|
2
|
-
export function encodeBase64UrlMultibase(bytes) {
|
|
3
|
-
return 'z' + Buffer.from(bytes).toString('base64url');
|
|
4
|
-
}
|
|
5
|
-
export function decodeBase64UrlMultibase(s) {
|
|
6
|
-
if (!s || s[0] !== 'z') {
|
|
7
|
-
throw new Error('Invalid Multibase encoding');
|
|
8
|
-
}
|
|
9
|
-
return Buffer.from(s.slice(1), 'base64url');
|
|
10
|
-
}
|
|
11
|
-
export function hexToBytes(hex) {
|
|
12
|
-
const clean = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
13
|
-
if (clean.length % 2 !== 0) {
|
|
14
|
-
throw new Error('Invalid hex string length');
|
|
15
|
-
}
|
|
16
|
-
const out = new Uint8Array(clean.length / 2);
|
|
17
|
-
for (let i = 0; i < clean.length; i += 2) {
|
|
18
|
-
const byteStr = clean.substring(i, i + 2);
|
|
19
|
-
const value = parseInt(byteStr, 16);
|
|
20
|
-
if (Number.isNaN(value)) {
|
|
21
|
-
throw new Error('Invalid hex string');
|
|
22
|
-
}
|
|
23
|
-
out[i / 2] = value;
|
|
24
|
-
}
|
|
25
|
-
return out;
|
|
26
|
-
}
|
|
27
|
-
// multibase base58-btc header
|
|
28
|
-
export const MULTIBASE_BASE58BTC_HEADER = 'z';
|
|
29
|
-
// multibase base64url header
|
|
30
|
-
export const MULTIBASE_BASE64URL_HEADER = 'u';
|
|
31
|
-
// multicodec ed25519-pub header as varint
|
|
32
|
-
export const MULTICODEC_ED25519_PUB_HEADER = new Uint8Array([0xed, 0x01]);
|
|
33
|
-
// multicodec ed25519-priv header as varint
|
|
34
|
-
export const MULTICODEC_ED25519_PRIV_HEADER = new Uint8Array([0x80, 0x26]);
|
|
35
|
-
// multicodec x25519-pub header as varint
|
|
36
|
-
export const MULTICODEC_X25519_PUB_HEADER = new Uint8Array([0xec, 0x01]);
|
|
37
|
-
// multicodec x25519-priv header as varint
|
|
38
|
-
export const MULTICODEC_X25519_PRIV_HEADER = new Uint8Array([0x82, 0x26]);
|
|
39
|
-
// multicode secp256k1-pub header as varint
|
|
40
|
-
export const MULTICODEC_SECP256K1_PUB_HEADER = new Uint8Array([0xe7, 0x01]);
|
|
41
|
-
// multicode secp256k1-priv header as varint
|
|
42
|
-
export const MULTICODEC_SECP256K1_PRIV_HEADER = new Uint8Array([0x13, 0x01]);
|
|
43
|
-
// multicodec bls12381g2-pub header as varint
|
|
44
|
-
export const MULTICODEC_BLS12381_G2_PUB_HEADER = new Uint8Array([0xeb, 0x01]);
|
|
45
|
-
// multicodec bls12381g2-priv header as varint
|
|
46
|
-
export const MULTICODEC_BLS12381_G2_PRIV_HEADER = new Uint8Array([0x8a, 0x26]);
|
|
47
|
-
export const base64 = {
|
|
48
|
-
encode: (unencoded) => {
|
|
49
|
-
return Buffer.from(unencoded || '').toString('base64');
|
|
50
|
-
},
|
|
51
|
-
decode: (encoded) => {
|
|
52
|
-
return new Uint8Array(Buffer.from(encoded || '', 'base64').buffer);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
export const utf8 = {
|
|
56
|
-
encode: (unencoded) => {
|
|
57
|
-
return new TextEncoder().encode(unencoded);
|
|
58
|
-
},
|
|
59
|
-
decode: (encoded) => {
|
|
60
|
-
return new TextDecoder().decode(encoded);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
export const base64url = {
|
|
64
|
-
encode: (unencoded) => {
|
|
65
|
-
const encoded = base64.encode(unencoded);
|
|
66
|
-
return encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
|
|
67
|
-
},
|
|
68
|
-
decode: (encoded) => {
|
|
69
|
-
encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');
|
|
70
|
-
while (encoded.length % 4)
|
|
71
|
-
encoded += '=';
|
|
72
|
-
return base64.decode(encoded);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
export const base58 = {
|
|
76
|
-
encode: (unencoded) => {
|
|
77
|
-
return b58.encode(unencoded);
|
|
78
|
-
},
|
|
79
|
-
decode: (encoded) => {
|
|
80
|
-
return b58.decode(encoded);
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
export const multibase = {
|
|
84
|
-
encode: (val, encoding) => {
|
|
85
|
-
if (encoding === 'base58btc') {
|
|
86
|
-
const baseEncoded = base58.encode(val);
|
|
87
|
-
return MULTIBASE_BASE58BTC_HEADER + baseEncoded;
|
|
88
|
-
}
|
|
89
|
-
else if (encoding === 'base64url') {
|
|
90
|
-
return MULTIBASE_BASE64URL_HEADER + base64url.encode(val);
|
|
91
|
-
}
|
|
92
|
-
throw new Error('Invalid multibase encoding.');
|
|
93
|
-
},
|
|
94
|
-
decode: (val) => {
|
|
95
|
-
if (val.startsWith(MULTIBASE_BASE58BTC_HEADER)) {
|
|
96
|
-
return base58.decode(val.substring(1));
|
|
97
|
-
}
|
|
98
|
-
else if (val.startsWith(MULTIBASE_BASE64URL_HEADER)) {
|
|
99
|
-
return base64url.decode(val.substring(1));
|
|
100
|
-
}
|
|
101
|
-
throw new Error('Multibase value does not have expected header.');
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
export const multikey = {
|
|
105
|
-
encode: (header, val) => {
|
|
106
|
-
const mcBytes = new Uint8Array(header.length + val.length);
|
|
107
|
-
mcBytes.set(header);
|
|
108
|
-
mcBytes.set(val, header.length);
|
|
109
|
-
return multibase.encode(mcBytes, 'base58btc');
|
|
110
|
-
},
|
|
111
|
-
decode: (header, val) => {
|
|
112
|
-
const mcValue = multibase.decode(val);
|
|
113
|
-
for (let i = 0; i < header.length; i++) {
|
|
114
|
-
if (mcValue[i] !== header[i]) {
|
|
115
|
-
throw new Error('Multikey value does not have expected header.');
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return mcValue.slice(header.length);
|
|
119
|
-
}
|
|
120
|
-
};
|
package/dist/utils/hash.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function sha256Bytes(input: string | Uint8Array): Promise<Uint8Array>;
|
package/dist/utils/hash.js
DELETED
package/dist/utils/retry.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface RetryOptions {
|
|
2
|
-
maxRetries?: number;
|
|
3
|
-
baseDelayMs?: number;
|
|
4
|
-
maxDelayMs?: number;
|
|
5
|
-
backoffFactor?: number;
|
|
6
|
-
jitterFactor?: number;
|
|
7
|
-
isRetriable?: (error: unknown) => boolean;
|
|
8
|
-
onRetry?: (attempt: number, delayMs: number, error: unknown) => void;
|
|
9
|
-
}
|
|
10
|
-
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
package/dist/utils/retry.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
const DEFAULTS = {
|
|
2
|
-
maxRetries: 3,
|
|
3
|
-
baseDelayMs: 300,
|
|
4
|
-
maxDelayMs: 10000,
|
|
5
|
-
backoffFactor: 2,
|
|
6
|
-
jitterFactor: 0.1,
|
|
7
|
-
isRetriable: () => true,
|
|
8
|
-
onRetry: () => { }
|
|
9
|
-
};
|
|
10
|
-
function sleep(ms) {
|
|
11
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12
|
-
}
|
|
13
|
-
function computeDelay(attempt, opts) {
|
|
14
|
-
const exp = opts.baseDelayMs * Math.pow(opts.backoffFactor, attempt);
|
|
15
|
-
const withJitter = exp + ((Math.random() * 2 - 1) * opts.jitterFactor * exp);
|
|
16
|
-
return Math.min(Math.max(0, Math.floor(withJitter)), opts.maxDelayMs);
|
|
17
|
-
}
|
|
18
|
-
export async function withRetry(fn, options = {}) {
|
|
19
|
-
const opts = { ...DEFAULTS, ...options };
|
|
20
|
-
let lastError;
|
|
21
|
-
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
22
|
-
try {
|
|
23
|
-
return await fn();
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
lastError = err;
|
|
27
|
-
if (attempt >= opts.maxRetries || !opts.isRetriable(err))
|
|
28
|
-
break;
|
|
29
|
-
const delay = computeDelay(attempt, opts);
|
|
30
|
-
opts.onRetry(attempt + 1, delay, err);
|
|
31
|
-
await sleep(delay);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
throw lastError;
|
|
35
|
-
}
|