phantasma-sdk-ts 0.2.0-rc.10 → 0.2.0-rc.11
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/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.d.ts +3 -0
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.d.ts.map +1 -1
- package/dist/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.js +33 -0
- package/package.json +1 -1
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare class TokenMetadataBuilder {
|
|
2
|
+
private static readonly iconDataUriPrefixPattern;
|
|
3
|
+
private static readonly base64PayloadPattern;
|
|
2
4
|
static buildAndSerialize(fields?: Record<string, string>): Uint8Array;
|
|
5
|
+
private static validateIcon;
|
|
3
6
|
}
|
|
4
7
|
//# sourceMappingURL=TokenMetadataBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenMetadataBuilder.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU;
|
|
1
|
+
{"version":3,"file":"TokenMetadataBuilder.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/types/Carbon/Blockchain/Modules/Builders/TokenMetadataBuilder.ts"],"names":[],"mappings":"AAGA,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CACF;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAA4B;IAExE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU;IA8BrE,OAAO,CAAC,MAAM,CAAC,YAAY;CAiC5B"}
|
|
@@ -13,6 +13,7 @@ class TokenMetadataBuilder {
|
|
|
13
13
|
if (missing.length > 0) {
|
|
14
14
|
throw new Error(`Token metadata is missing required fields: ${missing.join(', ')}`);
|
|
15
15
|
}
|
|
16
|
+
this.validateIcon(fields['icon']);
|
|
16
17
|
const metadataFields = [];
|
|
17
18
|
for (const [key, value] of Object.entries(fields)) {
|
|
18
19
|
metadataFields.push(Vm_1.VmNamedDynamicVariable.from(key, Vm_1.VmType.String, value));
|
|
@@ -23,5 +24,37 @@ class TokenMetadataBuilder {
|
|
|
23
24
|
struct.write(wMetadata);
|
|
24
25
|
return wMetadata.toUint8Array();
|
|
25
26
|
}
|
|
27
|
+
static validateIcon(icon) {
|
|
28
|
+
const candidate = icon?.trim();
|
|
29
|
+
if (!candidate || candidate.length === 0) {
|
|
30
|
+
throw new Error('Token metadata icon must be a base64-encoded data URI (PNG, JPEG, or SVG)');
|
|
31
|
+
}
|
|
32
|
+
if (!this.iconDataUriPrefixPattern.test(candidate)) {
|
|
33
|
+
throw new Error('Token metadata icon must be a base64-encoded data URI (PNG, JPEG, or SVG)');
|
|
34
|
+
}
|
|
35
|
+
const payload = candidate.slice(candidate.indexOf(',') + 1).trim();
|
|
36
|
+
if (!payload) {
|
|
37
|
+
throw new Error('Token metadata icon must include a non-empty base64 payload');
|
|
38
|
+
}
|
|
39
|
+
if (!this.base64PayloadPattern.test(payload) || payload.length % 4 !== 0) {
|
|
40
|
+
throw new Error('Token metadata icon payload is not valid base64');
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const decoded = Buffer.from(payload, 'base64');
|
|
44
|
+
if (decoded.length === 0) {
|
|
45
|
+
throw new Error('Token metadata icon must include a non-empty base64 payload');
|
|
46
|
+
}
|
|
47
|
+
const normalizedPayload = decoded.toString('base64').replace(/=+$/, '');
|
|
48
|
+
const normalizedInput = payload.replace(/=+$/, '');
|
|
49
|
+
if (normalizedPayload !== normalizedInput) {
|
|
50
|
+
throw new Error('Token metadata icon payload is not valid base64');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
throw new Error('Token metadata icon payload is not valid base64');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
26
57
|
}
|
|
27
58
|
exports.TokenMetadataBuilder = TokenMetadataBuilder;
|
|
59
|
+
TokenMetadataBuilder.iconDataUriPrefixPattern = /^data:image\/(png|jpeg|svg\+xml);base64,/i;
|
|
60
|
+
TokenMetadataBuilder.base64PayloadPattern = /^[A-Za-z0-9+/]+={0,2}$/;
|