Skip to content

feat: Add resource scoping#450

Merged
bartek-gralewicz merged 3 commits into
epic/1.0_breaking_changesfrom
bgralewicz/resource_scoping
May 8, 2026
Merged

feat: Add resource scoping#450
bartek-gralewicz merged 3 commits into
epic/1.0_breaking_changesfrom
bgralewicz/resource_scoping

Conversation

@bartek-gralewicz
Copy link
Copy Markdown
Contributor

@bartek-gralewicz bartek-gralewicz commented May 7, 2026

Description

Resource scoping

This PR mimics the logic that was added in a2a-python (a2aproject/a2a-python#709).
Since the multi-tenancy feature already enabled Task and PushNotificationConfig filtration based on the tenant ownership, this PR only extends this to allow for User ownership within the tenant scope.

The ownership flow is the following:
tenant -> User -> CONTENT_UNDER_OWNERSHIP

Renamed test/server/tenant_isolation.spec.ts to more generic test/server/resource_scoping.spec.ts and added new cases for user based scoping. Lines 21-245 in test/server/resource_scoping.spec.ts are identical to the original test/server/tenant_isolation.spec.ts.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

🧪 Code Coverage

⬇️ Download Full Report

Base PR Delta
src/server/push_notification/push_notification_store.ts 87.3% 83.67% 🔴 -3.63%
src/server/store.ts 69.3% 65.93% 🔴 -3.37%
src/server/utils.ts 69.23% 85.96% 🟢 +16.73%
src/server/owner_resolver.ts (new) 100%
Total 87.8% 87.83% 🟢 +0.03%

Generated by coverage-comment.yml

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request implements owner-level resource scoping alongside existing tenant isolation to comply with authorization requirements. It introduces a generic ScopedStore utility and an OwnerResolver to manage data access across tenant and user boundaries in InMemoryTaskStore and InMemoryPushNotificationStore. A review comment suggests using deep copies instead of shallow copies when saving tasks to ensure full data isolation for nested structures.

Comment thread src/server/store.ts Outdated
@bartek-gralewicz bartek-gralewicz marked this pull request as ready for review May 7, 2026 09:13
@bartek-gralewicz bartek-gralewicz requested a review from a team as a code owner May 7, 2026 09:13
@bartek-gralewicz bartek-gralewicz requested a review from ishymko May 7, 2026 09:13
@bartek-gralewicz bartek-gralewicz merged commit c527086 into epic/1.0_breaking_changes May 8, 2026
10 checks passed
@bartek-gralewicz bartek-gralewicz deleted the bgralewicz/resource_scoping branch May 8, 2026 09:55
ishymko added a commit that referenced this pull request May 11, 2026
🤖 I have created a release *beep* *boop*
---

## 1.0.0-alpha.0 (2026-05-11)

See the [v0.3 -> v1.0-alpha.0 migration
guide](https://github.com/a2aproject/a2a-js/blob/v1.0.0-alpha.0/docs/migration-guide.md).

**Note**: Enabling backward compatibility with v0.3 is tracked in
[#452](#452).


### ⚠ BREAKING CHANGES

* Drop support for node 18
([#368](#368))
* Make ServerCallContext parameter mandatory across all places
([#405](#405))
* Remove JSON-RPC client
([#353](#353))
* Remove transport-specific exports
([#404](#404))
* Update codebase to use A2A 1.0.0 data model
([#375](#375))
* Remove A2AExpressApp
([#363](#363))

### Features

* Add A2A Version Header
([#422](#422))
([b5f3db7](b5f3db7))
* Add cache-headers logic to the agent card handler
([#435](#435))
([955b52b](955b52b))
* Add resource scoping
([#450](#450))
([c527086](c527086))
* Add support for custom authentication scheme and credentials in
auth-headers ([#430](#430))
([5a4389b](5a4389b))
* AgentCardSignature support
([#448](#448))
([4a41a8c](4a41a8c))
* Enforce events ordering
([#437](#437))
([157cf48](157cf48))
* Enriched Error Model
([#427](#427))
([c130778](c130778))
* Implement listTasks method
([#383](#383))
([7d4c472](7d4c472))
* Send current task as the first event after subscribing to it
([#418](#418))
([4bfcf5f](4bfcf5f))
* Support multi-tenancy
([#419](#419))
([1877877](1877877))

### Code Refactoring

* remove A2AExpressApp
([#363](#363))
([0b84728](0b84728))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: bartek-gralewicz <bgralewicz@google.com>
Co-authored-by: Ivan Shymko <ishymko@google.com>
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.

2 participants