Skip to content

Commit

Permalink
fix: removeread only and add private field to prevent run time assign…
Browse files Browse the repository at this point in the history
…ment
  • Loading branch information
asimm241 authored and reedrosenbluth committed Jul 26, 2021
1 parent 5d8cf6d commit 62709aa
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 20 deletions.
19 changes: 12 additions & 7 deletions packages/network/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ export const HIRO_MAINNET_DEFAULT = 'https://stacks-node-api.mainnet.stacks.co';
export const HIRO_TESTNET_DEFAULT = 'https://stacks-node-api.testnet.stacks.co';
export const HIRO_MOCKNET_DEFAULT = 'http://localhost:3999';

export interface NetworkUrl {
export interface NetworkConfig {
url: string;
}

export interface StacksNetwork {
version: TransactionVersion;
chainId: ChainID;
readonly coreApiUrl: string;
bnsLookupUrl: string;
broadcastEndpoint: string;
transferFeeEstimateEndpoint: string;
Expand Down Expand Up @@ -47,18 +46,24 @@ export interface StacksNetwork {
export class StacksMainnet implements StacksNetwork {
version = TransactionVersion.Mainnet;
chainId = ChainID.Mainnet;
readonly coreApiUrl;
bnsLookupUrl = 'https://stacks-node-api.mainnet.stacks.co';
broadcastEndpoint = '/v2/transactions';
transferFeeEstimateEndpoint = '/v2/fees/transfer';
accountEndpoint = '/v2/accounts';
contractAbiEndpoint = '/v2/contracts/interface';
readOnlyFunctionCallEndpoint = '/v2/contracts/call-read';
private _coreApiUrl: string;

constructor(networkUrl: NetworkUrl = { url: HIRO_MAINNET_DEFAULT }) {
this.coreApiUrl = networkUrl.url;
get coreApiUrl() {
return this._coreApiUrl;
}
set coreApiUrl(_url: string) {
throw new Error('Cannot modify property `coreApiUrl` after object initialization');
}

constructor(networkUrl: NetworkConfig = { url: HIRO_MAINNET_DEFAULT }) {
this._coreApiUrl = networkUrl.url;
}
isMainnet = () => this.version === TransactionVersion.Mainnet;
getBroadcastApiUrl = () => `${this.coreApiUrl}${this.broadcastEndpoint}`;
getTransferFeeEstimateApiUrl = () => `${this.coreApiUrl}${this.transferFeeEstimateEndpoint}`;
Expand Down Expand Up @@ -112,7 +117,7 @@ export class StacksTestnet extends StacksMainnet implements StacksNetwork {
version = TransactionVersion.Testnet;
chainId = ChainID.Testnet;

constructor(networkUrl: NetworkUrl = { url: HIRO_TESTNET_DEFAULT }) {
constructor(networkUrl: NetworkConfig = { url: HIRO_TESTNET_DEFAULT }) {
super(networkUrl);
}
}
Expand All @@ -121,7 +126,7 @@ export class StacksMocknet extends StacksMainnet implements StacksNetwork {
version = TransactionVersion.Testnet;
chainId = ChainID.Testnet;

constructor(networkUrl: NetworkUrl = { url: HIRO_MOCKNET_DEFAULT }) {
constructor(networkUrl: NetworkConfig = { url: HIRO_MOCKNET_DEFAULT }) {
super(networkUrl);
}
}
Expand Down
37 changes: 24 additions & 13 deletions packages/network/tests/network.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,28 @@ import {
StacksTestnet,
} from '@stacks/network';

test('network test-- coreApiUrl', () => {
const mainnet = new StacksMainnet();
expect(mainnet.coreApiUrl).toBe(HIRO_MAINNET_DEFAULT);

const testnet = new StacksTestnet();
expect(testnet.coreApiUrl).toBe(HIRO_TESTNET_DEFAULT);

const mocknet = new StacksMocknet();
expect(mocknet.coreApiUrl).toBe(HIRO_MOCKNET_DEFAULT);

const customURL = 'customeURL';
const customNET = new StacksMainnet({ url: customURL });
expect(customNET.coreApiUrl).toBe(customURL);
describe('Setting coreApiUrl', () => {
test('it sets mainnet default url', () => {
const mainnet = new StacksMainnet();
expect(mainnet.coreApiUrl).toEqual(HIRO_MAINNET_DEFAULT);
});
test('it sets testnet url', () => {
const testnet = new StacksTestnet();
expect(testnet.coreApiUrl).toEqual(HIRO_TESTNET_DEFAULT);
});
test('it sets mocknet url', () => {
const mocknet = new StacksMocknet();
expect(mocknet.coreApiUrl).toEqual(HIRO_MOCKNET_DEFAULT);
});
test('it sets custom url', () => {
const customURL = 'https://customurl.com';
const customNET = new StacksMainnet({ url: customURL });
expect(customNET.coreApiUrl).toEqual(customURL);
});
test('it prevents changing url after initialisation', () => {
const network = new StacksMainnet({ url: 'https://legiturl.com' });
// @ts-ignore
expect(() => (network.coreApiUrl = 'https://dodgyurl.com')).toThrowError();
expect(network.coreApiUrl).toEqual('https://legiturl.com');
});
});

0 comments on commit 62709aa

Please sign in to comment.