@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
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
export interface TransactionStatus {
|
|
2
|
-
confirmed: boolean;
|
|
3
|
-
confirmations?: number;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface Broadcaster {
|
|
7
|
-
(txHex: string): Promise<string>; // returns txid
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface StatusProvider {
|
|
11
|
-
(txid: string): Promise<TransactionStatus>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface BroadcastOptions {
|
|
15
|
-
pollIntervalMs?: number;
|
|
16
|
-
maxAttempts?: number;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Broadcast client with idempotency and confirmation polling.
|
|
21
|
-
* Designed to be predictable and simple, honoring behavior expected by the
|
|
22
|
-
* ordinalsplus legacy components which are finicky about retries.
|
|
23
|
-
*/
|
|
24
|
-
export class BroadcastClient {
|
|
25
|
-
private inflight = new Map<string, Promise<string>>();
|
|
26
|
-
|
|
27
|
-
constructor(private readonly broadcaster: Broadcaster, private readonly statusProvider: StatusProvider) {}
|
|
28
|
-
|
|
29
|
-
broadcastIdempotent(txidKey: string, create: () => Promise<string>): Promise<string> {
|
|
30
|
-
if (this.inflight.has(txidKey)) return this.inflight.get(txidKey)!;
|
|
31
|
-
const p = (async () => create())();
|
|
32
|
-
this.inflight.set(txidKey, p);
|
|
33
|
-
return p.finally(() => this.inflight.delete(txidKey));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async broadcastAndConfirm(txHex: string, options: BroadcastOptions = {}): Promise<{ txid: string; confirmations: number }>
|
|
37
|
-
{
|
|
38
|
-
const txid = await this.broadcastIdempotent(txHex, () => this.broadcaster(txHex));
|
|
39
|
-
const interval = Math.max(100, options.pollIntervalMs ?? 500);
|
|
40
|
-
const maxAttempts = Math.max(1, options.maxAttempts ?? 20);
|
|
41
|
-
let attempts = 0;
|
|
42
|
-
let last: TransactionStatus = { confirmed: false };
|
|
43
|
-
while (attempts < maxAttempts) {
|
|
44
|
-
last = await this.statusProvider(txid);
|
|
45
|
-
if (last.confirmed) {
|
|
46
|
-
return { txid, confirmations: last.confirmations ?? 1 };
|
|
47
|
-
}
|
|
48
|
-
await new Promise(r => setTimeout(r, interval));
|
|
49
|
-
attempts++;
|
|
50
|
-
}
|
|
51
|
-
return { txid, confirmations: last.confirmations ?? 0 };
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { OrdinalsInscription, BitcoinTransaction } from '../types';
|
|
2
|
-
import { emitTelemetry } from '../utils/telemetry';
|
|
3
|
-
import { decode as decodeCbor } from '../utils/cbor';
|
|
4
|
-
import { hexToBytes } from '../utils/encoding';
|
|
5
|
-
|
|
6
|
-
export class OrdinalsClient {
|
|
7
|
-
constructor(
|
|
8
|
-
private rpcUrl: string,
|
|
9
|
-
private network: 'mainnet' | 'regtest' | 'signet'
|
|
10
|
-
) {}
|
|
11
|
-
|
|
12
|
-
async getInscriptionById(id: string): Promise<OrdinalsInscription | null> {
|
|
13
|
-
if (!id) return null;
|
|
14
|
-
return this.resolveInscription(id);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
async getInscriptionsBySatoshi(satoshi: string): Promise<OrdinalsInscription[]> {
|
|
18
|
-
const info = await this.getSatInfo(satoshi);
|
|
19
|
-
if (!info.inscription_ids.length) return [];
|
|
20
|
-
const inscriptions = await Promise.all(info.inscription_ids.map(id => this.resolveInscription(id)));
|
|
21
|
-
return inscriptions.filter((x): x is OrdinalsInscription => x !== null);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
async broadcastTransaction(tx: BitcoinTransaction): Promise<string> {
|
|
25
|
-
return tx.txid || 'txid';
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async getTransactionStatus(txid: string): Promise<{
|
|
29
|
-
confirmed: boolean;
|
|
30
|
-
blockHeight?: number;
|
|
31
|
-
confirmations?: number;
|
|
32
|
-
}> {
|
|
33
|
-
return { confirmed: false };
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async estimateFee(blocks: number = 1): Promise<number> {
|
|
37
|
-
return Math.max(1, blocks) * 10;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Added provider-like helper methods commonly expected by higher-level resolvers
|
|
41
|
-
// Minimal placeholder implementations suitable for unit testing
|
|
42
|
-
|
|
43
|
-
async getSatInfo(satoshi: string): Promise<{ inscription_ids: string[] }> {
|
|
44
|
-
const data = await this.fetchJson<any>(`/sat/${satoshi}`);
|
|
45
|
-
if (!data) return { inscription_ids: [] };
|
|
46
|
-
// Support both {inscription_ids: []} and {data: {inscription_ids: []}} shapes via fetchJson
|
|
47
|
-
const inscriptionIds = Array.isArray(data.inscription_ids) ? data.inscription_ids : [];
|
|
48
|
-
return { inscription_ids: inscriptionIds };
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async resolveInscription(identifier: string): Promise<OrdinalsInscription | null> {
|
|
52
|
-
if (!identifier) return null;
|
|
53
|
-
const info = await this.fetchJson<any>(`/inscription/${identifier}`);
|
|
54
|
-
if (!info) return null;
|
|
55
|
-
|
|
56
|
-
// Fetch content bytes
|
|
57
|
-
const contentUrl = info.content_url || `${this.rpcUrl}/content/${identifier}`;
|
|
58
|
-
const contentRes = await fetch(contentUrl);
|
|
59
|
-
if (!contentRes.ok) throw new Error(`Failed to fetch inscription content: ${contentRes.status}`);
|
|
60
|
-
const contentArrayBuf = await contentRes.arrayBuffer();
|
|
61
|
-
const content = Buffer.from(new Uint8Array(contentArrayBuf));
|
|
62
|
-
|
|
63
|
-
// owner_output may be 'txid:vout'
|
|
64
|
-
let txid = 'unknown';
|
|
65
|
-
let vout = 0;
|
|
66
|
-
if (typeof info.owner_output === 'string' && info.owner_output.includes(':')) {
|
|
67
|
-
const [tid, v] = info.owner_output.split(':');
|
|
68
|
-
txid = tid;
|
|
69
|
-
vout = Number(v) || 0;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// sat number provided as number or string
|
|
73
|
-
const satoshi = String(info.sat ?? '');
|
|
74
|
-
|
|
75
|
-
const inscription: OrdinalsInscription = {
|
|
76
|
-
satoshi,
|
|
77
|
-
inscriptionId: info.inscription_id || identifier,
|
|
78
|
-
content,
|
|
79
|
-
contentType: info.content_type || 'application/octet-stream',
|
|
80
|
-
txid,
|
|
81
|
-
vout,
|
|
82
|
-
blockHeight: info.block_height
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
return inscription;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async getMetadata(inscriptionId: string): Promise<Record<string, unknown> | null> {
|
|
89
|
-
if (!inscriptionId) return null;
|
|
90
|
-
const base = this.rpcUrl.replace(/\/$/, '');
|
|
91
|
-
const res = await fetch(`${base}/r/metadata/${inscriptionId}`, { headers: { 'Accept': 'application/json' } });
|
|
92
|
-
if (!res.ok) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
let text = (await res.text()).trim();
|
|
96
|
-
if (text.startsWith('"') && text.endsWith('"')) {
|
|
97
|
-
try {
|
|
98
|
-
text = JSON.parse(text);
|
|
99
|
-
} catch (_) {}
|
|
100
|
-
}
|
|
101
|
-
try {
|
|
102
|
-
const bytes = hexToBytes(text);
|
|
103
|
-
return decodeCbor<Record<string, unknown>>(bytes);
|
|
104
|
-
} catch (_) {
|
|
105
|
-
return null;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
private async fetchJson<T>(path: string): Promise<T | null> {
|
|
110
|
-
const url = `${this.rpcUrl.replace(/\/$/, '')}${path}`;
|
|
111
|
-
const res = await fetch(url, { headers: { 'Accept': 'application/json' } });
|
|
112
|
-
if (!res.ok) return null;
|
|
113
|
-
const body: any = await res.json();
|
|
114
|
-
// Accept { data: T } or T
|
|
115
|
-
return (body && typeof body === 'object' && 'data' in body) ? (body as any).data as T : (body as T);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import type { Utxo } from '../types/bitcoin';
|
|
2
|
-
|
|
3
|
-
export interface PsbtOutput {
|
|
4
|
-
address: string;
|
|
5
|
-
value: number;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface BuildPsbtParams {
|
|
9
|
-
utxos: Utxo[];
|
|
10
|
-
outputs: PsbtOutput[];
|
|
11
|
-
changeAddress: string;
|
|
12
|
-
feeRate: number; // sat/vB
|
|
13
|
-
network: 'mainnet' | 'testnet' | 'regtest' | 'signet';
|
|
14
|
-
dustLimit?: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface BuildPsbtResult {
|
|
18
|
-
psbtBase64: string; // opaque PSBT representation (base64-encoded payload)
|
|
19
|
-
selectedUtxos: Utxo[];
|
|
20
|
-
fee: number;
|
|
21
|
-
changeOutput?: PsbtOutput;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function estimateVBytes(inputs: number, outputs: number): number {
|
|
25
|
-
const overhead = 10; // base tx overhead
|
|
26
|
-
const inSize = 68; // rough P2WPKH/any-segwit input size
|
|
27
|
-
const outSize = 31; // P2WPKH output size
|
|
28
|
-
return Math.ceil(overhead + inputs * inSize + outputs * outSize);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class PSBTBuilder {
|
|
32
|
-
constructor(private readonly dustLimit = 546) {}
|
|
33
|
-
|
|
34
|
-
build(params: BuildPsbtParams): BuildPsbtResult {
|
|
35
|
-
const { utxos, outputs, changeAddress, feeRate } = params;
|
|
36
|
-
if (!utxos || utxos.length === 0) throw new Error('No UTXOs');
|
|
37
|
-
if (!outputs || outputs.length === 0) throw new Error('No outputs');
|
|
38
|
-
|
|
39
|
-
// Sort UTXOs ascending by value for simple greedy selection
|
|
40
|
-
const sorted = [...utxos].sort((a, b) => a.value - b.value);
|
|
41
|
-
|
|
42
|
-
// Start with smallest set to cover target + estimated fee; refine iteratively
|
|
43
|
-
const targetValue = outputs.reduce((s, o) => s + o.value, 0);
|
|
44
|
-
let selected: Utxo[] = [];
|
|
45
|
-
let total = 0;
|
|
46
|
-
|
|
47
|
-
const pick = () => {
|
|
48
|
-
selected = [];
|
|
49
|
-
total = 0;
|
|
50
|
-
for (const u of sorted) {
|
|
51
|
-
selected.push(u);
|
|
52
|
-
total += u.value;
|
|
53
|
-
const vbytes = estimateVBytes(selected.length, outputs.length + 1); // +1 potential change
|
|
54
|
-
const fee = Math.ceil(vbytes * feeRate);
|
|
55
|
-
if (total >= targetValue + fee) break;
|
|
56
|
-
}
|
|
57
|
-
if (total < targetValue) throw new Error('Insufficient funds');
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
pick();
|
|
61
|
-
const initialVBytes = estimateVBytes(selected.length, outputs.length + 1);
|
|
62
|
-
let fee = Math.ceil(initialVBytes * feeRate);
|
|
63
|
-
let change = total - targetValue - fee;
|
|
64
|
-
let includeChange = change >= this.dustLimit;
|
|
65
|
-
|
|
66
|
-
// Re-estimate once we know whether change is included
|
|
67
|
-
const finalVBytes = estimateVBytes(selected.length, outputs.length + (includeChange ? 1 : 0));
|
|
68
|
-
fee = Math.ceil(finalVBytes * feeRate);
|
|
69
|
-
change = total - targetValue - fee;
|
|
70
|
-
includeChange = change >= this.dustLimit;
|
|
71
|
-
|
|
72
|
-
let changeOutput: PsbtOutput | undefined;
|
|
73
|
-
if (!includeChange) {
|
|
74
|
-
// Add dust to fee
|
|
75
|
-
fee = total - targetValue;
|
|
76
|
-
} else {
|
|
77
|
-
changeOutput = { address: changeAddress, value: change };
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Construct a minimal PSBT-like payload for dry-run/testing. We intentionally avoid
|
|
81
|
-
// bringing heavy bitcoin libraries here; this builder focuses on deterministic
|
|
82
|
-
// selection, fee estimation, and change handling.
|
|
83
|
-
const payload = {
|
|
84
|
-
version: 0,
|
|
85
|
-
inputs: selected.map(u => ({ txid: u.txid, vout: u.vout })),
|
|
86
|
-
outputs: [
|
|
87
|
-
...outputs.map(o => ({ address: o.address, value: o.value })),
|
|
88
|
-
...(changeOutput ? [changeOutput] : [])
|
|
89
|
-
],
|
|
90
|
-
fee
|
|
91
|
-
};
|
|
92
|
-
// Base64 encode via Node when available; fallback to btoa if present
|
|
93
|
-
const json = JSON.stringify(payload);
|
|
94
|
-
let psbtBase64: string;
|
|
95
|
-
try {
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
|
-
const B: any = (global as any).Buffer;
|
|
98
|
-
psbtBase64 = B ? B.from(json, 'utf8').toString('base64') : (global as any).btoa(json);
|
|
99
|
-
} catch {
|
|
100
|
-
psbtBase64 = `psbt:${json}`;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return { psbtBase64, selectedUtxos: selected, fee, changeOutput };
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import type { ResourceProvider, LinkedResource, ResourceInfo, Inscription, ResourceCrawlOptions } from './types';
|
|
2
|
-
|
|
3
|
-
export interface OrdNodeProviderOptions {
|
|
4
|
-
nodeUrl: string;
|
|
5
|
-
timeout?: number;
|
|
6
|
-
network?: 'mainnet' | 'testnet' | 'signet';
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class OrdNodeProvider implements ResourceProvider {
|
|
10
|
-
private readonly nodeUrl: string;
|
|
11
|
-
private readonly timeout: number;
|
|
12
|
-
private readonly network: 'mainnet' | 'testnet' | 'signet';
|
|
13
|
-
|
|
14
|
-
constructor(options: OrdNodeProviderOptions) {
|
|
15
|
-
this.nodeUrl = options.nodeUrl;
|
|
16
|
-
this.timeout = options.timeout || 5000;
|
|
17
|
-
this.network = options.network || 'mainnet';
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async resolve(resourceId: string): Promise<LinkedResource> {
|
|
21
|
-
return {
|
|
22
|
-
id: resourceId,
|
|
23
|
-
type: 'Unknown',
|
|
24
|
-
contentType: 'application/octet-stream',
|
|
25
|
-
content_url: `${this.nodeUrl}/content/${resourceId}`
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async resolveInscription(inscriptionId: string): Promise<Inscription> {
|
|
30
|
-
return {
|
|
31
|
-
id: inscriptionId,
|
|
32
|
-
sat: 0,
|
|
33
|
-
content_type: 'text/plain',
|
|
34
|
-
content_url: `${this.nodeUrl}/content/${inscriptionId}`
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async resolveInfo(resourceId: string): Promise<ResourceInfo> {
|
|
39
|
-
return {
|
|
40
|
-
id: resourceId,
|
|
41
|
-
type: 'Unknown',
|
|
42
|
-
contentType: 'application/octet-stream',
|
|
43
|
-
createdAt: new Date().toISOString(),
|
|
44
|
-
updatedAt: new Date().toISOString(),
|
|
45
|
-
content_url: `${this.nodeUrl}/content/${resourceId}`
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async resolveCollection(did: string, _options: { type?: string; limit?: number; offset?: number } = {}): Promise<LinkedResource[]> {
|
|
50
|
-
return [];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
async getSatInfo(_satNumber: string): Promise<{ inscription_ids: string[] }> {
|
|
54
|
-
return { inscription_ids: [] };
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
async getMetadata(_inscriptionId: string): Promise<any> {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async *getAllResources(_options: ResourceCrawlOptions = {}): AsyncGenerator<LinkedResource[]> {
|
|
62
|
-
// no-op generator yields nothing
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async *getAllResourcesChronological(_options: ResourceCrawlOptions = {}): AsyncGenerator<LinkedResource[]> {
|
|
67
|
-
// no-op generator yields nothing
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async getInscriptionLocationsByAddress(_address: string): Promise<{ id: string; location: string }[]> {
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
async getInscriptionByNumber(_inscriptionNumber: number): Promise<Inscription> {
|
|
76
|
-
return {
|
|
77
|
-
id: '0',
|
|
78
|
-
sat: 0,
|
|
79
|
-
content_type: 'text/plain',
|
|
80
|
-
content_url: `${this.nodeUrl}/content/0`
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
async getAddressOutputs(_address: string): Promise<string[]> {
|
|
85
|
-
return [];
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
async getOutputDetails(_outpoint: string): Promise<{ value: number; script_pubkey: string; spent: boolean; inscriptions: string[] }> {
|
|
89
|
-
return { value: 0, script_pubkey: '', spent: false, inscriptions: [] };
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { OrdinalsClient } from '../OrdinalsClient';
|
|
2
|
-
import { withRetry } from '../../utils/retry';
|
|
3
|
-
|
|
4
|
-
export interface OrdinalsProvider {
|
|
5
|
-
getSatInfo(satNumber: string): Promise<{ inscription_ids: string[] }>;
|
|
6
|
-
resolveInscription(inscriptionId: string): Promise<{ id: string; sat: number; content_type: string; content_url: string }>;
|
|
7
|
-
getMetadata(inscriptionId: string): Promise<any>;
|
|
8
|
-
estimateFee(blocks?: number): Promise<number>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export class OrdinalsClientProvider implements OrdinalsProvider {
|
|
12
|
-
constructor(private client: OrdinalsClient, private options?: { retries?: number; baseUrl?: string }) {}
|
|
13
|
-
|
|
14
|
-
async getSatInfo(satNumber: string): Promise<{ inscription_ids: string[] }> {
|
|
15
|
-
return withRetry(() => this.client.getSatInfo(satNumber), {
|
|
16
|
-
maxRetries: this.options?.retries ?? 2,
|
|
17
|
-
isRetriable: () => true
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async resolveInscription(inscriptionId: string): Promise<{ id: string; sat: number; content_type: string; content_url: string }> {
|
|
22
|
-
return withRetry(async () => {
|
|
23
|
-
const res = await this.client.getInscriptionById(inscriptionId);
|
|
24
|
-
if (!res) throw new Error('Inscription not found');
|
|
25
|
-
if (!res.satoshi) throw new Error('Inscription missing satoshi');
|
|
26
|
-
const sat = Number(String(res.satoshi));
|
|
27
|
-
if (Number.isNaN(sat)) throw new Error('Invalid satoshi value');
|
|
28
|
-
if (!res.contentType) throw new Error('Inscription missing contentType');
|
|
29
|
-
const base = (this.options?.baseUrl || '').replace(/\/$/, '');
|
|
30
|
-
if (!base) throw new Error('baseUrl is required to construct content_url');
|
|
31
|
-
const id = res.inscriptionId;
|
|
32
|
-
const content_url = `${base}/content/${id}`;
|
|
33
|
-
return {
|
|
34
|
-
id,
|
|
35
|
-
sat,
|
|
36
|
-
content_type: res.contentType,
|
|
37
|
-
content_url
|
|
38
|
-
};
|
|
39
|
-
}, { maxRetries: this.options?.retries ?? 2, isRetriable: () => true });
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async getMetadata(inscriptionId: string): Promise<any> {
|
|
43
|
-
return withRetry(() => this.client.getMetadata(inscriptionId), {
|
|
44
|
-
maxRetries: this.options?.retries ?? 2,
|
|
45
|
-
isRetriable: () => true
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async estimateFee(blocks?: number): Promise<number> {
|
|
50
|
-
return withRetry(() => this.client.estimateFee(blocks), {
|
|
51
|
-
maxRetries: this.options?.retries ?? 2,
|
|
52
|
-
isRetriable: () => true
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
export interface LinkedResource {
|
|
2
|
-
id: string;
|
|
3
|
-
type: string;
|
|
4
|
-
contentType: string;
|
|
5
|
-
content_url: string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface Inscription {
|
|
9
|
-
id: string;
|
|
10
|
-
sat: number;
|
|
11
|
-
content_type: string;
|
|
12
|
-
content_url: string;
|
|
13
|
-
number?: number;
|
|
14
|
-
height?: number;
|
|
15
|
-
timestamp?: number;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface ResourceInfo {
|
|
19
|
-
id: string;
|
|
20
|
-
type: string;
|
|
21
|
-
contentType: string;
|
|
22
|
-
createdAt?: string;
|
|
23
|
-
updatedAt?: string;
|
|
24
|
-
content_url: string;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export interface ResourceProvider {
|
|
28
|
-
resolve(resourceId: string): Promise<LinkedResource>;
|
|
29
|
-
resolveInscription(inscriptionId: string): Promise<Inscription>;
|
|
30
|
-
resolveInfo(resourceId: string): Promise<ResourceInfo>;
|
|
31
|
-
resolveCollection(did: string, options: { type?: string; limit?: number; offset?: number }): Promise<LinkedResource[]>;
|
|
32
|
-
getSatInfo(satNumber: string): Promise<{ inscription_ids: string[] }>;
|
|
33
|
-
getMetadata(inscriptionId: string): Promise<any>;
|
|
34
|
-
getAllResources(options?: ResourceCrawlOptions): AsyncGenerator<LinkedResource[]>;
|
|
35
|
-
getAllResourcesChronological(options?: ResourceCrawlOptions): AsyncGenerator<LinkedResource[]>;
|
|
36
|
-
getInscriptionLocationsByAddress(address: string): Promise<InscriptionRefWithLocation[]>;
|
|
37
|
-
getInscriptionByNumber(inscriptionNumber: number): Promise<Inscription>;
|
|
38
|
-
getAddressOutputs(address: string): Promise<string[]>;
|
|
39
|
-
getOutputDetails(outpoint: string): Promise<{ value: number; script_pubkey: string; spent: boolean; inscriptions: string[] }>;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface ResourceCrawlOptions {
|
|
43
|
-
batchSize?: number;
|
|
44
|
-
startFrom?: number;
|
|
45
|
-
maxResources?: number;
|
|
46
|
-
filter?: (resource: LinkedResource) => boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface ResourceBatch {
|
|
50
|
-
resources: LinkedResource[];
|
|
51
|
-
nextCursor?: number;
|
|
52
|
-
hasMore: boolean;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface InscriptionRefWithLocation {
|
|
56
|
-
id: string;
|
|
57
|
-
location: string;
|
|
58
|
-
}
|
|
59
|
-
|