@dcl/content-validator 2.3.0 → 2.3.2-20220720191614.commit-9543e3d
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 +13 -4
- package/dist/the-graph-client/the-graph-client.d.ts.map +1 -1
- package/dist/the-graph-client/the-graph-client.js +31 -31
- package/dist/the-graph-client/the-graph-client.js.map +1 -1
- package/dist/types.d.ts +5 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validations/access-checker/items/collection-asset.d.ts.map +1 -1
- package/dist/validations/access-checker/items/collection-asset.js +8 -8
- package/dist/validations/access-checker/items/collection-asset.js.map +1 -1
- package/dist/validations/access-checker/profiles.d.ts +4 -3
- package/dist/validations/access-checker/profiles.d.ts.map +1 -1
- package/dist/validations/access-checker/profiles.js +29 -65
- package/dist/validations/access-checker/profiles.js.map +1 -1
- package/dist/validations/profile.d.ts +0 -2
- package/dist/validations/profile.d.ts.map +1 -1
- package/dist/validations/profile.js +3 -39
- package/dist/validations/profile.js.map +1 -1
- package/dist/validations/timestamps.d.ts +1 -1
- package/dist/validations/timestamps.js +2 -2
- package/package.json +4 -4
|
@@ -1022,7 +1022,7 @@
|
|
|
1022
1022
|
},
|
|
1023
1023
|
{
|
|
1024
1024
|
"kind": "Content",
|
|
1025
|
-
"text": "{\n
|
|
1025
|
+
"text": "{\n checkForNamesOwnershipWithTimestamp: (ethAddress: "
|
|
1026
1026
|
},
|
|
1027
1027
|
{
|
|
1028
1028
|
"kind": "Reference",
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
},
|
|
1050
1050
|
{
|
|
1051
1051
|
"kind": "Content",
|
|
1052
|
-
"text": ">;\n
|
|
1052
|
+
"text": ">;\n checkForWearablesOwnershipWithTimestamp: (ethAddress: "
|
|
1053
1053
|
},
|
|
1054
1054
|
{
|
|
1055
1055
|
"kind": "Reference",
|
|
@@ -1058,7 +1058,16 @@
|
|
|
1058
1058
|
},
|
|
1059
1059
|
{
|
|
1060
1060
|
"kind": "Content",
|
|
1061
|
-
"text": ",
|
|
1061
|
+
"text": ", wearableIdsToCheck: "
|
|
1062
|
+
},
|
|
1063
|
+
{
|
|
1064
|
+
"kind": "Reference",
|
|
1065
|
+
"text": "WearableId",
|
|
1066
|
+
"canonicalReference": "@dcl/schemas!WearableId:type"
|
|
1067
|
+
},
|
|
1068
|
+
{
|
|
1069
|
+
"kind": "Content",
|
|
1070
|
+
"text": "[], timestamp: number) => "
|
|
1062
1071
|
},
|
|
1063
1072
|
{
|
|
1064
1073
|
"kind": "Reference",
|
|
@@ -1114,7 +1123,7 @@
|
|
|
1114
1123
|
"name": "TheGraphClient",
|
|
1115
1124
|
"typeTokenRange": {
|
|
1116
1125
|
"startIndex": 1,
|
|
1117
|
-
"endIndex":
|
|
1126
|
+
"endIndex": 22
|
|
1118
1127
|
}
|
|
1119
1128
|
},
|
|
1120
1129
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"the-graph-client.d.ts","sourceRoot":"","sources":["../../src/the-graph-client/the-graph-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"the-graph-client.d.ts","sourceRoot":"","sources":["../../src/the-graph-client/the-graph-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,0BAA0B,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAIvF,oBAAY,gBAAgB,GAAG;IAC7B,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,eACnB,KAAK,0BAA0B,EAAE,MAAM,GAAG,WAAW,CAAC,KACjE,cAmOF,CAAA"}
|
|
@@ -9,7 +9,7 @@ const createTheGraphClient = (components) => {
|
|
|
9
9
|
const logger = components.logs.getLogger('TheGraphClient');
|
|
10
10
|
const L1_NETWORKS = ['mainnet', 'ropsten', 'kovan', 'rinkeby', 'goerli'];
|
|
11
11
|
const L2_NETWORKS = ['matic', 'mumbai'];
|
|
12
|
-
const
|
|
12
|
+
const checkForNamesOwnershipWithTimestamp = async (ethAddress, namesToCheck, timestamp) => {
|
|
13
13
|
if (namesToCheck.length === 0) {
|
|
14
14
|
return permissionOk();
|
|
15
15
|
}
|
|
@@ -47,19 +47,19 @@ const createTheGraphClient = (components) => {
|
|
|
47
47
|
}
|
|
48
48
|
return await hasPermissionOnBlock(blocks.blockNumberFiveMinBeforeDeployment);
|
|
49
49
|
};
|
|
50
|
-
const
|
|
50
|
+
const splitWearablesByNetwork = async (wearableIdsToCheck) => {
|
|
51
51
|
const ethereum = [];
|
|
52
52
|
const matic = [];
|
|
53
|
-
for (const
|
|
54
|
-
const parsed = await (0, urn_resolver_1.parseUrn)(
|
|
53
|
+
for (const wearable of wearableIdsToCheck) {
|
|
54
|
+
const parsed = await (0, urn_resolver_1.parseUrn)(wearable);
|
|
55
55
|
if (parsed &&
|
|
56
56
|
'network' in parsed &&
|
|
57
57
|
['blockchain-collection-v1-asset', 'blockchain-collection-v2-asset'].includes(parsed.type)) {
|
|
58
58
|
if (L1_NETWORKS.includes(parsed.network)) {
|
|
59
|
-
ethereum.push(
|
|
59
|
+
ethereum.push(wearable);
|
|
60
60
|
}
|
|
61
61
|
else if (L2_NETWORKS.includes(parsed.network)) {
|
|
62
|
-
matic.push(
|
|
62
|
+
matic.push(wearable);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -73,25 +73,25 @@ const createTheGraphClient = (components) => {
|
|
|
73
73
|
result: false,
|
|
74
74
|
failing: failing
|
|
75
75
|
});
|
|
76
|
-
const
|
|
77
|
-
if (
|
|
76
|
+
const checkForWearablesOwnershipWithTimestamp = async (ethAddress, wearableIdsToCheck, timestamp) => {
|
|
77
|
+
if (wearableIdsToCheck.length === 0) {
|
|
78
78
|
return permissionOk();
|
|
79
79
|
}
|
|
80
|
-
const { ethereum, matic } = await
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const [
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
const { ethereum, matic } = await splitWearablesByNetwork(wearableIdsToCheck);
|
|
81
|
+
const ethereumWearablesOwnersPromise = getOwnersByWearableWithTimestamp(ethAddress, ethereum, timestamp, components.subGraphs.L1.blocks, components.subGraphs.L1.collections);
|
|
82
|
+
const maticWearablesOwnersPromise = getOwnersByWearableWithTimestamp(ethAddress, matic, timestamp, components.subGraphs.L2.blocks, components.subGraphs.L2.collections);
|
|
83
|
+
const [ethereumWearablesOwners, maticWearablesOwners] = await Promise.all([
|
|
84
|
+
ethereumWearablesOwnersPromise,
|
|
85
|
+
maticWearablesOwnersPromise
|
|
86
86
|
]);
|
|
87
|
-
if (
|
|
87
|
+
if (ethereumWearablesOwners.result && maticWearablesOwners.result)
|
|
88
88
|
return permissionOk();
|
|
89
89
|
else {
|
|
90
|
-
return permissionError([...(
|
|
90
|
+
return permissionError([...(ethereumWearablesOwners.failing ?? []), ...(maticWearablesOwners.failing ?? [])]);
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
-
const
|
|
94
|
-
if (
|
|
93
|
+
const getOwnersByWearableWithTimestamp = async (ethAddress, wearableIdsToCheck, timestamp, blocksSubgraph, collectionsSubgraph) => {
|
|
94
|
+
if (wearableIdsToCheck.length === 0) {
|
|
95
95
|
return permissionOk();
|
|
96
96
|
}
|
|
97
97
|
const blocks = await findBlocksForTimestamp(blocksSubgraph, timestamp);
|
|
@@ -99,26 +99,26 @@ const createTheGraphClient = (components) => {
|
|
|
99
99
|
if (!blockNumber) {
|
|
100
100
|
return permissionError();
|
|
101
101
|
}
|
|
102
|
-
const
|
|
102
|
+
const runOwnedWearablesOnBlockQuery = async (blockNumber) => {
|
|
103
103
|
const query = {
|
|
104
|
-
description: 'check for
|
|
104
|
+
description: 'check for wearables ownership',
|
|
105
105
|
subgraph: collectionsSubgraph,
|
|
106
|
-
query:
|
|
107
|
-
mapper: (response) => new Set(response.
|
|
106
|
+
query: QUERY_WEARABLES_FOR_ADDRESS_AT_BLOCK,
|
|
107
|
+
mapper: (response) => new Set(response.wearables.map(({ urn }) => urn))
|
|
108
108
|
};
|
|
109
109
|
return runQuery(query, {
|
|
110
110
|
block: blockNumber,
|
|
111
111
|
ethAddress,
|
|
112
|
-
urnList:
|
|
112
|
+
urnList: wearableIdsToCheck
|
|
113
113
|
});
|
|
114
114
|
};
|
|
115
115
|
try {
|
|
116
|
-
const
|
|
117
|
-
const notOwned =
|
|
116
|
+
const ownedWearables = await runOwnedWearablesOnBlockQuery(blockNumber);
|
|
117
|
+
const notOwned = wearableIdsToCheck.filter((name) => !ownedWearables.has(name));
|
|
118
118
|
return notOwned.length > 0 ? permissionError(notOwned) : permissionOk();
|
|
119
119
|
}
|
|
120
120
|
catch (error) {
|
|
121
|
-
logger.error(`Error retrieving
|
|
121
|
+
logger.error(`Error retrieving wearables owned by address ${ethAddress} at block ${blocks.blockNumberAtDeployment}`);
|
|
122
122
|
return permissionError();
|
|
123
123
|
}
|
|
124
124
|
};
|
|
@@ -159,8 +159,8 @@ const createTheGraphClient = (components) => {
|
|
|
159
159
|
});
|
|
160
160
|
};
|
|
161
161
|
return {
|
|
162
|
-
|
|
163
|
-
|
|
162
|
+
checkForNamesOwnershipWithTimestamp,
|
|
163
|
+
checkForWearablesOwnershipWithTimestamp,
|
|
164
164
|
findBlocksForTimestamp
|
|
165
165
|
};
|
|
166
166
|
};
|
|
@@ -194,9 +194,9 @@ query getNftNamesForBlock($block: Int!, $ethAddress: String!, $nameList: [String
|
|
|
194
194
|
name
|
|
195
195
|
}
|
|
196
196
|
}`;
|
|
197
|
-
const
|
|
198
|
-
query
|
|
199
|
-
|
|
197
|
+
const QUERY_WEARABLES_FOR_ADDRESS_AT_BLOCK = `
|
|
198
|
+
query getNftWearablesForBlock($block: Int!, $ethAddress: String!, $urnList: [String!]) {
|
|
199
|
+
wearables: nfts(
|
|
200
200
|
block: {number: $block}
|
|
201
201
|
where: {owner: $ethAddress, searchItemType_in: ["wearable_v1", "wearable_v2", "smart_wearable_v1", "emote_v1"] urn_in: $urnList}
|
|
202
202
|
first: 1000
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"the-graph-client.js","sourceRoot":"","sources":["../../src/the-graph-client/the-graph-client.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"the-graph-client.js","sourceRoot":"","sources":["../../src/the-graph-client/the-graph-client.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { AuthChain, Entity, EthAddress } from '@dcl/schemas';
|
|
1
|
+
import { AuthChain, Entity, EthAddress, WearableId } from '@dcl/schemas';
|
|
2
2
|
import { ILoggerComponent } from '@well-known-components/interfaces';
|
|
3
|
-
import { ISubgraphComponent, Variables } from '@well-known-components/thegraph-component';
|
|
4
3
|
import { PermissionResult } from './the-graph-client/the-graph-client';
|
|
4
|
+
import { ISubgraphComponent } from '@well-known-components/thegraph-component';
|
|
5
|
+
import { Variables } from '@well-known-components/thegraph-component';
|
|
5
6
|
/**
|
|
6
7
|
* @public
|
|
7
8
|
*/
|
|
@@ -115,8 +116,8 @@ export declare type SubGraphs = {
|
|
|
115
116
|
* @public
|
|
116
117
|
*/
|
|
117
118
|
export declare type TheGraphClient = {
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
checkForNamesOwnershipWithTimestamp: (ethAddress: EthAddress, namesToCheck: string[], timestamp: number) => Promise<PermissionResult>;
|
|
120
|
+
checkForWearablesOwnershipWithTimestamp: (ethAddress: EthAddress, wearableIdsToCheck: WearableId[], timestamp: number) => Promise<PermissionResult>;
|
|
120
121
|
findBlocksForTimestamp: (subgraph: ISubgraphComponent, timestamp: number) => Promise<BlockInformation>;
|
|
121
122
|
};
|
|
122
123
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuGA;;GAEG;AACU,QAAA,EAAE,GAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AAElD;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,GAAG,KAAe,EAAsB,EAAE,CAAC,CAAC;IAC3E,EAAE,EAAE,KAAK;IACT,MAAM,EAAE,KAAK;CACd,CAAC,CAAA;AAHW,QAAA,gBAAgB,oBAG3B;AAEF;;GAEG;AACI,MAAM,UAAU,GAAG,CAAC,GAAG,MAAc,EAAsB,EAAE,CAAC,CAAC;IACpE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;CAC/C,CAAC,CAAA;AAHW,QAAA,UAAU,cAGrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-asset.d.ts","sourceRoot":"","sources":["../../../../src/validations/access-checker/items/collection-asset.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAqBzC,aAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,oBAAY,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,cAAc,EAAE,CAAA;CACxB,CAAA;
|
|
1
|
+
{"version":3,"file":"collection-asset.d.ts","sourceRoot":"","sources":["../../../../src/validations/access-checker/items/collection-asset.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAqBzC,aAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,oBAAY,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,KAAK,EAAE,cAAc,EAAE,CAAA;CACxB,CAAA;AAkID,eAAO,MAAM,gCAAgC,EAAE,eAqD9C,CAAA"}
|
|
@@ -5,7 +5,7 @@ const hashing_1 = require("@dcl/hashing");
|
|
|
5
5
|
const types_1 = require("../../../types");
|
|
6
6
|
const L1_NETWORKS = ['mainnet', 'ropsten', 'kovan', 'rinkeby', 'goerli'];
|
|
7
7
|
const L2_NETWORKS = ['matic', 'mumbai'];
|
|
8
|
-
async function getCollectionItems(components,
|
|
8
|
+
async function getCollectionItems(components, subgraphUrl, collection, itemId, block) {
|
|
9
9
|
const query = `
|
|
10
10
|
query getCollectionRoles($collection: String!, $itemId: String!, $block: Int!) {
|
|
11
11
|
collections(where:{ id: $collection }, block: { number: $block }) {
|
|
@@ -23,7 +23,7 @@ async function getCollectionItems(components, subgraph, collection, itemId, bloc
|
|
|
23
23
|
id
|
|
24
24
|
}
|
|
25
25
|
}`;
|
|
26
|
-
const result = await
|
|
26
|
+
const result = await subgraphUrl.query(query, {
|
|
27
27
|
collection,
|
|
28
28
|
itemId: `${collection}-${itemId}`,
|
|
29
29
|
block
|
|
@@ -40,10 +40,10 @@ async function getCollectionItems(components, subgraph, collection, itemId, bloc
|
|
|
40
40
|
committee: result.accounts.map(({ id }) => id.toLowerCase())
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
-
async function hasPermission(components,
|
|
43
|
+
async function hasPermission(components, subgraphUrl, collection, itemId, block, entity, logger) {
|
|
44
44
|
try {
|
|
45
45
|
const { content, metadata } = entity;
|
|
46
|
-
const permissions = await getCollectionItems(components,
|
|
46
|
+
const permissions = await getCollectionItems(components, subgraphUrl, collection, itemId, block);
|
|
47
47
|
const ethAddressLowercase = entity.ethAddress.toLowerCase();
|
|
48
48
|
if (!!permissions.contentHash) {
|
|
49
49
|
const deployedByCommittee = permissions.committee.includes(ethAddressLowercase);
|
|
@@ -78,20 +78,20 @@ async function hasPermission(components, subgraph, collection, itemId, block, en
|
|
|
78
78
|
return false;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
-
async function checkCollectionAccess(components,
|
|
81
|
+
async function checkCollectionAccess(components, blocksSubgraphUrl, collectionsSubgraphUrl, collection, itemId, entity, logger) {
|
|
82
82
|
const { timestamp } = entity;
|
|
83
83
|
try {
|
|
84
|
-
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await components.theGraphClient.findBlocksForTimestamp(
|
|
84
|
+
const { blockNumberAtDeployment, blockNumberFiveMinBeforeDeployment } = await components.theGraphClient.findBlocksForTimestamp(blocksSubgraphUrl, timestamp);
|
|
85
85
|
// 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
|
|
86
86
|
// 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
|
|
87
87
|
// have access now, or had access 5 minutes ago.
|
|
88
88
|
const hasPermissionOnBlock = async (blockNumber) => !!blockNumber &&
|
|
89
|
-
(await hasPermission(components,
|
|
89
|
+
(await hasPermission(components, collectionsSubgraphUrl, collection, itemId, blockNumber, entity, logger));
|
|
90
90
|
return ((await hasPermissionOnBlock(blockNumberAtDeployment)) ||
|
|
91
91
|
(await hasPermissionOnBlock(blockNumberFiveMinBeforeDeployment)));
|
|
92
92
|
}
|
|
93
93
|
catch (error) {
|
|
94
|
-
logger.error(`Error checking wearable access (${collection}, ${itemId}, ${entity.ethAddress}, ${timestamp}, ${
|
|
94
|
+
logger.error(`Error checking wearable access (${collection}, ${itemId}, ${entity.ethAddress}, ${timestamp}, ${blocksSubgraphUrl}).`);
|
|
95
95
|
return false;
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-asset.js","sourceRoot":"","sources":["../../../../src/validations/access-checker/items/collection-asset.ts"],"names":[],"mappings":";;;AAAA,0CAA6C;AAI7C,0CAMuB;AAIvB,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;AACxE,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AA8BvC,KAAK,UAAU,kBAAkB,CAC/B,UAA6D,EAC7D,
|
|
1
|
+
{"version":3,"file":"collection-asset.js","sourceRoot":"","sources":["../../../../src/validations/access-checker/items/collection-asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Validation } from '../../types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Validate that the pointers are valid, and that the Ethereum address has write access to them
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
5
6
|
export declare const profiles: Validation;
|
|
6
7
|
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAAoB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAM,UAAU,EAAoB,MAAM,aAAa,CAAA;AAI9D;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,UAoDtB,CAAA"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.profiles =
|
|
3
|
+
exports.profiles = void 0;
|
|
4
4
|
const schemas_1 = require("@dcl/schemas");
|
|
5
5
|
const urn_resolver_1 = require("@dcl/urn-resolver");
|
|
6
6
|
const types_1 = require("../../types");
|
|
7
7
|
const profile_1 = require("../profile");
|
|
8
8
|
const timestamps_1 = require("../timestamps");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Validate that the pointers are valid, and that the Ethereum address has write access to them
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
exports.profiles = {
|
|
14
|
+
validate: async ({ externalCalls, theGraphClient }, deployment) => {
|
|
12
15
|
const pointers = deployment.entity.pointers;
|
|
13
16
|
const ethAddress = externalCalls.ownerAddress(deployment.auditInfo);
|
|
14
17
|
if (pointers.length !== 1)
|
|
@@ -24,80 +27,41 @@ exports.pointerIsValid = {
|
|
|
24
27
|
else if (pointer !== ethAddress.toLowerCase()) {
|
|
25
28
|
return (0, types_1.validationFailed)(`You can only alter your own profile. The pointer address and the signer address are different (pointer:${pointer} signer: ${ethAddress.toLowerCase()}).`);
|
|
26
29
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
function allClaimedNames(entity) {
|
|
31
|
-
return entity.metadata.avatars
|
|
32
|
-
.filter((avatar) => avatar.hasClaimedName)
|
|
33
|
-
.map((avatar) => avatar.name)
|
|
34
|
-
.filter((name) => name && name.trim().length > 0);
|
|
35
|
-
}
|
|
36
|
-
exports.ownsNames = (0, validations_1.validationAfterADR75)({
|
|
37
|
-
validate: async ({ externalCalls, theGraphClient }, deployment) => {
|
|
38
|
-
const ethAddress = externalCalls.ownerAddress(deployment.auditInfo);
|
|
30
|
+
if (deployment.entity.timestamp < timestamps_1.ADR_75_TIMESTAMP)
|
|
31
|
+
return types_1.OK;
|
|
39
32
|
const names = allClaimedNames(deployment.entity);
|
|
40
|
-
const namesCheckResult = await theGraphClient.
|
|
33
|
+
const namesCheckResult = await theGraphClient.checkForNamesOwnershipWithTimestamp(ethAddress, names, deployment.entity.timestamp);
|
|
41
34
|
if (!namesCheckResult.result)
|
|
42
35
|
return (0, types_1.validationFailed)(`The following names (${namesCheckResult.failing?.join(', ')}) are not owned by the address ${ethAddress.toLowerCase()}).`);
|
|
36
|
+
const wearableUrns = await allWearablesUrns(deployment.entity);
|
|
37
|
+
const wearablesCheckResult = await theGraphClient.checkForWearablesOwnershipWithTimestamp(ethAddress, wearableUrns, deployment.entity.timestamp);
|
|
38
|
+
if (!wearablesCheckResult.result) {
|
|
39
|
+
return (0, types_1.validationFailed)(`The following wearables (${wearablesCheckResult.failing?.join(', ')}) are not owned by the address ${ethAddress.toLowerCase()}).`);
|
|
40
|
+
}
|
|
43
41
|
return types_1.OK;
|
|
44
42
|
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
};
|
|
44
|
+
const allClaimedNames = (entity) => entity.metadata.avatars
|
|
45
|
+
.filter((avatar) => avatar.hasClaimedName)
|
|
46
|
+
.map((avatar) => avatar.name)
|
|
47
|
+
.filter((name) => name && name.trim().length > 0);
|
|
48
|
+
const isBaseAvatar = (wearable) => wearable.includes('base-avatars');
|
|
49
|
+
const translateWearablesIdFormat = async (wearableId) => {
|
|
50
|
+
if (!wearableId.startsWith('dcl://')) {
|
|
51
|
+
return wearableId;
|
|
52
52
|
}
|
|
53
|
-
const parsed = await (0, urn_resolver_1.parseUrn)(
|
|
53
|
+
const parsed = await (0, urn_resolver_1.parseUrn)(wearableId);
|
|
54
54
|
return parsed?.uri?.toString();
|
|
55
|
-
}
|
|
56
|
-
async
|
|
55
|
+
};
|
|
56
|
+
const allWearablesUrns = async (entity) => {
|
|
57
57
|
const allWearablesInProfilePromises = [];
|
|
58
58
|
for (const avatar of entity.metadata.avatars) {
|
|
59
59
|
for (const wearableId of avatar.avatar.wearables) {
|
|
60
60
|
if (!isBaseAvatar(wearableId) && !(0, profile_1.isOldEmote)(wearableId)) {
|
|
61
|
-
allWearablesInProfilePromises.push(
|
|
61
|
+
allWearablesInProfilePromises.push(translateWearablesIdFormat(wearableId));
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
return (await Promise.all(allWearablesInProfilePromises)).filter((wearableId) => !!wearableId);
|
|
66
|
-
}
|
|
67
|
-
async function allEmoteUrns(entity) {
|
|
68
|
-
const allEmotesInProfilePromises = [];
|
|
69
|
-
const allAvatars = entity.metadata?.avatars ?? [];
|
|
70
|
-
for (const avatar of allAvatars) {
|
|
71
|
-
const allEmotes = avatar.avatar.emotes ?? [];
|
|
72
|
-
for (const { urn } of allEmotes) {
|
|
73
|
-
if (!(0, profile_1.isOldEmote)(urn)) {
|
|
74
|
-
allEmotesInProfilePromises.push(sanitizeUrn(urn));
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return (await Promise.all(allEmotesInProfilePromises)).filter((wearableId) => !!wearableId);
|
|
79
|
-
}
|
|
80
|
-
exports.ownsItems = (0, validations_1.conditionalValidation)((deployment) => deployment.entity.timestamp >= timestamps_1.ADR_74_TIMESTAMP || deployment.entity.timestamp >= timestamps_1.ADR_75_TIMESTAMP, {
|
|
81
|
-
validate: async ({ externalCalls, theGraphClient }, deployment) => {
|
|
82
|
-
const ethAddress = externalCalls.ownerAddress(deployment.auditInfo);
|
|
83
|
-
const depoymentTimestamp = deployment.entity.timestamp;
|
|
84
|
-
const itemUrns = [];
|
|
85
|
-
if (depoymentTimestamp >= timestamps_1.ADR_75_TIMESTAMP) {
|
|
86
|
-
for (const urn of await allOnChainWearableUrns(deployment.entity)) {
|
|
87
|
-
itemUrns.push(urn);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
if (depoymentTimestamp >= timestamps_1.ADR_74_TIMESTAMP) {
|
|
91
|
-
for (const urn of await allEmoteUrns(deployment.entity)) {
|
|
92
|
-
itemUrns.push(urn);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
const itemsOwnershipResult = await theGraphClient.ownsItemsAtTimestamp(ethAddress, itemUrns, deployment.entity.timestamp);
|
|
96
|
-
if (!itemsOwnershipResult.result) {
|
|
97
|
-
return (0, types_1.validationFailed)(`The following items (${itemsOwnershipResult.failing?.join(', ')}) are not owned by the address ${ethAddress.toLowerCase()}).`);
|
|
98
|
-
}
|
|
99
|
-
return types_1.OK;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
exports.profiles = (0, validations_1.validationGroup)(exports.pointerIsValid, exports.ownsNames, exports.ownsItems);
|
|
66
|
+
};
|
|
103
67
|
//# sourceMappingURL=profiles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":";;;AAAA,0CAAyD;AACzD,oDAA4C;AAC5C,uCAA8D;AAC9D,wCAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/validations/access-checker/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,6 @@ import { Validation } from '../types';
|
|
|
2
2
|
export declare const isOldEmote: (wearable: string) => boolean;
|
|
3
3
|
export declare const faceThumbnail: Validation;
|
|
4
4
|
export declare const wearableUrns: Validation;
|
|
5
|
-
export declare const emoteUrns: Validation;
|
|
6
|
-
export declare const profileMustHaveEmotes: Validation;
|
|
7
5
|
/**
|
|
8
6
|
* Validate that given profile deployment includes the face256 file with the correct size
|
|
9
7
|
* * @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
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"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.profile = exports.
|
|
6
|
+
exports.profile = exports.wearableUrns = exports.faceThumbnail = exports.isOldEmote = void 0;
|
|
7
7
|
const schemas_1 = require("@dcl/schemas");
|
|
8
8
|
const urn_resolver_1 = require("@dcl/urn-resolver");
|
|
9
9
|
const sharp_1 = __importDefault(require("sharp"));
|
|
@@ -56,51 +56,15 @@ exports.wearableUrns = (0, validations_1.validationAfterADR75)({
|
|
|
56
56
|
continue;
|
|
57
57
|
const parsed = await (0, urn_resolver_1.parseUrn)(pointer);
|
|
58
58
|
if (!parsed)
|
|
59
|
-
return (0, types_1.validationFailed)(`Each profile
|
|
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})`);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
return types_1.OK;
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
|
-
exports.emoteUrns = (0, validations_1.validationAfterADR74)({
|
|
66
|
-
validate: async (components, deployment) => {
|
|
67
|
-
const allAvatars = deployment.entity.metadata?.avatars ?? [];
|
|
68
|
-
for (const avatar of allAvatars) {
|
|
69
|
-
const allEmotes = avatar.avatar.emotes ?? [];
|
|
70
|
-
for (const { slot, urn } of allEmotes) {
|
|
71
|
-
if ((0, exports.isOldEmote)(urn))
|
|
72
|
-
continue;
|
|
73
|
-
const parsed = await (0, urn_resolver_1.parseUrn)(urn);
|
|
74
|
-
if (!parsed)
|
|
75
|
-
return (0, types_1.validationFailed)(`Each profile emote pointer should be a urn, for example (urn:decentraland:{protocol}:collections-v2:{contract(0x[a-fA-F0-9]+)}:{name}). Invalid pointer: (${urn})`);
|
|
76
|
-
if (slot < 0 || slot > 9) {
|
|
77
|
-
return (0, types_1.validationFailed)(`The slot ${slot} of the emote ${urn} must be a number between 0 and 9 (inclusive).`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return types_1.OK;
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
function profileHasEmotes(deployment) {
|
|
85
|
-
const allAvatars = deployment.entity.metadata?.avatars ?? [];
|
|
86
|
-
for (const avatar of allAvatars) {
|
|
87
|
-
if (avatar.avatar?.emotes) {
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
exports.profileMustHaveEmotes = (0, validations_1.validationAfterADR74)({
|
|
94
|
-
validate: async (components, deployment) => {
|
|
95
|
-
if (!profileHasEmotes(deployment)) {
|
|
96
|
-
return (0, types_1.validationFailed)('Profile must have emotes after ADR 74.');
|
|
97
|
-
}
|
|
98
|
-
return types_1.OK;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
65
|
/**
|
|
102
66
|
* Validate that given profile deployment includes the face256 file with the correct size
|
|
103
67
|
* * @public
|
|
104
68
|
*/
|
|
105
|
-
exports.profile = (0, validations_1.validationForType)(schemas_1.EntityType.PROFILE, (0, validations_1.validationGroup)(exports.faceThumbnail, exports.wearableUrns
|
|
69
|
+
exports.profile = (0, validations_1.validationForType)(schemas_1.EntityType.PROFILE, (0, validations_1.validationGroup)(exports.faceThumbnail, exports.wearableUrns));
|
|
106
70
|
//# sourceMappingURL=profile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/validations/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LEGACY_CONTENT_MIGRATION_TIMESTAMP = exports.ADR_75_TIMESTAMP = exports.ADR_45_TIMESTAMP = exports.ADR_74_TIMESTAMP = void 0;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* 1656633600000 = 2022-07-01T00:00:00Z
|
|
6
6
|
* @public
|
|
7
7
|
*/
|
|
8
|
-
exports.ADR_74_TIMESTAMP = process.env.ADR_74_TIMESTAMP ? parseInt(process.env.ADR_74_TIMESTAMP) :
|
|
8
|
+
exports.ADR_74_TIMESTAMP = process.env.ADR_74_TIMESTAMP ? parseInt(process.env.ADR_74_TIMESTAMP) : 1656633600000;
|
|
9
9
|
/**
|
|
10
10
|
* 1652191200000 = 2022-05-10T14:00:00Z
|
|
11
11
|
* @public
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl/content-validator",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.2-20220720191614.commit-9543e3d",
|
|
4
4
|
"description": "Catalyst content validations",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/decentraland/content-validator#readme",
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@dcl/eslint-config": "1.0.
|
|
34
|
+
"@dcl/eslint-config": "1.0.5",
|
|
35
35
|
"@microsoft/api-extractor": "^7.24.2",
|
|
36
36
|
"@types/jest": "^28.1.1",
|
|
37
37
|
"@types/ms": "0.7.31",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@dcl/content-hash-tree": "^1.1.3",
|
|
52
52
|
"@dcl/hashing": "1.1.0",
|
|
53
|
-
"@dcl/schemas": "^5.
|
|
53
|
+
"@dcl/schemas": "^5.0.3",
|
|
54
54
|
"@dcl/urn-resolver": "1.3.1",
|
|
55
55
|
"@well-known-components/interfaces": "1.1.1",
|
|
56
56
|
"@well-known-components/thegraph-component": "^1.2.0",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"files": [
|
|
61
61
|
"dist"
|
|
62
62
|
],
|
|
63
|
-
"commit": "
|
|
63
|
+
"commit": "9543e3d39acf67bcf6fc040cc9a244ca2b1fc47b"
|
|
64
64
|
}
|