@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
|
@@ -2,18 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ipfsHashing = void 0;
|
|
4
4
|
const schemas_1 = require("@dcl/schemas");
|
|
5
|
-
const _1 = require(".");
|
|
6
|
-
const __1 = require("..");
|
|
7
5
|
const types_1 = require("../types");
|
|
6
|
+
const validations_1 = require("./validations");
|
|
8
7
|
/**
|
|
9
8
|
* Validate that all hashes used by the entity were actually IPFS hashes
|
|
10
9
|
* @public
|
|
11
10
|
*/
|
|
12
|
-
exports.ipfsHashing = {
|
|
11
|
+
exports.ipfsHashing = (0, validations_1.validationAfterADR45)({
|
|
13
12
|
validate: (components, deployment) => {
|
|
14
13
|
const { entity } = deployment;
|
|
15
|
-
if (entity.timestamp < _1.ADR_45_TIMESTAMP)
|
|
16
|
-
return __1.OK;
|
|
17
14
|
const hashesInContent = entity.content?.map(({ hash }) => hash) ?? [];
|
|
18
15
|
const allHashes = [entity.id, ...hashesInContent];
|
|
19
16
|
const errors = allHashes
|
|
@@ -21,5 +18,5 @@ exports.ipfsHashing = {
|
|
|
21
18
|
.map((hash) => `This hash '${hash}' is not valid. It should be IPFS v2 format.`);
|
|
22
19
|
return (0, types_1.fromErrors)(...errors);
|
|
23
20
|
}
|
|
24
|
-
};
|
|
21
|
+
});
|
|
25
22
|
//# sourceMappingURL=ipfs-hashing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipfs-hashing.js","sourceRoot":"","sources":["../../src/validations/ipfs-hashing.ts"],"names":[],"mappings":";;;AAAA,0CAAqC;
|
|
1
|
+
{"version":3,"file":"ipfs-hashing.js","sourceRoot":"","sources":["../../src/validations/ipfs-hashing.ts"],"names":[],"mappings":";;;AAAA,0CAAqC;AAErC,oCAAiD;AACjD,+CAAoD;AAEpD;;;GAGG;AACU,QAAA,WAAW,GAAe,IAAA,kCAAoB,EAAC;IAC1D,QAAQ,EAAE,CAAC,UAAsC,EAAE,UAAU,EAAE,EAAE;QAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;QAE7B,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACrE,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,eAAe,CAAC,CAAA;QAEjD,MAAM,MAAM,GAAG,SAAS;aACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,gBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,IAAI,8CAA8C,CAAC,CAAA;QAElF,OAAO,IAAA,kBAAU,EAAC,GAAG,MAAM,CAAC,CAAA;IAC9B,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emotes.d.ts","sourceRoot":"","sources":["../../../src/validations/items/emotes.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,UAAU,EAAoB,MAAM,aAAa,CAAA;AAIhH,eAAO,MAAM,oBAAoB,EAAE,UAQlC,CAAA;AAED,eAAO,MAAM,0BAA0B,EAAE,UAiBxC,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,UAGnB,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emote = exports.emoteRepresentationContent = exports.wasCreatedAfterADR74 = void 0;
|
|
4
|
+
const schemas_1 = require("@dcl/schemas");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const timestamps_1 = require("../timestamps");
|
|
7
|
+
const validations_1 = require("../validations");
|
|
8
|
+
exports.wasCreatedAfterADR74 = {
|
|
9
|
+
validate(components, deployment) {
|
|
10
|
+
return deployment.entity.timestamp < timestamps_1.ADR_74_TIMESTAMP
|
|
11
|
+
? (0, types_1.validationFailed)(`The emote timestamp ${deployment.entity.timestamp} is before ADR 74. Emotes did not exist before ADR 74.`)
|
|
12
|
+
: types_1.OK;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
exports.emoteRepresentationContent = {
|
|
16
|
+
validate: async (components, deployment) => {
|
|
17
|
+
const { entity } = deployment;
|
|
18
|
+
const metadata = entity.metadata;
|
|
19
|
+
const representations = metadata?.emoteDataADR74?.representations;
|
|
20
|
+
if (!representations || representations.length === 0)
|
|
21
|
+
return (0, types_1.validationFailed)('No emote representations found');
|
|
22
|
+
if (!entity.content || entity.content.length === 0)
|
|
23
|
+
return (0, types_1.validationFailed)('No content found');
|
|
24
|
+
for (const representation of representations) {
|
|
25
|
+
for (const representationContent of representation.contents) {
|
|
26
|
+
if (!entity.content.find((content) => content.file === representationContent)) {
|
|
27
|
+
return (0, types_1.validationFailed)(`Representation content: '${representationContent}' is not one of the content files`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return types_1.OK;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.emote = (0, validations_1.validationForType)(schemas_1.EntityType.EMOTE, (0, validations_1.validationGroup)(exports.wasCreatedAfterADR74, exports.emoteRepresentationContent));
|
|
35
|
+
//# sourceMappingURL=emotes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emotes.js","sourceRoot":"","sources":["../../../src/validations/items/emotes.ts"],"names":[],"mappings":";;;AAAA,0CAAgD;AAChD,uCAAgH;AAChH,8CAAgD;AAChD,gDAAmE;AAEtD,QAAA,oBAAoB,GAAe;IAC9C,QAAQ,CAAC,UAAsC,EAAE,UAAgC;QAC/E,OAAO,UAAU,CAAC,MAAM,CAAC,SAAS,GAAG,6BAAgB;YACnD,CAAC,CAAC,IAAA,wBAAgB,EACd,uBAAuB,UAAU,CAAC,MAAM,CAAC,SAAS,wDAAwD,CAC3G;YACH,CAAC,CAAC,UAAE,CAAA;IACR,CAAC;CACF,CAAA;AAEY,QAAA,0BAA0B,GAAe;IACpD,QAAQ,EAAE,KAAK,EAAE,UAAsC,EAAE,UAAU,EAAE,EAAE;QACrE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAiB,CAAA;QACzC,MAAM,eAAe,GAAG,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAA;QACjE,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAA,wBAAgB,EAAC,gCAAgC,CAAC,CAAA;QAC/G,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAA,wBAAgB,EAAC,kBAAkB,CAAC,CAAA;QAE/F,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;YAC5C,KAAK,MAAM,qBAAqB,IAAI,cAAc,CAAC,QAAQ,EAAE;gBAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE;oBAC7E,OAAO,IAAA,wBAAgB,EAAC,4BAA4B,qBAAqB,mCAAmC,CAAC,CAAA;iBAC9G;aACF;SACF;QACD,OAAO,UAAE,CAAA;IACX,CAAC;CACF,CAAA;AAEY,QAAA,KAAK,GAAe,IAAA,+BAAiB,EAChD,oBAAU,CAAC,KAAK,EAChB,IAAA,6BAAe,EAAC,4BAAoB,EAAE,kCAA0B,CAAC,CAClE,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Validation } from '../../types';
|
|
2
|
+
/** Validate item files size, excluding thumbnail, is less than expected */
|
|
3
|
+
export declare const deploymentMaxSizeExcludingThumbnailIsNotExceeded: Validation;
|
|
4
|
+
export declare const thumbnailMaxSizeIsNotExceeded: Validation;
|
|
5
|
+
/**
|
|
6
|
+
* Validate that given item deployment includes the thumbnail and doesn't exceed file sizes
|
|
7
|
+
* * @public
|
|
8
|
+
*/
|
|
9
|
+
export declare const items: Validation;
|
|
10
|
+
//# sourceMappingURL=items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../src/validations/items/items.ts"],"names":[],"mappings":"AAIA,OAAO,EAAM,UAAU,EAAoB,MAAM,aAAa,CAAA;AAI9D,2EAA2E;AAC3E,eAAO,MAAM,gDAAgD,EAAE,UA0B9D,CAAA;AAID,eAAO,MAAM,6BAA6B,EAAE,UAkC3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,UAGnB,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.items = exports.thumbnailMaxSizeIsNotExceeded = exports.deploymentMaxSizeExcludingThumbnailIsNotExceeded = void 0;
|
|
7
|
+
const schemas_1 = require("@dcl/schemas");
|
|
8
|
+
const sharp_1 = __importDefault(require("sharp"));
|
|
9
|
+
const __1 = require("..");
|
|
10
|
+
const types_1 = require("../../types");
|
|
11
|
+
const ADR51_1 = require("../ADR51");
|
|
12
|
+
const validations_1 = require("../validations");
|
|
13
|
+
/** Validate item files size, excluding thumbnail, is less than expected */
|
|
14
|
+
exports.deploymentMaxSizeExcludingThumbnailIsNotExceeded = {
|
|
15
|
+
validate: async ({ externalCalls }, deployment) => {
|
|
16
|
+
const entity = deployment.entity;
|
|
17
|
+
const maxSizeInMB = ADR51_1.entityParameters[entity.type]?.maxSizeInMB;
|
|
18
|
+
if (!maxSizeInMB)
|
|
19
|
+
return (0, types_1.validationFailed)(`Type ${entity.type} is not supported yet`);
|
|
20
|
+
const modelSizeInMB = maxSizeInMB - maxThumbnailSizeInB / 1024;
|
|
21
|
+
const metadata = entity.metadata;
|
|
22
|
+
const thumbnailHash = entity.content?.find(({ file }) => file === metadata.thumbnail)?.hash;
|
|
23
|
+
if (!thumbnailHash)
|
|
24
|
+
return (0, types_1.validationFailed)("Couldn't find the thumbnail hash");
|
|
25
|
+
const totalDeploymentSizeInB = await (0, __1.calculateDeploymentSize)(deployment, externalCalls);
|
|
26
|
+
if (typeof totalDeploymentSizeInB === 'string')
|
|
27
|
+
return (0, types_1.validationFailed)(totalDeploymentSizeInB);
|
|
28
|
+
const thumbnailSize = deployment.files.get(thumbnailHash)?.byteLength ?? 0;
|
|
29
|
+
const modelSize = totalDeploymentSizeInB - thumbnailSize;
|
|
30
|
+
if (modelSize > modelSizeInMB * 1024 * 1024)
|
|
31
|
+
return (0, types_1.validationFailed)(`The deployment is too big. The maximum allowed size for ${entity.type} model files is ${modelSizeInMB} MB. You can upload up to ${modelSizeInMB * 1024 * 1024} bytes but you tried to upload ${modelSize}.`);
|
|
32
|
+
return types_1.OK;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/** Validate that given item deployment includes a thumbnail with valid format and size */
|
|
36
|
+
const maxThumbnailSizeInB = 1024;
|
|
37
|
+
exports.thumbnailMaxSizeIsNotExceeded = {
|
|
38
|
+
validate: async ({ externalCalls, logs }, deployment) => {
|
|
39
|
+
const logger = logs.getLogger(`${deployment.entity.type} validator`);
|
|
40
|
+
// read thumbnail field from metadata
|
|
41
|
+
const metadata = deployment.entity.metadata;
|
|
42
|
+
const hash = deployment.entity.content?.find(({ file }) => file === metadata.thumbnail)?.hash;
|
|
43
|
+
if (!hash)
|
|
44
|
+
return (0, types_1.validationFailed)(`Couldn't find hash for thumbnail file with name: ${metadata.thumbnail}`);
|
|
45
|
+
const errors = [];
|
|
46
|
+
// check size
|
|
47
|
+
const thumbnailBuffer = deployment.files.get(hash);
|
|
48
|
+
if (!thumbnailBuffer) {
|
|
49
|
+
const isHashStored = (await externalCalls.isContentStoredAlready([hash])).get(hash) ?? false;
|
|
50
|
+
if (!isHashStored) {
|
|
51
|
+
return (0, types_1.validationFailed)(`Couldn't find thumbnail file with hash: ${hash}`);
|
|
52
|
+
}
|
|
53
|
+
// otherwise, thumbnail was already uploaded and won't be validated again
|
|
54
|
+
logger.debug(`Thumbnail file with hash: ${hash} is not in the deployment, but it is already stored`);
|
|
55
|
+
return types_1.OK;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const { width, height, format } = await (0, sharp_1.default)(thumbnailBuffer).metadata();
|
|
59
|
+
if (!format || format !== 'png')
|
|
60
|
+
errors.push(`Invalid or unknown image format. Only 'PNG' format is accepted.`);
|
|
61
|
+
if (!width || !height) {
|
|
62
|
+
errors.push(`Couldn't validate thumbnail size for file ${metadata.thumbnail}`);
|
|
63
|
+
}
|
|
64
|
+
else if (width > maxThumbnailSizeInB || height > maxThumbnailSizeInB) {
|
|
65
|
+
errors.push(`Invalid thumbnail image size (width = ${width} / height = ${height})`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (e) {
|
|
69
|
+
errors.push(`Couldn't parse thumbnail, please check image format.`);
|
|
70
|
+
}
|
|
71
|
+
return errors.length > 0 ? (0, types_1.validationFailed)(...errors) : types_1.OK;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Validate that given item deployment includes the thumbnail and doesn't exceed file sizes
|
|
76
|
+
* * @public
|
|
77
|
+
*/
|
|
78
|
+
exports.items = (0, validations_1.conditionalValidation)((deployment) => deployment.entity.type === schemas_1.EntityType.WEARABLE || deployment.entity.type === schemas_1.EntityType.EMOTE, (0, validations_1.validationAfterADR45)((0, validations_1.validationGroup)(exports.thumbnailMaxSizeIsNotExceeded, exports.deploymentMaxSizeExcludingThumbnailIsNotExceeded)));
|
|
79
|
+
//# sourceMappingURL=items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.js","sourceRoot":"","sources":["../../../src/validations/items/items.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { Validation } from '
|
|
1
|
+
import { Validation } from '../../types';
|
|
2
2
|
/** Validate wearable representations are referencing valid content */
|
|
3
3
|
export declare const wearableRepresentationContent: Validation;
|
|
4
|
-
/** Validate wearable files size, excluding thumbnail, is less than expected */
|
|
5
|
-
export declare const wearableSize: Validation;
|
|
6
|
-
export declare const wearableThumbnail: Validation;
|
|
7
4
|
/**
|
|
8
5
|
* Validate that given wearable deployment includes the thumbnail and doesn't exceed file sizes
|
|
9
6
|
* * @public
|
|
10
7
|
*/
|
|
11
8
|
export declare const wearable: Validation;
|
|
12
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=wearables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wearables.d.ts","sourceRoot":"","sources":["../../../src/validations/items/wearables.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,UAAU,EAAoB,MAAM,aAAa,CAAA;AAG1F,sEAAsE;AACtE,eAAO,MAAM,6BAA6B,EAAE,UAiB3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,UAAkF,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wearable = exports.wearableRepresentationContent = void 0;
|
|
4
|
+
const schemas_1 = require("@dcl/schemas");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const validations_1 = require("../validations");
|
|
7
|
+
/** Validate wearable representations are referencing valid content */
|
|
8
|
+
exports.wearableRepresentationContent = {
|
|
9
|
+
validate: async (components, deployment) => {
|
|
10
|
+
const { entity } = deployment;
|
|
11
|
+
const wearableMetadata = entity.metadata;
|
|
12
|
+
const representations = wearableMetadata?.data?.representations;
|
|
13
|
+
if (!representations || representations.length === 0)
|
|
14
|
+
return (0, types_1.validationFailed)('No wearable representations found');
|
|
15
|
+
if (!entity.content || entity.content.length === 0)
|
|
16
|
+
return (0, types_1.validationFailed)('No content found');
|
|
17
|
+
for (const representation of representations) {
|
|
18
|
+
for (const representationContent of representation.contents) {
|
|
19
|
+
if (!entity.content.find((content) => content.file === representationContent)) {
|
|
20
|
+
return (0, types_1.validationFailed)(`Representation content: '${representationContent}' is not one of the content files`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return types_1.OK;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Validate that given wearable deployment includes the thumbnail and doesn't exceed file sizes
|
|
29
|
+
* * @public
|
|
30
|
+
*/
|
|
31
|
+
exports.wearable = (0, validations_1.validationForType)(schemas_1.EntityType.WEARABLE, exports.wearableRepresentationContent);
|
|
32
|
+
//# sourceMappingURL=wearables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wearables.js","sourceRoot":"","sources":["../../../src/validations/items/wearables.ts"],"names":[],"mappings":";;;AAAA,0CAAmD;AACnD,uCAA0F;AAC1F,gDAAkD;AAElD,sEAAsE;AACzD,QAAA,6BAA6B,GAAe;IACvD,QAAQ,EAAE,KAAK,EAAE,UAAsC,EAAE,UAAU,EAAE,EAAE;QACrE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;QAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAoB,CAAA;QACpD,MAAM,eAAe,GAAG,gBAAgB,EAAE,IAAI,EAAE,eAAe,CAAA;QAC/D,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAA,wBAAgB,EAAC,mCAAmC,CAAC,CAAA;QAClH,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAA,wBAAgB,EAAC,kBAAkB,CAAC,CAAA;QAE/F,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE;YAC5C,KAAK,MAAM,qBAAqB,IAAI,cAAc,CAAC,QAAQ,EAAE;gBAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,qBAAqB,CAAC,EAAE;oBAC7E,OAAO,IAAA,wBAAgB,EAAC,4BAA4B,qBAAqB,mCAAmC,CAAC,CAAA;iBAC9G;aACF;SACF;QACD,OAAO,UAAE,CAAA;IACX,CAAC;CACF,CAAA;AAED;;;GAGG;AACU,QAAA,QAAQ,GAAe,IAAA,+BAAiB,EAAC,oBAAU,CAAC,QAAQ,EAAE,qCAA6B,CAAC,CAAA"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* @public
|
|
4
|
-
*/
|
|
5
|
-
export declare const metadata: import("../types").Validation;
|
|
1
|
+
import { Validation } from '../types';
|
|
2
|
+
export declare const metadata: Validation;
|
|
6
3
|
//# sourceMappingURL=metadata-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-schema.d.ts","sourceRoot":"","sources":["../../src/validations/metadata-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metadata-schema.d.ts","sourceRoot":"","sources":["../../src/validations/metadata-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAwD,UAAU,EAAoB,MAAM,UAAU,CAAA;AA2D7G,eAAO,MAAM,QAAQ,EAAE,UAGtB,CAAA"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.metadata = void 0;
|
|
4
|
-
const
|
|
5
|
-
const _1 = require(".");
|
|
4
|
+
const schemas_1 = require("@dcl/schemas");
|
|
6
5
|
const types_1 = require("../types");
|
|
6
|
+
const ADR51_1 = require("./ADR51");
|
|
7
|
+
const timestamps_1 = require("./timestamps");
|
|
8
|
+
const validations_1 = require("./validations");
|
|
7
9
|
/**
|
|
8
10
|
* Validate entities metadata against its corresponding schema
|
|
9
11
|
* @public
|
|
10
12
|
*/
|
|
11
|
-
|
|
12
|
-
async
|
|
13
|
-
if (deployment.entity.timestamp <= _1.ADR_45_TIMESTAMP)
|
|
14
|
-
return types_1.OK;
|
|
13
|
+
const metadataSchemaIsValid = {
|
|
14
|
+
async validate(components, deployment) {
|
|
15
15
|
const { type, metadata } = deployment.entity;
|
|
16
16
|
const validator = ADR51_1.entityParameters[type].validate;
|
|
17
17
|
if (validator(metadata)) {
|
|
@@ -20,5 +20,35 @@ exports.metadata = (0, types_1.conditionalValidation)({
|
|
|
20
20
|
const errors = validator.errors?.map(($) => '' + $.message) || [];
|
|
21
21
|
return (0, types_1.validationFailed)(`The metadata for this entity type (${deployment.entity.type}) is not valid.`, ...errors);
|
|
22
22
|
}
|
|
23
|
-
}
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* This map contains one ADR timeline per entity type. In a timeline, each element has
|
|
26
|
+
* a number and a timestamp. The number corresponds to the number of an ADR and the timestamp
|
|
27
|
+
* to the creation of that ADR. Each timeline is sorted by timestamp.
|
|
28
|
+
* The idea behind this is the ability to version schemas over the time, but run validations
|
|
29
|
+
* according with the deployment original time. (Imagining starting a Content Server from scratch,
|
|
30
|
+
* it will have to sync deployments since the launcha date).
|
|
31
|
+
* See ADR 74 for more details of schema versioning.
|
|
32
|
+
*/
|
|
33
|
+
const ADRMetadataVersionTimelines = {
|
|
34
|
+
emote: [{ number: 74, timestamp: timestamps_1.ADR_74_TIMESTAMP }].sort((v1, v2) => v1.timestamp - v2.timestamp),
|
|
35
|
+
scene: [],
|
|
36
|
+
profile: [],
|
|
37
|
+
wearable: [],
|
|
38
|
+
store: []
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* This validation is being ran only for emotes currently
|
|
42
|
+
*/
|
|
43
|
+
const metadataVersionIsCorrectForTimestamp = {
|
|
44
|
+
validate(components, deployment) {
|
|
45
|
+
const entity = deployment.entity;
|
|
46
|
+
const adrNumber = ADRMetadataVersionTimelines[entity.type].find((v) => v.timestamp < entity.timestamp)?.number;
|
|
47
|
+
const expectedDataField = `${entity.type}DataADR${adrNumber}`;
|
|
48
|
+
return `${expectedDataField}` in deployment.entity.metadata
|
|
49
|
+
? types_1.OK
|
|
50
|
+
: (0, types_1.validationFailed)(`'emoteData' field version is incorrect. It must be: '${expectedDataField} but it is: ${deployment.entity.metadata} `);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.metadata = (0, validations_1.validationGroup)((0, validations_1.validationAfterADR45)(metadataSchemaIsValid), (0, validations_1.validationAfterADR74)((0, validations_1.validationForType)(schemas_1.EntityType.EMOTE, metadataVersionIsCorrectForTimestamp)));
|
|
24
54
|
//# sourceMappingURL=metadata-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-schema.js","sourceRoot":"","sources":["../../src/validations/metadata-schema.ts"],"names":[],"mappings":";;;AAAA,mCAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"metadata-schema.js","sourceRoot":"","sources":["../../src/validations/metadata-schema.ts"],"names":[],"mappings":";;;AAAA,0CAAyC;AACzC,oCAA6G;AAC7G,mCAA0C;AAC1C,6CAA+C;AAC/C,+CAA8G;AAE9G;;;GAGG;AACH,MAAM,qBAAqB,GAAe;IACxC,KAAK,CAAC,QAAQ,CAAC,UAAsC,EAAE,UAAU;QAC/D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,MAAM,CAAA;QAC5C,MAAM,SAAS,GAAG,wBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAA;QACjD,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;YACvB,OAAO,UAAE,CAAA;SACV;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACjE,OAAO,IAAA,wBAAgB,EAAC,sCAAsC,UAAU,CAAC,MAAM,CAAC,IAAI,iBAAiB,EAAE,GAAG,MAAM,CAAC,CAAA;IACnH,CAAC;CACF,CAAA;AAOD;;;;;;;;GAQG;AACH,MAAM,2BAA2B,GAA8B;IAC7D,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,6BAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IAClG,KAAK,EAAE,EAAE;IACT,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;CACV,CAAA;AAED;;GAEG;AACH,MAAM,oCAAoC,GAAe;IACvD,QAAQ,CAAC,UAAsC,EAAE,UAAgC;QAC/E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;QAC9G,MAAM,iBAAiB,GAAG,GAAG,MAAM,CAAC,IAAI,UAAU,SAAS,EAAE,CAAA;QAC7D,OAAO,GAAG,iBAAiB,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ;YACzD,CAAC,CAAC,UAAE;YACJ,CAAC,CAAC,IAAA,wBAAgB,EACd,wDAAwD,iBAAiB,eAAe,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,CACtH,CAAA;IACP,CAAC;CACF,CAAA;AAEY,QAAA,QAAQ,GAAe,IAAA,6BAAe,EACjD,IAAA,kCAAoB,EAAC,qBAAqB,CAAC,EAC3C,IAAA,kCAAoB,EAAC,IAAA,+BAAiB,EAAC,oBAAU,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC,CAChG,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAM,UAAU,EAAoB,MAAM,UAAU,CAAA;AAM3D,eAAO,MAAM,UAAU,aAAc,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAM,UAAU,EAAoB,MAAM,UAAU,CAAA;AAM3D,eAAO,MAAM,UAAU,aAAc,MAAM,KAAG,OAAqC,CAAA;AAEnF,eAAO,MAAM,aAAa,EAAE,UA8B1B,CAAA;AAEF,eAAO,MAAM,YAAY,EAAE,UAgBzB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,UAAgG,CAAA"}
|
|
@@ -5,18 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.profile = exports.wearableUrns = exports.faceThumbnail = exports.isOldEmote = void 0;
|
|
7
7
|
const schemas_1 = require("@dcl/schemas");
|
|
8
|
+
const urn_resolver_1 = require("@dcl/urn-resolver");
|
|
8
9
|
const sharp_1 = __importDefault(require("sharp"));
|
|
9
|
-
const _1 = require(".");
|
|
10
10
|
const types_1 = require("../types");
|
|
11
|
-
const
|
|
11
|
+
const validations_1 = require("./validations");
|
|
12
12
|
/** Validate that given profile deployment includes a face256 thumbnail with valid size */
|
|
13
13
|
const defaultThumbnailSize = 256;
|
|
14
14
|
const isOldEmote = (wearable) => /^[a-z]+$/i.test(wearable);
|
|
15
15
|
exports.isOldEmote = isOldEmote;
|
|
16
|
-
exports.faceThumbnail = {
|
|
16
|
+
exports.faceThumbnail = (0, validations_1.validationAfterADR45)({
|
|
17
17
|
validate: async ({ externalCalls }, deployment) => {
|
|
18
|
-
if (deployment.entity.timestamp < _1.ADR_45_TIMESTAMP)
|
|
19
|
-
return types_1.OK;
|
|
20
18
|
const errors = [];
|
|
21
19
|
const allAvatars = deployment.entity.metadata?.avatars ?? [];
|
|
22
20
|
for (const avatar of allAvatars) {
|
|
@@ -38,8 +36,7 @@ exports.faceThumbnail = {
|
|
|
38
36
|
if (!width || !height) {
|
|
39
37
|
errors.push(`Couldn't validate thumbnail size for file 'face256'`);
|
|
40
38
|
}
|
|
41
|
-
else if (width !== defaultThumbnailSize ||
|
|
42
|
-
height !== defaultThumbnailSize) {
|
|
39
|
+
else if (width !== defaultThumbnailSize || height !== defaultThumbnailSize) {
|
|
43
40
|
errors.push(`Invalid face256 thumbnail image size (width = ${width} / height = ${height})`);
|
|
44
41
|
}
|
|
45
42
|
}
|
|
@@ -49,11 +46,9 @@ exports.faceThumbnail = {
|
|
|
49
46
|
}
|
|
50
47
|
return errors.length > 0 ? (0, types_1.validationFailed)(...errors) : types_1.OK;
|
|
51
48
|
}
|
|
52
|
-
};
|
|
53
|
-
exports.wearableUrns = {
|
|
49
|
+
});
|
|
50
|
+
exports.wearableUrns = (0, validations_1.validationAfterADR75)({
|
|
54
51
|
validate: async (components, deployment) => {
|
|
55
|
-
if (deployment.entity.timestamp < _1.ADR_75_TIMESTAMP)
|
|
56
|
-
return types_1.OK;
|
|
57
52
|
const allAvatars = deployment.entity.metadata?.avatars ?? [];
|
|
58
53
|
for (const avatar of allAvatars) {
|
|
59
54
|
for (const pointer of avatar.avatar.wearables) {
|
|
@@ -61,21 +56,15 @@ exports.wearableUrns = {
|
|
|
61
56
|
continue;
|
|
62
57
|
const parsed = await (0, urn_resolver_1.parseUrn)(pointer);
|
|
63
58
|
if (!parsed)
|
|
64
|
-
return (0, types_1.validationFailed)(`
|
|
59
|
+
return (0, types_1.validationFailed)(`Each profile pointer should be a urn, for example (urn:decentraland:{protocol}:collections-v2:{contract(0x[a-fA-F0-9]+)}:{name}). Invalid pointer: (${pointer})`);
|
|
65
60
|
}
|
|
66
61
|
}
|
|
67
62
|
return types_1.OK;
|
|
68
63
|
}
|
|
69
|
-
};
|
|
64
|
+
});
|
|
70
65
|
/**
|
|
71
66
|
* Validate that given profile deployment includes the face256 file with the correct size
|
|
72
67
|
* * @public
|
|
73
68
|
*/
|
|
74
|
-
exports.profile =
|
|
75
|
-
validate: async (components, deployment) => {
|
|
76
|
-
if (deployment.entity.type !== schemas_1.EntityType.PROFILE)
|
|
77
|
-
return types_1.OK;
|
|
78
|
-
return (0, _1.validateInRow)(components, deployment, exports.faceThumbnail, exports.wearableUrns);
|
|
79
|
-
}
|
|
80
|
-
};
|
|
69
|
+
exports.profile = (0, validations_1.validationForType)(schemas_1.EntityType.PROFILE, (0, validations_1.validationGroup)(exports.faceThumbnail, exports.wearableUrns));
|
|
81
70
|
//# sourceMappingURL=profile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":";;;;;;AAAA,0CAAyC;AACzC,kDAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/validations/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,UAAU,EAAoB,MAAM,UAAU,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../src/validations/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,UAAU,EAAoB,MAAM,UAAU,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,UAOvB,CAAA"}
|
|
@@ -11,9 +11,7 @@ exports.signature = {
|
|
|
11
11
|
validate: async ({ externalCalls }, deployment) => {
|
|
12
12
|
const { entity, auditInfo } = deployment;
|
|
13
13
|
const validationResult = await externalCalls.validateSignature(entity.id, auditInfo, entity.timestamp);
|
|
14
|
-
return !validationResult.ok
|
|
15
|
-
? (0, types_1.validationFailed)('The signature is invalid. ' + validationResult.message)
|
|
16
|
-
: types_1.OK;
|
|
14
|
+
return !validationResult.ok ? (0, types_1.validationFailed)('The signature is invalid. ' + validationResult.message) : types_1.OK;
|
|
17
15
|
}
|
|
18
16
|
};
|
|
19
17
|
//# sourceMappingURL=signature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/validations/signature.ts"],"names":[],"mappings":";;;AAAA,oCAA2D;AAE3D;;;GAGG;AACU,QAAA,SAAS,GAAe;IACnC,oDAAoD;IACpD,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAA;QACxC,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../src/validations/signature.ts"],"names":[],"mappings":";;;AAAA,oCAA2D;AAE3D;;;GAGG;AACU,QAAA,SAAS,GAAe;IACnC,oDAAoD;IACpD,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAA;QACxC,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QACtG,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,4BAA4B,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAE,CAAA;IAC9G,CAAC;CACF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"size.d.ts","sourceRoot":"","sources":["../../src/validations/size.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"size.d.ts","sourceRoot":"","sources":["../../src/validations/size.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,UAAU,EAAoB,MAAM,UAAU,CAAA;AAI3D;;;;GAIG;AACH,eAAO,MAAM,IAAI,EAAE,UA6BlB,CAAA"}
|
package/dist/validations/size.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.size = void 0;
|
|
4
|
-
const ADR51_1 = require("./ADR51");
|
|
5
4
|
const _1 = require(".");
|
|
6
5
|
const types_1 = require("../types");
|
|
6
|
+
const ADR51_1 = require("./ADR51");
|
|
7
|
+
const timestamps_1 = require("./timestamps");
|
|
7
8
|
/** Validate that the full request size is within limits
|
|
8
9
|
*
|
|
9
10
|
* ADR 45: After given TIMESTAMP will also include previous deployments in the validation
|
|
@@ -12,7 +13,7 @@ const types_1 = require("../types");
|
|
|
12
13
|
exports.size = {
|
|
13
14
|
validate: async ({ externalCalls }, deployment) => {
|
|
14
15
|
const { entity } = deployment;
|
|
15
|
-
if (entity.timestamp <=
|
|
16
|
+
if (entity.timestamp <= timestamps_1.LEGACY_CONTENT_MIGRATION_TIMESTAMP)
|
|
16
17
|
return types_1.OK;
|
|
17
18
|
const maxSizeInMB = ADR51_1.entityParameters[entity.type].maxSizeInMB;
|
|
18
19
|
let errors = [];
|
|
@@ -21,7 +22,7 @@ exports.size = {
|
|
|
21
22
|
}
|
|
22
23
|
const maxSizeInBytes = maxSizeInMB * 1024 * 1024;
|
|
23
24
|
let totalSize = 0;
|
|
24
|
-
if (entity.timestamp >
|
|
25
|
+
if (entity.timestamp > timestamps_1.ADR_45_TIMESTAMP) {
|
|
25
26
|
const result = await (0, _1.calculateDeploymentSize)(deployment, externalCalls);
|
|
26
27
|
if (typeof result === 'string')
|
|
27
28
|
return (0, types_1.validationFailed)(result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"size.js","sourceRoot":"","sources":["../../src/validations/size.ts"],"names":[],"mappings":";;;AAAA,mCAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"size.js","sourceRoot":"","sources":["../../src/validations/size.ts"],"names":[],"mappings":";;;AAAA,wBAA2C;AAC3C,oCAA2D;AAC3D,mCAA0C;AAC1C,6CAAmF;AAEnF;;;;GAIG;AACU,QAAA,IAAI,GAAe;IAC9B,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;QAC7B,IAAI,MAAM,CAAC,SAAS,IAAI,+CAAkC;YAAE,OAAO,UAAE,CAAA;QAErE,MAAM,WAAW,GAAG,wBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAA;QAC7D,IAAI,MAAM,GAAa,EAAE,CAAA;QACzB,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,IAAA,wBAAgB,EAAC,QAAQ,MAAM,CAAC,IAAI,uBAAuB,CAAC,CAAA;SACpE;QACD,MAAM,cAAc,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAA;QAChD,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,MAAM,CAAC,SAAS,GAAG,6BAAgB,EAAE;YACvC,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAuB,EAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YACvE,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,OAAO,IAAA,wBAAgB,EAAC,MAAM,CAAC,CAAA;YAC/D,SAAS,GAAG,MAAM,CAAA;SACnB;aAAM;YACL,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;SAClG;QACD,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAA;QACzD,IAAI,cAAc,GAAG,cAAc,EAAE;YACnC,MAAM,GAAG;gBACP,sEAAsE,WAAW,WAC/E,MAAM,CAAC,IACT,0BAA0B,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc,kCAAkC,SAAS,GAAG;aAChH,CAAA;SACF;QACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAE,CAAA;IAC7D,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 1656633600000 = 2022-07-01T00:00:00Z
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
export declare const ADR_74_TIMESTAMP: number;
|
|
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;
|
|
21
|
+
//# sourceMappingURL=timestamps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamps.d.ts","sourceRoot":"","sources":["../../src/validations/timestamps.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAwF,CAAA;AAErH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAwF,CAAA;AAErH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAwF,CAAA;AAErH;;;GAGG;AACH,eAAO,MAAM,kCAAkC,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LEGACY_CONTENT_MIGRATION_TIMESTAMP = exports.ADR_75_TIMESTAMP = exports.ADR_45_TIMESTAMP = exports.ADR_74_TIMESTAMP = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* 1656633600000 = 2022-07-01T00:00:00Z
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
exports.ADR_74_TIMESTAMP = process.env.ADR_74_TIMESTAMP ? parseInt(process.env.ADR_74_TIMESTAMP) : 1656633600000;
|
|
9
|
+
/**
|
|
10
|
+
* 1652191200000 = 2022-05-10T14:00:00Z
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
exports.ADR_45_TIMESTAMP = process.env.ADR_45_TIMESTAMP ? parseInt(process.env.ADR_45_TIMESTAMP) : 1652191200000;
|
|
14
|
+
/**
|
|
15
|
+
* 1658275200000 = 2022-07-20T00:00:00Z
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
exports.ADR_75_TIMESTAMP = process.env.ADR_75_TIMESTAMP ? parseInt(process.env.ADR_75_TIMESTAMP) : 1658275200000;
|
|
19
|
+
/**
|
|
20
|
+
* DCL Launch Day
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
exports.LEGACY_CONTENT_MIGRATION_TIMESTAMP = 1582167600000;
|
|
24
|
+
//# sourceMappingURL=timestamps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamps.js","sourceRoot":"","sources":["../../src/validations/timestamps.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;AAErH;;;GAGG;AACU,QAAA,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;AAErH;;;GAGG;AACU,QAAA,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;AAErH;;;GAGG;AACU,QAAA,kCAAkC,GAAG,aAAa,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EntityType } from '@dcl/schemas';
|
|
2
|
+
import { DeploymentToValidate, Validation } from '../types';
|
|
3
|
+
export declare function validationGroup(...validations: Validation[]): Validation;
|
|
4
|
+
export declare function conditionalValidation(condition: (deployment: DeploymentToValidate) => boolean | Promise<boolean>, validation: Validation): Validation;
|
|
5
|
+
export declare function validationAfterADR45(validation: Validation): Validation;
|
|
6
|
+
export declare function validationAfterADR75(validation: Validation): Validation;
|
|
7
|
+
export declare function validationAfterADR74(validation: Validation): Validation;
|
|
8
|
+
export declare function validationForType(entityType: EntityType, validation: Validation): Validation;
|
|
9
|
+
//# sourceMappingURL=validations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/validations/validations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAA8B,oBAAoB,EAAM,UAAU,EAAsB,MAAM,UAAU,CAAA;AAG/G,wBAAgB,eAAe,CAAC,GAAG,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAaxE;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC3E,UAAU,EAAE,UAAU,GACrB,UAAU,CAUZ;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAEvE;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAEvE;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,cAE/E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validationForType = exports.validationAfterADR74 = exports.validationAfterADR75 = exports.validationAfterADR45 = exports.conditionalValidation = exports.validationGroup = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const timestamps_1 = require("./timestamps");
|
|
6
|
+
function validationGroup(...validations) {
|
|
7
|
+
return {
|
|
8
|
+
async validate(components, deployment) {
|
|
9
|
+
for (const validation of validations) {
|
|
10
|
+
const response = await validation.validate(components, deployment);
|
|
11
|
+
if (!response.ok)
|
|
12
|
+
return response;
|
|
13
|
+
}
|
|
14
|
+
return types_1.OK;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
exports.validationGroup = validationGroup;
|
|
19
|
+
function conditionalValidation(condition, validation) {
|
|
20
|
+
return {
|
|
21
|
+
async validate(components, deployment) {
|
|
22
|
+
const conditionIsMet = await condition(deployment);
|
|
23
|
+
if (conditionIsMet) {
|
|
24
|
+
return validation.validate(components, deployment);
|
|
25
|
+
}
|
|
26
|
+
return types_1.OK;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
exports.conditionalValidation = conditionalValidation;
|
|
31
|
+
function validationAfterADR45(validation) {
|
|
32
|
+
return conditionalValidation((deployment) => deployment.entity.timestamp >= timestamps_1.ADR_45_TIMESTAMP, validation);
|
|
33
|
+
}
|
|
34
|
+
exports.validationAfterADR45 = validationAfterADR45;
|
|
35
|
+
function validationAfterADR75(validation) {
|
|
36
|
+
return conditionalValidation((deployment) => deployment.entity.timestamp >= timestamps_1.ADR_75_TIMESTAMP, validation);
|
|
37
|
+
}
|
|
38
|
+
exports.validationAfterADR75 = validationAfterADR75;
|
|
39
|
+
function validationAfterADR74(validation) {
|
|
40
|
+
return conditionalValidation((deployment) => deployment.entity.timestamp >= timestamps_1.ADR_74_TIMESTAMP, validation);
|
|
41
|
+
}
|
|
42
|
+
exports.validationAfterADR74 = validationAfterADR74;
|
|
43
|
+
function validationForType(entityType, validation) {
|
|
44
|
+
return conditionalValidation((deployment) => deployment.entity.type === entityType, validation);
|
|
45
|
+
}
|
|
46
|
+
exports.validationForType = validationForType;
|
|
47
|
+
//# sourceMappingURL=validations.js.map
|