diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7eeca138..c76d081a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,13 +8,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - - name: Use Node.js 16.x + - name: Use Node.js 18.x uses: actions/setup-node@v1 with: - node-version: 16.x + node-version: 18.x cache: npm - name: install - run: npm ci + run: npm install - name: build run: npm run build - name: test diff --git a/Dockerfile b/Dockerfile index 2d661338..56bde2fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ RUN apk add --no-cache py3-setuptools python3-dev build-base # install dependencies COPY package.json /app/package.json COPY package-lock.json /app/package-lock.json -RUN npm ci +RUN npm install # build the app COPY . /app @@ -19,7 +19,7 @@ RUN npm run build RUN npm run test # remove devDependencies, keep only used dependencies -RUN npm ci --only=production +RUN npm install --only=production FROM node:18-alpine diff --git a/package-lock.json b/package-lock.json index 80b3dd94..e573773e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "Apache-2.0", "dependencies": { - "@dcl/schemas": "^9.6.0", + "@dcl/schemas": "^11.4.0", "@well-known-components/env-config-provider": "^1.2.0", "@well-known-components/http-requests-logger-component": "^2.1.0", "@well-known-components/http-server": "^1.1.6", @@ -617,13 +617,14 @@ } }, "node_modules/@dcl/schemas": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-9.6.0.tgz", - "integrity": "sha512-k2qfX00Zs7FMT1Ou2dZYZwayK4Ru11IoC8/iSq9Xn81HLcrwzM/LEIBAjDu2fE8bz7U84osBnPgJYs1DG+OV2Q==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-11.4.0.tgz", + "integrity": "sha512-pCMENllY9vcl4HS1ta/TpVqjWUov/oa9xab+Ki1iMur48nE5+xXfa7+laCPhWLOKSZEkC59i5S6zQGTSWFPYew==", "dependencies": { "ajv": "^8.11.0", "ajv-errors": "^3.0.0", - "ajv-keywords": "^5.1.0" + "ajv-keywords": "^5.1.0", + "mitt": "^3.0.1" } }, "node_modules/@dcl/schemas/node_modules/ajv": { @@ -4200,37 +4201,6 @@ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", "dev": true }, - "node_modules/dcl-tslint-config-standard/node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, "node_modules/dcl-tslint-config-standard/node_modules/tslint-eslint-rules": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", @@ -4261,20 +4231,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/dcl-tslint-config-standard/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9640,6 +9596,11 @@ "minipass": "^2.9.0" } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -12262,6 +12223,7 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true, "engines": { "node": ">=8.3.0" }, @@ -12821,13 +12783,14 @@ } }, "@dcl/schemas": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-9.6.0.tgz", - "integrity": "sha512-k2qfX00Zs7FMT1Ou2dZYZwayK4Ru11IoC8/iSq9Xn81HLcrwzM/LEIBAjDu2fE8bz7U84osBnPgJYs1DG+OV2Q==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/@dcl/schemas/-/schemas-11.4.0.tgz", + "integrity": "sha512-pCMENllY9vcl4HS1ta/TpVqjWUov/oa9xab+Ki1iMur48nE5+xXfa7+laCPhWLOKSZEkC59i5S6zQGTSWFPYew==", "requires": { "ajv": "^8.11.0", "ajv-errors": "^3.0.0", - "ajv-keywords": "^5.1.0" + "ajv-keywords": "^5.1.0", + "mitt": "^3.0.1" }, "dependencies": { "ajv": { @@ -13081,8 +13044,7 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" } } }, @@ -14440,8 +14402,7 @@ "@well-known-components/logger": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@well-known-components/logger/-/logger-3.1.2.tgz", - "integrity": "sha512-nT2ULsvtxcaehnUPcmRfVWIspVq6iYTPTzs5D9lBxqE3Pt+j5StzPfo814IqSo4xhN9cJhJAQ/EggMmKuYMaZg==", - "requires": {} + "integrity": "sha512-nT2ULsvtxcaehnUPcmRfVWIspVq6iYTPTzs5D9lBxqE3Pt+j5StzPfo814IqSo4xhN9cJhJAQ/EggMmKuYMaZg==" }, "@well-known-components/metrics": { "version": "1.1.1", @@ -14656,8 +14617,7 @@ "ajv-errors": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", - "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", - "requires": {} + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==" }, "ajv-keywords": { "version": "5.1.0", @@ -15534,28 +15494,6 @@ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", "dev": true }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - } - }, "tslint-eslint-rules": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", @@ -15577,13 +15515,6 @@ } } } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "peer": true } } }, @@ -16388,8 +16319,7 @@ "ws": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", - "requires": {} + "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==" } } }, @@ -17367,8 +17297,7 @@ "isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "requires": {} + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" }, "isstream": { "version": "0.1.2", @@ -18507,8 +18436,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "27.5.1", @@ -19604,6 +19532,11 @@ "minipass": "^2.9.0" } }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -20046,8 +19979,7 @@ "pg-cursor": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/pg-cursor/-/pg-cursor-2.9.0.tgz", - "integrity": "sha512-tNX0FbHX6+hlhZVNbxhSQPDMNMFF6mOWQvwDobPROAFpilmXrZo3FozawqaBQKonFKpBloZZyWUL3Kkf5rLn6A==", - "requires": {} + "integrity": "sha512-tNX0FbHX6+hlhZVNbxhSQPDMNMFF6mOWQvwDobPROAFpilmXrZo3FozawqaBQKonFKpBloZZyWUL3Kkf5rLn6A==" }, "pg-int8": { "version": "1.0.1", @@ -20057,8 +19989,7 @@ "pg-pool": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.0.tgz", - "integrity": "sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==", - "requires": {} + "integrity": "sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==" }, "pg-protocol": { "version": "1.6.0", @@ -21214,8 +21145,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/tslint-no-circular-imports/-/tslint-no-circular-imports-0.7.0.tgz", "integrity": "sha512-k3wxpeMC4ef40UbpfBVHEHIzKfNZq5/SCtAO1YjGsaNTklo+K53/TWLrym+poA65RJFDiYgYNWvkeIIkJNA0Vw==", - "dev": true, - "requires": {} + "dev": true }, "tslint-plugin-prettier": { "version": "2.3.0", @@ -21598,7 +21528,7 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "requires": {} + "dev": true }, "xhr": { "version": "2.6.0", diff --git a/package.json b/package.json index adfd491e..a86f2dcc 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "printWidth": 80 }, "dependencies": { - "@dcl/schemas": "^9.6.0", + "@dcl/schemas": "^11.4.0", "@well-known-components/env-config-provider": "^1.2.0", "@well-known-components/http-requests-logger-component": "^2.1.0", "@well-known-components/http-server": "^1.1.6", diff --git a/src/adapters/handlers/utils.ts b/src/adapters/handlers/utils.ts index b447f7fd..c1b6cfe5 100644 --- a/src/adapters/handlers/utils.ts +++ b/src/adapters/handlers/utils.ts @@ -9,6 +9,7 @@ import { WearableCategory, } from '@dcl/schemas' import { Params } from '../../logic/http/params' +import { AssetsNetworks } from '../../types' export const getItemsParams = (params: Params) => { const maxPrice = params.getString('maxPrice') @@ -47,7 +48,10 @@ export const getItemsParams = (params: Params) => { ), contractAddresses: params.getList('contractAddress'), itemId: params.getString('itemId'), - network: params.getValue('network', Network), + network: params.getValue('network', { + [Network.MATIC]: Network.MATIC, + [Network.ETHEREUM]: Network.ETHEREUM, + }), maxPrice: maxPrice ? ethers.utils.parseEther(maxPrice).toString() : undefined, diff --git a/src/logic/contracts.ts b/src/logic/contracts.ts index 28050821..b8e006c4 100644 --- a/src/logic/contracts.ts +++ b/src/logic/contracts.ts @@ -1,6 +1,7 @@ import { ChainId, Contract, Network, NFTCategory } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' import { FragmentItemType, ItemFragment } from '../ports/items/types' +import { AssetsNetworks } from '../types' const MAX_RESULTS = 1000 @@ -20,7 +21,7 @@ const getCollectionsQuery = (page: number) => ` export async function getCollectionsContracts( subgraph: ISubgraphComponent, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Promise { let page = 0 diff --git a/src/ports/bids/component.ts b/src/ports/bids/component.ts index f452e84e..e14501ff 100644 --- a/src/ports/bids/component.ts +++ b/src/ports/bids/component.ts @@ -1,11 +1,12 @@ -import { BidFilters, ChainId, Network } from '@dcl/schemas' +import { BidFilters, ChainId } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' +import { AssetsNetworks } from '../../types' import { BidFragment, IBidsComponent } from './types' import { fromBidFragment, getBidsQuery } from './utils' export function createBidsComponent(options: { subgraph: ISubgraphComponent - network: Network + network: AssetsNetworks chainId: ChainId }): IBidsComponent { const { subgraph, network, chainId } = options diff --git a/src/ports/bids/utils.ts b/src/ports/bids/utils.ts index c59497cb..988a9521 100644 --- a/src/ports/bids/utils.ts +++ b/src/ports/bids/utils.ts @@ -6,13 +6,14 @@ import { ListingStatus, Network, } from '@dcl/schemas' +import { AssetsNetworks } from '../../types' import { BidFragment } from './types' export const BID_DEFAULT_SORT_BY = BidSortBy.RECENTLY_OFFERED export function fromBidFragment( fragment: BidFragment, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Bid { const bid: Bid = { diff --git a/src/ports/catalog/component.ts b/src/ports/catalog/component.ts index 0943aa87..93304dff 100644 --- a/src/ports/catalog/component.ts +++ b/src/ports/catalog/component.ts @@ -1,5 +1,5 @@ import { IPgComponent } from '@well-known-components/pg-component' -import { Item } from '@dcl/schemas' +import { Item, Network } from '@dcl/schemas' import { HttpError } from '../../logic/http/response' import { getLatestSubgraphSchema } from '../../subgraphUtils' import { enhanceItemsWithPicksStats } from '../../logic/favorites/utils' @@ -68,7 +68,10 @@ export function createCatalogComponent(options: { const query = getCatalogQuery(reducedSchemas, filters) const results = await client.query(query) catalogItems = results.rows.map((res) => - fromCollectionsItemDbResultToCatalogItem(res, network) + fromCollectionsItemDbResultToCatalogItem( + res, + network as Network.ETHEREUM | Network.MATIC + ) ) total = results.rows[0]?.total ?? results.rows[0]?.total_rows ?? 0 diff --git a/src/ports/catalog/types.ts b/src/ports/catalog/types.ts index b00320f4..975651c6 100644 --- a/src/ports/catalog/types.ts +++ b/src/ports/catalog/types.ts @@ -3,8 +3,8 @@ import { CatalogSortBy, CatalogSortDirection, Item, - Network, } from '@dcl/schemas' +import { AssetsNetworks } from '../../types' export type CollectionsItemDBResult = { total?: number // for UNION queries, this field will be defined @@ -31,7 +31,7 @@ export type CollectionsItemDBResult = { owners_count: number | null min_price: string max_price: string - network?: Network + network?: AssetsNetworks metadata: { id: string description: string @@ -40,7 +40,7 @@ export type CollectionsItemDBResult = { rarity: string name: string loop?: boolean - has_sound: boolean, + has_sound: boolean has_geometry: boolean } urn: string diff --git a/src/ports/catalog/utils.ts b/src/ports/catalog/utils.ts index f04e6732..b589d07c 100644 --- a/src/ports/catalog/utils.ts +++ b/src/ports/catalog/utils.ts @@ -14,6 +14,7 @@ import { getMarketplaceChainId, } from '../../logic/chainIds' import { getSubgraphNameForNetwork } from '../../subgraphUtils' +import { AssetsNetworks } from '../../types' import { FragmentItemType } from '../items/types' import { CatalogOptions, @@ -62,7 +63,7 @@ export const getCatalogQuery = ( export function fromCollectionsItemDbResultToCatalogItem( dbItem: CollectionsItemDBResult, - network?: Network + network?: AssetsNetworks ): Item { let name: string let category: NFTCategory diff --git a/src/ports/collections/component.ts b/src/ports/collections/component.ts index 3d4212e8..d2ea3506 100644 --- a/src/ports/collections/component.ts +++ b/src/ports/collections/component.ts @@ -1,11 +1,12 @@ -import { ChainId, CollectionFilters, Network } from '@dcl/schemas' +import { ChainId, CollectionFilters } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' +import { AssetsNetworks } from '../../types' import { CollectionFragment, ICollectionsComponent } from './types' import { fromCollectionFragment, getCollectionsQuery } from './utils' export function createCollectionsComponent(options: { subgraph: ISubgraphComponent - network: Network + network: AssetsNetworks chainId: ChainId }): ICollectionsComponent { const { subgraph, network, chainId } = options diff --git a/src/ports/collections/utils.ts b/src/ports/collections/utils.ts index f828b3fd..c5412d42 100644 --- a/src/ports/collections/utils.ts +++ b/src/ports/collections/utils.ts @@ -3,9 +3,9 @@ import { Collection, CollectionFilters, CollectionSortBy, - Network, } from '@dcl/schemas' import { getMarketplaceContracts } from '../../logic/contracts' +import { AssetsNetworks } from '../../types' import { SortDirection } from '../merger/types' import { CollectionFragment } from './types' @@ -13,7 +13,7 @@ export const COLLECTION_DEFAULT_SORT_BY = CollectionSortBy.NAME export function fromCollectionFragment( fragment: CollectionFragment, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Collection { const collection: Collection = { diff --git a/src/ports/items/component.ts b/src/ports/items/component.ts index 75d574a3..71d9a7d7 100644 --- a/src/ports/items/component.ts +++ b/src/ports/items/component.ts @@ -1,12 +1,13 @@ import { ChainId, ItemFilters, Network } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' +import { AssetsNetworks } from '../../types' import { IItemsComponent, ItemFragment } from './types' import { fromItemFragment, getItemsQuery, getSubgraph } from './utils' export function createItemsComponent( options: { subgraph: ISubgraphComponent - network: Network + network: AssetsNetworks chainId: ChainId }[] ): IItemsComponent { @@ -25,7 +26,11 @@ export function createItemsComponent( items: ItemFragment[] }>(query) const items = fragments.map((fragment) => - fromItemFragment(fragment, network, chainId) + fromItemFragment( + fragment, + network as Network.ETHEREUM | Network.MATIC, + chainId + ) ) return items } diff --git a/src/ports/items/utils.ts b/src/ports/items/utils.ts index 33396064..27a8d165 100644 --- a/src/ports/items/utils.ts +++ b/src/ports/items/utils.ts @@ -15,6 +15,7 @@ import { getGenderFilterQuery } from '../utils' import { SortDirection } from '../merger/types' import { getMarketplaceContracts } from '../../logic/contracts' import { getMarketplaceChainId } from '../../logic/chainIds' +import { AssetsNetworks } from '../../types' export const ITEM_DEFAULT_SORT_BY = ItemSortBy.NEWEST @@ -24,7 +25,7 @@ const MAX_ITEM_PRICE = export function fromItemFragment( fragment: ItemFragment, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Item { let name: string @@ -59,7 +60,7 @@ export function fromItemFragment( rarity: fragment.rarity, loop: fragment.metadata.emote!.loop, hasGeometry: fragment.metadata.emote!.hasGeometry, - hasSound: fragment.metadata.emote!.hasSound + hasSound: fragment.metadata.emote!.hasSound, }, } break diff --git a/src/ports/mints/component.ts b/src/ports/mints/component.ts index 05aa8c19..4c12408b 100644 --- a/src/ports/mints/component.ts +++ b/src/ports/mints/component.ts @@ -1,11 +1,12 @@ -import { ChainId, MintFilters, Network } from '@dcl/schemas' +import { ChainId, MintFilters } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' +import { AssetsNetworks } from '../../types' import { MintFragment, IMintsComponent } from './types' import { fromMintFragment, getMintsQuery } from './utils' export function createMintsComponent(options: { subgraph: ISubgraphComponent - network: Network + network: AssetsNetworks chainId: ChainId }): IMintsComponent { const { subgraph, network, chainId } = options diff --git a/src/ports/mints/utils.ts b/src/ports/mints/utils.ts index 2040ef67..b4a81f67 100644 --- a/src/ports/mints/utils.ts +++ b/src/ports/mints/utils.ts @@ -1,11 +1,12 @@ -import { ChainId, Mint, MintFilters, MintSortBy, Network } from '@dcl/schemas' +import { ChainId, Mint, MintFilters, MintSortBy } from '@dcl/schemas' import { MintFragment } from './types' +import { AssetsNetworks } from '../../types' export const MINT_DEFAULT_SORT_BY = MintSortBy.RECENTLY_MINTED export function fromMintFragment( fragment: MintFragment, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Mint { const mint: Mint = { diff --git a/src/ports/orders/component.ts b/src/ports/orders/component.ts index 70007300..92083cd8 100644 --- a/src/ports/orders/component.ts +++ b/src/ports/orders/component.ts @@ -1,11 +1,12 @@ -import { ChainId, Network, OrderFilters } from '@dcl/schemas' +import { ChainId, OrderFilters } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' +import { AssetsNetworks } from '../../types' import { IOrdersComponent, OrderFragment } from './types' import { fromOrderFragment, getOrdersQuery } from './utils' export function createOrdersComponent(options: { subgraph: ISubgraphComponent - network: Network + network: AssetsNetworks chainId: ChainId getItemIdFilter: (itemId: string) => string getNameFilter: (name: string) => string diff --git a/src/ports/orders/utils.ts b/src/ports/orders/utils.ts index 0d52c49f..cc73dbf8 100644 --- a/src/ports/orders/utils.ts +++ b/src/ports/orders/utils.ts @@ -1,11 +1,11 @@ import { ChainId, ListingStatus, - Network, Order, OrderFilters, OrderSortBy, } from '@dcl/schemas' +import { AssetsNetworks } from '../../types' import { OrderFragment } from './types' export const ORDER_DEFAULT_SORT_BY = OrderSortBy.RECENTLY_LISTED @@ -210,7 +210,7 @@ export const getOrdersQuery = ( export function fromOrderFragment( fragment: OrderFragment, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Order { const issuedId = fragment.nft.issuedId diff --git a/src/ports/sales/component.ts b/src/ports/sales/component.ts index 7a4789cc..4e6f67fc 100644 --- a/src/ports/sales/component.ts +++ b/src/ports/sales/component.ts @@ -1,11 +1,12 @@ import { ChainId, Network, SaleFilters, SaleType } from '@dcl/schemas' import { ISubgraphComponent } from '@well-known-components/thegraph-component' +import { AssetsNetworks } from '../../types' import { SaleFragment, ISalesComponent } from './types' import { fromSaleFragment, getSalesQuery } from './utils' export function createSalesComponent(options: { subgraph: ISubgraphComponent - network: Network + network: AssetsNetworks chainId: ChainId useLegacySchema?: boolean shouldFetch?: (filters: SaleFilters) => boolean diff --git a/src/ports/sales/utils.ts b/src/ports/sales/utils.ts index 2e4cc84f..eb8e1974 100644 --- a/src/ports/sales/utils.ts +++ b/src/ports/sales/utils.ts @@ -1,11 +1,12 @@ -import { ChainId, Network, Sale, SaleFilters, SaleSortBy } from '@dcl/schemas' +import { ChainId, Sale, SaleFilters, SaleSortBy } from '@dcl/schemas' +import { AssetsNetworks } from '../../types' import { SaleFragment } from './types' export const SALE_DEFAULT_SORT_BY = SaleSortBy.RECENTLY_SOLD export function fromSaleFragment( fragment: SaleFragment, - network: Network, + network: AssetsNetworks, chainId: ChainId ): Sale { const sale: Sale = { diff --git a/src/tests/ports/catalog.spec.ts b/src/tests/ports/catalog.spec.ts index c0902027..210f4ac2 100644 --- a/src/tests/ports/catalog.spec.ts +++ b/src/tests/ports/catalog.spec.ts @@ -96,7 +96,7 @@ test('catalog component', function () { rows: { entity_schema: string }[] rowCount: number } - let network = Network.ETHEREUM + let network: Network.ETHEREUM = Network.ETHEREUM let filters: CatalogFilters let latestSchema = 'sgd1234' let dbItemResponse: CollectionsItemDBResult @@ -336,7 +336,9 @@ test('catalog component', function () { itemIdsBySearchTextQuery ) // It's repeated 7 times due to the SELECT + WHERE statements: `WHERE word_wearable % $1 OR word_emote % $2 ORDER BY GREATEST(similarity(word_wearable, $3), similarity(word_emote, $4)) DESC;` - expect(dbClientQueryMock.mock.calls[1][0].values).toEqual(Array(7).fill(search)) + expect(dbClientQueryMock.mock.calls[1][0].values).toEqual( + Array(7).fill(search) + ) }) }) @@ -383,7 +385,9 @@ test('catalog component', function () { getItemIdsBySearchTextQuery(latestSchema, filters) ) // It's repeated 4 times due to this WHERE statement: `WHERE word_wearable % $1 OR word_emote % $2 ORDER BY GREATEST(similarity(word_wearable, $3), similarity(word_emote, $4)) DESC;` - expect(dbClientQueryMock.mock.calls[1][0].values).toEqual(Array(7).fill(search)) + expect(dbClientQueryMock.mock.calls[1][0].values).toEqual( + Array(7).fill(search) + ) const mainCatalogQuery = getCatalogQuery( { [network]: latestSchema }, { ...filters, ids: [mockedDBItemResponse.id] } // the main query should have the ids returned by the search query diff --git a/src/tests/ports/trendings.spec.ts b/src/tests/ports/trendings.spec.ts index 32928fe0..4a580ab9 100644 --- a/src/tests/ports/trendings.spec.ts +++ b/src/tests/ports/trendings.spec.ts @@ -31,7 +31,7 @@ const getSalesOfSameItem = (qty: number, isOnSale = true) => searchContractAddress: `0xsameItemSale${qty}${isOnSale ? 'onSale' : ''}`, })) -const getItem = (contractAddress: string, itemId: string) => ({ +const getItem = (contractAddress: string, itemId: string): Item => ({ id: `${contractAddress}-${itemId}`, name: 'mockdItem', thumbnail: diff --git a/src/types.ts b/src/types.ts index 49f30aa2..8cd6da5a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -21,6 +21,7 @@ import { MintSortBy, NFTFilters, NFTSortBy, + Network, Order, OrderFilters, OrderSortBy, @@ -52,6 +53,8 @@ import { ItemOptions } from './ports/items/types' import { IFavoritesComponent } from './ports/favorites/types' import { ICatalogComponent } from './ports/catalog/types' +export type AssetsNetworks = Network.MATIC | Network.ETHEREUM + export type AppConfig = { HTTP_SERVER_PORT: string HTTP_SERVER_HOST: string