FROM node:20-alpine WORKDIR /app # Install @subql/node with @polkadot aliased to @pezkuwi RUN npm init -y && \ npm install @subql/node \ @polkadot/api@npm:@pezkuwi/api@^16.5.36 \ @polkadot/api-augment@npm:@pezkuwi/api-augment@^16.5.36 \ @polkadot/api-derive@npm:@pezkuwi/api-derive@^16.5.36 \ @polkadot/types@npm:@pezkuwi/types@^16.5.36 \ @polkadot/types-augment@npm:@pezkuwi/types-augment@^16.5.36 \ @polkadot/types-codec@npm:@pezkuwi/types-codec@^16.5.36 \ @polkadot/types-create@npm:@pezkuwi/types-create@^16.5.36 \ @polkadot/types-known@npm:@pezkuwi/types-known@^16.5.36 \ @polkadot/rpc-core@npm:@pezkuwi/rpc-core@^16.5.36 \ @polkadot/rpc-provider@npm:@pezkuwi/rpc-provider@^16.5.36 \ @polkadot/rpc-augment@npm:@pezkuwi/rpc-augment@^16.5.36 \ @polkadot/util@npm:@pezkuwi/util@^14.0.25 \ @polkadot/util-crypto@npm:@pezkuwi/util-crypto@^14.0.25 \ @polkadot/keyring@npm:@pezkuwi/keyring@^14.0.25 \ @polkadot/networks@npm:@pezkuwi/networks@^14.0.25 \ @polkadot/wasm-crypto@npm:@pezkuwi/wasm-crypto@^7.5.18 \ @polkadot/wasm-crypto-wasm@npm:@pezkuwi/wasm-crypto-wasm@^7.5.17 \ @polkadot/wasm-util@npm:@pezkuwi/wasm-util@^7.5.17 \ @polkadot/wasm-bridge@npm:@pezkuwi/wasm-bridge@^7.5.17 \ @polkadot/wasm-crypto-asmjs@npm:@pezkuwi/wasm-crypto-asmjs@^7.5.17 \ @polkadot/wasm-crypto-init@npm:@pezkuwi/wasm-crypto-init@^7.5.17 # @subql/node requires '@polkadot/api-augment/substrate' but @pezkuwi uses # chain-specific paths (./pezkuwi, ./bizinikiwi). Patch the exports map in # package.json to add ./substrate pointing to pezkuwi augmentation. RUN node -e " \ const fs = require('fs'); \ const p = '/app/node_modules/@polkadot/api-augment/package.json'; \ const pkg = JSON.parse(fs.readFileSync(p, 'utf8')); \ pkg.exports['./substrate'] = { \ require: './cjs/pezkuwi/index.js', \ default: './pezkuwi/index.js' \ }; \ fs.writeFileSync(p, JSON.stringify(pkg, null, 2)); \ " # Patch: handle pruned blockchain state gracefully. # Without this, SubQuery crashes when RPC nodes have pruned old block state. COPY docker/patches/pruned-state-fallback.js /tmp/pruned-state-fallback.js RUN node /tmp/pruned-state-fallback.js && rm /tmp/pruned-state-fallback.js ENTRYPOINT ["/app/node_modules/.bin/subql-node"]