Skip to content

[Feature] Path based LiveObjects Implementation#1214

Draft
sacOO7 wants to merge 31 commits into
mainfrom
feature/path-based-liveobjects-implementation
Draft

[Feature] Path based LiveObjects Implementation#1214
sacOO7 wants to merge 31 commits into
mainfrom
feature/path-based-liveobjects-implementation

Conversation

@sacOO7

@sacOO7 sacOO7 commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

sacOO7 added 6 commits June 8, 2026 18:20
- PathObjectSubscriptionOptions: validate depth fail-fast per RTPO19c1a,
  throwing AblyException with ErrorInfo(400, 40003) when depth <= 0.
  Depth is now a primitive int; the "no depth / infinite depth" state is
  expressed via a new no-arg constructor (mirrors ably-js `{}` options),
  so no null handling is needed
- LiveMapValue: defensively copy binary payloads on creation and access,
  making the RTLMV3d immutability guarantee real for byte[] values
- ObjectData#getBytes: document that the returned array is the underlying
  message payload and must be treated as read-only
- JsonObjectPathObject/JsonArrayPathObject: reword "primitive resolution"
  javadoc for clarity
- LiveMapPathObject#at: fix javadoc equivalence example to compile
  (get() returns base PathObject, so chain via asLiveMap())
…al-public-api

[LiveObjects] Implement path-based LiveObjects public API
@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d9c05540-2490-4a61-958e-b757f392e1d7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/path-based-liveobjects-implementation

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.

@github-actions github-actions Bot temporarily deployed to staging/pull/1214/features June 11, 2026 12:42 Inactive
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/javadoc June 11, 2026 12:43 Inactive
sacOO7 and others added 3 commits June 15, 2026 19:34
…ccessor

Introduce the public, strongly-typed, path-based LiveObjects entry point on a
realtime channel, accessed via `channel.object`.

- RealtimeObject: exposes `get()` returning the root LiveMapPathObject, and
  extends ObjectStateChange to subscribe to objects sync-state events
  (on/off/offAll).
- ObjectStateChange / ObjectStateEvent: the SYNCING/SYNCED sync-state
  subscription API surface.
- ChannelBase.object: a public field providing `channel.object` access. When
  the LiveObjects plugin is not installed, the field is assigned
  RealtimeObject.Unavailable - a null-object guard whose methods fail fast with
  a clear plugin-missing error (statusCode 400, code 40019) instead of an NPE,
  keeping the `channel.object.<method>()` syntax consistent in both cases.

The plugin-present branch is intentionally left as a TODO until the LiveObjects
plugin exposes the new io.ably.lib.object.RealtimeObject type (getInstance
currently returns the legacy io.ably.lib.objects.RealtimeObjects).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ture

- Replaced ObjectsSubscription import with Subscription as per requirement
…tion-for-path-based-interfaces

[AIT-928] feat(liveobjects): add path-based RealtimeObject and channel.object accessor
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/features June 16, 2026 12:01 Inactive
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/javadoc June 16, 2026 12:02 Inactive
sacOO7 and others added 16 commits June 16, 2026 23:11
…mplementation' into chore/liveobjects-add-basic-implementation
- Marked PathObject#getValue as nullable when value doesn't exist at given path
- Implemented JsonSerializer annotation for better json handling
Point the JSON and MsgPack serializers in io.ably.lib.object.serialization
at the new WireObjectMessage wire model instead of the legacy
io.ably.lib.objects.ObjectMessage, so the new `object` package has no
dependency on the legacy `objects` package.

- DefaultSerialization: implement the new ObjectSerializer interface and
  (de)serialize WireObjectMessage arrays (reflectively loaded via
  ObjectSerializer.Holder).
- Json/MsgpackSerialization: bind the Wire* types; replace legacy
  objectError with the object package's objectStateError (same 500/92000).
- WireObjectMessage: restore the gson annotations required for wire-format
  fidelity - @SerializedName("object") on objectState and
  @JsonAdapter(WireObjectDataJsonSerializer) on WireObjectData.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fixes checkstyle AvoidStarImport violation on com.google.gson.*.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
sacOO7 added 2 commits June 22, 2026 13:46
- Added TODO for `resolveValueAtPath` based on review comment
…entation

[AIT-928] Added basic impl. for PathObject and Instance interfaces
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/features June 22, 2026 08:23 Inactive
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/javadoc June 22, 2026 08:24 Inactive
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/features June 24, 2026 09:51 Inactive
@github-actions github-actions Bot temporarily deployed to staging/pull/1214/javadoc June 24, 2026 09:53 Inactive
sacOO7 added 2 commits June 24, 2026 17:14
- Added basic helper unit/integration tests to `io.ably.lib.object`
…g `RecoveryKeyContext#channelSerials`

as a treemap
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant