replace URI for native URL - #1402
Conversation
There was a problem hiding this comment.
Pull request overview
This PR removes the urijs dependency and migrates Horizon/RPC/Federation URL handling to native URL/URLSearchParams, adding/adjusting unit tests to validate the new URL construction and template expansion behavior.
Changes:
- Replace
URI.jsusage across Horizon call builders, Horizon server helpers, RPC server, and Federation server with nativeURL. - Introduce a URL template expansion helper (
expandUriTemplate) and wire it intoCallBuilderfor templated HAL links. - Update and expand unit tests to reflect native URL normalization/encoding behavior and stricter URL matching.
Reviewed changes
Copilot reviewed 31 out of 32 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| test/unit/utils/url.test.ts | Adds tests for native URL behavior and expandUriTemplate. |
| test/unit/server/soroban/get_ledgers.test.ts | Updates test URL to reflect native default-port normalization. |
| test/unit/server/horizon/server.test.ts | Removes debug logging and updates wording (“URI” → “URL”). |
| test/unit/horizon_path.test.ts | Tightens URL assertions and adds coverage for operations endpoint pathing. |
| test/unit/federation_server.test.ts | Updates expectations for native query encoding and URL property access. |
| test/unit/call_builders.test.ts | Updates CallBuilder tests for native URL cloning/pathing and templated link expansion. |
| src/utils/url.ts | Adds expandUriTemplate helper for Horizon-style templated links. |
| src/rpc/server.ts | Migrates RPC server URL storage/validation to native URL. |
| src/horizon/transaction_call_builder.ts | Migrates to URL and searchParams, updates cloning and pathing. |
| src/horizon/trades_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/trade_aggregation_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/strict_send_path_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/strict_receive_path_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/server.ts | Migrates server URL storage and submit URL construction to native URL. |
| src/horizon/payment_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/path_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/orderbook_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/operation_call_builder.ts | Migrates to URL and searchParams, updates cloning and pathing. |
| src/horizon/offer_call_builder.ts | Migrates to URL and searchParams, updates cloning and pathing. |
| src/horizon/liquidity_pool_call_builder.ts | Migrates to URL and searchParams, updates cloning and pathing. |
| src/horizon/ledger_call_builder.ts | Migrates to URL, updates endpoint pathing. |
| src/horizon/horizon_axios_client.ts | Migrates response URL parsing for server-time cache keying to native URL. |
| src/horizon/friendbot_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/effect_call_builder.ts | Migrates to URL, updates endpoint pathing. |
| src/horizon/claimable_balances_call_builder.ts | Migrates to URL and searchParams, updates cloning and pathing. |
| src/horizon/call_builder.ts | Core migration to native URL, adds setPath, replaces templated link expansion plumbing. |
| src/horizon/assets_call_builder.ts | Migrates to URL and searchParams, updates endpoint pathing. |
| src/horizon/account_call_builder.ts | Migrates to URL and searchParams, updates cloning and pathing. |
| src/federation/server.ts | Migrates FederationServer URL handling and query construction to native URL. |
| pnpm-lock.yaml | Removes urijs and @types/urijs from lockfile. |
| package.json | Removes urijs and @types/urijs dependencies. |
| config/vitest.config.browser.ts | Removes urijs pre-bundling entries from Vite optimizeDeps config. |
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| constructor( | ||
| serverUrl: URI, | ||
| serverUrl: URL, | ||
| httpClient: HttpClient, | ||
| neighborRoot: string = "", | ||
| ) { | ||
| this.url = serverUrl.clone(); | ||
| this.url = new URL(serverUrl); |
There was a problem hiding this comment.
CallBuilder's public docs above still describe serverUrl as a string, but the constructor now takes a URL. Please update the JSDoc near the constructor/param description so generated docs and IDE hints match the actual API.
There was a problem hiding this comment.
Should we keep serverUrl as string?
There was a problem hiding this comment.
Hm the docs have been wrong the type was URI before I am unsure of what implications would result from switching. Currently in favor of just keeping as is.
There was a problem hiding this comment.
Ahh, I see. Let's make it URL then.
| constructor( | ||
| serverUrl: URI, | ||
| serverUrl: URL, | ||
| httpClient: HttpClient, | ||
| neighborRoot: string = "", | ||
| ) { | ||
| this.url = serverUrl.clone(); | ||
| this.url = new URL(serverUrl); |
There was a problem hiding this comment.
Should we keep serverUrl as string?
|
|
||
| constructor( | ||
| serverUrl: URI, | ||
| serverUrl: URL, |
There was a problem hiding this comment.
| serverUrl: URL, | |
| serverUrl: string, |
b074100 to
a94284a
Compare
* [Modernization] Make fetch default (#1394) * Replace __USE_AXIOS__ dynamic require with static fetch default * Add babel and webpack aliasing to emit axios variant from shared source * Flip package.json exports: fetch default, /axios opt-in, drop /no-axios * Update eventsource and remove no-eventsource build (#1395) * update eventsource to v4.1.0 and remove conditional import of eventsource * remove the dom-monkeypatch as its now included in the tsconfig lib field * build and export cjs and esm build varients, remove export of umd bundles * Base Migration (#1399) * move stellar-base src under src/base * migrate from classic yarn to pnpm (#1400) * remove randomBytes for universal crypto.getRandomValues * replace sha.js with noble/hashes and update to version 2.2.0 * update BigNumber to v11.0.0 * replace noble/curves with noble/ed25519 for reduced bundle size * replace toml with smol-toml * replace URI for native URL (#1402) * refactor: replace URI usage for native URL + URLSearchParam objects * allow expandUriTemplate to handle relative templated links * Tooling modernization: Node 22, husky v9, pnpm minimumReleaseAge, drop nyc (#1408) * Update husky config + remove nyc * Root .nvmrc + bump Node to v22 * pnpm minimumReleaseAge config * Use pnpm workspace (#1417) * New docs (#1413) * TypeDoc setup * P27 updates (#1429) * Update XDR base URLs and improve Makefile for TypeScript definitions * pull and regenerate xdr definitions for p27 * handle signing the new SorobanCredential varients * add CAP-71 delegate-credential signing helpers - buildAuthorizationEntryPreimage: expose the signature payload (authorizeEntry now builds its preimage through it) - buildWithDelegatesEntry: wrap ADDRESS/ADDRESS_V2 into ADDRESS_WITH_DELEGATES, sorting + de-duping delegates; top-level signature defaults to Void - authorizeEntry: optional forAddress to fill a specific node (top-level or a delegate) instead of always the top-level - export the new helpers + DelegateSignature/BuildWithDelegatesParams from base * Update readme + pre-push check for docs (#1430) * Pre-push hook + updated docs * Update pre-push hook * Add @stellar/stellar-base migration guide to the installation docs * Map xdr.HashIdPreimage in typedoc to fix docs:reference build --------- Co-authored-by: oceans404 <[email protected]> * Tx builder type regression (#1438) * Implement TransactionSource interface for Account and MuxedAccount classes; update TransactionBuilder to use TransactionSource * TSDoc: Replace @internal with @ignore tag (#1436) * TSDoc: Replace @internal with @ignore tag * Add friendbot call builder items * Dependency updates (#1433) * Minor: axios + bignumber.js * Patch: vitest + @vitest * Minor astro + patch @astro * Minor: esbuild to v0.27.7 (not latest v0.28.0) * Some patch + minor * Major: @rollup/plugin-commonjs * Major: cross-env + dotenv * Major: jsdom * Updated pnpm-lock * Auth flag namespace (#1441) * add back AuthFlag namespace * fix: update build types script for axios to ensure generated types are copied correctly * P27 guide (#1440) * add p27 guide * docs: add task-oriented guides (connect-and-fund, send-a-payment) + internal-link tooling (#1434) * docs: add internal-link tooling (base-prefix rewriting + dead-link validation) * docs: add connect-and-fund and send-a-payment guides * docs: add issue-an-asset guide * docs: refine issue-an-asset guide (token framing, typed helper, review fixes) * docs: add query-and-stream guide * docs: add handle-errors guide * docs: link guides 02-04 to the handle-errors guide Add error-handling pointers now that guide 05 exists (sibling-link upgrade): a primary pointer in guide 02's submit section and lighter pointers in 03/04. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * docs: add invoke-a-contract guide (06) Teaches invoking a deployed Soroban contract from JS with contract.Client and AssembledTransaction: connect over RPC, preview a call by simulation, then sign and send a state change. Uses the increment contract; deployment is linked out to the Stellar CLI tutorial. Regenerate llms bundles. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * docs: add contract-auth guide (07) Covers signing Soroban contract authorization for an account other than the transaction source, framed for AddressV2 (CAP-0071-02) readiness: the same code is correct on the legacy ADDRESS credential today and on AddressV2 after the Protocol 28 flip. Distinguishes envelope signing from authorization-entry signing, and gives a before/after migration for hand-rolled signers (buildAuthorizationEntryPreimage / authorizeEntry). Also upgrades the Invoke a Contract guide's closing link to point at this guide, replaces numbered guide references with named links, and regenerates the llms bundles. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * docs: fold versioning into the home page, drop it as a guide Versioning and compatibility is reference material, not a task how-to, so it moves out of the guides nav into a 'Versioning and compatibility' section on the home page (README -> index). Repoints the agents.md reference to the new home-page anchor and regenerates index.md + llms bundles. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * docs: add migration guide (00) A versioned breaking-changes guide for upgrading to the v16 modernization release (base fold-in, native fetch, ESM, Node 22) and Protocol 27 / 28 Soroban auth (AddressV2). Modeled on viem's migration guide: one section per version, one entry per change, with before/after diffs. Sorts first in the guides nav and opens with a pointer to the home-page versioning section. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * docs: link API references in migration guide (00) Link the first mention of each documented symbol (Keypair, the auth helpers, contract.Client/basicNodeSigner/signAuthEntries, rpc.Server/Horizon.Server, getLatestLedger, BalanceResponse, SigningCallback) to its reference page, base-agnostic, matching guide 07. Anchors verified against the rendered reference pages; internal link check passes. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Ryan Yang <[email protected]> Co-authored-by: Iveta <[email protected]> * update package version to 16.0.0-rc.1 * fix: improve token formatting logic --------- Co-authored-by: Iveta <[email protected]> Co-authored-by: oceans404 <[email protected]> Co-authored-by: Steph <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Iveta <[email protected]>
What
uri.jsdependency and replaces it with nativeURLandURLSearchParams