Skip to content

feat: Pexip Integration - #40847

Merged
pierre-lehnen-rc merged 7 commits into
feat/voice-pocfrom
wip/pexip
Jul 14, 2026
Merged

feat: Pexip Integration#40847
pierre-lehnen-rc merged 7 commits into
feat/voice-pocfrom
wip/pexip

Conversation

@pierre-lehnen-rc

@pierre-lehnen-rc pierre-lehnen-rc commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Proposed changes (including videos or screenshots)

wip, very rushed version of a pexip integration within rocket.chat core.

Issue(s)

DMV-48

Steps to test or reproduce

Further comments

The path for the pexip API in this integration is /api/pexip
For example:
Policy Server URL: https://rocket.chat/api/pexip
Event Sink URL: https://rocket.chat/api/pexip/events

If you had any pexip env configured to use the Rocket.Chat app, you need to replace apps/public/7fc612f5-b585-4e46-8c4e-6d2c13e2f451 by pexip in its configuration

Summary by CodeRabbit

  • New Features
    • Added Pexip as a video conferencing provider.
    • Added configuration options for Pexip integration, including URLs, credentials, PINs, layouts, themes, and meeting customization.
    • Added support for generating personalized meeting links and host or guest PINs.
    • Added event handling to update conference status automatically.
    • Added service configuration and event endpoints for Pexip interoperability.
    • Video conference provider listings now include the configured Pexip integration.

@changeset-bot

changeset-bot Bot commented Jun 8, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 575c163

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@dionisio-bot

dionisio-bot Bot commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Looks like this PR is not ready to merge, because of the following issues:

  • This PR is missing the 'stat: QA assured' label

Please fix the issues and try again

If you have any trouble, please check the PR guidelines

@codecov

codecov Bot commented Jun 8, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 41.58416% with 59 lines in your changes missing coverage. Please review.
✅ Project coverage is 69.28%. Comparing base (115dfe8) to head (6466f39).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop   #40847      +/-   ##
===========================================
- Coverage    69.29%   69.28%   -0.02%     
===========================================
  Files         3539     3542       +3     
  Lines       138832   138920      +88     
  Branches     24767    24760       -7     
===========================================
+ Hits         96210    96245      +35     
- Misses       38607    38640      +33     
- Partials      4015     4035      +20     
Flag Coverage Δ
e2e 59.35% <ø> (-0.05%) ⬇️
e2e-api 50.23% <41.58%> (+0.38%) ⬆️
unit 70.13% <ø> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 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.

@pierre-lehnen-rc pierre-lehnen-rc added this to the POC-VOICE milestone Jun 8, 2026
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8e5eefe1-1a1e-4a00-aca9-70275908b9e2

📥 Commits

Reviewing files that changed from the base of the PR and between f7ded41 and 575c163.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (30)
  • apps/meteor/package.json
  • apps/meteor/server/api/api.ts
  • apps/meteor/server/api/index.ts
  • apps/meteor/server/api/pexip/eventSink.ts
  • apps/meteor/server/api/pexip/index.ts
  • apps/meteor/server/api/pexip/policyServer.ts
  • apps/meteor/server/lib/videoConfProviders.ts
  • apps/meteor/server/services/video-conference/service.ts
  • apps/meteor/server/settings/index.ts
  • apps/meteor/server/settings/pexip.ts
  • packages/i18n/src/locales/en.i18n.json
  • packages/pexip/jest.config.ts
  • packages/pexip/package.json
  • packages/pexip/src/Pexip.ts
  • packages/pexip/src/definition/AvatarRequest.ts
  • packages/pexip/src/definition/EventSinkRequest.ts
  • packages/pexip/src/definition/PexipLayout.ts
  • packages/pexip/src/definition/PexipSettings.ts
  • packages/pexip/src/definition/PolicyServerResponse.ts
  • packages/pexip/src/definition/ServiceConfiguration.ts
  • packages/pexip/src/definition/ServiceConfigurationRequest.ts
  • packages/pexip/src/definition/index.ts
  • packages/pexip/src/endpoints/eventSink.ts
  • packages/pexip/src/endpoints/index.ts
  • packages/pexip/src/endpoints/serviceConfiguration.ts
  • packages/pexip/src/index.ts
  • packages/pexip/src/logger.ts
  • packages/pexip/src/videoConfProvider.ts
  • packages/pexip/tsconfig.build.json
  • packages/pexip/tsconfig.json

