@dcl/content-validator 2.1.0 → 2.1.1-20220622185224.commit-163289a
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/content-validator.api.json +38 -180
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/the-graph-client/the-graph-client.d.ts.map +1 -1
- package/dist/the-graph-client/the-graph-client.js +4 -13
- package/dist/the-graph-client/the-graph-client.js.map +1 -1
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -16
- package/dist/types.js.map +1 -1
- package/dist/validations/ADR51.d.ts +3 -5
- package/dist/validations/ADR51.d.ts.map +1 -1
- package/dist/validations/ADR51.js +4 -0
- package/dist/validations/ADR51.js.map +1 -1
- package/dist/validations/access-checker/access.d.ts.map +1 -1
- package/dist/validations/access-checker/access.js +7 -7
- package/dist/validations/access-checker/access.js.map +1 -1
- package/dist/validations/access-checker/emotes.d.ts +3 -0
- package/dist/validations/access-checker/emotes.d.ts.map +1 -0
- package/dist/validations/access-checker/emotes.js +13 -0
- package/dist/validations/access-checker/emotes.js.map +1 -0
- package/dist/validations/access-checker/items/collection-asset.d.ts +15 -0
- package/dist/validations/access-checker/items/collection-asset.d.ts.map +1 -0
- package/dist/validations/access-checker/items/collection-asset.js +133 -0
- package/dist/validations/access-checker/items/collection-asset.js.map +1 -0
- package/dist/validations/access-checker/items/items.d.ts +13 -0
- package/dist/validations/access-checker/items/items.d.ts.map +1 -0
- package/dist/validations/access-checker/items/items.js +68 -0
- package/dist/validations/access-checker/items/items.js.map +1 -0
- package/dist/validations/access-checker/items/off-chain-asset.d.ts +3 -0
- package/dist/validations/access-checker/items/off-chain-asset.d.ts.map +1 -0
- package/dist/validations/access-checker/items/off-chain-asset.js +17 -0
- package/dist/validations/access-checker/items/off-chain-asset.js.map +1 -0
- package/dist/validations/access-checker/items/third-party-asset.d.ts +3 -0
- package/dist/validations/access-checker/items/third-party-asset.d.ts.map +1 -0
- package/dist/validations/access-checker/items/third-party-asset.js +107 -0
- package/dist/validations/access-checker/items/third-party-asset.js.map +1 -0
- package/dist/validations/access-checker/profiles.d.ts.map +1 -1
- package/dist/validations/access-checker/profiles.js +3 -3
- package/dist/validations/access-checker/profiles.js.map +1 -1
- package/dist/validations/access-checker/scenes.d.ts.map +1 -1
- package/dist/validations/access-checker/scenes.js +3 -10
- package/dist/validations/access-checker/scenes.js.map +1 -1
- package/dist/validations/access-checker/stores.d.ts.map +1 -1
- package/dist/validations/access-checker/stores.js.map +1 -1
- package/dist/validations/access-checker/wearables.d.ts +0 -18
- package/dist/validations/access-checker/wearables.d.ts.map +1 -1
- package/dist/validations/access-checker/wearables.js +9 -322
- package/dist/validations/access-checker/wearables.js.map +1 -1
- package/dist/validations/content.d.ts +3 -0
- package/dist/validations/content.d.ts.map +1 -1
- package/dist/validations/content.js +30 -17
- package/dist/validations/content.js.map +1 -1
- package/dist/validations/entity-structure.d.ts.map +1 -1
- package/dist/validations/entity-structure.js.map +1 -1
- package/dist/validations/index.d.ts +4 -23
- package/dist/validations/index.d.ts.map +1 -1
- package/dist/validations/index.js +6 -51
- package/dist/validations/index.js.map +1 -1
- package/dist/validations/ipfs-hashing.d.ts.map +1 -1
- package/dist/validations/ipfs-hashing.js +3 -6
- package/dist/validations/ipfs-hashing.js.map +1 -1
- package/dist/validations/items/emotes.d.ts +5 -0
- package/dist/validations/items/emotes.d.ts.map +1 -0
- package/dist/validations/items/emotes.js +35 -0
- package/dist/validations/items/emotes.js.map +1 -0
- package/dist/validations/items/items.d.ts +10 -0
- package/dist/validations/items/items.d.ts.map +1 -0
- package/dist/validations/items/items.js +79 -0
- package/dist/validations/items/items.js.map +1 -0
- package/dist/validations/{wearable.d.ts → items/wearables.d.ts} +2 -5
- package/dist/validations/items/wearables.d.ts.map +1 -0
- package/dist/validations/items/wearables.js +32 -0
- package/dist/validations/items/wearables.js.map +1 -0
- package/dist/validations/metadata-schema.d.ts +2 -5
- package/dist/validations/metadata-schema.d.ts.map +1 -1
- package/dist/validations/metadata-schema.js +37 -7
- package/dist/validations/metadata-schema.js.map +1 -1
- package/dist/validations/profile.d.ts.map +1 -1
- package/dist/validations/profile.js +9 -20
- package/dist/validations/profile.js.map +1 -1
- package/dist/validations/signature.d.ts.map +1 -1
- package/dist/validations/signature.js +1 -3
- package/dist/validations/signature.js.map +1 -1
- package/dist/validations/size.d.ts.map +1 -1
- package/dist/validations/size.js +4 -3
- package/dist/validations/size.js.map +1 -1
- package/dist/validations/timestamps.d.ts +21 -0
- package/dist/validations/timestamps.d.ts.map +1 -0
- package/dist/validations/timestamps.js +24 -0
- package/dist/validations/timestamps.js.map +1 -0
- package/dist/validations/validations.d.ts +9 -0
- package/dist/validations/validations.d.ts.map +1 -0
- package/dist/validations/validations.js +47 -0
- package/dist/validations/validations.js.map +1 -0
- package/package.json +4 -4
- package/dist/validations/wearable.d.ts.map +0 -1
- package/dist/validations/wearable.js +0 -110
- package/dist/validations/wearable.js.map +0 -1
|
@@ -1,328 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.wearables =
|
|
4
|
-
const
|
|
5
|
-
const hashing_1 = require("@dcl/hashing");
|
|
6
|
-
const schemas_1 = require("@dcl/schemas");
|
|
7
|
-
const urn_resolver_1 = require("@dcl/urn-resolver");
|
|
8
|
-
const types_1 = require("../../types");
|
|
9
|
-
const L1_NETWORKS = ['mainnet', 'ropsten', 'kovan', 'rinkeby', 'goerli'];
|
|
10
|
-
const L2_NETWORKS = ['matic', 'mumbai'];
|
|
11
|
-
// These keys are required by the protocol to be a subset and present in the merkle proof hashing keys.
|
|
12
|
-
// Note: deletions would not be a problem, but in case of adding a key here,
|
|
13
|
-
// you MUST review the validation in order to not break the sync between catalysts (aka failed deployments)
|
|
14
|
-
exports.MERKLE_PROOF_REQUIRED_KEYS = [
|
|
15
|
-
'id',
|
|
16
|
-
'name',
|
|
17
|
-
'description',
|
|
18
|
-
'i18n',
|
|
19
|
-
'image',
|
|
20
|
-
'thumbnail',
|
|
21
|
-
'data',
|
|
22
|
-
'content'
|
|
23
|
-
];
|
|
24
|
-
const validUrnTypes = [
|
|
25
|
-
'off-chain',
|
|
26
|
-
'blockchain-collection-v1-asset',
|
|
27
|
-
'blockchain-collection-v2-asset',
|
|
28
|
-
'blockchain-collection-third-party'
|
|
29
|
-
];
|
|
30
|
-
const alreadySeen = (resolvedPointers, parsed) => {
|
|
31
|
-
return resolvedPointers.some((alreadyResolved) => resolveSameUrn(alreadyResolved, parsed));
|
|
32
|
-
};
|
|
33
|
-
const resolveSameUrn = (alreadyParsed, parsed) => {
|
|
34
|
-
const alreadyParsedCopy = Object.assign({}, alreadyParsed);
|
|
35
|
-
const parsedCopy = Object.assign({}, parsed);
|
|
36
|
-
alreadyParsedCopy.uri = new URL('urn:same');
|
|
37
|
-
parsedCopy.uri = new URL('urn:same');
|
|
38
|
-
return JSON.stringify(alreadyParsedCopy) == JSON.stringify(parsedCopy);
|
|
39
|
-
};
|
|
40
|
-
const parseUrnNoFail = async (urn) => {
|
|
41
|
-
try {
|
|
42
|
-
const parsed = await (0, urn_resolver_1.parseUrn)(urn);
|
|
43
|
-
if (parsed?.type === 'blockchain-collection-v1-asset') {
|
|
44
|
-
return parsed;
|
|
45
|
-
}
|
|
46
|
-
if (parsed?.type === 'blockchain-collection-v2-asset') {
|
|
47
|
-
return parsed;
|
|
48
|
-
}
|
|
49
|
-
if (parsed?.type === 'off-chain') {
|
|
50
|
-
return parsed;
|
|
51
|
-
}
|
|
52
|
-
if (parsed?.type === 'blockchain-collection-third-party') {
|
|
53
|
-
return parsed;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch { }
|
|
57
|
-
return null;
|
|
58
|
-
};
|
|
59
|
-
const toHexBuffer = (value) => {
|
|
60
|
-
if (value.startsWith('0x')) {
|
|
61
|
-
return Buffer.from(value.substring(2), 'hex'); // removing first 2 characters (0x)
|
|
62
|
-
}
|
|
63
|
-
return Buffer.from(value, 'hex');
|
|
64
|
-
};
|
|
65
|
-
const getThirdPartyId = (urn) => `urn:decentraland:${urn.network}:collections-thirdparty:${urn.thirdPartyName}`;
|
|
66
|
-
/**
|
|
67
|
-
* Given the pointers (URNs), determine which layer should be used to check the access.
|
|
68
|
-
* Checks if the ethereum address has access to the collection.
|
|
69
|
-
* @public
|
|
70
|
-
*/
|
|
3
|
+
exports.wearables = void 0;
|
|
4
|
+
const items_1 = require("./items/items");
|
|
71
5
|
exports.wearables = {
|
|
72
|
-
validate: async (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (!!permissions.contentHash) {
|
|
80
|
-
const deployedByCommittee = permissions.committee.includes(ethAddressLowercase);
|
|
81
|
-
const calculateHashes = () => {
|
|
82
|
-
// Compare both by key and hash
|
|
83
|
-
const compare = (a, b) => {
|
|
84
|
-
if (a.hash > b.hash)
|
|
85
|
-
return 1;
|
|
86
|
-
else if (a.hash < b.hash)
|
|
87
|
-
return -1;
|
|
88
|
-
else
|
|
89
|
-
return a.key > b.key ? 1 : -1;
|
|
90
|
-
};
|
|
91
|
-
const contentAsJson = (content ?? [])
|
|
92
|
-
.map(({ file, hash }) => ({ key: file, hash }))
|
|
93
|
-
.sort(compare);
|
|
94
|
-
const buffer = Buffer.from(JSON.stringify({ content: contentAsJson, metadata }));
|
|
95
|
-
return Promise.all([(0, hashing_1.hashV0)(buffer), (0, hashing_1.hashV1)(buffer)]);
|
|
96
|
-
};
|
|
97
|
-
return (deployedByCommittee &&
|
|
98
|
-
(await calculateHashes()).includes(permissions.contentHash));
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const addressHasAccess = (permissions.collectionCreator &&
|
|
102
|
-
permissions.collectionCreator === ethAddressLowercase) ||
|
|
103
|
-
(permissions.collectionManagers &&
|
|
104
|
-
permissions.collectionManagers.includes(ethAddressLowercase)) ||
|
|
105
|
-
(permissions.itemManagers &&
|
|
106
|
-
permissions.itemManagers.includes(ethAddressLowercase));
|
|
107
|
-
// Deployments to the content server are made after the collection is completed, so that the committee can then approve it.
|
|
108
|
-
// That's why isCompleted must be true, but isApproved must be false. After the committee approves the wearable, there can't be any more changes
|
|
109
|
-
const isCollectionValid = !permissions.isApproved && permissions.isCompleted;
|
|
110
|
-
return addressHasAccess && isCollectionValid;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
logger.error(`Error checking permission for (${collection}-${itemId}) at block ${block}`);
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
const getCollectionItems = async (subgraphUrl, collection, itemId, block) => {
|
|
119
|
-
const query = `
|
|
120
|
-
query getCollectionRoles($collection: String!, $itemId: String!, $block: Int!) {
|
|
121
|
-
collections(where:{ id: $collection }, block: { number: $block }) {
|
|
122
|
-
creator
|
|
123
|
-
managers
|
|
124
|
-
isApproved
|
|
125
|
-
isCompleted
|
|
126
|
-
items(where:{ id: $itemId }) {
|
|
127
|
-
managers
|
|
128
|
-
contentHash
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
accounts(where:{ isCommitteeMember: true }, block: { number: $block }) {
|
|
133
|
-
id
|
|
134
|
-
}
|
|
135
|
-
}`;
|
|
136
|
-
const result = await externalCalls.queryGraph(subgraphUrl, query, {
|
|
137
|
-
collection,
|
|
138
|
-
itemId: `${collection}-${itemId}`,
|
|
139
|
-
block
|
|
140
|
-
});
|
|
141
|
-
const collectionResult = result.collections[0];
|
|
142
|
-
const itemResult = collectionResult?.items[0];
|
|
143
|
-
return {
|
|
144
|
-
collectionCreator: collectionResult?.creator,
|
|
145
|
-
collectionManagers: collectionResult?.managers,
|
|
146
|
-
isApproved: collectionResult?.isApproved,
|
|
147
|
-
isCompleted: collectionResult?.isCompleted,
|
|
148
|
-
itemManagers: itemResult?.managers,
|
|
149
|
-
contentHash: itemResult?.contentHash,
|
|
150
|
-
committee: result.accounts.map(({ id }) => id.toLowerCase())
|
|
151
|
-
};
|
|
152
|
-
};
|
|
153
|
-
const checkCollectionAccess = async (blocksSubgraphUrl, collectionsSubgraphUrl, collection, itemId, entity) => {
|
|
154
|
-
const { timestamp } = entity;
|
|
155
|
-
try {
|
|
156
|
-
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await theGraphClient.findBlocksForTimestamp(blocksSubgraphUrl, timestamp);
|
|
157
|
-
// It could happen that the subgraph hasn't synced yet, so someone who just lost access still managed to make a deployment. The problem would be that when other catalysts perform
|
|
158
|
-
// the same check, the subgraph might have synced and the deployment is no longer valid. So, in order to prevent inconsistencies between catalysts, we will allow all deployments that
|
|
159
|
-
// have access now, or had access 5 minutes ago.
|
|
160
|
-
const hasPermissionOnBlock = async (blockNumber) => !!blockNumber &&
|
|
161
|
-
(await hasPermission(collectionsSubgraphUrl, collection, itemId, blockNumber, entity));
|
|
162
|
-
return ((await hasPermissionOnBlock(blockNumberAtDeployment)) ||
|
|
163
|
-
(await hasPermissionOnBlock(blockNumberFiveMinBeforeDeployment)));
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
logger.error(`Error checking wearable access (${collection}, ${itemId}, ${entity.ethAddress}, ${timestamp}, ${blocksSubgraphUrl}).`);
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
const getMerkleRoot = async ({ block, thirdPartyId }) => {
|
|
171
|
-
const query = `
|
|
172
|
-
query MerkleRoot($id: String!, $block: Int!) {
|
|
173
|
-
thirdParties(where: { id: $id, isApproved: true }, block: { number: $block }, first: 1) {
|
|
174
|
-
root
|
|
175
|
-
}
|
|
176
|
-
}`;
|
|
177
|
-
const result = await externalCalls.queryGraph(externalCalls.subgraphs.L2.thirdPartyRegistry, query, {
|
|
178
|
-
id: thirdPartyId,
|
|
179
|
-
block
|
|
180
|
-
});
|
|
181
|
-
if (!result.thirdParties || result.thirdParties.length < 1)
|
|
182
|
-
return;
|
|
183
|
-
return result.thirdParties[0]?.root;
|
|
184
|
-
};
|
|
185
|
-
const verifyHash = async (metadata, merkleRoot) => {
|
|
186
|
-
// Validate merkle proof data is valid
|
|
187
|
-
if (!schemas_1.MerkleProof.validate(metadata.merkleProof)) {
|
|
188
|
-
logger.debug('Merkle proof is not valid', {
|
|
189
|
-
merkleProof: metadata.merkleProof
|
|
190
|
-
});
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
const merkleProof = metadata.merkleProof;
|
|
194
|
-
// The keys used to create the hash MUST be present if they're required.
|
|
195
|
-
if (!exports.MERKLE_PROOF_REQUIRED_KEYS.every((key) => merkleProof.hashingKeys.includes(key))) {
|
|
196
|
-
logger.debug(`Merkle proof hashing keys don't satisfy the required keys`, {
|
|
197
|
-
requiredKeys: JSON.stringify(exports.MERKLE_PROOF_REQUIRED_KEYS),
|
|
198
|
-
hashingKeys: JSON.stringify(merkleProof.hashingKeys)
|
|
199
|
-
});
|
|
200
|
-
return false;
|
|
201
|
-
}
|
|
202
|
-
const generatedCrcHash = (0, hashing_1.keccak256Hash)(metadata, metadata.merkleProof.hashingKeys);
|
|
203
|
-
// The hash provided in the merkleProof for the entity MUST match the hash generated by the validator.
|
|
204
|
-
if (metadata.merkleProof.entityHash !== generatedCrcHash) {
|
|
205
|
-
logger.debug(`The hash provided in the merkleProof doesn't match with the generated by the validator`, {
|
|
206
|
-
generatedCrcHash,
|
|
207
|
-
entityHash: metadata.merkleProof.entityHash
|
|
208
|
-
});
|
|
209
|
-
return false;
|
|
210
|
-
}
|
|
211
|
-
// Verify if the entity belongs to the Merkle Tree.
|
|
212
|
-
const bufferedProofs = merkleProof.proof.map((value) => toHexBuffer(value));
|
|
213
|
-
const bufferedMerkleRoot = toHexBuffer(merkleRoot);
|
|
214
|
-
return (0, content_hash_tree_1.verifyProof)(merkleProof.index, merkleProof.entityHash, bufferedProofs, bufferedMerkleRoot);
|
|
215
|
-
};
|
|
216
|
-
/**
|
|
217
|
-
* Verifies Third Party Wearable access by doing a Merkle Tree based verification, where the merkle root is stored in the blockchain
|
|
218
|
-
* and the proofs come in the wearable metadata.
|
|
219
|
-
* It also does a CRC using the metadata and some hashing keys:
|
|
220
|
-
* - Hashing keys must contain all required keys defined in MERKLE_PROOF_REQUIRED_KEYS
|
|
221
|
-
*
|
|
222
|
-
* This checks are verified using blocks in a 5 minutes window from the deployment timestamp
|
|
223
|
-
*/
|
|
224
|
-
const verifyMerkleProofedEntity = async (urn) => {
|
|
225
|
-
// do merkle proofed entity validation, required keys are defined by the Catalyst and must be a subset of the hashingKeys from the MerkleProof to succeed
|
|
226
|
-
const metadata = deployment.entity.metadata;
|
|
227
|
-
const thirdPartyId = getThirdPartyId(urn);
|
|
228
|
-
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await theGraphClient.findBlocksForTimestamp('maticBlocksSubgraph', deployment.entity.timestamp);
|
|
229
|
-
const merkleRoots = [];
|
|
230
|
-
const hasPermissionOnBlock = async (blockNumber) => {
|
|
231
|
-
try {
|
|
232
|
-
if (!blockNumber)
|
|
233
|
-
return false;
|
|
234
|
-
const merkleRoot = await getMerkleRoot({
|
|
235
|
-
block: blockNumber,
|
|
236
|
-
thirdPartyId
|
|
237
|
-
});
|
|
238
|
-
if (!merkleRoot) {
|
|
239
|
-
logger.debug(`Merkle proof not found for given block and third party ID`, { blockNumber, thirdPartyId });
|
|
240
|
-
return false;
|
|
241
|
-
}
|
|
242
|
-
merkleRoots.push(merkleRoot);
|
|
243
|
-
return await verifyHash(metadata, merkleRoot);
|
|
244
|
-
}
|
|
245
|
-
catch (e) {
|
|
246
|
-
const error = e?.message;
|
|
247
|
-
logger.debug(error);
|
|
248
|
-
return false;
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
const validMerkleProofedEntity = (await hasPermissionOnBlock(blockNumberAtDeployment)) ||
|
|
252
|
-
(await hasPermissionOnBlock(blockNumberFiveMinBeforeDeployment));
|
|
253
|
-
if (!validMerkleProofedEntity) {
|
|
254
|
-
logger.debug(`Merkle Tree based verifications failed:`, {
|
|
255
|
-
merkleProof: JSON.stringify(metadata.merkleProof),
|
|
256
|
-
merkleRoots: JSON.stringify(merkleRoots),
|
|
257
|
-
blocks: JSON.stringify([
|
|
258
|
-
blockNumberAtDeployment,
|
|
259
|
-
blockNumberFiveMinBeforeDeployment
|
|
260
|
-
])
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
return validMerkleProofedEntity;
|
|
264
|
-
};
|
|
265
|
-
const { pointers } = deployment.entity;
|
|
266
|
-
const ethAddress = externalCalls.ownerAddress(deployment.auditInfo);
|
|
267
|
-
const resolvedPointers = [];
|
|
268
|
-
// deduplicate pointer resolution
|
|
269
|
-
for (const pointer of pointers) {
|
|
270
|
-
const parsed = await parseUrnNoFail(pointer);
|
|
271
|
-
if (!parsed)
|
|
272
|
-
return (0, types_1.validationFailed)(`Wearable pointers should be a urn, for example (urn:decentraland:{protocol}:collections-v2:{contract(0x[a-fA-F0-9]+)}:{name}). Invalid pointer: (${pointer})`);
|
|
273
|
-
if (!alreadySeen(resolvedPointers, parsed))
|
|
274
|
-
resolvedPointers.push(parsed);
|
|
275
|
-
}
|
|
276
|
-
if (resolvedPointers.length > 1)
|
|
277
|
-
return (0, types_1.validationFailed)(`Only one pointer is allowed when you create a Wearable. Received: ${pointers}`);
|
|
278
|
-
const parsed = resolvedPointers[0];
|
|
279
|
-
if (!validUrnTypes.includes(parsed.type)) {
|
|
280
|
-
return (0, types_1.validationFailed)(`Could not resolve the contractAddress of the urn ${parsed}`);
|
|
281
|
-
}
|
|
282
|
-
if (parsed.type === 'off-chain') {
|
|
283
|
-
// Validate Off Chain Asset
|
|
284
|
-
if (!externalCalls.isAddressOwnedByDecentraland(ethAddress))
|
|
285
|
-
return (0, types_1.validationFailed)(`The provided Eth Address '${ethAddress}' does not have access to the following wearable: '${parsed.uri}'`);
|
|
286
|
-
}
|
|
287
|
-
else if (parsed?.type === 'blockchain-collection-v1-asset' ||
|
|
288
|
-
parsed?.type === 'blockchain-collection-v2-asset') {
|
|
289
|
-
// L1 or L2 so contractAddress is present
|
|
290
|
-
const collection = parsed.contractAddress;
|
|
291
|
-
const network = parsed.network;
|
|
292
|
-
const isL1 = L1_NETWORKS.includes(network);
|
|
293
|
-
const isL2 = L2_NETWORKS.includes(network);
|
|
294
|
-
if (!isL1 && !isL2)
|
|
295
|
-
return (0, types_1.validationFailed)(`Found an unknown network on the urn '${network}'`);
|
|
296
|
-
const blocksSubgraphUrl = isL1 ? 'blocksSubgraph' : 'maticBlocksSubgraph';
|
|
297
|
-
const collectionsSubgraphUrl = isL1
|
|
298
|
-
? externalCalls.subgraphs.L1.collections
|
|
299
|
-
: externalCalls.subgraphs.L2.collections;
|
|
300
|
-
const hasAccess = await checkCollectionAccess(blocksSubgraphUrl, collectionsSubgraphUrl, collection, parsed.id, {
|
|
301
|
-
...deployment.entity,
|
|
302
|
-
ethAddress
|
|
303
|
-
});
|
|
304
|
-
if (!hasAccess) {
|
|
305
|
-
if (isL2)
|
|
306
|
-
return (0, types_1.validationFailed)(`The provided Eth Address does not have access to the following wearable: (${parsed.contractAddress}, ${parsed.id})`);
|
|
307
|
-
// Some L1 collections are deployed by Decentraland Address
|
|
308
|
-
// Maybe this is not necessary as we already know that it's a 'blockchain-collection-v1-asset'
|
|
309
|
-
const isAllowlistedCollection = parsed.uri
|
|
310
|
-
.toString()
|
|
311
|
-
.startsWith('urn:decentraland:ethereum:collections-v1');
|
|
312
|
-
if (!externalCalls.isAddressOwnedByDecentraland(ethAddress) ||
|
|
313
|
-
!isAllowlistedCollection) {
|
|
314
|
-
return (0, types_1.validationFailed)(`The provided Eth Address '${ethAddress}' does not have access to the following wearable: '${parsed.uri}'`);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
else if (parsed?.type === 'blockchain-collection-third-party') {
|
|
319
|
-
// Third Party wearables are validated doing merkle tree based verification proof
|
|
320
|
-
const verified = await verifyMerkleProofedEntity(parsed);
|
|
321
|
-
if (!verified) {
|
|
322
|
-
return (0, types_1.validationFailed)(`Couldn't verify merkle proofed entity`);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
return types_1.OK;
|
|
6
|
+
validate: async (components, deployment) => {
|
|
7
|
+
return items_1.itemsValidation.validate(components, deployment, [
|
|
8
|
+
'off-chain',
|
|
9
|
+
'blockchain-collection-v1-asset',
|
|
10
|
+
'blockchain-collection-v2-asset',
|
|
11
|
+
'blockchain-collection-third-party'
|
|
12
|
+
]);
|
|
326
13
|
}
|
|
327
14
|
};
|
|
328
15
|
//# sourceMappingURL=wearables.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wearables.js","sourceRoot":"","sources":["../../../src/validations/access-checker/wearables.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wearables.js","sourceRoot":"","sources":["../../../src/validations/access-checker/wearables.ts"],"names":[],"mappings":";;;AACA,yCAA+C;AAElC,QAAA,SAAS,GAAe;IACnC,QAAQ,EAAE,KAAK,EACb,UAAyF,EACzF,UAAU,EACV,EAAE;QACF,OAAO,uBAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE;YACtD,WAAW;YACX,gCAAgC;YAChC,gCAAgC;YAChC,mCAAmC;SACpC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { Validation } from '../types';
|
|
2
|
+
export declare const allHashesWereUploadedOrStored: Validation;
|
|
3
|
+
export declare const allHashesInUploadedFilesAreReportedInTheEntity: Validation;
|
|
4
|
+
export declare const allContentFilesCorrespondToAtLeastOneAvatarSnapshotAfterADR45: Validation;
|
|
2
5
|
/**
|
|
3
6
|
* Validate that uploaded and reported hashes are corrects and files corresponds to snapshots
|
|
4
7
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/validations/content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/validations/content.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,UAAU,EAAE,MAAM,UAAU,CAAA;AAYjD,eAAO,MAAM,6BAA6B,EAAE,UAkB3C,CAAA;AAED,eAAO,MAAM,8CAA8C,EAAE,UAa5D,CAAA;AAED,eAAO,MAAM,6DAA6D,EAAE,UAgB1E,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,UAIrB,CAAA"}
|
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.content = void 0;
|
|
3
|
+
exports.content = exports.allContentFilesCorrespondToAtLeastOneAvatarSnapshotAfterADR45 = exports.allHashesInUploadedFilesAreReportedInTheEntity = exports.allHashesWereUploadedOrStored = void 0;
|
|
4
4
|
const schemas_1 = require("@dcl/schemas");
|
|
5
|
-
const _1 = require(".");
|
|
6
5
|
const types_1 = require("../types");
|
|
6
|
+
const validations_1 = require("./validations");
|
|
7
7
|
const correspondsToASnapshot = (fileName, hash, metadata) => {
|
|
8
8
|
const fileNameWithoutExtension = fileName.replace(/.[^/.]+$/, '');
|
|
9
9
|
if (!metadata || !metadata.avatars)
|
|
10
10
|
return false;
|
|
11
11
|
return metadata.avatars.some((avatar) => Object.entries(avatar.avatar.snapshots).some((key) => key[0] === fileNameWithoutExtension && key[1] === hash));
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* @public
|
|
16
|
-
*/
|
|
17
|
-
exports.content = {
|
|
18
|
-
validate: async ({ externalCalls }, deployment) => {
|
|
13
|
+
exports.allHashesWereUploadedOrStored = {
|
|
14
|
+
async validate(components, deployment) {
|
|
19
15
|
const { entity, files } = deployment;
|
|
20
16
|
const errors = [];
|
|
21
17
|
if (entity.content) {
|
|
22
|
-
const alreadyStoredHashes = await externalCalls.isContentStoredAlready(entity.content?.map((file) => file.hash) ?? []);
|
|
18
|
+
const alreadyStoredHashes = await components.externalCalls.isContentStoredAlready(entity.content?.map((file) => file.hash) ?? []);
|
|
23
19
|
for (const { hash } of entity.content) {
|
|
24
20
|
// Validate that all hashes in entity were uploaded, or were already stored on the service
|
|
25
21
|
if (!(files.has(hash) || alreadyStoredHashes.get(hash))) {
|
|
@@ -27,6 +23,13 @@ exports.content = {
|
|
|
27
23
|
}
|
|
28
24
|
}
|
|
29
25
|
}
|
|
26
|
+
return (0, types_1.fromErrors)(...errors);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
exports.allHashesInUploadedFilesAreReportedInTheEntity = {
|
|
30
|
+
async validate(components, deployment) {
|
|
31
|
+
const { entity, files } = deployment;
|
|
32
|
+
const errors = [];
|
|
30
33
|
// Validate that all hashes that belong to uploaded files are actually reported on the entity
|
|
31
34
|
const entityHashes = new Set(entity.content?.map(({ hash }) => hash) ?? []);
|
|
32
35
|
for (const [hash] of files) {
|
|
@@ -34,17 +37,27 @@ exports.content = {
|
|
|
34
37
|
errors.push(`This hash was uploaded but is not referenced in the entity: ${hash}`);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
return (0, types_1.fromErrors)(...errors);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.allContentFilesCorrespondToAtLeastOneAvatarSnapshotAfterADR45 = (0, validations_1.validationAfterADR45)({
|
|
44
|
+
async validate(components, deployment) {
|
|
45
|
+
const { entity } = deployment;
|
|
46
|
+
const errors = [];
|
|
47
|
+
for (const { file, hash } of entity.content ?? []) {
|
|
48
|
+
// Validate all content files correspond to at least one avatar snapshot
|
|
49
|
+
if (entity.type === schemas_1.EntityType.PROFILE) {
|
|
50
|
+
if (!correspondsToASnapshot(file, hash, entity.metadata)) {
|
|
51
|
+
errors.push(`This file is not expected: '${file}' or its hash is invalid: '${hash}'. Please, include only valid snapshot files.`);
|
|
44
52
|
}
|
|
45
53
|
}
|
|
46
54
|
}
|
|
47
55
|
return (0, types_1.fromErrors)(...errors);
|
|
48
56
|
}
|
|
49
|
-
};
|
|
57
|
+
});
|
|
58
|
+
/**
|
|
59
|
+
* Validate that uploaded and reported hashes are corrects and files corresponds to snapshots
|
|
60
|
+
* @public
|
|
61
|
+
*/
|
|
62
|
+
exports.content = (0, validations_1.validationGroup)(exports.allHashesWereUploadedOrStored, exports.allHashesInUploadedFilesAreReportedInTheEntity, exports.allContentFilesCorrespondToAtLeastOneAvatarSnapshotAfterADR45);
|
|
50
63
|
//# sourceMappingURL=content.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/validations/content.ts"],"names":[],"mappings":";;;AAAA,0CAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/validations/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-structure.d.ts","sourceRoot":"","sources":["../../src/validations/entity-structure.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"entity-structure.d.ts","sourceRoot":"","sources":["../../src/validations/entity-structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,UAAU,EAAoB,MAAM,UAAU,CAAA;AAEvF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,UAU7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-structure.js","sourceRoot":"","sources":["../../src/validations/entity-structure.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"entity-structure.js","sourceRoot":"","sources":["../../src/validations/entity-structure.ts"],"names":[],"mappings":";;;AAAA,oCAAuF;AAEvF;;;GAGG;AACU,QAAA,eAAe,GAAe;IACzC,QAAQ,EAAE,KAAK,EAAE,UAAsC,EAAE,UAAU,EAAE,EAAE;QACrE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;QAC7B,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC3D,OAAO,IAAA,wBAAgB,EAAC,8CAA8C,CAAC,CAAA;SACxE;aAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAC1D,OAAO,IAAA,wBAAgB,EAAC,yDAAyD,CAAC,CAAA;SACnF;QACD,OAAO,UAAE,CAAA;IACX,CAAC;CACF,CAAA"}
|
|
@@ -1,23 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
* @public
|
|
4
|
-
*/
|
|
5
|
-
export declare const validateInRow: (components: ContentValidatorComponents, deployment: DeploymentToValidate, ...validations: Validation[]) => Promise<ValidationResponse>;
|
|
6
|
-
/**
|
|
7
|
-
* 1652191200000 = 2022-05-10T14:00:00Z
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
export declare const ADR_45_TIMESTAMP: number;
|
|
11
|
-
/**
|
|
12
|
-
* 1658275200000 = 2022-07-20T00:00:00Z
|
|
13
|
-
* @public
|
|
14
|
-
*/
|
|
15
|
-
export declare const ADR_75_TIMESTAMP: number;
|
|
16
|
-
/**
|
|
17
|
-
* DCL Launch Day
|
|
18
|
-
* @public
|
|
19
|
-
*/
|
|
20
|
-
export declare const LEGACY_CONTENT_MIGRATION_TIMESTAMP = 1582167600000;
|
|
1
|
+
import { DeploymentToValidate, ExternalCalls } from '../types';
|
|
21
2
|
/**
|
|
22
3
|
* @public
|
|
23
4
|
*/
|
|
@@ -26,15 +7,15 @@ export declare const calculateDeploymentSize: (deployment: DeploymentToValidate,
|
|
|
26
7
|
* Stateful validations that are run on a deployment.
|
|
27
8
|
* @public
|
|
28
9
|
*/
|
|
29
|
-
export declare const statefulValidations: readonly [Validation, Validation, Validation, Validation, Validation, Validation];
|
|
10
|
+
export declare const statefulValidations: readonly [import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation];
|
|
30
11
|
/**
|
|
31
12
|
* Stateless validations that are run on a deployment.
|
|
32
13
|
* @public
|
|
33
14
|
*/
|
|
34
|
-
export declare const statelessValidations: readonly [Validation, Validation, Validation];
|
|
15
|
+
export declare const statelessValidations: readonly [import("../types").Validation, import("../types").Validation, import("../types").Validation];
|
|
35
16
|
/**
|
|
36
17
|
* All validations that are run on a deployment.
|
|
37
18
|
* @public
|
|
38
19
|
*/
|
|
39
|
-
export declare const validations: readonly [Validation, Validation, Validation, Validation, Validation, Validation, Validation, Validation, Validation];
|
|
20
|
+
export declare const validations: readonly [import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation, import("../types").Validation];
|
|
40
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validations/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAY9D;;GAEG;AACH,eAAO,MAAM,uBAAuB,eACtB,oBAAoB,iBACjB,aAAa,KAC3B,QAAQ,MAAM,GAAG,MAAM,CAazB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,oOAAwE,CAAA;AAExG;;;GAGG;AACH,eAAO,MAAM,oBAAoB,wGAAoD,CAAA;AAErF;;;GAGG;AACH,eAAO,MAAM,WAAW,iUAA6D,CAAA"}
|
|
@@ -1,47 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validations = exports.statelessValidations = exports.statefulValidations = exports.calculateDeploymentSize =
|
|
4
|
-
const types_1 = require("../types");
|
|
3
|
+
exports.validations = exports.statelessValidations = exports.statefulValidations = exports.calculateDeploymentSize = void 0;
|
|
5
4
|
const access_1 = require("./access-checker/access");
|
|
6
5
|
const content_1 = require("./content");
|
|
7
6
|
const entity_structure_1 = require("./entity-structure");
|
|
8
7
|
const ipfs_hashing_1 = require("./ipfs-hashing");
|
|
8
|
+
const emotes_1 = require("./items/emotes");
|
|
9
|
+
const wearables_1 = require("./items/wearables");
|
|
9
10
|
const metadata_schema_1 = require("./metadata-schema");
|
|
10
11
|
const profile_1 = require("./profile");
|
|
11
12
|
const signature_1 = require("./signature");
|
|
12
13
|
const size_1 = require("./size");
|
|
13
|
-
const wearable_1 = require("./wearable");
|
|
14
|
-
/**
|
|
15
|
-
* @public
|
|
16
|
-
*/
|
|
17
|
-
const validateInRow = async (components, deployment, ...validations) => {
|
|
18
|
-
for (const validation of validations) {
|
|
19
|
-
const response = await validation.validate(components, deployment);
|
|
20
|
-
if (!response.ok)
|
|
21
|
-
return response;
|
|
22
|
-
}
|
|
23
|
-
return types_1.OK;
|
|
24
|
-
};
|
|
25
|
-
exports.validateInRow = validateInRow;
|
|
26
|
-
/**
|
|
27
|
-
* 1652191200000 = 2022-05-10T14:00:00Z
|
|
28
|
-
* @public
|
|
29
|
-
*/
|
|
30
|
-
exports.ADR_45_TIMESTAMP = process.env.ADR_45_TIMESTAMP
|
|
31
|
-
? parseInt(process.env.ADR_45_TIMESTAMP)
|
|
32
|
-
: 1652191200000;
|
|
33
|
-
/**
|
|
34
|
-
* 1658275200000 = 2022-07-20T00:00:00Z
|
|
35
|
-
* @public
|
|
36
|
-
*/
|
|
37
|
-
exports.ADR_75_TIMESTAMP = process.env.ADR_75_TIMESTAMP
|
|
38
|
-
? parseInt(process.env.ADR_75_TIMESTAMP)
|
|
39
|
-
: 1658275200000;
|
|
40
|
-
/**
|
|
41
|
-
* DCL Launch Day
|
|
42
|
-
* @public
|
|
43
|
-
*/
|
|
44
|
-
exports.LEGACY_CONTENT_MIGRATION_TIMESTAMP = 1582167600000;
|
|
45
14
|
/**
|
|
46
15
|
* @public
|
|
47
16
|
*/
|
|
@@ -66,29 +35,15 @@ exports.calculateDeploymentSize = calculateDeploymentSize;
|
|
|
66
35
|
* Stateful validations that are run on a deployment.
|
|
67
36
|
* @public
|
|
68
37
|
*/
|
|
69
|
-
exports.statefulValidations = [
|
|
70
|
-
signature_1.signature,
|
|
71
|
-
access_1.access,
|
|
72
|
-
size_1.size,
|
|
73
|
-
wearable_1.wearable,
|
|
74
|
-
profile_1.profile,
|
|
75
|
-
content_1.content
|
|
76
|
-
];
|
|
38
|
+
exports.statefulValidations = [signature_1.signature, access_1.access, size_1.size, wearables_1.wearable, emotes_1.emote, profile_1.profile, content_1.content];
|
|
77
39
|
/**
|
|
78
40
|
* Stateless validations that are run on a deployment.
|
|
79
41
|
* @public
|
|
80
42
|
*/
|
|
81
|
-
exports.statelessValidations = [
|
|
82
|
-
entity_structure_1.entityStructure,
|
|
83
|
-
ipfs_hashing_1.ipfsHashing,
|
|
84
|
-
metadata_schema_1.metadata
|
|
85
|
-
];
|
|
43
|
+
exports.statelessValidations = [entity_structure_1.entityStructure, ipfs_hashing_1.ipfsHashing, metadata_schema_1.metadata];
|
|
86
44
|
/**
|
|
87
45
|
* All validations that are run on a deployment.
|
|
88
46
|
* @public
|
|
89
47
|
*/
|
|
90
|
-
exports.validations = [
|
|
91
|
-
...exports.statelessValidations,
|
|
92
|
-
...exports.statefulValidations
|
|
93
|
-
];
|
|
48
|
+
exports.validations = [...exports.statelessValidations, ...exports.statefulValidations];
|
|
94
49
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validations/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validations/index.ts"],"names":[],"mappings":";;;AACA,oDAAgD;AAChD,uCAAmC;AACnC,yDAAoD;AACpD,iDAA4C;AAC5C,2CAAsC;AACtC,iDAA4C;AAC5C,uDAA4C;AAC5C,uCAAmC;AACnC,2CAAuC;AACvC,iCAA6B;AAE7B;;GAEG;AACI,MAAM,uBAAuB,GAAG,KAAK,EAC1C,UAAgC,EAChC,aAA4B,EACF,EAAE;IAC5B,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;QACrF,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,YAAY,EAAE;YAChB,SAAS,IAAI,YAAY,CAAC,UAAU,CAAA;SACrC;aAAM;YACL,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;YAClE,IAAI,WAAW,KAAK,SAAS;gBAAE,OAAO,0CAA0C,IAAI,EAAE,CAAA;YACtF,SAAS,IAAI,WAAW,CAAA;SACzB;KACF;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAhBY,QAAA,uBAAuB,2BAgBnC;AAED;;;GAGG;AACU,QAAA,mBAAmB,GAAG,CAAC,qBAAS,EAAE,eAAM,EAAE,WAAI,EAAE,oBAAQ,EAAE,cAAK,EAAE,iBAAO,EAAE,iBAAO,CAAU,CAAA;AAExG;;;GAGG;AACU,QAAA,oBAAoB,GAAG,CAAC,kCAAe,EAAE,0BAAW,EAAE,0BAAQ,CAAU,CAAA;AAErF;;;GAGG;AACU,QAAA,WAAW,GAAG,CAAC,GAAG,4BAAoB,EAAE,GAAG,2BAAmB,CAAU,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs-hashing.d.ts","sourceRoot":"","sources":["../../src/validations/ipfs-hashing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ipfs-hashing.d.ts","sourceRoot":"","sources":["../../src/validations/ipfs-hashing.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,UAAU,EAAE,MAAM,UAAU,CAAA;AAGjD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,UAaxB,CAAA"}
|