diff --git a/src/provider/rpc.ts b/src/provider/rpc.ts index 69ff2c062..78ab43c4b 100644 --- a/src/provider/rpc.ts +++ b/src/provider/rpc.ts @@ -38,6 +38,7 @@ import { Block, BlockIdentifier } from './utils'; export type RpcProviderOptions = { nodeUrl: string; retries?: number; + headers?: object; }; export class RpcProvider implements ProviderInterface { @@ -46,14 +47,17 @@ export class RpcProvider implements ProviderInterface { // from interface public chainId!: StarknetChainId; + public headers: object; + private responseParser = new RPCResponseParser(); private retries: number; constructor(optionsOrProvider: RpcProviderOptions) { - const { nodeUrl, retries } = optionsOrProvider; + const { nodeUrl, retries, headers } = optionsOrProvider; this.nodeUrl = nodeUrl; this.retries = retries || 200; + this.headers = { 'Content-Type': 'application/json', ...headers }; this.getChainId().then((chainId) => { this.chainId = chainId; @@ -64,7 +68,7 @@ export class RpcProvider implements ProviderInterface { return fetch(this.nodeUrl, { method: 'POST', body: stringify({ method, jsonrpc: '2.0', params, id: 0 }), - headers: { 'Content-Type': 'application/json' }, + headers: this.headers, }); } diff --git a/src/provider/sequencer.ts b/src/provider/sequencer.ts index 1615895bb..357a69f2e 100644 --- a/src/provider/sequencer.ts +++ b/src/provider/sequencer.ts @@ -62,6 +62,7 @@ export type SequencerProviderOptions = feederGatewayUrl?: string; gatewayUrl?: string; chainId?: StarknetChainId; + headers?: object; }; export class SequencerProvider implements ProviderInterface { @@ -73,6 +74,8 @@ export class SequencerProvider implements ProviderInterface { public chainId: StarknetChainId; + public headers: object | undefined; + private responseParser = new SequencerAPIResponseParser(); constructor(optionsOrProvider: SequencerProviderOptions = { network: 'goerli-alpha' }) { @@ -93,6 +96,8 @@ export class SequencerProvider implements ProviderInterface { this.chainId = optionsOrProvider.chainId ?? SequencerProvider.getChainIdFromBaseUrl(optionsOrProvider.baseUrl); + + this.headers = optionsOrProvider?.headers; } } @@ -153,13 +158,14 @@ export class SequencerProvider implements ProviderInterface { return `?${queryString}`; } - private getHeaders(method: 'POST' | 'GET'): Record | undefined { + private getHeaders(method: 'POST' | 'GET'): object | undefined { if (method === 'POST') { return { 'Content-Type': 'application/json', + ...this.headers, }; } - return undefined; + return this.headers; } // typesafe fetch