Walkthrough

Adds a new @rocket.chat/pexip package with typed contracts, settings, API endpoints, event handling, PIN generation, and video-conference provider behavior. Meteor registers the integration, exposes Pexip routes, and delegates provider operations to the new implementation.

Changes

Pexip contracts and configuration

Layer / File(s) Summary
Typed package and service contracts
packages/pexip/package.json, packages/pexip/src/definition/*, packages/pexip/src/index.ts, packages/pexip/tsconfig*, packages/pexip/jest.config.ts
Defines Pexip request, response, service configuration, layout, settings, package, and build contracts with AJV validators and public exports.
Server settings and localization
apps/meteor/server/settings/pexip.ts, apps/meteor/server/settings/index.ts, packages/i18n/src/locales/en.i18n.json
Registers Pexip settings, maps them to PexipSettings, initializes them at startup, and adds English configuration strings.

Pexip client and provider behavior

Layer / File(s) Summary
Core client and endpoints
packages/pexip/src/Pexip.ts, packages/pexip/src/endpoints/*, packages/pexip/src/logger.ts
Validates credentials, retrieves service configuration, processes events, generates and stores deterministic PINs, updates conference status, and builds service configuration responses.
Video conference provider
packages/pexip/src/videoConfProvider.ts
Adds Pexip URL generation, discussion-room routing, per-user PIN customization, conference lifecycle handling, capabilities, and UI conference information.

API and video-conference integration

Layer / File(s) Summary
Pexip API namespace
apps/meteor/server/api/api.ts, apps/meteor/server/api/index.ts, apps/meteor/server/api/pexip/*
Creates and mounts the pexip API namespace, registers the event sink and policy server routes, validates authorization, and returns typed responses.
Provider registry and service delegation
apps/meteor/server/lib/videoConfProviders.ts, apps/meteor/server/services/video-conference/service.ts
Adds Pexip provider discovery and handler construction, exposes capabilities and availability, and routes provider operations through direct handlers with existing fallbacks.
Application dependency
apps/meteor/package.json
Adds the workspace dependency on @rocket.chat/pexip.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Pexip as Pexip
  participant API as Rocket.Chat API
  participant Client as Pexip client
  participant Provider as PexipVideoConfProvider
  participant Model as VideoConferenceModel
  Pexip->>API: POST events or GET service configuration
  API->>Client: validateRequestCredentials
  API->>Client: processEvent or getServiceConfiguration
  Client->>Model: update status or load conference
  Client-->>API: success or service configuration
  Provider->>Client: generate and store conference PINs
  Client->>Model: setProviderDataById
  Provider-->>API: conference URL and provider information
Loading

Suggested labels: type: feature

Suggested reviewers: ricardogarim, tassoevan, martinschoeler


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

pierre-lehnen-rc added a commit that referenced this pull request Jun 18, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jun 18, 2026
ggazzo pushed a commit that referenced this pull request Jun 19, 2026
ggazzo pushed a commit that referenced this pull request Jun 19, 2026
ggazzo pushed a commit that referenced this pull request Jun 22, 2026
ggazzo pushed a commit that referenced this pull request Jun 22, 2026
ggazzo pushed a commit that referenced this pull request Jun 22, 2026
ggazzo pushed a commit that referenced this pull request Jun 22, 2026
ggazzo pushed a commit that referenced this pull request Jun 22, 2026
ggazzo pushed a commit that referenced this pull request Jun 24, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jun 24, 2026
ggazzo pushed a commit that referenced this pull request Jun 24, 2026
ggazzo pushed a commit that referenced this pull request Jun 24, 2026
ggazzo pushed a commit that referenced this pull request Jun 25, 2026
ggazzo pushed a commit that referenced this pull request Jun 25, 2026
ggazzo pushed a commit that referenced this pull request Jun 25, 2026
ggazzo pushed a commit that referenced this pull request Jun 25, 2026
ggazzo pushed a commit that referenced this pull request Jun 25, 2026
ggazzo pushed a commit that referenced this pull request Jun 26, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jun 30, 2026
ggazzo pushed a commit that referenced this pull request Jul 1, 2026
ggazzo pushed a commit that referenced this pull request Jul 2, 2026
ggazzo pushed a commit that referenced this pull request Jul 3, 2026
ggazzo pushed a commit that referenced this pull request Jul 3, 2026
ggazzo pushed a commit that referenced this pull request Jul 3, 2026
ggazzo pushed a commit that referenced this pull request Jul 4, 2026
ggazzo pushed a commit that referenced this pull request Jul 4, 2026
ggazzo pushed a commit that referenced this pull request Jul 4, 2026
ggazzo pushed a commit that referenced this pull request Jul 7, 2026
ggazzo pushed a commit that referenced this pull request Jul 7, 2026
ggazzo pushed a commit that referenced this pull request Jul 7, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jul 7, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jul 7, 2026
ggazzo pushed a commit that referenced this pull request Jul 8, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jul 10, 2026
pierre-lehnen-rc added a commit that referenced this pull request Jul 10, 2026
@pierre-lehnen-rc
pierre-lehnen-rc changed the base branch from develop to feat/voice-poc July 14, 2026 20:46
@pierre-lehnen-rc
pierre-lehnen-rc marked this pull request as ready for review July 14, 2026 20:51
@pierre-lehnen-rc
pierre-lehnen-rc requested a review from a team as a code owner July 14, 2026 20:51
@pierre-lehnen-rc
pierre-lehnen-rc merged commit d5cbbc7 into feat/voice-poc Jul 14, 2026
6 of 8 checks passed
@pierre-lehnen-rc
pierre-lehnen-rc deleted the wip/pexip branch July 14, 2026 20:51
@coderabbitai coderabbitai Bot added the type: feature Pull requests that introduces new feature label Jul 14, 2026

@hacktron-app hacktron-app Bot 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.

2 issues found across 1 file

Severity Count
HIGH 2

View full scan results

Comment on lines +17 to +22
public validateRequestCredentials(authHeader?: string | null): void {
const { api } = this.settings;

if (!api.username) {
return;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

HIGH Authentication Bypass and Fail-Open in Pexip Integration Endpoints leading to PIN Leakage and Call Termination

The Pexip integration endpoints (/api/pexip/policy/v1/service/configuration and /api/pexip/events) suffer from an authentication bypass and a fail-open design.

  1. Fail-Open Authentication: In Pexip.validateRequestCredentials, if the api.username setting is not configured (which is the default state, where Pexip_Integration_API_Username is ""), the function returns immediately without throwing an error. This allows any request to bypass authentication checks.
  2. Missing Integration Enabled Check: Neither policyServer.ts nor eventSink.ts verifies whether the Pexip integration is actually enabled (Pexip_Integration_Enabled setting). Consequently, these endpoints are exposed and functional by default on all deployments.

Exploitation Path & Impact:

  • Information Disclosure: An unauthenticated remote attacker can query /api/pexip/policy/v1/service/configuration?local_alias=<callId> to retrieve the host and guest PINs for any active or past video conference call in the system.
  • Unauthorized Call Termination (DoS): An unauthenticated remote attacker can send a POST request to /api/pexip/events with a conference_ended event payload to prematurely set the status of any active video conference call to ENDED, disrupting ongoing meetings.
Steps to Reproduce
  1. Ensure the Pexip integration is in its default state (disabled, and API username is empty).
  2. Create a video conference call in Rocket.Chat and obtain its ID (TARGET_CALL_ID).
  3. Send a GET request to /api/pexip/policy/v1/service/configuration?local_alias=TARGET_CALL_ID without any Authorization header.
  4. Observe that the endpoint returns the host and guest PINs for the conference.
  5. Send a POST request to /api/pexip/events with a conference_ended event payload matching the TARGET_CALL_ID.
  6. Observe that the conference status is prematurely mutated to ENDED.
# Retrieve PINs for any call ID
curl -X GET "http://localhost:3000/api/pexip/policy/v1/service/configuration?local_alias=TARGET_CALL_ID"

# Terminate any active call ID
curl -X POST "http://localhost:3000/api/pexip/events" \
     -H "Content-Type: application/json" \
     -d '{"event": "conference_ended", "data": {"name": "TARGET_CALL_ID"}}'
Fix with AI

Open in Cursor Open in Claude

A security vulnerability was found by Hacktron.

File: packages/pexip/src/Pexip.ts
Lines: 17-22
Severity: high

Vulnerability: Authentication Bypass and Fail-Open in Pexip Integration Endpoints leading to PIN Leakage and Call Termination

Description:
The Pexip integration endpoints (`/api/pexip/policy/v1/service/configuration` and `/api/pexip/events`) suffer from an authentication bypass and a fail-open design.

1. **Fail-Open Authentication**: In `Pexip.validateRequestCredentials`, if the `api.username` setting is not configured (which is the default state, where `Pexip_Integration_API_Username` is `""`), the function returns immediately without throwing an error. This allows any request to bypass authentication checks.
2. **Missing Integration Enabled Check**: Neither `policyServer.ts` nor `eventSink.ts` verifies whether the Pexip integration is actually enabled (`Pexip_Integration_Enabled` setting). Consequently, these endpoints are exposed and functional by default on all deployments.

### Exploitation Path & Impact:
- **Information Disclosure**: An unauthenticated remote attacker can query `/api/pexip/policy/v1/service/configuration?local_alias=<callId>` to retrieve the host and guest PINs for any active or past video conference call in the system.
- **Unauthorized Call Termination (DoS)**: An unauthenticated remote attacker can send a POST request to `/api/pexip/events` with a `conference_ended` event payload to prematurely set the status of any active video conference call to `ENDED`, disrupting ongoing meetings.

Proof of Concept:
**Steps to Reproduce**

1. Ensure the Pexip integration is in its default state (disabled, and API username is empty).
2. Create a video conference call in Rocket.Chat and obtain its ID (TARGET_CALL_ID).
3. Send a GET request to `/api/pexip/policy/v1/service/configuration?local_alias=TARGET_CALL_ID` without any `Authorization` header.
4. Observe that the endpoint returns the host and guest PINs for the conference.
5. Send a POST request to `/api/pexip/events` with a `conference_ended` event payload matching the TARGET_CALL_ID.
6. Observe that the conference status is prematurely mutated to `ENDED`.

```bash
# Retrieve PINs for any call ID
curl -X GET "http://localhost:3000/api/pexip/policy/v1/service/configuration?local_alias=TARGET_CALL_ID"

# Terminate any active call ID
curl -X POST "http://localhost:3000/api/pexip/events" \
     -H "Content-Type: application/json" \
     -d '{"event": "conference_ended", "data": {"name": "TARGET_CALL_ID"}}'
```

Affected Code:
	public validateRequestCredentials(authHeader?: string | null): void {
		const { api } = this.settings;

		if (!api.username) {
			return;
		}

Acceptance criteria:
- Acceptance is defined by the **actual reported behavior**, not by tests passing.
- Reproduce the issue, or narrow the exact code path that produces it, *before* changing code. State what you confirmed.
- Fix the underlying cause. Mitigations that paper over the reported behavior do not count as a fix.
- Add a regression test that fails on the unpatched code and passes on the fix. If a regression test is genuinely impractical (e.g. race condition, infra-level issue), say so and explain why.
- Existing tests passing is **not** the bar. Do not declare done on tests-pass theatre.

Only change what is necessary to fix this vulnerability. Do not refactor adjacent code or modify unrelated files.

Triage: Reply !fp <reason> (false positive), !valid (confirmed), !accepted_risk <reason>, or !fixed (resolved). Any other reply is saved as a triage note.
Reason is optional but improves future scans — e.g. !fp internal endpoint, not user-facing.

View finding in Hacktron

Comment on lines +91 to +113
public async createHostPin(call: VideoConference | undefined, room: IRoom | undefined, user: IUser | undefined): Promise<string> {
const { pins } = this.settings;

if (pins.host) {
return pins.host;
}

// TODO: secure pins

if (call) {
return this.getPinFromString(`${call._id}${call.createdBy._id}`);
}

if (room) {
return this.getPinFromString(`${room._id}_hosts`);
}

if (user) {
return this.getPinFromString(`${user._id}_host`);
}

return '';
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

HIGH Predictable Host and Guest PIN Generation in Pexip Integration

The Pexip video conference integration generates Host and Guest PINs deterministically when static PINs are not configured in the settings (which is the default configuration). In packages/pexip/src/Pexip.ts, the createHostPin function generates the host PIN using this.getPinFromString('${call._id}${call.createdBy._id}') and createGuestPin generates the guest PIN using this.getPinFromString('${call._id}${call.rid}'). The getPinFromString function hashes this identifier using SHA-256 and then extracts the last 6 digits of its decimal representation via getPinFromHash. Because call._id (the call ID), call.createdBy._id (the creator's user ID), and call.rid (the room ID) are non-secret, structured identifiers that are visible to all participants in the chat room (and transmitted via room messages or the REST/DDP APIs), any standard user or guest in the room can easily compute the Host PIN. This allows any participant to authenticate as the Host/Moderator in the Pexip meeting, bypassing the intended authorization check where only the legitimate host should see and use the Host PIN.

Steps to Reproduce
  1. Enable the Pexip integration in Rocket.Chat settings without configuring static Host/Guest PINs.
  2. As a regular user, join a room where a Pexip video conference is started by a host.
  3. Retrieve the callId (from the message block), the room ID (rid), and the creator's user ID (createdBy._id).
  4. Run the Python script or equivalent code to calculate the Host PIN using the formula: SHA-256(callId + creatorId) converted to BigInt, taking the last 6 digits.
  5. Join the Pexip meeting and enter the calculated Host PIN to gain Host/Moderator privileges.
import hashlib

def get_pin_from_hash(hex_hash):
    return str(int(hex_hash, 16))[-6:]

def get_pin_from_string(identifier):
    hex_hash = hashlib.sha256(identifier.encode('utf-8')).hexdigest()
    return get_pin_from_hash(hex_hash)

# Example inputs obtained from room metadata
call_id = "exampleCallId123"
creator_id = "exampleCreatorId456"

# Calculate the Host PIN
host_pin = get_pin_from_string(f"{call_id}{creator_id}")
print(f"Calculated Host PIN: {host_pin}")
Fix with AI

Open in Cursor Open in Claude

A security vulnerability was found by Hacktron.

File: packages/pexip/src/Pexip.ts
Lines: 91-113
Severity: high

Vulnerability: Predictable Host and Guest PIN Generation in Pexip Integration

Description:
The Pexip video conference integration generates Host and Guest PINs deterministically when static PINs are not configured in the settings (which is the default configuration). In `packages/pexip/src/Pexip.ts`, the `createHostPin` function generates the host PIN using `this.getPinFromString('${call._id}${call.createdBy._id}')` and `createGuestPin` generates the guest PIN using `this.getPinFromString('${call._id}${call.rid}')`. The `getPinFromString` function hashes this identifier using SHA-256 and then extracts the last 6 digits of its decimal representation via `getPinFromHash`. Because `call._id` (the call ID), `call.createdBy._id` (the creator's user ID), and `call.rid` (the room ID) are non-secret, structured identifiers that are visible to all participants in the chat room (and transmitted via room messages or the REST/DDP APIs), any standard user or guest in the room can easily compute the Host PIN. This allows any participant to authenticate as the Host/Moderator in the Pexip meeting, bypassing the intended authorization check where only the legitimate host should see and use the Host PIN.

Proof of Concept:
**Steps to Reproduce**

1. Enable the Pexip integration in Rocket.Chat settings without configuring static Host/Guest PINs.
2. As a regular user, join a room where a Pexip video conference is started by a host.
3. Retrieve the `callId` (from the message block), the room ID (`rid`), and the creator's user ID (`createdBy._id`).
4. Run the Python script or equivalent code to calculate the Host PIN using the formula: `SHA-256(callId + creatorId)` converted to BigInt, taking the last 6 digits.
5. Join the Pexip meeting and enter the calculated Host PIN to gain Host/Moderator privileges.

```python
import hashlib

def get_pin_from_hash(hex_hash):
    return str(int(hex_hash, 16))[-6:]

def get_pin_from_string(identifier):
    hex_hash = hashlib.sha256(identifier.encode('utf-8')).hexdigest()
    return get_pin_from_hash(hex_hash)

# Example inputs obtained from room metadata
call_id = "exampleCallId123"
creator_id = "exampleCreatorId456"

# Calculate the Host PIN
host_pin = get_pin_from_string(f"{call_id}{creator_id}")
print(f"Calculated Host PIN: {host_pin}")
```

Affected Code:
	public async createHostPin(call: VideoConference | undefined, room: IRoom | undefined, user: IUser | undefined): Promise<string> {
		const { pins } = this.settings;

		if (pins.host) {
			return pins.host;
		}

		// TODO: secure pins

		if (call) {
			return this.getPinFromString(`${call._id}${call.createdBy._id}`);
		}

		if (room) {
			return this.getPinFromString(`${room._id}_hosts`);
		}

		if (user) {
			return this.getPinFromString(`${user._id}_host`);
		}

		return '';
	}

Acceptance criteria:
- Acceptance is defined by the **actual reported behavior**, not by tests passing.
- Reproduce the issue, or narrow the exact code path that produces it, *before* changing code. State what you confirmed.
- Fix the underlying cause. Mitigations that paper over the reported behavior do not count as a fix.
- Add a regression test that fails on the unpatched code and passes on the fix. If a regression test is genuinely impractical (e.g. race condition, infra-level issue), say so and explain why.
- Existing tests passing is **not** the bar. Do not declare done on tests-pass theatre.

Only change what is necessary to fix this vulnerability. Do not refactor adjacent code or modify unrelated files.

Triage: Reply !fp <reason> (false positive), !valid (confirmed), !accepted_risk <reason>, or !fixed (resolved). Any other reply is saved as a triage note.
Reason is optional but improves future scans — e.g. !fp internal endpoint, not user-facing.

View finding in Hacktron

pierre-lehnen-rc added a commit that referenced this pull request Jul 15, 2026
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
pierre-lehnen-rc added a commit that referenced this pull request Jul 21, 2026
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
pierre-lehnen-rc added a commit that referenced this pull request Jul 22, 2026
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
pierre-lehnen-rc added a commit that referenced this pull request Jul 22, 2026
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
pierre-lehnen-rc added a commit that referenced this pull request Jul 22, 2026
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
pierre-lehnen-rc added a commit that referenced this pull request Jul 23, 2026
Co-authored-by: Guilherme Gazzo <guilherme@gazzo.xyz>
pierre-lehnen-rc added a commit that referenced this pull request Aug 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

add-to-poc type: feature Pull requests that introduces new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants