71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { WarpPlugin, WarpPluginType } from '../src/core/WarpPlugin';
|
|
import { FetchRequest } from '../src/core/WarpFetchWrapper';
|
|
import { JWKInterface } from 'arweave/node/lib/wallet';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { LoggerFactory } from '../src/logging/LoggerFactory';
|
|
import { defaultCacheOptions, WarpFactory } from '../src/core/WarpFactory';
|
|
|
|
class FetchOptionsPlugin implements WarpPlugin<FetchRequest, RequestInit> {
|
|
process(request: FetchRequest): Partial<RequestInit> {
|
|
const url = request.input;
|
|
|
|
let fetchOptions: Partial<RequestInit> = {};
|
|
|
|
if (url == `https://d1o5nlqr4okus2.cloudfront.net/gateway/sequencer/register`) {
|
|
fetchOptions = {
|
|
keepalive: true
|
|
};
|
|
}
|
|
|
|
return fetchOptions;
|
|
}
|
|
|
|
type(): WarpPluginType {
|
|
return 'fetch-options';
|
|
}
|
|
}
|
|
|
|
async function main() {
|
|
const wallet: JWKInterface = readJSON('./.secrets/jwk.json');
|
|
LoggerFactory.INST.logLevel('debug');
|
|
const logger = LoggerFactory.INST.create('FetchOptionsPlugin');
|
|
|
|
try {
|
|
const warp = WarpFactory.forMainnet({ ...defaultCacheOptions, inMemory: true }).use(new FetchOptionsPlugin());
|
|
|
|
const jsContractSrc = fs.readFileSync(path.join(__dirname, 'data/js/token-pst.js'), 'utf8');
|
|
const initialState = fs.readFileSync(path.join(__dirname, 'data/js/token-pst.json'), 'utf8');
|
|
|
|
const { contractTxId } = await warp.createContract.deploy({
|
|
wallet,
|
|
initState: initialState,
|
|
src: jsContractSrc
|
|
});
|
|
|
|
const contract = warp.contract(contractTxId).connect(wallet);
|
|
|
|
await contract.writeInteraction({
|
|
function: 'transfer',
|
|
target: 'uhE-QeYS8i4pmUtnxQyHD7dzXFNaJ9oMK-IM-QPNY6M',
|
|
qty: 55555
|
|
});
|
|
|
|
const { cachedValue } = await contract.readState();
|
|
logger.info(`Cached value: ${cachedValue}`);
|
|
} catch (e) {
|
|
logger.error(e);
|
|
}
|
|
}
|
|
|
|
export function readJSON(path: string): JWKInterface {
|
|
const content = fs.readFileSync(path, 'utf-8');
|
|
try {
|
|
return JSON.parse(content);
|
|
} catch (e) {
|
|
throw new Error(`File "${path}" does not contain a valid JSON`);
|
|
}
|
|
}
|
|
|
|
main().catch((e) => console.error(e));
|