@dignetwork/dig-sdk 0.0.1-alpha.190 → 0.0.1-alpha.192
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/utils/Udi.d.ts +10 -10
- package/dist/utils/Udi.d.ts.map +1 -1
- package/dist/utils/Udi.js +65 -61
- package/package.json +1 -1
package/dist/utils/Udi.d.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
declare class Udi {
|
|
2
2
|
readonly chainName: string;
|
|
3
|
-
private readonly
|
|
4
|
-
private readonly
|
|
3
|
+
private readonly _storeIdHex;
|
|
4
|
+
private readonly _rootHashHex;
|
|
5
5
|
readonly resourceKey: string | null;
|
|
6
6
|
static readonly nid: string;
|
|
7
7
|
static readonly namespace: string;
|
|
8
|
-
constructor(chainName: string, storeId: string
|
|
9
|
-
static
|
|
10
|
-
static isHex(input: string): boolean;
|
|
11
|
-
static isBase32(input: string): boolean;
|
|
12
|
-
withRootHash(rootHash: string | Buffer | null): Udi;
|
|
13
|
-
withResourceKey(resourceKey: string | null): Udi;
|
|
8
|
+
constructor(chainName: string, storeId: string, rootHash?: string | null, resourceKey?: string | null);
|
|
9
|
+
static verifyAndFormatHex(input: string): string;
|
|
14
10
|
static fromUrn(urn: string): Udi;
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
static convertToHex(input: string): string;
|
|
12
|
+
static addBase32Padding(input: string): string;
|
|
13
|
+
toUrn(encoding?: "hex" | "base32"): string;
|
|
14
|
+
private formatBufferAsEncoding;
|
|
17
15
|
equals(other: Udi): boolean;
|
|
18
16
|
toString(): string;
|
|
19
17
|
clone(): Udi;
|
|
20
18
|
hashCode(): string;
|
|
21
19
|
get storeId(): string;
|
|
22
20
|
get rootHash(): string | null;
|
|
21
|
+
get storeIdBase32(): string;
|
|
22
|
+
get rootHashBase32(): string | null;
|
|
23
23
|
}
|
|
24
24
|
export { Udi };
|
|
25
25
|
//# sourceMappingURL=Udi.d.ts.map
|
package/dist/utils/Udi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Udi.d.ts","sourceRoot":"","sources":["../../src/utils/Udi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Udi.d.ts","sourceRoot":"","sources":["../../src/utils/Udi.ts"],"names":[],"mappings":"AAIA,cAAM,GAAG;IACP,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAS;IACpC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAoB;gBAGnD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,WAAW,GAAE,MAAM,GAAG,IAAW;IAWnC,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOhD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IA4BhC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAkB1C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAK9C,KAAK,CAAC,QAAQ,GAAE,KAAK,GAAG,QAAgB,GAAG,MAAM;IAmBjD,OAAO,CAAC,sBAAsB;IAa9B,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO;IAW3B,QAAQ,IAAI,MAAM;IAIlB,KAAK,IAAI,GAAG;IASZ,QAAQ,IAAI,MAAM;IAMlB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,GAAG,IAAI,CAE5B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAIlC;CACF;AAED,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
package/dist/utils/Udi.js
CHANGED
|
@@ -27,73 +27,71 @@ exports.Udi = void 0;
|
|
|
27
27
|
const urns = __importStar(require("urns"));
|
|
28
28
|
const crypto_1 = require("crypto");
|
|
29
29
|
const hi_base32_1 = require("hi-base32");
|
|
30
|
-
//
|
|
31
|
-
// This class encapsulates the concept of a Universal Data Identifier (UDI), which is a
|
|
32
|
-
// standardized way to identify resources across the distributed DIG mesh network.
|
|
33
|
-
// The UDI format: urn:dig:chainName:storeId:rootHash/resourceKey
|
|
34
|
-
// This allows unique resource identification across the DIG network.
|
|
35
|
-
//
|
|
36
30
|
class Udi {
|
|
37
31
|
constructor(chainName, storeId, rootHash = null, resourceKey = null) {
|
|
38
32
|
if (!storeId) {
|
|
39
33
|
throw new Error("storeId cannot be empty");
|
|
40
34
|
}
|
|
41
35
|
this.chainName = chainName || "chia";
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
36
|
+
this._storeIdHex = Udi.verifyAndFormatHex(storeId);
|
|
37
|
+
this._rootHashHex = rootHash ? Udi.verifyAndFormatHex(rootHash) : null;
|
|
44
38
|
this.resourceKey = resourceKey;
|
|
45
39
|
}
|
|
46
|
-
static
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
if (Udi.isHex(input)) {
|
|
51
|
-
return Buffer.from(input, 'hex');
|
|
40
|
+
static verifyAndFormatHex(input) {
|
|
41
|
+
if (!/^[a-fA-F0-9]{64}$/.test(input)) {
|
|
42
|
+
throw new Error("Input must be a 64-character hex string.");
|
|
52
43
|
}
|
|
53
|
-
|
|
54
|
-
return Buffer.from((0, hi_base32_1.decode)(input.toUpperCase(), false)); // Decode with uppercase
|
|
55
|
-
}
|
|
56
|
-
throw new Error("Invalid input encoding. Must be 32-byte hex or Base32 string.");
|
|
57
|
-
}
|
|
58
|
-
static isHex(input) {
|
|
59
|
-
return /^[a-fA-F0-9]{64}$/.test(input);
|
|
60
|
-
}
|
|
61
|
-
static isBase32(input) {
|
|
62
|
-
return /^[A-Z2-7]{52}$/.test(input.toUpperCase());
|
|
63
|
-
}
|
|
64
|
-
withRootHash(rootHash) {
|
|
65
|
-
return new Udi(this.chainName, this._storeId, rootHash, this.resourceKey);
|
|
66
|
-
}
|
|
67
|
-
withResourceKey(resourceKey) {
|
|
68
|
-
return new Udi(this.chainName, this._storeId, this._rootHash, resourceKey);
|
|
44
|
+
return input;
|
|
69
45
|
}
|
|
70
46
|
static fromUrn(urn) {
|
|
71
47
|
const parsedUrn = urns.parseURN(urn);
|
|
72
|
-
if (parsedUrn.nid
|
|
48
|
+
if (parsedUrn.nid !== Udi.nid) {
|
|
73
49
|
throw new Error(`Invalid nid: ${parsedUrn.nid}`);
|
|
74
50
|
}
|
|
75
|
-
const parts = parsedUrn.nss.split(
|
|
51
|
+
const parts = parsedUrn.nss.split(":");
|
|
76
52
|
if (parts.length < 2) {
|
|
77
53
|
throw new Error(`Invalid UDI format: ${parsedUrn.nss}`);
|
|
78
54
|
}
|
|
79
55
|
const chainName = parts[0];
|
|
80
|
-
const
|
|
81
|
-
let
|
|
56
|
+
const storeIdHex = Udi.convertToHex(parts[1].split("/")[0]);
|
|
57
|
+
let rootHashHex = null;
|
|
82
58
|
if (parts.length > 2) {
|
|
83
|
-
|
|
59
|
+
rootHashHex = Udi.convertToHex(parts[2].split("/")[0]);
|
|
84
60
|
}
|
|
85
|
-
const pathParts = parsedUrn.nss.split(
|
|
61
|
+
const pathParts = parsedUrn.nss.split("/");
|
|
86
62
|
let resourceKey = null;
|
|
87
63
|
if (pathParts.length > 1) {
|
|
88
|
-
resourceKey = pathParts.slice(1).join(
|
|
64
|
+
resourceKey = pathParts.slice(1).join("/");
|
|
65
|
+
}
|
|
66
|
+
return new Udi(chainName, storeIdHex, rootHashHex, resourceKey);
|
|
67
|
+
}
|
|
68
|
+
static convertToHex(input) {
|
|
69
|
+
// Convert from Base32
|
|
70
|
+
try {
|
|
71
|
+
const paddedInput = Udi.addBase32Padding(input.toUpperCase());
|
|
72
|
+
const buffer = Buffer.from((0, hi_base32_1.decode)(paddedInput, false));
|
|
73
|
+
return buffer.toString("hex");
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
console.warn("Base32 decoding failed, trying Base64 encoding...");
|
|
77
|
+
}
|
|
78
|
+
// Attempt hex conversion first
|
|
79
|
+
if (/^[a-fA-F0-9]{64}$/.test(input)) {
|
|
80
|
+
return input;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw new Error("Input must be a 64-character hex string.");
|
|
89
84
|
}
|
|
90
|
-
return new Udi(chainName, storeId, rootHash, resourceKey);
|
|
91
85
|
}
|
|
92
|
-
|
|
93
|
-
const
|
|
86
|
+
static addBase32Padding(input) {
|
|
87
|
+
const paddingNeeded = (8 - (input.length % 8)) % 8;
|
|
88
|
+
return input + "=".repeat(paddingNeeded);
|
|
89
|
+
}
|
|
90
|
+
toUrn(encoding = "hex") {
|
|
91
|
+
const storeIdStr = this.formatBufferAsEncoding(this._storeIdHex, encoding);
|
|
94
92
|
let urn = `${Udi.namespace}:${this.chainName}:${storeIdStr}`;
|
|
95
|
-
if (this.
|
|
96
|
-
const rootHashStr = this.
|
|
93
|
+
if (this._rootHashHex) {
|
|
94
|
+
const rootHashStr = this.formatBufferAsEncoding(this._rootHashHex, encoding);
|
|
97
95
|
urn += `:${rootHashStr}`;
|
|
98
96
|
}
|
|
99
97
|
if (this.resourceKey) {
|
|
@@ -101,42 +99,48 @@ class Udi {
|
|
|
101
99
|
}
|
|
102
100
|
return urn;
|
|
103
101
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return buffer.toString('base64').toLowerCase(); // Convert to lowercase
|
|
112
|
-
default:
|
|
113
|
-
throw new Error("Unsupported encoding");
|
|
102
|
+
formatBufferAsEncoding(hexString, encoding) {
|
|
103
|
+
const buffer = Buffer.from(hexString, "hex");
|
|
104
|
+
if (encoding === "hex") {
|
|
105
|
+
return hexString;
|
|
106
|
+
}
|
|
107
|
+
else if (encoding === "base32") {
|
|
108
|
+
return (0, hi_base32_1.encode)(buffer).replace(/=+$/, ""); // Strip padding for Base32
|
|
114
109
|
}
|
|
110
|
+
throw new Error("Unsupported encoding type");
|
|
115
111
|
}
|
|
116
112
|
equals(other) {
|
|
117
|
-
return (this.
|
|
113
|
+
return (this._storeIdHex === other._storeIdHex &&
|
|
118
114
|
this.chainName === other.chainName &&
|
|
119
|
-
(this.
|
|
115
|
+
(this._rootHashHex && other._rootHashHex
|
|
116
|
+
? this._rootHashHex === other._rootHashHex
|
|
117
|
+
: this._rootHashHex === other._rootHashHex) &&
|
|
120
118
|
this.resourceKey === other.resourceKey);
|
|
121
119
|
}
|
|
122
120
|
toString() {
|
|
123
121
|
return this.toUrn();
|
|
124
122
|
}
|
|
125
123
|
clone() {
|
|
126
|
-
return new Udi(this.chainName, this.
|
|
124
|
+
return new Udi(this.chainName, this._storeIdHex, this._rootHashHex, this.resourceKey);
|
|
127
125
|
}
|
|
128
126
|
hashCode() {
|
|
129
|
-
const hash = (0, crypto_1.createHash)(
|
|
127
|
+
const hash = (0, crypto_1.createHash)("sha256");
|
|
130
128
|
hash.update(this.toUrn());
|
|
131
|
-
return hash.digest(
|
|
129
|
+
return hash.digest("hex");
|
|
132
130
|
}
|
|
133
|
-
// Getter for storeId as a hex string
|
|
134
131
|
get storeId() {
|
|
135
|
-
return this.
|
|
132
|
+
return this._storeIdHex;
|
|
136
133
|
}
|
|
137
|
-
// Getter for rootHash as a hex string
|
|
138
134
|
get rootHash() {
|
|
139
|
-
return this.
|
|
135
|
+
return this._rootHashHex;
|
|
136
|
+
}
|
|
137
|
+
get storeIdBase32() {
|
|
138
|
+
return this.formatBufferAsEncoding(this._storeIdHex, "base32");
|
|
139
|
+
}
|
|
140
|
+
get rootHashBase32() {
|
|
141
|
+
return this._rootHashHex
|
|
142
|
+
? this.formatBufferAsEncoding(this._rootHashHex, "base32")
|
|
143
|
+
: null;
|
|
140
144
|
}
|
|
141
145
|
}
|
|
142
146
|
exports.Udi = Udi;
|