Skip to content

replace URI for native URL - #1402

Merged
Ryang-21 merged 3 commits into
modernizationfrom
replace-URI-to-URL
May 1, 2026
Merged

replace URI for native URL#1402
Ryang-21 merged 3 commits into
modernizationfrom
replace-URI-to-URL

Conversation

@Ryang-21

@Ryang-21 Ryang-21 commented May 1, 2026

Copy link
Copy Markdown
Contributor

What

  • Removes uri.js dependency and replaces it with native URL and URLSearchParams

@Ryang-21
Ryang-21 requested review from Copilot and quietbits May 1, 2026 00:53
@github-project-automation github-project-automation Bot moved this to Backlog (Not Ready) in DevX May 1, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.js usage across Horizon call builders, Horizon server helpers, RPC server, and Federation server with native URL.
  • Introduce a URL template expansion helper (expandUriTemplate) and wire it into CallBuilder for 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.

Comment thread src/utils/url.ts Outdated
Comment on lines 51 to +56
constructor(
serverUrl: URI,
serverUrl: URL,
httpClient: HttpClient,
neighborRoot: string = "",
) {
this.url = serverUrl.clone();
this.url = new URL(serverUrl);

Copilot AI May 1, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we keep serverUrl as string?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh, I see. Let's make it URL then.

Comment on lines 51 to +56
constructor(
serverUrl: URI,
serverUrl: URL,
httpClient: HttpClient,
neighborRoot: string = "",
) {
this.url = serverUrl.clone();
this.url = new URL(serverUrl);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we keep serverUrl as string?


constructor(
serverUrl: URI,
serverUrl: URL,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
serverUrl: URL,
serverUrl: string,

Comment thread src/horizon/horizon_axios_client.ts Outdated
Comment thread src/horizon/path_call_builder.ts Outdated
Comment thread src/horizon/strict_receive_path_call_builder.ts Outdated
Comment thread src/horizon/trade_aggregation_call_builder.ts Outdated
Comment thread src/horizon/trades_call_builder.ts Outdated
Comment thread src/horizon/trades_call_builder.ts Outdated
Comment thread src/utils/url.ts Outdated
Base automatically changed from dependency-updates-and-removals to modernization May 1, 2026 19:11
@Ryang-21
Ryang-21 force-pushed the replace-URI-to-URL branch from b074100 to a94284a Compare May 1, 2026 19:14
@Ryang-21
Ryang-21 marked this pull request as ready for review May 1, 2026 19:14
@Ryang-21
Ryang-21 requested a review from quietbits May 1, 2026 19:22
@Ryang-21
Ryang-21 merged commit a957a77 into modernization May 1, 2026
6 checks passed
@Ryang-21
Ryang-21 deleted the replace-URI-to-URL branch May 1, 2026 21:03
@github-project-automation github-project-automation Bot moved this from Backlog (Not Ready) to Done in DevX May 1, 2026
@Ryang-21 Ryang-21 mentioned this pull request Jun 5, 2026
Ryang-21 added a commit that referenced this pull request Jun 5, 2026
* [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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants