Skip to content

Conversation

@sampaiodiego
Copy link
Member

@sampaiodiego sampaiodiego commented Sep 23, 2025

Summary by CodeRabbit

  • New Features
    • Added a key generation utility to the federation SDK.
  • Refactor
    • Migrated all federation packages to the @rocket.chat namespace for consistency.
    • Consolidated SDK entry point to a single bundle for simpler consumption.
  • Chores
    • Updated dependencies and path aliases to align with the new package namespace.
    • Streamlined published files to distribution artifacts only.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 23, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

This PR renames packages from the @hs/* namespace to @rocket.chat/*, updates TypeScript path mappings, and migrates all import paths accordingly. It also adjusts federation-sdk packaging (main to bundle.js, exports map, files list), updates dependencies, and adds public re-exports in federation-sdk/src/index.ts including a crypto helper.

Changes

Cohort / File(s) Summary of changes
Namespace renaming (packages)
packages/core/package.json, packages/crypto/package.json, packages/room/package.json, packages/federation-sdk/package.json, packages/homeserver/package.json
Rename packages from @hs/* to @rocket.chat/*; update inter-package dependencies to new names.
SDK packaging adjustments
packages/federation-sdk/package.json
Change main from ./dist/index.js to ./dist/bundle.js; update exports map accordingly; restrict "files" to ["dist"]; replace @hs/* deps with @rocket.chat/federation-* (adds federation-crypto, federation-room).
TS path mappings
tsconfig.base.json
Update paths aliases from @hs/* to @rocket.chat/*, pointing to packages/*/src/*.
Federation SDK: public API surface
packages/federation-sdk/src/index.ts
Switch type imports to @rocket.chat/*; add type re-exports from @rocket.chat/federation-room and @rocket.chat/federation-core; re-export generateEd25519RandomSecretKey from @rocket.chat/federation-crypto.
Federation SDK: import migrations
packages/federation-sdk/src/... (container.ts, listeners/, queues/, repositories/, services/, utils/, services/.spec.ts)
Replace all @hs/* imports with @rocket.chat/federation-* equivalents; no logic changes.
Homeserver: import migrations
packages/homeserver/src/... (controllers/**, middlewares/acl.middleware.ts, homeserver.module.ts)
Update imports from @hs/* to @rocket.chat/* (federation-sdk, federation-room); no logic changes.
Core: import migrations and tests
packages/core/src/... (events/, models/, procedures/makeJoin.spec.ts, types.ts, utils/**)
Migrate imports from @hs/room and @hs/core to @rocket.chat/federation-room and @rocket.chat/federation-core; no logic changes.
Room: crypto import migrations
packages/room/src/manager/*
Update crypto imports from @hs/crypto to @rocket.chat/federation-crypto; no logic changes.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested reviewers

  • rodrigok
  • ggazzo

Poem

I thump my paws on fresh new tags,
From hs to rockets, I pack my bags.
Bundles zipped, exports neat,
Paths aligned for a cleaner feat.
With crypto keys and rooms in tow—
Hop, hop, ship it! Off we go! 🐇🚀

Pre-merge checks and finishing touches and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title concisely and accurately summarizes the primary change: renaming the federation SDK package from @hs/federation-sdk to @rocket.chat/federation-sdk. The diffs show the package.json update plus widespread import path changes to the new package name, so the title is on-topic, specific, and free of vague or noisy language. It clearly communicates the main intent of the PR to reviewers scanning history.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 600817f and 4095db0.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (75)
  • packages/core/package.json (2 hunks)
  • packages/core/src/events/eventBase.ts (1 hunks)
  • packages/core/src/events/isRoomMemberEvent.ts (1 hunks)
  • packages/core/src/events/m.reaction.ts (1 hunks)
  • packages/core/src/events/m.room.create.spec.ts (1 hunks)
  • packages/core/src/events/m.room.guest_access.spec.ts (1 hunks)
  • packages/core/src/events/m.room.guest_access.ts (1 hunks)
  • packages/core/src/events/m.room.history_visibility.spec.ts (1 hunks)
  • packages/core/src/events/m.room.history_visibility.ts (1 hunks)
  • packages/core/src/events/m.room.join_rules.ts (1 hunks)
  • packages/core/src/events/m.room.member-invite.spec.ts (1 hunks)
  • packages/core/src/events/m.room.member.ts (1 hunks)
  • packages/core/src/events/m.room.message.ts (1 hunks)
  • packages/core/src/events/m.room.name.spec.ts (1 hunks)
  • packages/core/src/events/m.room.name.ts (1 hunks)
  • packages/core/src/events/m.room.power_levels.spec.ts (1 hunks)
  • packages/core/src/events/m.room.power_levels.ts (1 hunks)
  • packages/core/src/events/m.room.redaction.spec.ts (1 hunks)
  • packages/core/src/events/m.room.redaction.ts (1 hunks)
  • packages/core/src/events/m.room.tombstone.spec.ts (1 hunks)
  • packages/core/src/events/m.room.tombstone.ts (1 hunks)
  • packages/core/src/events/pdu.ts (1 hunks)
  • packages/core/src/models/event.model.ts (1 hunks)
  • packages/core/src/procedures/makeJoin.spec.ts (1 hunks)
  • packages/core/src/types.ts (1 hunks)
  • packages/core/src/utils/authentication.ts (1 hunks)
  • packages/core/src/utils/checkSignAndHashes.ts (1 hunks)
  • packages/core/src/utils/generateId.ts (1 hunks)
  • packages/core/src/utils/pruneEventDict.ts (1 hunks)
  • packages/core/src/utils/signEvent.ts (1 hunks)
  • packages/core/src/utils/signJson.ts (1 hunks)
  • packages/crypto/package.json (1 hunks)
  • packages/federation-sdk/package.json (1 hunks)
  • packages/federation-sdk/src/container.ts (1 hunks)
  • packages/federation-sdk/src/index.ts (2 hunks)
  • packages/federation-sdk/src/listeners/staging-area.listener.ts (1 hunks)
  • packages/federation-sdk/src/queues/base.queue.ts (1 hunks)
  • packages/federation-sdk/src/repositories/event-staging.repository.ts (1 hunks)
  • packages/federation-sdk/src/repositories/event.repository.ts (1 hunks)
  • packages/federation-sdk/src/repositories/room.repository.ts (1 hunks)
  • packages/federation-sdk/src/repositories/state.repository.ts (1 hunks)
  • packages/federation-sdk/src/services/config.service.ts (1 hunks)
  • packages/federation-sdk/src/services/database-connection.service.ts (1 hunks)
  • packages/federation-sdk/src/services/edu.service.ts (1 hunks)
  • packages/federation-sdk/src/services/event-authorization.service.ts (1 hunks)
  • packages/federation-sdk/src/services/event-fetcher.service.ts (1 hunks)
  • packages/federation-sdk/src/services/event.service.ts (1 hunks)
  • packages/federation-sdk/src/services/federation-request.service.spec.ts (3 hunks)
  • packages/federation-sdk/src/services/federation-request.service.ts (2 hunks)
  • packages/federation-sdk/src/services/federation.service.ts (1 hunks)
  • packages/federation-sdk/src/services/invite.service.ts (1 hunks)
  • packages/federation-sdk/src/services/media.service.ts (1 hunks)
  • packages/federation-sdk/src/services/message.service.ts (1 hunks)
  • packages/federation-sdk/src/services/missing-event.service.ts (1 hunks)
  • packages/federation-sdk/src/services/profiles.service.ts (2 hunks)
  • packages/federation-sdk/src/services/room.service.ts (2 hunks)
  • packages/federation-sdk/src/services/send-join.service.ts (1 hunks)
  • packages/federation-sdk/src/services/server.service.ts (1 hunks)
  • packages/federation-sdk/src/services/staging-area.service.ts (1 hunks)
  • packages/federation-sdk/src/services/state.service.ts (1 hunks)
  • packages/federation-sdk/src/utils/event-schemas.ts (1 hunks)
  • packages/federation-sdk/src/utils/signJson.spec.ts (1 hunks)
  • packages/homeserver/package.json (2 hunks)
  • packages/homeserver/src/controllers/federation/profiles.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/send-join.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/state.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/transactions.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/invite.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/message.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/room.controller.ts (1 hunks)
  • packages/homeserver/src/middlewares/acl.middleware.ts (1 hunks)
  • packages/room/package.json (2 hunks)
  • packages/room/src/manager/event-wrapper.ts (1 hunks)
  • packages/room/src/manager/v3.ts (1 hunks)
  • tsconfig.base.json (1 hunks)

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov-commenter
Copy link

codecov-commenter commented Sep 23, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.99%. Comparing base (1cc2333) to head (4095db0).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #211   +/-   ##
=======================================
  Coverage   80.99%   80.99%           
=======================================
  Files          63       63           
  Lines        4693     4693           
=======================================
  Hits         3801     3801           
  Misses        892      892           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
packages/homeserver/src/controllers/federation/send-join.controller.ts (1)

2-2: Optional: co-locate EventID via SDK re‑export to reduce direct @hs/room dependency.

If the SDK re‑exports EventID, you can simplify imports:

-import type { EventID } from '@hs/room';
-import { SendJoinService } from '@rocket.chat/federation-sdk';
+import { SendJoinService, type EventID } from '@rocket.chat/federation-sdk';
packages/homeserver/src/controllers/internal/invite.controller.ts (1)

13-13: Remove unused _inviteService resolution.
It’s never used; keep DI clean.

- const _inviteService = container.resolve(InviteService);
+ // InviteService not used here; remove resolution.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 51b965c and 600817f.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (19)
  • packages/federation-sdk/package.json (2 hunks)
  • packages/federation-sdk/src/index.ts (1 hunks)
  • packages/homeserver/package.json (1 hunks)
  • packages/homeserver/src/controllers/federation/invite.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/profiles.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/rooms.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/send-join.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/state.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/transactions.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/federation/versions.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/direct-message.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/invite.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/message.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/internal/room.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/key/server.controller.ts (1 hunks)
  • packages/homeserver/src/controllers/well-known/well-known.controller.ts (1 hunks)
  • packages/homeserver/src/homeserver.module.ts (1 hunks)
  • packages/homeserver/src/middlewares/acl.middleware.ts (1 hunks)
  • tsconfig.base.json (1 hunks)
🔇 Additional comments (20)
packages/federation-sdk/src/index.ts (1)

19-31: Good addition: public type re-exports.

Re-exporting core/room types here improves DX for consumers importing from the SDK root.

packages/federation-sdk/package.json (2)

28-28: Publishing surface reduced to “dist” only.

This is fine as long as any runtime assets (schemas, migrations, etc.) are emitted to dist. If not, broaden the files list or emit those assets during build.


2-2: Package rename aligns with import changes.

Name change is consistent with the repo-wide migration.

packages/homeserver/src/controllers/federation/profiles.controller.ts (1)

2-2: Import scope update is correct.

ProfilesService now references the renamed package; no functional changes.

packages/homeserver/src/controllers/federation/rooms.controller.ts (1)

1-1: Import scope update is correct.

StateService now comes from the new package scope; OK.

packages/homeserver/src/controllers/internal/direct-message.controller.ts (1)

1-1: Import scope update is correct.

RoomService import updated to the new namespace; no behavior change.

packages/homeserver/src/controllers/well-known/well-known.controller.ts (1)

1-1: Import scope update is correct.

WellKnownService import aligns with the SDK rename.

packages/homeserver/src/controllers/federation/versions.controller.ts (1)

1-1: Import scope update is correct.

ConfigService import migrated cleanly.

tsconfig.base.json (1)

46-48: Path alias rename verified — no remaining @hs references

Repo-wide search found zero occurrences of "@hs/federation-sdk"; "@rocket.chat/federation-sdk" is referenced across packages and tsconfig.base.json maps "@rocket.chat/federation-sdk/" → "packages/federation-sdk/src/".

packages/homeserver/src/controllers/internal/room.controller.ts (1)

6-10: Import path rename looks correct.

DI resolution should remain intact; no behavioral change.

packages/homeserver/src/controllers/federation/send-join.controller.ts (1)

2-2: Import path updated correctly.

No logic changes; endpoint behavior unaffected.

packages/homeserver/src/controllers/internal/message.controller.ts (1)

2-2: Import path rename applied correctly.

Service resolution via tsyringe remains consistent.

packages/homeserver/src/controllers/federation/transactions.controller.ts (1)

1-1: Imports updated as expected.

Aligned with package rename; no runtime impact.

Also applies to: 6-6

packages/homeserver/src/homeserver.module.ts (1)

11-11: Module import switch to new SDK is correct.

Types and factory import line up with the SDK rename.

packages/homeserver/src/controllers/key/server.controller.ts (1)

1-1: ServerService import path updated correctly.

No functional changes.

packages/homeserver/src/controllers/federation/state.controller.ts (1)

2-2: EventService import path updated correctly.

No changes to route behavior.

packages/homeserver/package.json (1)

23-23: Dependency migrated to @rocket.chat/federation-sdk — verified

No lingering "@hs/federation-sdk" references found; new package present at packages/federation-sdk/package.json and referenced in packages/homeserver/package.json (line 23). Consider publishing a deprecation stub for the old package to ease external consumers.

packages/homeserver/src/controllers/federation/invite.controller.ts (1)

1-1: LGTM on import rename.
No behavioral changes; aligns with the package move.

packages/homeserver/src/middlewares/acl.middleware.ts (1)

2-3: LGTM — exports verified
errCodes and EventAuthorizationService are exported from packages/federation-sdk/src/index.ts (lines 55, 84).

packages/homeserver/src/controllers/internal/invite.controller.ts (1)

2-2: Confirm tsyringe registrations updated to use new @rocket.chat/federation-sdk exports

rg shows no remaining "@hs/federation-sdk" imports and many files now import "@rocket.chat/federation-sdk". Script errors prevented verifying DI registrations — inspect container.register/registerSingleton/registerInstance and @inject/@Injectable usages (start with packages/homeserver/src/homeserver.module.ts) to ensure injected tokens/classes (InviteService, StateService, etc.) match the new exports.

Comment on lines +5 to 6
"main": "./dist/bundle.js",
"types": "./dist/index.d.ts",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Probable breakage: “main”/exports point to dist/bundle.js but build doesn’t produce it.

Your build script runs only “tsc”, which won’t emit bundle.js. This will break runtime resolution for consumers importing the package root. Also, mapping both “import” and “require” to the same JS file can break CJS if the file is ESM-only.

Recommend scoping this PR to the rename and keep entrypoints stable:

Option A (revert to non-bundled entrypoints; minimal change):

-  "main": "./dist/bundle.js",
+  "main": "./dist/index.js",
   "types": "./dist/index.d.ts",
   "exports": {
     ".": {
       "types": "./dist/index.d.ts",
-      "import": "./dist/bundle.js",
-      "require": "./dist/bundle.js"
+      "import": "./dist/index.js"
+      // Optionally add a CJS build later and point "require" to "./dist/index.cjs"
     }
   },

Option B (if you really want a bundle): add a bundler step (tsup/rollup/esbuild) that emits both ESM and CJS and wire exports accordingly. Example (tsup):

  • scripts:
-    "build": "tsc --build --force",
+    "build": "tsup src/index.ts --format esm,cjs --dts --sourcemap --out-dir dist --clean"
  • exports:
-      "import": "./dist/bundle.js",
-      "require": "./dist/bundle.js"
+      "import": "./dist/index.mjs",
+      "require": "./dist/index.cjs"

Given the PR objective (rename only), Option A is safer.

Also applies to: 10-11

🤖 Prompt for AI Agents
In packages/federation-sdk/package.json around lines 5-6 (and also affecting
lines 10-11), the package.json points "main" to ./dist/bundle.js which the
current build (tsc) does not produce, breaking consumers; revert to safe,
minimal change by pointing entrypoints to the files tsc actually emits (e.g.,
set "main" to ./dist/index.js and "types" to ./dist/index.d.ts and adjust
"module"/"exports" entries similarly), or if you intend to ship a bundle
instead, add a bundler step (tsup/rollup/esbuild) to the build script and update
package.json exports to provide both ESM and CJS outputs—pick one approach and
make package.json and build scripts consistent so runtime resolution matches
emitted artifacts.

@rodrigok rodrigok merged commit 5c67d71 into main Sep 23, 2025
2 of 3 checks passed
@rodrigok rodrigok deleted the rename-sdk-package branch September 23, 2025 21:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants