@originals/sdk 1.8.1 → 1.8.2

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.
Files changed (145) hide show
  1. package/dist/utils/hash.js +1 -0
  2. package/package.json +6 -5
  3. package/src/adapters/FeeOracleMock.ts +9 -0
  4. package/src/adapters/index.ts +5 -0
  5. package/src/adapters/providers/OrdHttpProvider.ts +126 -0
  6. package/src/adapters/providers/OrdMockProvider.ts +101 -0
  7. package/src/adapters/types.ts +66 -0
  8. package/src/bitcoin/BitcoinManager.ts +329 -0
  9. package/src/bitcoin/BroadcastClient.ts +54 -0
  10. package/src/bitcoin/OrdinalsClient.ts +120 -0
  11. package/src/bitcoin/PSBTBuilder.ts +106 -0
  12. package/src/bitcoin/fee-calculation.ts +38 -0
  13. package/src/bitcoin/providers/OrdNodeProvider.ts +92 -0
  14. package/src/bitcoin/providers/OrdinalsProvider.ts +56 -0
  15. package/src/bitcoin/providers/types.ts +59 -0
  16. package/src/bitcoin/transactions/commit.ts +465 -0
  17. package/src/bitcoin/transactions/index.ts +13 -0
  18. package/src/bitcoin/transfer.ts +43 -0
  19. package/src/bitcoin/utxo-selection.ts +322 -0
  20. package/src/bitcoin/utxo.ts +113 -0
  21. package/src/cel/ExternalReferenceManager.ts +87 -0
  22. package/src/cel/OriginalsCel.ts +460 -0
  23. package/src/cel/algorithms/createEventLog.ts +68 -0
  24. package/src/cel/algorithms/deactivateEventLog.ts +109 -0
  25. package/src/cel/algorithms/index.ts +11 -0
  26. package/src/cel/algorithms/updateEventLog.ts +99 -0
  27. package/src/cel/algorithms/verifyEventLog.ts +306 -0
  28. package/src/cel/algorithms/witnessEvent.ts +87 -0
  29. package/src/cel/cli/create.ts +330 -0
  30. package/src/cel/cli/index.ts +383 -0
  31. package/src/cel/cli/inspect.ts +549 -0
  32. package/src/cel/cli/migrate.ts +473 -0
  33. package/src/cel/cli/verify.ts +249 -0
  34. package/src/cel/hash.ts +71 -0
  35. package/src/cel/index.ts +16 -0
  36. package/src/cel/layers/BtcoCelManager.ts +408 -0
  37. package/src/cel/layers/PeerCelManager.ts +371 -0
  38. package/src/cel/layers/WebVHCelManager.ts +361 -0
  39. package/src/cel/layers/index.ts +27 -0
  40. package/src/cel/serialization/cbor.ts +189 -0
  41. package/src/cel/serialization/index.ts +10 -0
  42. package/src/cel/serialization/json.ts +209 -0
  43. package/src/cel/types.ts +160 -0
  44. package/src/cel/witnesses/BitcoinWitness.ts +184 -0
  45. package/src/cel/witnesses/HttpWitness.ts +241 -0
  46. package/src/cel/witnesses/WitnessService.ts +51 -0
  47. package/src/cel/witnesses/index.ts +11 -0
  48. package/src/contexts/credentials-v1.json +237 -0
  49. package/src/contexts/credentials-v2-examples.json +5 -0
  50. package/src/contexts/credentials-v2.json +340 -0
  51. package/src/contexts/credentials.json +237 -0
  52. package/src/contexts/data-integrity-v2.json +81 -0
  53. package/src/contexts/dids.json +58 -0
  54. package/src/contexts/ed255192020.json +93 -0
  55. package/src/contexts/ordinals-plus.json +23 -0
  56. package/src/contexts/originals.json +22 -0
  57. package/src/core/OriginalsSDK.ts +420 -0
  58. package/src/crypto/Multikey.ts +194 -0
  59. package/src/crypto/Signer.ts +262 -0
  60. package/src/crypto/noble-init.ts +138 -0
  61. package/src/did/BtcoDidResolver.ts +231 -0
  62. package/src/did/DIDManager.ts +705 -0
  63. package/src/did/Ed25519Verifier.ts +68 -0
  64. package/src/did/KeyManager.ts +239 -0
  65. package/src/did/WebVHManager.ts +499 -0
  66. package/src/did/createBtcoDidDocument.ts +60 -0
  67. package/src/did/providers/OrdinalsClientProviderAdapter.ts +68 -0
  68. package/src/events/EventEmitter.ts +222 -0
  69. package/src/events/index.ts +19 -0
  70. package/src/events/types.ts +331 -0
  71. package/src/examples/basic-usage.ts +78 -0
  72. package/src/examples/create-module-original.ts +435 -0
  73. package/src/examples/full-lifecycle-flow.ts +514 -0
  74. package/src/examples/run.ts +60 -0
  75. package/src/index.ts +204 -0
  76. package/src/kinds/KindRegistry.ts +320 -0
  77. package/src/kinds/index.ts +74 -0
  78. package/src/kinds/types.ts +470 -0
  79. package/src/kinds/validators/AgentValidator.ts +257 -0
  80. package/src/kinds/validators/AppValidator.ts +211 -0
  81. package/src/kinds/validators/DatasetValidator.ts +242 -0
  82. package/src/kinds/validators/DocumentValidator.ts +311 -0
  83. package/src/kinds/validators/MediaValidator.ts +269 -0
  84. package/src/kinds/validators/ModuleValidator.ts +225 -0
  85. package/src/kinds/validators/base.ts +276 -0
  86. package/src/kinds/validators/index.ts +12 -0
  87. package/src/lifecycle/BatchOperations.ts +381 -0
  88. package/src/lifecycle/LifecycleManager.ts +2156 -0
  89. package/src/lifecycle/OriginalsAsset.ts +524 -0
  90. package/src/lifecycle/ProvenanceQuery.ts +280 -0
  91. package/src/lifecycle/ResourceVersioning.ts +163 -0
  92. package/src/migration/MigrationManager.ts +587 -0
  93. package/src/migration/audit/AuditLogger.ts +176 -0
  94. package/src/migration/checkpoint/CheckpointManager.ts +112 -0
  95. package/src/migration/checkpoint/CheckpointStorage.ts +101 -0
  96. package/src/migration/index.ts +33 -0
  97. package/src/migration/operations/BaseMigration.ts +126 -0
  98. package/src/migration/operations/PeerToBtcoMigration.ts +105 -0
  99. package/src/migration/operations/PeerToWebvhMigration.ts +62 -0
  100. package/src/migration/operations/WebvhToBtcoMigration.ts +105 -0
  101. package/src/migration/rollback/RollbackManager.ts +170 -0
  102. package/src/migration/state/StateMachine.ts +92 -0
  103. package/src/migration/state/StateTracker.ts +156 -0
  104. package/src/migration/types.ts +356 -0
  105. package/src/migration/validation/BitcoinValidator.ts +107 -0
  106. package/src/migration/validation/CredentialValidator.ts +62 -0
  107. package/src/migration/validation/DIDCompatibilityValidator.ts +151 -0
  108. package/src/migration/validation/LifecycleValidator.ts +64 -0
  109. package/src/migration/validation/StorageValidator.ts +79 -0
  110. package/src/migration/validation/ValidationPipeline.ts +213 -0
  111. package/src/resources/ResourceManager.ts +655 -0
  112. package/src/resources/index.ts +21 -0
  113. package/src/resources/types.ts +202 -0
  114. package/src/storage/LocalStorageAdapter.ts +64 -0
  115. package/src/storage/MemoryStorageAdapter.ts +29 -0
  116. package/src/storage/StorageAdapter.ts +25 -0
  117. package/src/storage/index.ts +3 -0
  118. package/src/types/bitcoin.ts +98 -0
  119. package/src/types/common.ts +92 -0
  120. package/src/types/credentials.ts +89 -0
  121. package/src/types/did.ts +31 -0
  122. package/src/types/external-shims.d.ts +53 -0
  123. package/src/types/index.ts +7 -0
  124. package/src/types/network.ts +178 -0
  125. package/src/utils/EventLogger.ts +298 -0
  126. package/src/utils/Logger.ts +324 -0
  127. package/src/utils/MetricsCollector.ts +358 -0
  128. package/src/utils/bitcoin-address.ts +132 -0
  129. package/src/utils/cbor.ts +31 -0
  130. package/src/utils/encoding.ts +135 -0
  131. package/src/utils/hash.ts +12 -0
  132. package/src/utils/retry.ts +46 -0
  133. package/src/utils/satoshi-validation.ts +196 -0
  134. package/src/utils/serialization.ts +102 -0
  135. package/src/utils/telemetry.ts +44 -0
  136. package/src/utils/validation.ts +123 -0
  137. package/src/vc/CredentialManager.ts +955 -0
  138. package/src/vc/Issuer.ts +105 -0
  139. package/src/vc/Verifier.ts +54 -0
  140. package/src/vc/cryptosuites/bbs.ts +253 -0
  141. package/src/vc/cryptosuites/bbsSimple.ts +21 -0
  142. package/src/vc/cryptosuites/eddsa.ts +99 -0
  143. package/src/vc/documentLoader.ts +81 -0
  144. package/src/vc/proofs/data-integrity.ts +33 -0
  145. package/src/vc/utils/jsonld.ts +18 -0
@@ -0,0 +1,44 @@
1
+ export type TelemetryLevel = 'debug' | 'info' | 'warn' | 'error';
2
+
3
+ export interface TelemetryEvent {
4
+ name: string;
5
+ level?: TelemetryLevel;
6
+ attributes?: Record<string, unknown>;
7
+ }
8
+
9
+ export interface TelemetryHooks {
10
+ onEvent?: (event: TelemetryEvent) => void;
11
+ onError?: (error: StructuredError) => void;
12
+ }
13
+
14
+ export class StructuredError extends Error {
15
+ public readonly code: string;
16
+ public readonly details?: Record<string, unknown>;
17
+ constructor(code: string, message: string, details?: Record<string, unknown>) {
18
+ super(message);
19
+ this.name = 'StructuredError';
20
+ this.code = code;
21
+ this.details = details;
22
+ }
23
+ }
24
+
25
+ export function emitTelemetry(hooks: TelemetryHooks | undefined, event: TelemetryEvent): void {
26
+ if (hooks && typeof hooks.onEvent === 'function') {
27
+ try {
28
+ hooks.onEvent({ level: 'info', ...event });
29
+ } catch (_err) {
30
+ // Intentionally ignore errors in telemetry hooks
31
+ }
32
+ }
33
+ }
34
+
35
+ export function emitError(hooks: TelemetryHooks | undefined, error: StructuredError): void {
36
+ if (hooks && typeof hooks.onError === 'function') {
37
+ try {
38
+ hooks.onError(error);
39
+ } catch (_err) {
40
+ // Intentionally ignore errors in telemetry hooks
41
+ }
42
+ }
43
+ }
44
+
@@ -0,0 +1,123 @@
1
+ import { DIDDocument, VerifiableCredential } from '../types';
2
+ import { sha256 } from '@noble/hashes/sha2.js';
3
+ import { bytesToHex } from '@noble/hashes/utils.js';
4
+
5
+ export function validateDID(did: string): boolean {
6
+ // Validate DID format according to W3C DID spec
7
+ const didRegex = /^did:([a-z0-9]+):(.*)/;
8
+
9
+ if (!didRegex.test(did)) {
10
+ return false;
11
+ }
12
+
13
+ const match = did.match(didRegex);
14
+ if (!match) {
15
+ return false;
16
+ }
17
+ const method = match[1];
18
+
19
+ // Validate supported methods
20
+ const supportedMethods = ['peer', 'webvh', 'btco'];
21
+ if (!supportedMethods.includes(method)) {
22
+ return false;
23
+ }
24
+
25
+ return true;
26
+ }
27
+
28
+ export function validateCredential(vc: VerifiableCredential): boolean {
29
+ // Validate VC structure according to W3C VC spec
30
+ if (!vc['@context'] || !Array.isArray(vc['@context'])) {
31
+ return false;
32
+ }
33
+
34
+ // Require VC v1 context presence
35
+ const contextValues = vc['@context'];
36
+ const hasVcV1 = contextValues.includes('https://www.w3.org/2018/credentials/v1');
37
+ if (!hasVcV1) {
38
+ return false;
39
+ }
40
+
41
+ if (!vc.type || !Array.isArray(vc.type)) {
42
+ return false;
43
+ }
44
+
45
+ if (!vc.type.includes('VerifiableCredential')) {
46
+ return false;
47
+ }
48
+
49
+ if (!vc.issuer || (!vc.issuanceDate)) {
50
+ return false;
51
+ }
52
+
53
+ // issuer must be a DID string or an object with DID id
54
+ const issuerIsValidDid = (iss: unknown): boolean => {
55
+ if (typeof iss === 'string') return validateDID(iss);
56
+ if (iss && typeof iss === 'object' && 'id' in iss) {
57
+ const issObj = iss as { id: unknown };
58
+ if (typeof issObj.id === 'string') return validateDID(issObj.id);
59
+ }
60
+ return false;
61
+ };
62
+ if (!issuerIsValidDid(vc.issuer)) {
63
+ return false;
64
+ }
65
+
66
+ // issuanceDate should be a valid ISO timestamp
67
+ if (typeof vc.issuanceDate !== 'string' || Number.isNaN(Date.parse(vc.issuanceDate))) {
68
+ return false;
69
+ }
70
+
71
+ if (!vc.credentialSubject) {
72
+ return false;
73
+ }
74
+
75
+ return true;
76
+ }
77
+
78
+ export function validateDIDDocument(didDoc: DIDDocument): boolean {
79
+ // Validate DID Document structure
80
+ if (!didDoc['@context'] || !Array.isArray(didDoc['@context'])) {
81
+ return false;
82
+ }
83
+
84
+ if (!didDoc.id || !validateDID(didDoc.id)) {
85
+ return false;
86
+ }
87
+
88
+ // Validate verification methods
89
+ if (didDoc.verificationMethod) {
90
+ for (const vm of didDoc.verificationMethod) {
91
+ if (!vm.id || !vm.type || !vm.controller || !vm.publicKeyMultibase) {
92
+ return false;
93
+ }
94
+ // controller should be a valid DID
95
+ if (typeof vm.controller !== 'string' || !validateDID(vm.controller)) {
96
+ return false;
97
+ }
98
+ // multibase key presence: require base58-btc multibase indicator 'z'
99
+ if (typeof vm.publicKeyMultibase !== 'string' || !vm.publicKeyMultibase.startsWith('z')) {
100
+ return false;
101
+ }
102
+ }
103
+ }
104
+
105
+ // If controller array present on the DID Document, validate entries are DIDs
106
+ const didDocWithController = didDoc as DIDDocument & { controller?: unknown };
107
+ if (Array.isArray(didDocWithController.controller)) {
108
+ const ctrls = didDocWithController.controller;
109
+ if (!ctrls.every((c: unknown) => typeof c === 'string' && validateDID(c))) {
110
+ return false;
111
+ }
112
+ }
113
+
114
+ return true;
115
+ }
116
+
117
+ export function hashResource(content: Uint8Array): string {
118
+ // Generate SHA-256 hash
119
+ const hash = sha256(content);
120
+ return bytesToHex(hash);
121
+ }
122
+
123
+