Commit 0041b787 authored by cartcrom's avatar cartcrom Committed by GitHub

refactor: remove unnecessary auth (#4723)

* removed aws auth
* updated fetching and package scripts
* updated url usage
parent 868edc60
...@@ -4,3 +4,4 @@ REACT_APP_INFURA_KEY="099fc58e0de9451d80b18d7c74caa7c1" ...@@ -4,3 +4,4 @@ REACT_APP_INFURA_KEY="099fc58e0de9451d80b18d7c74caa7c1"
REACT_APP_FORTMATIC_KEY="pk_live_F937DF033A1666BF" REACT_APP_FORTMATIC_KEY="pk_live_F937DF033A1666BF"
REACT_APP_GOOGLE_ANALYTICS_ID="G-KDP9B6W4H8" REACT_APP_GOOGLE_ANALYTICS_ID="G-KDP9B6W4H8"
REACT_APP_FIREBASE_KEY="AIzaSyBcZWwTcTJHj_R6ipZcrJkXdq05PuX0Rs0" REACT_APP_FIREBASE_KEY="AIzaSyBcZWwTcTJHj_R6ipZcrJkXdq05PuX0Rs0"
REACT_APP_AWS_API_ENDPOINT="https://api.uniswap.org/v1/graphql"
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
# generated graphql types # generated graphql types
__generated__/ __generated__/
schema.graphql
# dependencies # dependencies
/node_modules /node_modules
......
/* eslint-disable */ /* eslint-disable */
require('dotenv').config({ path: '.env.local' }) require('dotenv').config({ path: '.env.production' })
const { exec } = require('child_process') const { exec } = require('child_process')
const dataConfig = require('./relay.config') const dataConfig = require('./relay.config')
const thegraphConfig = require('./relay_thegraph.config') const thegraphConfig = require('./relay_thegraph.config')
...@@ -8,11 +8,7 @@ const thegraphConfig = require('./relay_thegraph.config') ...@@ -8,11 +8,7 @@ const thegraphConfig = require('./relay_thegraph.config')
const THEGRAPH_API_URL = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3' const THEGRAPH_API_URL = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3'
exec(`get-graphql-schema ${THEGRAPH_API_URL} > ${thegraphConfig.schema}`) exec(`get-graphql-schema ${THEGRAPH_API_URL} > ${thegraphConfig.schema}`)
const API_URL = process.env.REACT_APP_GQL_API_URL console.log(process.env.REACT_APP_AWS_API_ENDPOINT)
const API_KEY = process.env.REACT_APP_GQL_API_KEY exec(
`get-graphql-schema --h Origin=https://app.uniswap.org ${process.env.REACT_APP_AWS_API_ENDPOINT} > ${dataConfig.schema}`
if (API_URL && API_KEY) { )
exec(`get-graphql-schema ${API_URL} --h X-API-KEY=${API_KEY} > ${dataConfig.schema}`)
} else {
console.log('REACT_APP_GQL_API_URL or REACT_APP_GQL_API_KEY is missing from env.local')
}
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
"i18n:extract": "lingui extract --locale en-US", "i18n:extract": "lingui extract --locale en-US",
"i18n:compile": "yarn i18n:extract && lingui compile", "i18n:compile": "yarn i18n:extract && lingui compile",
"i18n:pseudo": "lingui extract --locale pseudo && lingui compile", "i18n:pseudo": "lingui extract --locale pseudo && lingui compile",
"prepare": "yarn contracts:compile && yarn graphql:generate && yarn i18n:compile", "prepare": "yarn contracts:compile && yarn graphql:fetch && yarn graphql:generate && yarn i18n:compile",
"start": "craco start", "start": "craco start",
"build": "craco build", "build": "craco build",
"serve": "serve build -l 3000", "serve": "serve build -l 3000",
...@@ -170,7 +170,6 @@ ...@@ -170,7 +170,6 @@
"ajv": "^6.12.3", "ajv": "^6.12.3",
"array.prototype.flat": "^1.2.4", "array.prototype.flat": "^1.2.4",
"array.prototype.flatmap": "^1.2.4", "array.prototype.flatmap": "^1.2.4",
"aws4fetch": "^1.0.13",
"cids": "^1.0.0", "cids": "^1.0.0",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"copy-to-clipboard": "^3.2.0", "copy-to-clipboard": "^3.2.0",
......
import { AwsClient } from 'aws4fetch'
import { Variables } from 'react-relay' import { Variables } from 'react-relay'
import { GraphQLResponse, RequestParameters } from 'relay-runtime' import { GraphQLResponse, RequestParameters } from 'relay-runtime'
const AWS_API_REGION = process.env.REACT_APP_AWS_API_REGION
const AWS_API_ACCESS_KEY = process.env.REACT_APP_AWS_API_ACCESS_KEY
const AWS_API_ACCESS_SECRET = process.env.REACT_APP_AWS_API_ACCESS_SECRET
const AWS_X_API_KEY = process.env.REACT_APP_AWS_X_API_KEY
const URL = process.env.REACT_APP_AWS_API_ENDPOINT const URL = process.env.REACT_APP_AWS_API_ENDPOINT
if (!AWS_API_REGION || !AWS_API_ACCESS_KEY || !AWS_API_ACCESS_SECRET || !AWS_X_API_KEY || !URL) { if (!URL) {
throw new Error('AWS KEYS MISSING FROM ENVIRONMENT') throw new Error('AWS URL MISSING FROM ENVIRONMENT')
} }
const aws = new AwsClient({
accessKeyId: AWS_API_ACCESS_KEY, // required, akin to AWS_ACCESS_KEY_ID
secretAccessKey: AWS_API_ACCESS_SECRET, // required, akin to AWS_SECRET_ACCESS_KEY
service: 'execute-api',
region: AWS_API_REGION, // AWS region, by default parsed at fetch time
})
const headers = { const headers = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'x-api-key': AWS_X_API_KEY,
} }
const fetchQuery = (params: RequestParameters, variables: Variables): Promise<GraphQLResponse> => { const fetchQuery = (params: RequestParameters, variables: Variables): Promise<GraphQLResponse> => {
const body = JSON.stringify({ const body = JSON.stringify({
...@@ -29,7 +16,7 @@ const fetchQuery = (params: RequestParameters, variables: Variables): Promise<Gr ...@@ -29,7 +16,7 @@ const fetchQuery = (params: RequestParameters, variables: Variables): Promise<Gr
variables, variables,
}) })
return aws.fetch(URL, { body, headers }).then((res) => res.json()) return fetch(URL, { method: 'POST', body, headers }).then((res) => res.json())
} }
export default fetchQuery export default fetchQuery
"""This directive allows results to be deferred during execution"""
directive @defer on FIELD
"""
Tells the service this field/object has access authorized by sigv4 signing.
"""
directive @aws_iam on OBJECT | FIELD_DEFINITION
"""
Tells the service this field/object has access authorized by an API key.
"""
directive @aws_api_key on OBJECT | FIELD_DEFINITION
"""
Tells the service this field/object has access authorized by a Lambda Authorizer.
"""
directive @aws_lambda on OBJECT | FIELD_DEFINITION
"""Directs the schema to enforce authorization on a field"""
directive @aws_auth(
"""List of cognito user pool groups which have access on this field"""
cognito_groups: [String]
) on FIELD_DEFINITION
"""Tells the service which mutation triggers this subscription."""
directive @aws_subscribe(
"""
List of mutations which will trigger this subscription when they are called.
"""
mutations: [String]
) on FIELD_DEFINITION
"""
Tells the service which subscriptions will be published to when this mutation is
called. This directive is deprecated use @aws_susbscribe directive instead.
"""
directive @aws_publish(
"""
List of subscriptions which will be published to when this mutation is called.
"""
subscriptions: [String]
) on FIELD_DEFINITION
"""
Tells the service this field/object has access authorized by a Cognito User Pools token.
"""
directive @aws_cognito_user_pools(
"""List of cognito user pool groups which have access on this field"""
cognito_groups: [String]
) on OBJECT | FIELD_DEFINITION
"""
Tells the service this field/object has access authorized by an OIDC token.
"""
directive @aws_oidc on OBJECT | FIELD_DEFINITION
enum ActivityType {
APPROVE
CANCEL
CLAIM
SEND
RECEIVE
SWAP
DEPLOYMENT
UNKNOWN
money
market
LEND
BORROW
REPAY
WITHDRAW
NFT
MINT
BURN
Staking
STAKE
UNSTAKE
}
type Amount implements IAmount {
id: ID!
currency: Currency
value: Float
}
type AssetActivity {
id: ID!
timestamp: Int!
type: ActivityType!
gasUsed: Float
transaction: Transaction!
assetChanges: [AssetChange]!
}
union AssetChange = TokenTransfer | NftTransfer | TokenApproval | NftApproval | NftApproveForAll
enum Chain {
ARBITRUM
ETHEREUM
ETHEREUM_GOERLI
OPTIMISM
POLYGON
CELO
}
input ContractInput {
chain: Chain!
address: String
}
enum Currency {
USD
ETH
}
type Dimensions {
id: ID!
height: Float
width: Float
}
enum HighLow {
HIGH
LOW
}
enum HistoryDuration {
HOUR
DAY
WEEK
MONTH
YEAR
MAX
}
interface IAmount {
currency: Currency
value: Float
}
interface IContract {
chain: Chain!
address: String
}
type Image {
id: ID!
url: String
dimensions: Dimensions
}
enum MarketSortableField {
MARKET_CAP
VOLUME
}
type NftApproval {
id: ID!
nftStandard: NftStandard!
""" can be erc20 or erc1155"""
asset: NftAsset!
approvedAddress: String!
}
type NftApproveForAll {
id: ID!
nftStandard: NftStandard!
""" can be erc721 or erc1155"""
asset: NftAsset!
operatorAddress: String!
approved: Boolean!
}
type NftAsset {
id: ID!
collection: NftCollection
description: String
imageUrl: String
thumbnailUrl: String
animationUrl: String
smallImageUrl: String
image: Image
thumbnail: Image
smallImage: Image
name: String
nftContract: NftContract
"""
TODO: may need to be array to support erc1155 cases. not needed at the moment so will revisit.
ownerAddress: String
"""
tokenId: String
traits: [NftAssetTrait]
}
enum NftAssetSortableField {
PRICE
}
type NftAssetTrait {
id: ID!
name: String
rarity: Float
value: String
}
type NftBalance {
id: ID!
ownedAsset: NftAsset
}
type NftCollection {
id: ID!
collectionId: String
"""
TODO: support querying for collection assets here
assets(page: Int, pageSize: Int, orderBy: NftAssetSortableField): [NftAsset]
"""
bannerImageUrl: String
bannerImage: Image
description: String
discordUrl: String
homepageUrl: String
imageUrl: String
image: Image
instagramName: String
markets(currencies: [Currency!]!): [NftCollectionMarket]
name: String
nftContracts: [NftContract]
openseaUrl: String
"""
TODO: support collection-level traits.
traits: [NftCollectionTraits] (not needed yet)
"""
twitterName: String
isVerified: Boolean
numAssets: Int
}
type NftCollectionMarket {
id: ID!
floorPrice: Amount
owners: Int
volume24h: Amount
totalVolume: Amount
}
type NftCollectionTraits {
id: ID!
name: String
values: [String]
}
type NftContract implements IContract {
id: ID!
address: String
chain: Chain!
name: String
standard: NftStandard
symbol: String
totalSupply: Int
}
enum NftMarketSortableField {
VOLUME
FLOOR_PRICE
}
enum NftStandard {
ERC721
ERC1155
NONCOMPLIANT
}
type NftTransfer {
id: ID!
nftStandard: NftStandard!
asset: NftAsset!
sender: String!
recipient: String!
direction: TransactionDirection!
}
type Portfolio {
id: ID!
ownerAddress: String!
tokensTotalDenominatedValue: Amount
tokensTotalDenominatedValueHistory(duration: HistoryDuration): [TimestampedAmount]
tokenBalances: [TokenBalance]
assetsValueUSD: Float
totalValueUSD: Float
assetsValue: Float
totalValue: Float
absoluteChange24H: Float
relativeChange24H: Float
nftBalances: [NftBalance]
}
type Query {
tokens(contracts: [ContractInput!]!): [Token]
tokenProjects(contracts: [ContractInput!]!): [TokenProject]
topTokenProjects(orderBy: MarketSortableField!, page: Int!, pageSize: Int!, currency: Currency): [TokenProject]
searchTokens(searchQuery: String!): [Token]
searchTokenProjects(searchQuery: String!): [TokenProject]
assetActivities(address: String!, page: Int, pageSize: Int): [AssetActivity]
portfolio(ownerAddress: String!): Portfolio
portfolios(ownerAddresses: [String!]!): [Portfolio]
nftCollectionsById(collectionIds: [String]): [NftCollection]
topTokens(chain: Chain, page: Int!, pageSize: Int!): [Token]
}
type TimestampedAmount implements IAmount {
id: ID!
currency: Currency
value: Float
timestamp: Int!
}
type Token implements IContract {
id: ID!
chain: Chain!
address: String
standard: TokenStandard
decimals: Int
name: String
symbol: String
project: TokenProject
market(currency: Currency): TokenMarket
}
type TokenApproval {
id: ID!
tokenStandard: TokenStandard!
""" can be erc20 or erc1155"""
asset: Token!
approvedAddress: String!
quantity: String!
}
type TokenBalance {
id: ID!
blockNumber: Int
blockTimestamp: Int
quantity: Float
denominatedValue: Amount
ownerAddress: String!
token: Token
tokenProjectMarket: TokenProjectMarket
}
type TokenMarket {
id: ID!
token: Token!
price: Amount
totalValueLocked: Amount
volume(duration: HistoryDuration!): Amount
pricePercentChange(duration: HistoryDuration!): Amount
priceHistory(duration: HistoryDuration!): [TimestampedAmount]
}
type TokenProject {
id: ID!
name: String
tokens: [Token!]!
description: String
twitterName: String
homepageUrl: String
logoUrl: String
markets(currencies: [Currency!]!): [TokenProjectMarket]
}
type TokenProjectMarket {
id: ID!
tokenProject: TokenProject!
currency: Currency!
price: Amount
volume24h: Amount
pricePercentChange24h: Amount
marketCap: Amount
fullyDilutedMarketCap: Amount
priceHistory(duration: HistoryDuration!): [TimestampedAmount]
volume(duration: HistoryDuration!): Amount
pricePercentChange(duration: HistoryDuration!): Amount
priceHighLow(duration: HistoryDuration!, highLow: HighLow!): Amount
}
enum TokenStandard {
NATIVE
ERC20
ERC1155
}
type TokenTransfer {
id: ID!
tokenStandard: TokenStandard!
asset: Token!
sender: String!
recipient: String!
quantity: String!
direction: TransactionDirection!
transactedValue: Amount
}
type Transaction {
id: ID!
blockNumber: Int!
from: String!
to: String!
hash: String!
nonce: Int!
gasLimit: Float
maxFeePerGas: Float
status: TransactionStatus!
}
enum TransactionDirection {
IN
OUT
SELF
}
enum TransactionStatus {
FAILED
CONFIRMED
PENDING
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -5481,11 +5481,6 @@ aws4@^1.8.0: ...@@ -5481,11 +5481,6 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
aws4fetch@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/aws4fetch/-/aws4fetch-1.0.13.tgz#81f09e3b7c3c52742c55a5d09def641df252f682"
integrity sha512-UTlirJkLtGbJurR9PlL4rOZ9HM1G/1/joWItpVwQ0f7j5Alldd7rfCMcy2kd0l2nDZ4LBdd6cFhrMwsEtazCNw==
axe-core@^4.0.2: axe-core@^4.0.2:
version "4.2.3" version "4.2.3"
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.3.tgz#2a3afc332f0031b42f602f4a3de03c211ca98f72" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.3.tgz#2a3afc332f0031b42f602f4a3de03c211ca98f72"
...@@ -15064,7 +15059,7 @@ redux-thunk@^2.4.1: ...@@ -15064,7 +15059,7 @@ redux-thunk@^2.4.1:
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714"
integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==
redux@^4.0.0, redux@^4.1.2, redux@>=4.1.2: redux@>=4.1.2, redux@^4.0.0, redux@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104"
integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment