Skip to content

Commit b0d88c3

Browse files
Mo-Hussainclaude
andauthored
feat(http-client): implement warp route write methods (#1368)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 48efab6 commit b0d88c3

File tree

11 files changed

+66
-61
lines changed

11 files changed

+66
-61
lines changed

.changeset/http-registry-writes.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@hyperlane-xyz/registry': minor
3+
---
4+
5+
Added write support for HttpClientRegistry with new methods: addWarpRoute(), addWarpRouteConfig(), and getWarpDeployConfigs(). Exported WarpRouteIdSchema with regex validation and WarpDeployConfigMap type for HTTP server integration.

src/fs/FileSystemRegistry.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,16 @@ import {
1717
WARP_ROUTE_CONFIG_FILE_REGEX,
1818
WARP_ROUTE_DEPLOY_FILE_REGEX,
1919
} from '../consts.js';
20-
import { ChainAddresses, ChainAddressesSchema, UpdateChainParams, WarpRouteId } from '../types.js';
20+
import {
21+
AddWarpRouteConfigOptions,
22+
ChainAddresses,
23+
ChainAddressesSchema,
24+
UpdateChainParams,
25+
WarpRouteId,
26+
} from '../types.js';
2127
import { toYamlString } from '../utils.js';
2228

2329
import {
24-
AddWarpRouteConfigOptions,
2530
RegistryType,
2631
type ChainFiles,
2732
type IRegistry,

src/index.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,7 @@ export {
55
} from './consts.js';
66
export { BaseRegistry } from './registry/BaseRegistry.js';
77
export { GithubRegistry, GithubRegistryOptions } from './registry/GithubRegistry.js';
8-
export {
9-
AddWarpRouteConfigOptions,
10-
ChainFiles,
11-
IRegistry,
12-
RegistryContent,
13-
RegistryType,
14-
} from './registry/IRegistry.js';
8+
export { ChainFiles, IRegistry, RegistryContent, RegistryType } from './registry/IRegistry.js';
159
export { MergedRegistry, MergedRegistryOptions } from './registry/MergedRegistry.js';
1610
export { PartialRegistry, PartialRegistryOptions } from './registry/PartialRegistry.js';
1711
export { HttpClientRegistry } from './registry/HttpClientRegistry.js';
@@ -22,9 +16,13 @@ export {
2216
createWarpRouteConfigId,
2317
} from './registry/warp-utils.js';
2418
export {
19+
AddWarpRouteConfigOptions,
20+
AddWarpRouteConfigOptionsSchema,
2521
ChainAddresses,
2622
ChainAddressesSchema,
23+
WarpDeployConfigMap,
2724
WarpRouteId,
25+
WarpRouteIdSchema,
2826
WarpRouteConfigMap,
2927
WarpRouteFilterParams,
3028
WarpRouteFilterSchema,

src/registry/BaseRegistry.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
import { assert, objFilter, objLength } from '@hyperlane-xyz/utils';
1212
import { WARP_ROUTE_ID_REGEX } from '../consts.js';
1313
import type {
14+
AddWarpRouteConfigOptions,
1415
ChainAddresses,
1516
MaybePromise,
1617
UpdateChainParams,
@@ -20,12 +21,7 @@ import type {
2021
} from '../types.js';
2122
import { WarpRouteConfigMap } from '../types.js';
2223
import { stripLeadingSlash } from '../utils.js';
23-
import type {
24-
AddWarpRouteConfigOptions,
25-
IRegistry,
26-
RegistryContent,
27-
RegistryType,
28-
} from './IRegistry.js';
24+
import type { IRegistry, RegistryContent, RegistryType } from './IRegistry.js';
2925
import { MergedRegistry } from './MergedRegistry.js';
3026
import { createWarpRouteConfigId } from './warp-utils.js';
3127

src/registry/GithubRegistry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
WARP_ROUTE_DEPLOY_FILE_REGEX,
1919
} from '../consts.js';
2020
import {
21+
AddWarpRouteConfigOptions,
2122
ChainAddresses,
2223
UpdateChainParams,
2324
WarpDeployConfigMap,
@@ -28,7 +29,6 @@ import {
2829
import { concurrentMap, parseGitHubPath, stripLeadingSlash } from '../utils.js';
2930
import { BaseRegistry } from './BaseRegistry.js';
3031
import {
31-
AddWarpRouteConfigOptions,
3232
ChainFiles,
3333
IRegistry,
3434
IRegistryMethods,

src/registry/HttpClientRegistry.ts

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ import {
66
WarpRouteDeployConfig,
77
} from '@hyperlane-xyz/sdk';
88
import {
9+
AddWarpRouteConfigOptions,
910
ChainAddresses,
1011
MaybePromise,
1112
UpdateChainParams,
1213
WarpDeployConfigMap,
1314
WarpRouteConfigMap,
1415
WarpRouteFilterParams,
1516
} from '../types.js';
16-
import {
17-
IRegistry,
18-
RegistryContent,
19-
RegistryType,
20-
AddWarpRouteConfigOptions,
21-
IRegistryMethods,
22-
} from './IRegistry.js';
17+
import { IRegistry, IRegistryMethods, RegistryContent, RegistryType } from './IRegistry.js';
2318

2419
export class HttpError extends Error {
2520
public status: number;
@@ -43,10 +38,6 @@ export class HttpClientRegistry implements IRegistry {
4338
'getChainLogoUri',
4439
'addChain',
4540
'removeChain',
46-
'addWarpRoute',
47-
'getWarpDeployConfig',
48-
'getWarpDeployConfigs',
49-
'addWarpRouteConfig',
5041
'merge',
5142
]);
5243

@@ -137,23 +128,36 @@ export class HttpClientRegistry implements IRegistry {
137128
return this.fetchJson<WarpRouteConfigMap>(`/warp-route/core?${queryParams.toString()}`);
138129
}
139130

140-
addWarpRoute(_config: WarpCoreConfig): MaybePromise<void> {
141-
throw new Error('Method not implemented.');
131+
async addWarpRoute(config: WarpCoreConfig, options?: AddWarpRouteConfigOptions): Promise<void> {
132+
await this.fetchJson<void>('/warp-route', {
133+
method: 'POST',
134+
body: JSON.stringify({ config, options }),
135+
});
142136
}
143137

144138
getWarpDeployConfig(routeId: string): MaybePromise<WarpRouteDeployConfig | null> {
145139
return this.fetchJson<WarpRouteDeployConfig | null>(`/warp-route/deploy/${routeId}`);
146140
}
147141

148-
getWarpDeployConfigs(): MaybePromise<WarpDeployConfigMap> {
149-
throw new Error('Method not implemented.');
142+
getWarpDeployConfigs(filter?: WarpRouteFilterParams): MaybePromise<WarpDeployConfigMap> {
143+
const queryParams = new URLSearchParams();
144+
if (filter?.symbol) {
145+
queryParams.set('symbol', filter.symbol);
146+
}
147+
if (filter?.label) {
148+
queryParams.set('label', filter.label);
149+
}
150+
return this.fetchJson<WarpDeployConfigMap>(`/warp-route/deploy?${queryParams.toString()}`);
150151
}
151152

152-
addWarpRouteConfig(
153-
_config: WarpRouteDeployConfig,
154-
_options: AddWarpRouteConfigOptions,
155-
): MaybePromise<void> {
156-
throw new Error('Method not implemented.');
153+
async addWarpRouteConfig(
154+
config: WarpRouteDeployConfig,
155+
options: AddWarpRouteConfigOptions,
156+
): Promise<void> {
157+
await this.fetchJson<void>('/warp-route/deploy', {
158+
method: 'POST',
159+
body: JSON.stringify({ config, options }),
160+
});
157161
}
158162

159163
merge(_otherRegistry: IRegistry): IRegistry {

src/registry/IRegistry.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
WarpRouteDeployConfig,
77
} from '@hyperlane-xyz/sdk';
88
import {
9+
AddWarpRouteConfigOptions,
910
ChainAddresses,
1011
MaybePromise,
1112
WarpDeployConfigMap,
@@ -52,14 +53,6 @@ export enum RegistryType {
5253
Http = 'http',
5354
}
5455

55-
export type AddWarpRouteConfigOptions =
56-
| {
57-
symbol: string;
58-
}
59-
| {
60-
warpRouteId: WarpRouteId;
61-
};
62-
6356
export interface IRegistry {
6457
type: RegistryType;
6558
uri: string;

src/registry/MergedRegistry.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type {
88
WarpRouteDeployConfig,
99
} from '@hyperlane-xyz/sdk';
1010
import {
11+
AddWarpRouteConfigOptions,
1112
ChainAddresses,
1213
UpdateChainParams,
1314
WarpDeployConfigMap,
@@ -16,13 +17,7 @@ import {
1617
WarpRouteId,
1718
} from '../types.js';
1819
import { objMerge } from '../utils.js';
19-
import {
20-
AddWarpRouteConfigOptions,
21-
IRegistry,
22-
IRegistryMethods,
23-
RegistryContent,
24-
RegistryType,
25-
} from './IRegistry.js';
20+
import { IRegistry, IRegistryMethods, RegistryContent, RegistryType } from './IRegistry.js';
2621

2722
export interface MergedRegistryOptions {
2823
registries: Array<IRegistry>;

src/registry/PartialRegistry.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,8 @@ import type {
77
WarpCoreConfig,
88
WarpRouteDeployConfig,
99
} from '@hyperlane-xyz/sdk';
10-
import { ChainAddresses, DeepPartial, WarpRouteId } from '../types.js';
11-
import {
12-
AddWarpRouteConfigOptions,
13-
ChainFiles,
14-
IRegistry,
15-
RegistryContent,
16-
RegistryType,
17-
} from './IRegistry.js';
10+
import { AddWarpRouteConfigOptions, ChainAddresses, DeepPartial, WarpRouteId } from '../types.js';
11+
import { ChainFiles, IRegistry, RegistryContent, RegistryType } from './IRegistry.js';
1812
import { SynchronousRegistry } from './SynchronousRegistry.js';
1913
import { BaseRegistry } from './BaseRegistry.js';
2014
const PARTIAL_URI_PLACEHOLDER = '__partial_registry__';

src/registry/SynchronousRegistry.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
} from '@hyperlane-xyz/sdk';
88

99
import {
10+
AddWarpRouteConfigOptions,
1011
ChainAddresses,
1112
UpdateChainParams,
1213
WarpDeployConfigMap,
@@ -15,7 +16,7 @@ import {
1516
WarpRouteId,
1617
} from '../types.js';
1718
import { BaseRegistry } from './BaseRegistry.js';
18-
import { AddWarpRouteConfigOptions, IRegistry, RegistryContent } from './IRegistry.js';
19+
import { IRegistry, RegistryContent } from './IRegistry.js';
1920
import { filterWarpRoutesIds } from './warp-utils.js';
2021

2122
/**

0 commit comments

Comments
 (0)