Skip to content

Commit 0a11979

Browse files
committed
feat: fetch wrapper for interactions and contract definition loaders
1 parent 5fc79b1 commit 0a11979

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/core/modules/impl/WarpGatewayContractDefinitionLoader.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { Warp, WarpEnvironment } from '../../Warp';
1212
import { TagsParser } from './TagsParser';
1313
import { Transaction } from '../../../utils/types/arweave-types';
1414
import { getJsonResponse, stripTrailingSlash } from '../../../utils/utils';
15+
import { WarpFetchWrapper } from '../../../core/WarpFetchWrapper';
1516

1617
/**
1718
* Makes use of Warp Gateway ({@link https://github.com/redstone-finance/redstone-sw-gateway})
@@ -26,6 +27,7 @@ export class WarpGatewayContractDefinitionLoader implements DefinitionLoader {
2627
private arweaveWrapper: ArweaveWrapper;
2728
private readonly tagsParser: TagsParser;
2829
private _warp: Warp;
30+
private _warpFetchWrapper: WarpFetchWrapper;
2931

3032
constructor(arweave: Arweave, env: WarpEnvironment) {
3133
this.contractDefinitionLoader = new ArweaveContractDefinitionLoader(arweave, env);
@@ -36,7 +38,9 @@ export class WarpGatewayContractDefinitionLoader implements DefinitionLoader {
3638
try {
3739
const baseUrl = stripTrailingSlash(this._warp.gwUrl());
3840
const result: ContractDefinition<State> = await getJsonResponse(
39-
fetch(`${baseUrl}/gateway/contract?txId=${contractTxId}${evolvedSrcTxId ? `&srcTxId=${evolvedSrcTxId}` : ''}`)
41+
this._warpFetchWrapper.fetch(
42+
`${baseUrl}/gateway/contract?txId=${contractTxId}${evolvedSrcTxId ? `&srcTxId=${evolvedSrcTxId}` : ''}`
43+
)
4044
);
4145

4246
if (result.srcBinary != null && !(result.srcBinary instanceof Buffer)) {
@@ -75,5 +79,6 @@ export class WarpGatewayContractDefinitionLoader implements DefinitionLoader {
7579
this._warp = warp;
7680
this.arweaveWrapper = new ArweaveWrapper(warp);
7781
this.contractDefinitionLoader.warp = warp;
82+
this._warpFetchWrapper = new WarpFetchWrapper(warp);
7883
}
7984
}

src/core/modules/impl/WarpGatewayInteractionsLoader.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { GW_TYPE, InteractionsLoader } from '../InteractionsLoader';
77
import { EvaluationOptions } from '../StateEvaluator';
88
import { Warp } from '../../Warp';
99
import { AbortError } from './HandlerExecutorFactory';
10+
import { WarpFetchWrapper } from '../../../core/WarpFetchWrapper';
1011

1112
export type ConfirmationStatus =
1213
| {
@@ -51,6 +52,7 @@ type InteractionsResult = {
5152
*/
5253
export class WarpGatewayInteractionsLoader implements InteractionsLoader {
5354
private _warp: Warp;
55+
private _warpFetchWrapper: WarpFetchWrapper;
5456

5557
constructor(
5658
private readonly confirmationStatus: ConfirmationStatus = null,
@@ -93,7 +95,7 @@ export class WarpGatewayInteractionsLoader implements InteractionsLoader {
9395

9496
page++;
9597
const response = await getJsonResponse<InteractionsResult>(
96-
fetch(
98+
this._warpFetchWrapper.fetch(
9799
`${url}?${new URLSearchParams({
98100
contractId: contractId,
99101
...(this._warp.whoAmI ? { client: this._warp.whoAmI } : ''),
@@ -140,5 +142,6 @@ export class WarpGatewayInteractionsLoader implements InteractionsLoader {
140142

141143
set warp(warp: Warp) {
142144
this._warp = warp;
145+
this._warpFetchWrapper = new WarpFetchWrapper(warp);
143146
}
144147
}

tools/fetch-options-plugin.ts

+19-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import fs from 'fs';
55
import path from 'path';
66
import { LoggerFactory } from '../src/logging/LoggerFactory';
77
import { defaultCacheOptions, WarpFactory } from '../src/core/WarpFactory';
8+
import { DeployPlugin } from 'warp-contracts-plugin-deploy';
9+
import { ArweaveSigner } from 'warp-arbundles';
810

911
class FetchOptionsPlugin implements WarpPlugin<FetchRequest, RequestInit> {
1012
process(request: FetchRequest): Partial<RequestInit> {
@@ -18,6 +20,17 @@ class FetchOptionsPlugin implements WarpPlugin<FetchRequest, RequestInit> {
1820
};
1921
}
2022

23+
if (
24+
url ==
25+
'https://gw.warp.cc/gateway/v3/interactions-sort-key?contractId=nf5TUVkzyZBGtl0NmVXZvheC3EN5d4XA-5ewpGgaYRo&fromSdk=true&confirmationStatus=not_corrupted'
26+
) {
27+
fetchOptions = {
28+
headers: {
29+
'x-api-key': 'test'
30+
}
31+
};
32+
}
33+
2134
return fetchOptions;
2235
}
2336

@@ -32,18 +45,20 @@ async function main() {
3245
const logger = LoggerFactory.INST.create('FetchOptionsPlugin');
3346

3447
try {
35-
const warp = WarpFactory.forMainnet({ ...defaultCacheOptions, inMemory: true }).use(new FetchOptionsPlugin());
48+
const warp = WarpFactory.forMainnet({ ...defaultCacheOptions, inMemory: true })
49+
.use(new DeployPlugin())
50+
.use(new FetchOptionsPlugin());
3651

3752
const jsContractSrc = fs.readFileSync(path.join(__dirname, 'data/js/token-pst.js'), 'utf8');
3853
const initialState = fs.readFileSync(path.join(__dirname, 'data/js/token-pst.json'), 'utf8');
3954

40-
const { contractTxId } = await warp.createContract.deploy({
41-
wallet,
55+
const { contractTxId } = await warp.deploy({
56+
wallet: new ArweaveSigner(wallet),
4257
initState: initialState,
4358
src: jsContractSrc
4459
});
4560

46-
const contract = warp.contract(contractTxId).connect(wallet);
61+
const contract = warp.contract(contractTxId).connect(new ArweaveSigner(wallet));
4762

4863
await contract.writeInteraction({
4964
function: 'transfer',

0 commit comments

Comments
 (0)