Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ tsconfig.tsbuildinfo
__snapshots__
storybook-static
.qodo
next-env.d.ts
next-env.d.ts
public/runtime-config.js
6 changes: 5 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,22 @@ ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/public ./public

RUN mkdir .next
RUN chown nextjs:nodejs .next

COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

COPY --chown=nextjs:nodejs ./scripts/docker-entrypoint.sh /app/docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh

USER nextjs

EXPOSE 8008
ENV PORT=8008
ENV HOSTNAME="0.0.0.0"

ENTRYPOINT ["/app/docker-entrypoint.sh"]
CMD ["node", "server.js"]
137 changes: 101 additions & 36 deletions app.config.cjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
const getEnv = (key) => {
const hasWindow = typeof window !== 'undefined'
if (hasWindow && window.__RUNTIME_CONFIG__) {
const value = window.__RUNTIME_CONFIG__[key]
if (typeof value !== 'undefined') return value
}
return process.env[key]
}

module.exports = {
// URI of single metadata cache instance for all networks.
// While ocean.js includes this value for each network as part of its ConfigHelper,
Expand All @@ -6,12 +15,14 @@ module.exports = {
// const { appConfig } = useMarketMetadata()
// return appConfig.metadataCacheUri
metadataCacheUri:
getEnv('NEXT_PUBLIC_METADATACACHE_URI') ||
process.env.NEXT_PUBLIC_METADATACACHE_URI ||
'https://ocean-node-vm3.oceanenterprise.io',

nodeUri:
getEnv('NEXT_PUBLIC_NODE_URI') ||
process.env.NEXT_PUBLIC_NODE_URI ||
'https://eth-sepolia.blastapi.io/a91cc615-dbae-493b-b011-5796477a64de',
'https://eth-sepolia-testnet.api.pocket.network',

// List of chainIds which metadata cache queries will return by default.
// This preselects the Chains user preferences.
Expand All @@ -20,31 +31,47 @@ module.exports = {
// List of all supported chainIds. Used to populate the Chains user preferences list.
chainIdsSupported: [1, 10, 11155111, 11155420],

customProviderUrl: process.env.NEXT_PUBLIC_PROVIDER_URL,
customProviderUrl:
getEnv('NEXT_PUBLIC_PROVIDER_URL') || process.env.NEXT_PUBLIC_PROVIDER_URL,

defaultDatatokenCap:
'115792089237316195423570985008687907853269984665640564039457',
defaultDatatokenTemplateIndex: 2,
// The ETH address the marketplace fee will be sent to.
marketFeeAddress:
getEnv('NEXT_PUBLIC_MARKET_FEE_ADDRESS') ||
process.env.NEXT_PUBLIC_MARKET_FEE_ADDRESS ||
'0x9984b2453eC7D99a73A5B3a46Da81f197B753C8d',
'0x43eB6644720CFD8B176DC971C6e8c17331812c04',
// publisher market fee that is taken upon ordering an asset, it is an absolute value, it is declared on erc20 creation
publisherMarketOrderFee:
process.env.NEXT_PUBLIC_PUBLISHER_MARKET_ORDER_FEE || '0',
getEnv('NEXT_PUBLIC_PUBLISHER_MARKET_ORDER_FEE') ||
process.env.NEXT_PUBLIC_PUBLISHER_MARKET_ORDER_FEE ||
'0',
// fee recieved by the publisher market when a dt is bought from a fixed rate exchange, percent
publisherMarketFixedSwapFee:
process.env.NEXT_PUBLIC_PUBLISHER_MARKET_FIXED_SWAP_FEE || '0',
getEnv('NEXT_PUBLIC_PUBLISHER_MARKET_FIXED_SWAP_FEE') ||
process.env.NEXT_PUBLIC_PUBLISHER_MARKET_FIXED_SWAP_FEE ||
'0',

// consume market fee that is taken upon ordering an asset, it is an absolute value with 18 decimals, it is specified on order
consumeMarketOrderFee:
process.env.NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE || '0',
consumeMarketFee: process.env.NEXT_PUBLIC_CONSUME_MARKET_FEE || '0',
getEnv('NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE') ||
process.env.NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE ||
'0',
consumeMarketFee:
getEnv('NEXT_PUBLIC_CONSUME_MARKET_FEE') ||
process.env.NEXT_PUBLIC_CONSUME_MARKET_FEE ||
'0',
// fee recieved by the consume market when a dt is bought from a fixed rate exchange, percent
consumeMarketFixedSwapFee:
process.env.NEXT_PUBLIC_CONSUME_MARKET_FIXED_SWAP_FEE || '0',
getEnv('NEXT_PUBLIC_CONSUME_MARKET_FIXED_SWAP_FEE') ||
process.env.NEXT_PUBLIC_CONSUME_MARKET_FIXED_SWAP_FEE ||
'0',

marketCommunityFee: process.env.NEXT_PUBLIC_MARKET_COMMUNITY_FEE || '0.3',
marketCommunityFee:
getEnv('NEXT_PUBLIC_MARKET_COMMUNITY_FEE') ||
process.env.NEXT_PUBLIC_MARKET_COMMUNITY_FEE ||
'0',

// Config for https://github.com/oceanprotocol/use-dark-mode
darkModeConfig: {
Expand All @@ -55,9 +82,18 @@ module.exports = {

// Used to show or hide the fixed, dynamic or free price options
// tab to publishers during the price creation.
allowFixedPricing: process.env.NEXT_PUBLIC_ALLOW_FIXED_PRICING || 'true',
allowDynamicPricing: process.env.NEXT_PUBLIC_ALLOW_DYNAMIC_PRICING || 'false',
allowFreePricing: process.env.NEXT_PUBLIC_ALLOW_FREE_PRICING || 'true',
allowFixedPricing:
getEnv('NEXT_PUBLIC_ALLOW_FIXED_PRICING') ||
process.env.NEXT_PUBLIC_ALLOW_FIXED_PRICING ||
'true',
allowDynamicPricing:
getEnv('NEXT_PUBLIC_ALLOW_DYNAMIC_PRICING') ||
process.env.NEXT_PUBLIC_ALLOW_DYNAMIC_PRICING ||
'false',
allowFreePricing:
getEnv('NEXT_PUBLIC_ALLOW_FREE_PRICING') ||
process.env.NEXT_PUBLIC_ALLOW_FREE_PRICING ||
'true',

// Set the default privacy policy to initially display
// this should be the slug of your default policy markdown file
Expand All @@ -69,50 +105,79 @@ module.exports = {
// is used to create and show a privacy preference center / cookie banner
// To learn more about how to configure and use this, please refer to the readme
privacyPreferenceCenter:
process.env.NEXT_PUBLIC_PRIVACY_PREFERENCE_CENTER || 'true',
getEnv('NEXT_PUBLIC_PRIVACY_PREFERENCE_CENTER') ||
process.env.NEXT_PUBLIC_PRIVACY_PREFERENCE_CENTER ||
'true',

// Default terms to be used for service offerings made on this marketplace
defaultAccessTerms:
'https://raw.githubusercontent.com/OceanProtocolEnterprise/market/main/content/pages/terms.md',

// Purgatory URI, leave as an empty string to disable the API call
purgatoryUrl: process.env.NEXT_PUBLIC_PURGATORY_URI || '',
purgatoryUrl:
getEnv('NEXT_PUBLIC_PURGATORY_URI') ||
process.env.NEXT_PUBLIC_PURGATORY_URI ||
'',

// The url used to fetch docker hub image info
dockerHubProxyUrl:
getEnv('NEXT_PUBLIC_DOCKER_HUB_PROXY_URL') ||
process.env.NEXT_PUBLIC_DOCKER_HUB_PROXY_URL ||
'https://dockerhub-proxy.oceanprotocol.com',

// Display alert banner for the developer preview deployment
showPreviewAlert: process.env.NEXT_PUBLIC_SHOW_PREVIEW_ALERT || 'false',
showPreviewAlert:
getEnv('NEXT_PUBLIC_SHOW_PREVIEW_ALERT') ||
process.env.NEXT_PUBLIC_SHOW_PREVIEW_ALERT ||
'false',

encryptAsset: process.env.NEXT_PUBLIC_ENCRYPT_ASSET
? process.env.NEXT_PUBLIC_ENCRYPT_ASSET === 'true'
: false,
encryptAsset:
getEnv('NEXT_PUBLIC_ENCRYPT_ASSET') || process.env.NEXT_PUBLIC_ENCRYPT_ASSET
? (getEnv('NEXT_PUBLIC_ENCRYPT_ASSET') ||
process.env.NEXT_PUBLIC_ENCRYPT_ASSET) === 'true'
: false,

// This enables / disables the ssi support
ssiEnabled: process.env.NEXT_PUBLIC_SSI_ENABLED
? process.env.NEXT_PUBLIC_SSI_ENABLED === 'true'
: false,
ssiEnabled:
getEnv('NEXT_PUBLIC_SSI_ENABLED') || process.env.NEXT_PUBLIC_SSI_ENABLED
? (getEnv('NEXT_PUBLIC_SSI_ENABLED') ||
process.env.NEXT_PUBLIC_SSI_ENABLED) === 'true'
: false,
ssiWalletApi:
process.env.NEXT_PUBLIC_SSI_WALLET_API || 'https://wallet.demo.walt.id',
getEnv('NEXT_PUBLIC_SSI_WALLET_API') ||
process.env.NEXT_PUBLIC_SSI_WALLET_API ||
'https://wallet.demo.oceanenterprise.io',
ssiDefaultPolicyUrl:
getEnv('NEXT_PUBLIC_SSI_DEFAULT_POLICIES_URL') ||
process.env.NEXT_PUBLIC_SSI_DEFAULT_POLICIES_URL ||
'https://raw.githubusercontent.com/OceanProtocolEnterprise/policy-server/refs/heads/main/default-verification-policies',

ipfsJWT: process.env.NEXT_PUBLIC_IPFS_JWT,
ipfsGateway: process.env.NEXT_PUBLIC_IPFS_GATEWAY,
ipfsUnpinFiles: process.env.NEXT_PUBLIC_IPFS_UNPIN_FILES
? process.env.NEXT_PUBLIC_IPFS_UNPIN_FILES === 'true'
: false,

opaServer: process.env.NEXT_PUBLIC_OPA_SERVER_URL,
ipfsJWT: getEnv('NEXT_PUBLIC_IPFS_JWT') || process.env.NEXT_PUBLIC_IPFS_JWT,
ipfsGateway:
getEnv('NEXT_PUBLIC_IPFS_GATEWAY') || process.env.NEXT_PUBLIC_IPFS_GATEWAY,
ipfsUnpinFiles:
getEnv('NEXT_PUBLIC_IPFS_UNPIN_FILES') ||
process.env.NEXT_PUBLIC_IPFS_UNPIN_FILES
? (getEnv('NEXT_PUBLIC_IPFS_UNPIN_FILES') ||
process.env.NEXT_PUBLIC_IPFS_UNPIN_FILES) === 'true'
: false,

opaServer:
getEnv('NEXT_PUBLIC_OPA_SERVER_URL') ||
process.env.NEXT_PUBLIC_OPA_SERVER_URL,
showOnboardingModuleByDefault:
process.env.NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT === 'false',
nodeUriIndex: process.env.NEXT_PUBLIC_NODE_URI_INDEXED
? JSON.parse(process.env.NEXT_PUBLIC_NODE_URI_INDEXED)
: [
process.env.NEXT_PUBLIC_PROVIDER_URL ||
'https://ocean-node-vm3.oceanenterprise.io'
]
(getEnv('NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT') ||
process.env.NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT) === 'false',
nodeUriIndex:
getEnv('NEXT_PUBLIC_NODE_URI_INDEXED') ||
process.env.NEXT_PUBLIC_NODE_URI_INDEXED
? JSON.parse(
getEnv('NEXT_PUBLIC_NODE_URI_INDEXED') ||
process.env.NEXT_PUBLIC_NODE_URI_INDEXED
)
: [
getEnv('NEXT_PUBLIC_PROVIDER_URL') ||
process.env.NEXT_PUBLIC_PROVIDER_URL ||
'https://ocean-node-vm3.oceanenterprise.io'
]
}
29 changes: 3 additions & 26 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,35 +1,12 @@
version: '3.8'
services:
ocean-market:
build:
context: .
dockerfile: Dockerfile
args:
NEXT_PUBLIC_ENCRYPT_ASSET: ${NEXT_PUBLIC_ENCRYPT_ASSET}
NEXT_PUBLIC_SSI_WALLET_API: ${NEXT_PUBLIC_SSI_WALLET_API}
NEXT_PUBLIC_METADATACACHE_URI: ${NEXT_PUBLIC_METADATACACHE_URI}
NEXT_PUBLIC_PROVIDER_URL: ${NEXT_PUBLIC_PROVIDER_URL}
NEXT_PUBLIC_IPFS_UNPIN_FILES: ${NEXT_PUBLIC_IPFS_UNPIN_FILES}
NEXT_PUBLIC_NODE_URI: ${NEXT_PUBLIC_NODE_URI}
NEXT_PUBLIC_IPFS_GATEWAY: ${NEXT_PUBLIC_IPFS_GATEWAY}
NEXT_PUBLIC_IPFS_JWT: ${NEXT_PUBLIC_IPFS_JWT}
NEXT_PUBLIC_SSI_POLICY_SERVER: ${NEXT_PUBLIC_SSI_POLICY_SERVER}
NEXT_PUBLIC_SSI_DEFAULT_POLICIES_URL: ${NEXT_PUBLIC_SSI_DEFAULT_POLICIES_URL}
NEXT_PUBLIC_OPA_SERVER_URL: ${NEXT_PUBLIC_OPA_SERVER_URL}
NEXT_PUBLIC_SSI_ENABLED: ${NEXT_PUBLIC_SSI_ENABLED}
NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT: ${NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT}
NEXT_PUBLIC_NODE_URI_INDEXED: ${NEXT_PUBLIC_NODE_URI_INDEXED}
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID: ${NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID}
NEXT_PUBLIC_INFURA_PROJECT_ID: ${NEXT_PUBLIC_INFURA_PROJECT_ID}
NEXT_PUBLIC_CONSUME_MARKET_FEE: ${NEXT_PUBLIC_CONSUME_MARKET_FEE}
NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE: ${NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE}
NEXT_PUBLIC_CREDENTIAL_VALIDITY_DURATION: ${NEXT_PUBLIC_CREDENTIAL_VALIDITY_DURATION}
NEXT_PUBLIC_NODE_URI_MAP: ${NEXT_PUBLIC_NODE_URI_MAP}
NEXT_PUBLIC_MARKET_FEE_ADDRESS: ${NEXT_PUBLIC_MARKET_FEE_ADDRESS}
NEXT_PUBLIC_ERC20_ADDRESSES: ${NEXT_PUBLIC_ERC20_ADDRESSES}
image: oceanenterprise/market:latest
container_name: ocean-market
ports:
- '8008:8008'
env_file:
- .env
environment:
NODE_ENV: production
restart: unless-stopped
51 changes: 51 additions & 0 deletions scripts/docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/bin/sh
set -eu

node - <<'NODE'
const fs = require('fs')

const config = {
NEXT_PUBLIC_ENCRYPT_ASSET: process.env.NEXT_PUBLIC_ENCRYPT_ASSET,
NEXT_PUBLIC_SSI_WALLET_API: process.env.NEXT_PUBLIC_SSI_WALLET_API,
NEXT_PUBLIC_METADATACACHE_URI: process.env.NEXT_PUBLIC_METADATACACHE_URI,
NEXT_PUBLIC_PROVIDER_URL: process.env.NEXT_PUBLIC_PROVIDER_URL,
NEXT_PUBLIC_IPFS_UNPIN_FILES: process.env.NEXT_PUBLIC_IPFS_UNPIN_FILES,
NEXT_PUBLIC_NODE_URI: process.env.NEXT_PUBLIC_NODE_URI,
NEXT_PUBLIC_IPFS_GATEWAY: process.env.NEXT_PUBLIC_IPFS_GATEWAY,
NEXT_PUBLIC_IPFS_JWT: process.env.NEXT_PUBLIC_IPFS_JWT,
NEXT_PUBLIC_SSI_POLICY_SERVER: process.env.NEXT_PUBLIC_SSI_POLICY_SERVER,
NEXT_PUBLIC_SSI_DEFAULT_POLICIES_URL:
process.env.NEXT_PUBLIC_SSI_DEFAULT_POLICIES_URL,
NEXT_PUBLIC_OPA_SERVER_URL: process.env.NEXT_PUBLIC_OPA_SERVER_URL,
NEXT_PUBLIC_SSI_ENABLED: process.env.NEXT_PUBLIC_SSI_ENABLED,
NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT:
process.env.NEXT_PUBLIC_SHOW_ONBOARDING_MODULE_BY_DEFAULT,
NEXT_PUBLIC_NODE_URI_INDEXED: process.env.NEXT_PUBLIC_NODE_URI_INDEXED,
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID:
process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID,
NEXT_PUBLIC_INFURA_PROJECT_ID: process.env.NEXT_PUBLIC_INFURA_PROJECT_ID,
NEXT_PUBLIC_CONSUME_MARKET_FEE: process.env.NEXT_PUBLIC_CONSUME_MARKET_FEE,
NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE:
process.env.NEXT_PUBLIC_CONSUME_MARKET_ORDER_FEE,
NEXT_PUBLIC_FIXED_RATE_EXCHANGE_ADDRESS:
process.env.NEXT_PUBLIC_FIXED_RATE_EXCHANGE_ADDRESS,
NEXT_PUBLIC_DISPENSER_ADDRESS: process.env.NEXT_PUBLIC_DISPENSER_ADDRESS,
NEXT_PUBLIC_NFT_FACTORY_ADDRESS: process.env.NEXT_PUBLIC_NFT_FACTORY_ADDRESS,
NEXT_PUBLIC_ROUTER_FACTORY_ADDRESS:
process.env.NEXT_PUBLIC_ROUTER_FACTORY_ADDRESS,
NEXT_PUBLIC_ACCESS_LIST_FACTORY_ADDRESS:
process.env.NEXT_PUBLIC_ACCESS_LIST_FACTORY_ADDRESS,
NEXT_PUBLIC_CREDENTIAL_VALIDITY_DURATION:
process.env.NEXT_PUBLIC_CREDENTIAL_VALIDITY_DURATION,
NEXT_PUBLIC_NODE_URI_MAP: process.env.NEXT_PUBLIC_NODE_URI_MAP,
NEXT_PUBLIC_MARKET_FEE_ADDRESS: process.env.NEXT_PUBLIC_MARKET_FEE_ADDRESS,
NEXT_PUBLIC_ERC20_ADDRESSES: process.env.NEXT_PUBLIC_ERC20_ADDRESSES
}

fs.writeFileSync(
'/app/public/runtime-config.js',
`window.__RUNTIME_CONFIG__ = ${JSON.stringify(config)};\n`
)
NODE

exec "$@"
3 changes: 3 additions & 0 deletions scripts/pregenerate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,6 @@ node ./scripts/write-repo-metadata.cjs > content/repo-metadata.json

# Fetch EVM networks metadata
node ./scripts/write-networks-metadata.cjs > content/networks-metadata.json

# Write runtime config for local dev/start
node ./scripts/write-runtime-config.cjs
Loading