@vibefield/rosetta-protocol 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -2
- package/dist/base64url.d.ts +4 -0
- package/dist/base64url.js +48 -0
- package/dist/client.d.ts +324 -0
- package/dist/client.js +981 -0
- package/dist/generated/ActivityResponse.d.ts +16 -0
- package/dist/generated/ActivityResponse.js +1 -0
- package/dist/generated/ActivitySession.d.ts +19 -0
- package/dist/generated/ActivitySession.js +1 -0
- package/dist/generated/ApiError.d.ts +5 -0
- package/dist/generated/ApiError.js +1 -0
- package/dist/generated/ArtifactKind.d.ts +1 -0
- package/dist/generated/ArtifactKind.js +2 -0
- package/dist/generated/ArtifactOp.d.ts +1 -0
- package/dist/generated/ArtifactOp.js +2 -0
- package/dist/generated/AssetRef.d.ts +14 -0
- package/dist/generated/AssetRef.js +1 -0
- package/dist/generated/AttachmentKind.d.ts +1 -0
- package/dist/generated/AttachmentKind.js +2 -0
- package/dist/generated/AttachmentRef.d.ts +21 -0
- package/dist/generated/AttachmentRef.js +1 -0
- package/dist/generated/AttachmentSource.d.ts +13 -0
- package/dist/generated/AttachmentSource.js +1 -0
- package/dist/generated/AttachmentUnavailableReason.d.ts +1 -0
- package/dist/generated/AttachmentUnavailableReason.js +2 -0
- package/dist/generated/BackfillState.d.ts +4 -0
- package/dist/generated/BackfillState.js +2 -0
- package/dist/generated/BoostRequest.d.ts +7 -0
- package/dist/generated/BoostRequest.js +2 -0
- package/dist/generated/BoostResponse.d.ts +6 -0
- package/dist/generated/BoostResponse.js +2 -0
- package/dist/generated/CanonicalDocument.d.ts +16 -0
- package/dist/generated/CanonicalDocument.js +1 -0
- package/dist/generated/CanonicalText.d.ts +10 -0
- package/dist/generated/CanonicalText.js +1 -0
- package/dist/generated/ChildTrace.d.ts +1 -0
- package/dist/generated/ChildTrace.js +2 -0
- package/dist/generated/CitationRef.d.ts +9 -0
- package/dist/generated/CitationRef.js +1 -0
- package/dist/generated/CodeLookupOp.d.ts +1 -0
- package/dist/generated/CodeLookupOp.js +2 -0
- package/dist/generated/CollaborationChannel.d.ts +1 -0
- package/dist/generated/CollaborationChannel.js +2 -0
- package/dist/generated/CollaborationEvent.d.ts +47 -0
- package/dist/generated/CollaborationEvent.js +1 -0
- package/dist/generated/CollaborationEventKind.d.ts +1 -0
- package/dist/generated/CollaborationEventKind.js +2 -0
- package/dist/generated/CollaborationOp.d.ts +1 -0
- package/dist/generated/CollaborationOp.js +2 -0
- package/dist/generated/CollaborationOutcome.d.ts +5 -0
- package/dist/generated/CollaborationOutcome.js +1 -0
- package/dist/generated/CollaborationStatus.d.ts +1 -0
- package/dist/generated/CollaborationStatus.js +2 -0
- package/dist/generated/CollaborationTimeline.d.ts +10 -0
- package/dist/generated/CollaborationTimeline.js +1 -0
- package/dist/generated/CollaboratorRef.d.ts +7 -0
- package/dist/generated/CollaboratorRef.js +1 -0
- package/dist/generated/CommandResponse.d.ts +7 -0
- package/dist/generated/CommandResponse.js +2 -0
- package/dist/generated/ContributionResponse.d.ts +4 -0
- package/dist/generated/ContributionResponse.js +1 -0
- package/dist/generated/ContributionRow.d.ts +22 -0
- package/dist/generated/ContributionRow.js +2 -0
- package/dist/generated/CorrelationDerivation.d.ts +1 -0
- package/dist/generated/CorrelationDerivation.js +2 -0
- package/dist/generated/DaemonStatus.d.ts +17 -0
- package/dist/generated/DaemonStatus.js +1 -0
- package/dist/generated/DayUsageResponse.d.ts +8 -0
- package/dist/generated/DayUsageResponse.js +1 -0
- package/dist/generated/Dimensions.d.ts +4 -0
- package/dist/generated/Dimensions.js +2 -0
- package/dist/generated/DiscoveriesResponse.d.ts +4 -0
- package/dist/generated/DiscoveriesResponse.js +1 -0
- package/dist/generated/DiscoveryRow.d.ts +23 -0
- package/dist/generated/DiscoveryRow.js +2 -0
- package/dist/generated/DisplayField.d.ts +7 -0
- package/dist/generated/DisplayField.js +1 -0
- package/dist/generated/DisplayScalar.d.ts +10 -0
- package/dist/generated/DisplayScalar.js +2 -0
- package/dist/generated/DisplayValue.d.ts +18 -0
- package/dist/generated/DisplayValue.js +1 -0
- package/dist/generated/DocumentBlock.d.ts +20 -0
- package/dist/generated/DocumentBlock.js +1 -0
- package/dist/generated/EnableRequest.d.ts +7 -0
- package/dist/generated/EnableRequest.js +2 -0
- package/dist/generated/EnableResponse.d.ts +3 -0
- package/dist/generated/EnableResponse.js +2 -0
- package/dist/generated/ErrorCode.d.ts +1 -0
- package/dist/generated/ErrorCode.js +2 -0
- package/dist/generated/ExecutionMode.d.ts +1 -0
- package/dist/generated/ExecutionMode.js +2 -0
- package/dist/generated/FailureKind.d.ts +1 -0
- package/dist/generated/FailureKind.js +2 -0
- package/dist/generated/FetchOutcome.d.ts +5 -0
- package/dist/generated/FetchOutcome.js +2 -0
- package/dist/generated/FieldRole.d.ts +1 -0
- package/dist/generated/FieldRole.js +2 -0
- package/dist/generated/FileChangeOp.d.ts +1 -0
- package/dist/generated/FileChangeOp.js +2 -0
- package/dist/generated/FileDelta.d.ts +11 -0
- package/dist/generated/FileDelta.js +1 -0
- package/dist/generated/FileSearchMode.d.ts +1 -0
- package/dist/generated/FileSearchMode.js +2 -0
- package/dist/generated/FindingItem.d.ts +9 -0
- package/dist/generated/FindingItem.js +1 -0
- package/dist/generated/FindingSeverity.d.ts +1 -0
- package/dist/generated/FindingSeverity.js +2 -0
- package/dist/generated/GroupDerivation.d.ts +1 -0
- package/dist/generated/GroupDerivation.js +2 -0
- package/dist/generated/GroupKind.d.ts +1 -0
- package/dist/generated/GroupKind.js +2 -0
- package/dist/generated/HeatmapDay.d.ts +16 -0
- package/dist/generated/HeatmapDay.js +2 -0
- package/dist/generated/HeatmapResponse.d.ts +4 -0
- package/dist/generated/HeatmapResponse.js +1 -0
- package/dist/generated/HourTotal.d.ts +16 -0
- package/dist/generated/HourTotal.js +2 -0
- package/dist/generated/HubStatus.d.ts +18 -0
- package/dist/generated/HubStatus.js +2 -0
- package/dist/generated/ImageVariant.d.ts +1 -0
- package/dist/generated/ImageVariant.js +2 -0
- package/dist/generated/IngestPhase.d.ts +9 -0
- package/dist/generated/IngestPhase.js +2 -0
- package/dist/generated/IngestProgress.d.ts +19 -0
- package/dist/generated/IngestProgress.js +1 -0
- package/dist/generated/ListOutcome.d.ts +3 -0
- package/dist/generated/ListOutcome.js +2 -0
- package/dist/generated/LocationOutcome.d.ts +5 -0
- package/dist/generated/LocationOutcome.js +1 -0
- package/dist/generated/MediaMetadata.d.ts +6 -0
- package/dist/generated/MediaMetadata.js +2 -0
- package/dist/generated/ModeOp.d.ts +1 -0
- package/dist/generated/ModeOp.js +2 -0
- package/dist/generated/ModelDay.d.ts +20 -0
- package/dist/generated/ModelDay.js +2 -0
- package/dist/generated/ModelHour.d.ts +8 -0
- package/dist/generated/ModelHour.js +2 -0
- package/dist/generated/Mutation.d.ts +45 -0
- package/dist/generated/Mutation.js +1 -0
- package/dist/generated/NativeToolRef.d.ts +6 -0
- package/dist/generated/NativeToolRef.js +2 -0
- package/dist/generated/Notice.d.ts +48 -0
- package/dist/generated/Notice.js +1 -0
- package/dist/generated/ParticipantColor.d.ts +1 -0
- package/dist/generated/ParticipantColor.js +2 -0
- package/dist/generated/ParticipantState.d.ts +1 -0
- package/dist/generated/ParticipantState.js +2 -0
- package/dist/generated/PermissionOutcome.d.ts +1 -0
- package/dist/generated/PermissionOutcome.js +2 -0
- package/dist/generated/PlanOp.d.ts +1 -0
- package/dist/generated/PlanOp.js +2 -0
- package/dist/generated/PricingResponse.d.ts +25 -0
- package/dist/generated/PricingResponse.js +1 -0
- package/dist/generated/PricingSource.d.ts +7 -0
- package/dist/generated/PricingSource.js +2 -0
- package/dist/generated/ProcessOp.d.ts +1 -0
- package/dist/generated/ProcessOp.js +2 -0
- package/dist/generated/ProcessOutcome.d.ts +4 -0
- package/dist/generated/ProcessOutcome.js +1 -0
- package/dist/generated/ProcessState.d.ts +1 -0
- package/dist/generated/ProcessState.js +2 -0
- package/dist/generated/ProjectBackfill.d.ts +27 -0
- package/dist/generated/ProjectBackfill.js +2 -0
- package/dist/generated/ProjectRow.d.ts +6 -0
- package/dist/generated/ProjectRow.js +2 -0
- package/dist/generated/ProjectsResponse.d.ts +4 -0
- package/dist/generated/ProjectsResponse.js +1 -0
- package/dist/generated/Provenance.d.ts +5 -0
- package/dist/generated/Provenance.js +2 -0
- package/dist/generated/QuestionOption.d.ts +5 -0
- package/dist/generated/QuestionOption.js +2 -0
- package/dist/generated/RangeUnit.d.ts +1 -0
- package/dist/generated/RangeUnit.js +2 -0
- package/dist/generated/ReadOutcome.d.ts +3 -0
- package/dist/generated/ReadOutcome.js +2 -0
- package/dist/generated/ReadTarget.d.ts +8 -0
- package/dist/generated/ReadTarget.js +1 -0
- package/dist/generated/ResourceRef.d.ts +25 -0
- package/dist/generated/ResourceRef.js +1 -0
- package/dist/generated/ResponseGroup.d.ts +5 -0
- package/dist/generated/ResponseGroup.js +1 -0
- package/dist/generated/ResponseRuntime.d.ts +9 -0
- package/dist/generated/ResponseRuntime.js +2 -0
- package/dist/generated/RuntimeBackfill.d.ts +50 -0
- package/dist/generated/RuntimeBackfill.js +1 -0
- package/dist/generated/RuntimeErrorKind.d.ts +1 -0
- package/dist/generated/RuntimeErrorKind.js +2 -0
- package/dist/generated/RuntimeIngestStatus.d.ts +30 -0
- package/dist/generated/RuntimeIngestStatus.js +2 -0
- package/dist/generated/RuntimeProvenance.d.ts +9 -0
- package/dist/generated/RuntimeProvenance.js +2 -0
- package/dist/generated/RuntimeRow.d.ts +25 -0
- package/dist/generated/RuntimeRow.js +1 -0
- package/dist/generated/RuntimesResponse.d.ts +4 -0
- package/dist/generated/RuntimesResponse.js +1 -0
- package/dist/generated/ScheduleOp.d.ts +1 -0
- package/dist/generated/ScheduleOp.js +2 -0
- package/dist/generated/SearchBuildProgress.d.ts +6 -0
- package/dist/generated/SearchBuildProgress.js +1 -0
- package/dist/generated/SearchBuildStage.d.ts +1 -0
- package/dist/generated/SearchBuildStage.js +2 -0
- package/dist/generated/SearchFilter.d.ts +5 -0
- package/dist/generated/SearchFilter.js +1 -0
- package/dist/generated/SearchFilterKind.d.ts +1 -0
- package/dist/generated/SearchFilterKind.js +2 -0
- package/dist/generated/SearchHit.d.ts +20 -0
- package/dist/generated/SearchHit.js +2 -0
- package/dist/generated/SearchOutcome.d.ts +7 -0
- package/dist/generated/SearchOutcome.js +1 -0
- package/dist/generated/SearchReadiness.d.ts +6 -0
- package/dist/generated/SearchReadiness.js +2 -0
- package/dist/generated/SearchRequest.d.ts +38 -0
- package/dist/generated/SearchRequest.js +2 -0
- package/dist/generated/SearchResponse.d.ts +6 -0
- package/dist/generated/SearchResponse.js +1 -0
- package/dist/generated/SearchState.d.ts +23 -0
- package/dist/generated/SearchState.js +1 -0
- package/dist/generated/ServerFrame.d.ts +56 -0
- package/dist/generated/ServerFrame.js +1 -0
- package/dist/generated/ServiceTier.d.ts +7 -0
- package/dist/generated/ServiceTier.js +2 -0
- package/dist/generated/SessionActivity.d.ts +9 -0
- package/dist/generated/SessionActivity.js +2 -0
- package/dist/generated/SessionDelegation.d.ts +30 -0
- package/dist/generated/SessionDelegation.js +1 -0
- package/dist/generated/SessionResponse.d.ts +4 -0
- package/dist/generated/SessionResponse.js +1 -0
- package/dist/generated/SessionRole.d.ts +1 -0
- package/dist/generated/SessionRole.js +2 -0
- package/dist/generated/SessionRow.d.ts +38 -0
- package/dist/generated/SessionRow.js +1 -0
- package/dist/generated/SessionsResponse.d.ts +4 -0
- package/dist/generated/SessionsResponse.js +1 -0
- package/dist/generated/ShellOutcome.d.ts +5 -0
- package/dist/generated/ShellOutcome.js +2 -0
- package/dist/generated/SourceLocation.d.ts +7 -0
- package/dist/generated/SourceLocation.js +1 -0
- package/dist/generated/SourceRange.d.ts +6 -0
- package/dist/generated/SourceRange.js +1 -0
- package/dist/generated/Stamp.d.ts +13 -0
- package/dist/generated/Stamp.js +2 -0
- package/dist/generated/StatusBasis.d.ts +1 -0
- package/dist/generated/StatusBasis.js +2 -0
- package/dist/generated/StatusResponse.d.ts +17 -0
- package/dist/generated/StatusResponse.js +1 -0
- package/dist/generated/StreamState.d.ts +1 -0
- package/dist/generated/StreamState.js +2 -0
- package/dist/generated/SummaryPurpose.d.ts +1 -0
- package/dist/generated/SummaryPurpose.js +2 -0
- package/dist/generated/TaskOp.d.ts +1 -0
- package/dist/generated/TaskOp.js +2 -0
- package/dist/generated/TaskSnapshot.d.ts +9 -0
- package/dist/generated/TaskSnapshot.js +1 -0
- package/dist/generated/TaskSnapshotItem.d.ts +13 -0
- package/dist/generated/TaskSnapshotItem.js +1 -0
- package/dist/generated/TaskStatus.d.ts +1 -0
- package/dist/generated/TaskStatus.js +2 -0
- package/dist/generated/TextRange.d.ts +4 -0
- package/dist/generated/TextRange.js +2 -0
- package/dist/generated/TimelineBody.d.ts +33 -0
- package/dist/generated/TimelineBody.js +1 -0
- package/dist/generated/TimelineEntry.d.ts +37 -0
- package/dist/generated/TimelineEntry.js +1 -0
- package/dist/generated/TimelineEntryResponse.d.ts +5 -0
- package/dist/generated/TimelineEntryResponse.js +1 -0
- package/dist/generated/TimelineGroup.d.ts +7 -0
- package/dist/generated/TimelineGroup.js +1 -0
- package/dist/generated/TimelineMeta.d.ts +10 -0
- package/dist/generated/TimelineMeta.js +1 -0
- package/dist/generated/TimelineMetaArtifact.d.ts +11 -0
- package/dist/generated/TimelineMetaArtifact.js +1 -0
- package/dist/generated/TimelineMetaArtifactSource.d.ts +10 -0
- package/dist/generated/TimelineMetaArtifactSource.js +1 -0
- package/dist/generated/TimelineMetaPlan.d.ts +8 -0
- package/dist/generated/TimelineMetaPlan.js +1 -0
- package/dist/generated/TimelineMetaPlanSource.d.ts +7 -0
- package/dist/generated/TimelineMetaPlanSource.js +2 -0
- package/dist/generated/TimelineMetaTask.d.ts +13 -0
- package/dist/generated/TimelineMetaTask.js +1 -0
- package/dist/generated/TimelineMetaWorkflow.d.ts +30 -0
- package/dist/generated/TimelineMetaWorkflow.js +1 -0
- package/dist/generated/TimelinePage.d.ts +17 -0
- package/dist/generated/TimelinePage.js +1 -0
- package/dist/generated/TokenSnapshot.d.ts +61 -0
- package/dist/generated/TokenSnapshot.js +1 -0
- package/dist/generated/ToolAction.d.ts +245 -0
- package/dist/generated/ToolAction.js +1 -0
- package/dist/generated/ToolCorrelation.d.ts +5 -0
- package/dist/generated/ToolCorrelation.js +1 -0
- package/dist/generated/ToolFailure.d.ts +6 -0
- package/dist/generated/ToolFailure.js +1 -0
- package/dist/generated/ToolInteraction.d.ts +19 -0
- package/dist/generated/ToolInteraction.js +1 -0
- package/dist/generated/ToolStatus.d.ts +1 -0
- package/dist/generated/ToolStatus.js +2 -0
- package/dist/generated/ToolStatusFact.d.ts +6 -0
- package/dist/generated/ToolStatusFact.js +1 -0
- package/dist/generated/ToolTiming.d.ts +5 -0
- package/dist/generated/ToolTiming.js +2 -0
- package/dist/generated/TruncationScope.d.ts +1 -0
- package/dist/generated/TruncationScope.js +2 -0
- package/dist/generated/TurnGap.d.ts +8 -0
- package/dist/generated/TurnGap.js +2 -0
- package/dist/generated/TurnSpan.d.ts +15 -0
- package/dist/generated/TurnSpan.js +1 -0
- package/dist/generated/UnpricedModel.d.ts +20 -0
- package/dist/generated/UnpricedModel.js +2 -0
- package/dist/generated/UsageCost.d.ts +18 -0
- package/dist/generated/UsageCost.js +2 -0
- package/dist/generated/UsageResponse.d.ts +11 -0
- package/dist/generated/UsageResponse.js +1 -0
- package/dist/generated/UsageScope.d.ts +6 -0
- package/dist/generated/UsageScope.js +2 -0
- package/dist/generated/UserAnswer.d.ts +5 -0
- package/dist/generated/UserAnswer.js +1 -0
- package/dist/generated/UserQuestion.d.ts +9 -0
- package/dist/generated/UserQuestion.js +1 -0
- package/dist/generated/WebNavigationOp.d.ts +1 -0
- package/dist/generated/WebNavigationOp.js +2 -0
- package/dist/generated/WebSearchOutcome.d.ts +5 -0
- package/dist/generated/WebSearchOutcome.js +1 -0
- package/dist/generated/WebSource.d.ts +4 -0
- package/dist/generated/WebSource.js +2 -0
- package/dist/generated/WorkflowAttempt.d.ts +16 -0
- package/dist/generated/WorkflowAttempt.js +1 -0
- package/dist/generated/WorkflowJournalKind.d.ts +1 -0
- package/dist/generated/WorkflowJournalKind.js +2 -0
- package/dist/generated/WorkflowJournalObservation.d.ts +21 -0
- package/dist/generated/WorkflowJournalObservation.js +1 -0
- package/dist/generated/WorkflowPhase.d.ts +5 -0
- package/dist/generated/WorkflowPhase.js +2 -0
- package/dist/generated/WorkflowResultKind.d.ts +1 -0
- package/dist/generated/WorkflowResultKind.js +2 -0
- package/dist/generated/WorkflowRun.d.ts +51 -0
- package/dist/generated/WorkflowRun.js +1 -0
- package/dist/generated/WorkflowRunStatus.d.ts +1 -0
- package/dist/generated/WorkflowRunStatus.js +2 -0
- package/dist/generated/WorkflowUsage.d.ts +10 -0
- package/dist/generated/WorkflowUsage.js +2 -0
- package/dist/generated/WorkflowWorker.d.ts +31 -0
- package/dist/generated/WorkflowWorker.js +1 -0
- package/dist/generated/WorkflowWorkerState.d.ts +1 -0
- package/dist/generated/WorkflowWorkerState.js +2 -0
- package/dist/generated/serde_json/JsonValue.d.ts +3 -0
- package/dist/generated/serde_json/JsonValue.js +2 -0
- package/dist/grants.d.ts +67 -0
- package/dist/grants.js +160 -0
- package/dist/index.d.ts +110 -0
- package/dist/index.js +1 -0
- package/dist/ordered-cache.d.ts +15 -0
- package/dist/ordered-cache.js +63 -0
- package/dist/protocol-version.d.mts +1 -0
- package/dist/protocol-version.mjs +2 -0
- package/package.json +47 -4
package/README.md
CHANGED
|
@@ -1,3 +1,74 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @vibefield/rosetta-protocol
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Install with `npm install @vibefield/rosetta-protocol`. The package ships ESM JavaScript and TypeScript declarations. Its npm version is independent of the wire protocol version.
|
|
4
|
+
|
|
5
|
+
The wire types are generated from `crates/protocol` (ts-rs). Do not edit by hand — regenerate with:
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
TS_RS_EXPORT_DIR=$PWD/clients/ts/generated TS_RS_LARGE_INT=number \
|
|
9
|
+
cargo test -p rosetta-protocol --features ts
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
`TS_RS_LARGE_INT=number` is deliberate: every 64-bit field on the wire is a
|
|
13
|
+
millisecond timestamp, ordinal, or token count — far below 2^53 — and the
|
|
14
|
+
transport is plain JSON, so `JSON.parse` hands consumers `number`s.
|
|
15
|
+
|
|
16
|
+
`client.ts` is the handwritten transport and subscription implementation.
|
|
17
|
+
Consumers use its cancellation, reconnect, and cache APIs instead of merging
|
|
18
|
+
REST pages with WebSocket state themselves. `SessionSubscription.fetchPage`
|
|
19
|
+
holds history; `reveal` exposes its latest patched values; `loadEntry` adds an
|
|
20
|
+
exact anchor. All three share the snapshot's generation and reset together.
|
|
21
|
+
|
|
22
|
+
The client and Electron supervisor import `protocol-version.mjs`. When changing
|
|
23
|
+
the wire incompatibly, bump it together with Rust's `PROTOCOL_VERSION`, regenerate
|
|
24
|
+
the bindings, and refresh the wire golden. The protocol tests check that both
|
|
25
|
+
languages agree. HTTP responses expose `x-rosetta-protocol-version`; WebSockets
|
|
26
|
+
announce the same version in `hello`. Mismatches fail with an actionable error.
|
|
27
|
+
|
|
28
|
+
## Package shape
|
|
29
|
+
|
|
30
|
+
`exports` is exactly three entries, and they are the whole public surface:
|
|
31
|
+
|
|
32
|
+
- `.` — the client plus the generated types. `client.ts` uses `fetch`,
|
|
33
|
+
`WebSocket`, `AbortController`, and `URLSearchParams`, so a consumer of this
|
|
34
|
+
entry needs `DOM` in its `lib`.
|
|
35
|
+
- `./protocol-version` — the bare wire number and nothing else. It carries no
|
|
36
|
+
DOM dependency, so a supervisor that only checks a spawned daemon's version
|
|
37
|
+
imports it here instead of dragging the browser client into its typecheck.
|
|
38
|
+
TypeScript resolves the adjacent `protocol-version.d.mts` for the `.mjs`
|
|
39
|
+
under `moduleResolution` `Bundler` or `Node16`.
|
|
40
|
+
- `./grants` — minting and verifying per-session grants (`canonicalize`,
|
|
41
|
+
`mintGrant`, `verifyGrant`, `parseGrantHeader`). Node-only: it signs with
|
|
42
|
+
`node:crypto`, so a browser bundle never imports it. `node-crypto.d.ts`
|
|
43
|
+
declares the two functions it uses, so `tsc -p clients/ts` needs no
|
|
44
|
+
`@types/node`.
|
|
45
|
+
|
|
46
|
+
Everything else is encapsulated by `exports`: there are no deep
|
|
47
|
+
imports of `./client` or `./generated/*`, and adding one is a change to this
|
|
48
|
+
file, not to a consumer.
|
|
49
|
+
|
|
50
|
+
## Credentials
|
|
51
|
+
|
|
52
|
+
A daemon started with `--token-file` answers 401 to any request without a
|
|
53
|
+
credential (docs/AUTH.md). Pass one as `new RosettaClient({ credential })`,
|
|
54
|
+
or swap it later with `setCredential`:
|
|
55
|
+
|
|
56
|
+
- `{ kind: "bearer", token }` opens every route.
|
|
57
|
+
- `{ kind: "grant", grant }` opens one session's recorded history until the
|
|
58
|
+
grant's `exp` — and that session's recorded-file read (`readFileTarget`)
|
|
59
|
+
when it was minted with `SCOPE_FILES` beside `SCOPE_READ`. The daemon's
|
|
60
|
+
supervisor mints it with `@vibefield/rosetta-protocol/grants`; the client carries it
|
|
61
|
+
as an opaque string.
|
|
62
|
+
|
|
63
|
+
REST requests send it as `Authorization`. WebSocket upgrades send it as the
|
|
64
|
+
subprotocol pair `rosetta` + `rosetta.bearer.<base64url(token)>` or
|
|
65
|
+
`rosetta.grant.<grant>`, because a browser's WebSocket cannot set headers;
|
|
66
|
+
the daemon selects `rosetta`. A 401 throws `UnauthorizedError`, whose
|
|
67
|
+
`reason` is the daemon's `x-rosetta-auth` header. An open socket is not
|
|
68
|
+
re-checked, so a subscription outlives its grant's expiry until it
|
|
69
|
+
reconnects.
|
|
70
|
+
|
|
71
|
+
`npm ci` at the repository root installs the workspaces. `npm test` in this
|
|
72
|
+
directory builds the SDK and runs `test/*.test.mjs` against its emitted JavaScript;
|
|
73
|
+
the grant tests read the shared vectors in
|
|
74
|
+
`crates/server/tests/fixtures/grants.json`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function base64UrlEncode(bytes: Uint8Array): string;
|
|
2
|
+
/** The bytes, or `null` for anything a strict decoder refuses. */
|
|
3
|
+
export declare function base64UrlDecode(text: string): Uint8Array | null;
|
|
4
|
+
export declare function utf8Base64UrlEncode(text: string): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// base64url without padding (RFC 4648 §5). Decoding is strict — the
|
|
2
|
+
// alphabet only, no padding, zero trailing bits — so every byte string has
|
|
3
|
+
// exactly one spelling, the rule the daemon's decoder applies to grants.
|
|
4
|
+
// Browser-safe: the client encodes a bearer with it, grants.ts both ways.
|
|
5
|
+
const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
6
|
+
const VALUES = new Map([...ALPHABET].map((char, index) => [char, index]));
|
|
7
|
+
function digit(value) {
|
|
8
|
+
return ALPHABET.charAt(value & 63);
|
|
9
|
+
}
|
|
10
|
+
export function base64UrlEncode(bytes) {
|
|
11
|
+
let text = "";
|
|
12
|
+
for (let at = 0; at < bytes.length; at += 3) {
|
|
13
|
+
const chunk = ((bytes[at] ?? 0) << 16) | ((bytes[at + 1] ?? 0) << 8) | (bytes[at + 2] ?? 0);
|
|
14
|
+
const width = Math.min(3, bytes.length - at);
|
|
15
|
+
text += digit(chunk >> 18) + digit(chunk >> 12);
|
|
16
|
+
if (width > 1)
|
|
17
|
+
text += digit(chunk >> 6);
|
|
18
|
+
if (width > 2)
|
|
19
|
+
text += digit(chunk);
|
|
20
|
+
}
|
|
21
|
+
return text;
|
|
22
|
+
}
|
|
23
|
+
/** The bytes, or `null` for anything a strict decoder refuses. */
|
|
24
|
+
export function base64UrlDecode(text) {
|
|
25
|
+
if (text.length % 4 === 1)
|
|
26
|
+
return null;
|
|
27
|
+
const bytes = new Uint8Array(Math.floor((text.length * 3) / 4));
|
|
28
|
+
let buffer = 0;
|
|
29
|
+
let bits = 0;
|
|
30
|
+
let index = 0;
|
|
31
|
+
for (const char of text) {
|
|
32
|
+
const value = VALUES.get(char);
|
|
33
|
+
if (value === undefined)
|
|
34
|
+
return null;
|
|
35
|
+
buffer = (buffer << 6) | value;
|
|
36
|
+
bits += 6;
|
|
37
|
+
if (bits >= 8) {
|
|
38
|
+
bits -= 8;
|
|
39
|
+
bytes[index++] = (buffer >> bits) & 0xff;
|
|
40
|
+
buffer &= (1 << bits) - 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Leftover bits of a canonical encoding are zero.
|
|
44
|
+
return buffer === 0 ? bytes : null;
|
|
45
|
+
}
|
|
46
|
+
export function utf8Base64UrlEncode(text) {
|
|
47
|
+
return base64UrlEncode(new TextEncoder().encode(text));
|
|
48
|
+
}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
export { PROTOCOL_VERSION } from "./protocol-version.mjs";
|
|
2
|
+
import type { TimelineEntryResponse } from "./generated/TimelineEntryResponse.js";
|
|
3
|
+
import type { ApiError } from "./generated/ApiError.js";
|
|
4
|
+
import type { ImageVariant } from "./generated/ImageVariant.js";
|
|
5
|
+
import type { AssetRef } from "./generated/AssetRef.js";
|
|
6
|
+
import type { BoostResponse } from "./generated/BoostResponse.js";
|
|
7
|
+
import type { ContributionResponse } from "./generated/ContributionResponse.js";
|
|
8
|
+
import type { CommandResponse } from "./generated/CommandResponse.js";
|
|
9
|
+
import type { CollaborationTimeline } from "./generated/CollaborationTimeline.js";
|
|
10
|
+
import type { DiscoveriesResponse } from "./generated/DiscoveriesResponse.js";
|
|
11
|
+
import type { EnableResponse } from "./generated/EnableResponse.js";
|
|
12
|
+
import type { ErrorCode } from "./generated/ErrorCode.js";
|
|
13
|
+
import type { HeatmapResponse } from "./generated/HeatmapResponse.js";
|
|
14
|
+
import type { ProjectRow } from "./generated/ProjectRow.js";
|
|
15
|
+
import type { ProjectsResponse } from "./generated/ProjectsResponse.js";
|
|
16
|
+
import type { RuntimeRow } from "./generated/RuntimeRow.js";
|
|
17
|
+
import type { RuntimesResponse } from "./generated/RuntimesResponse.js";
|
|
18
|
+
import type { SearchRequest } from "./generated/SearchRequest.js";
|
|
19
|
+
import type { SearchResponse } from "./generated/SearchResponse.js";
|
|
20
|
+
import type { ServerFrame } from "./generated/ServerFrame.js";
|
|
21
|
+
import type { SessionResponse } from "./generated/SessionResponse.js";
|
|
22
|
+
import type { SessionRow } from "./generated/SessionRow.js";
|
|
23
|
+
import type { SessionsResponse } from "./generated/SessionsResponse.js";
|
|
24
|
+
import type { Stamp } from "./generated/Stamp.js";
|
|
25
|
+
import type { StatusResponse } from "./generated/StatusResponse.js";
|
|
26
|
+
import type { TimelinePage } from "./generated/TimelinePage.js";
|
|
27
|
+
import type { TimelineEntry } from "./generated/TimelineEntry.js";
|
|
28
|
+
import type { TimelineMeta } from "./generated/TimelineMeta.js";
|
|
29
|
+
import type { TimelineMetaPlanSource } from "./generated/TimelineMetaPlanSource.js";
|
|
30
|
+
import type { PricingResponse } from "./generated/PricingResponse.js";
|
|
31
|
+
import type { UsageResponse } from "./generated/UsageResponse.js";
|
|
32
|
+
import type { ActivityResponse } from "./generated/ActivityResponse.js";
|
|
33
|
+
import type { DayUsageResponse } from "./generated/DayUsageResponse.js";
|
|
34
|
+
export declare const DEFAULT_BASE_URL = "http://127.0.0.1:4640";
|
|
35
|
+
/**
|
|
36
|
+
* How a client proves itself to a daemon started with `--token-file`
|
|
37
|
+
* (docs/AUTH.md). A bearer opens every route; a grant opens one session's
|
|
38
|
+
* recorded history until its `exp`. The client only carries a grant, as an
|
|
39
|
+
* opaque string: minting needs the key (`@vibefield/rosetta-protocol/grants`).
|
|
40
|
+
*/
|
|
41
|
+
export type RosettaCredential = {
|
|
42
|
+
readonly kind: "bearer";
|
|
43
|
+
readonly token: string;
|
|
44
|
+
} | {
|
|
45
|
+
readonly kind: "grant";
|
|
46
|
+
readonly grant: string;
|
|
47
|
+
};
|
|
48
|
+
/** Why a daemon refused a request: the `x-rosetta-auth` header of its 401. */
|
|
49
|
+
export type AuthRefusal = "missing" | "bad-token" | "malformed" | "bad-signature" | "expired" | "wrong-session" | "wrong-scope" | "wrong-route" | "grants-disabled";
|
|
50
|
+
export declare const AUTH_REFUSALS: readonly AuthRefusal[];
|
|
51
|
+
export declare const AUTH_REASON_HEADER = "x-rosetta-auth";
|
|
52
|
+
/** The subprotocol a daemon selects for a credentialed WebSocket upgrade. */
|
|
53
|
+
export declare const AUTH_WS_PROTOCOL = "rosetta";
|
|
54
|
+
/** The `Authorization` value that presents `credential`. */
|
|
55
|
+
export declare function authorizationHeader(credential: RosettaCredential): string;
|
|
56
|
+
/**
|
|
57
|
+
* A browser's WebSocket cannot set `Authorization`, so the credential rides
|
|
58
|
+
* the subprotocol list beside the marker the daemon selects. The daemon
|
|
59
|
+
* never echoes the credential entry.
|
|
60
|
+
*/
|
|
61
|
+
export declare function webSocketProtocols(credential: RosettaCredential): string[];
|
|
62
|
+
export interface RosettaClientOptions {
|
|
63
|
+
baseUrl?: string;
|
|
64
|
+
/** Injectable for Node or test environments. */
|
|
65
|
+
fetchFn?: typeof fetch;
|
|
66
|
+
WebSocketImpl?: typeof WebSocket;
|
|
67
|
+
requestTimeoutMs?: number;
|
|
68
|
+
notificationIntervalMs?: number;
|
|
69
|
+
/** Presented on every request and upgrade; see {@link RosettaCredential}. */
|
|
70
|
+
credential?: RosettaCredential;
|
|
71
|
+
}
|
|
72
|
+
export declare class ApiRequestError extends Error {
|
|
73
|
+
readonly status: number;
|
|
74
|
+
readonly code: ErrorCode | null;
|
|
75
|
+
constructor(status: number, code: ErrorCode | null, message: string);
|
|
76
|
+
}
|
|
77
|
+
/** The bound watermark no longer matches: refetch from the head. */
|
|
78
|
+
export declare class CursorExpiredError extends ApiRequestError {
|
|
79
|
+
constructor(message: string);
|
|
80
|
+
}
|
|
81
|
+
/** A 401: the daemon wants a credential this client did not present, or
|
|
82
|
+
* refused the one it did. `reason` is null only from a daemon that named
|
|
83
|
+
* none. */
|
|
84
|
+
export declare class UnauthorizedError extends ApiRequestError {
|
|
85
|
+
readonly reason: AuthRefusal | null;
|
|
86
|
+
constructor(reason: AuthRefusal | null, message: string);
|
|
87
|
+
}
|
|
88
|
+
export type SubscriptionStatus = "connecting" | "syncing" | "live" | "resyncing" | "closed";
|
|
89
|
+
export interface SessionSubscriptionHandlers {
|
|
90
|
+
/** Every replacement invalidates all loaded history, anchors, and in-flight reads. */
|
|
91
|
+
onReset?: () => void;
|
|
92
|
+
onSnapshot?: (page: TimelinePage) => void;
|
|
93
|
+
/** The full ordered visible timeline after each coalesced change. */
|
|
94
|
+
onChange?: (entries: TimelineEntry[]) => void;
|
|
95
|
+
/** The complete light work index. Bodies remain behind lazy references. */
|
|
96
|
+
onTimelineMetaChange?: (timelineMeta: TimelineMeta) => void;
|
|
97
|
+
onStatus?: (status: SubscriptionStatus) => void;
|
|
98
|
+
onError?: (error: ApiError) => void;
|
|
99
|
+
}
|
|
100
|
+
export interface MetaState {
|
|
101
|
+
runtimes: RuntimeRow[];
|
|
102
|
+
projects: ProjectRow[];
|
|
103
|
+
sessions: SessionRow[];
|
|
104
|
+
}
|
|
105
|
+
export interface MetaSubscriptionHandlers {
|
|
106
|
+
/** Snapshots establish a baseline; only mutations describe subsequent changes. */
|
|
107
|
+
onChange?: (state: MetaState, source: "snapshot" | "mutation") => void;
|
|
108
|
+
onStatus?: (status: SubscriptionStatus) => void;
|
|
109
|
+
onError?: (error: ApiError) => void;
|
|
110
|
+
}
|
|
111
|
+
export declare class RosettaClient {
|
|
112
|
+
private origin;
|
|
113
|
+
get baseUrl(): string;
|
|
114
|
+
private connection;
|
|
115
|
+
private readonly connectionListeners;
|
|
116
|
+
private readonly subscriptions;
|
|
117
|
+
private readonly requestTimeoutMs;
|
|
118
|
+
private readonly notificationIntervalMs;
|
|
119
|
+
private readonly fetchFn;
|
|
120
|
+
private readonly WebSocketImpl;
|
|
121
|
+
private credential;
|
|
122
|
+
constructor(options?: RosettaClientOptions);
|
|
123
|
+
/**
|
|
124
|
+
* Replace the credential (a refreshed grant, a rotated bearer), or drop
|
|
125
|
+
* it. Later requests and every later (re)connect present it. An open
|
|
126
|
+
* socket is left alone: the daemon checks a credential at the upgrade, so
|
|
127
|
+
* a grant that expires under a live subscription ends only with its
|
|
128
|
+
* socket, and the reconnect then needs a fresh one.
|
|
129
|
+
*/
|
|
130
|
+
setCredential(credential: RosettaCredential | null): void;
|
|
131
|
+
private response;
|
|
132
|
+
private request;
|
|
133
|
+
status(signal?: AbortSignal): Promise<StatusResponse>;
|
|
134
|
+
/** The roll call's census — what discovery found, content-free. */
|
|
135
|
+
discoveries(signal?: AbortSignal): Promise<DiscoveriesResponse>;
|
|
136
|
+
/** Consent: enroll the chosen agent kinds. Grantable exactly once, while
|
|
137
|
+
* the daemon is awaiting consent. */
|
|
138
|
+
enableRuntimes(kinds: string[], signal?: AbortSignal): Promise<EnableResponse>;
|
|
139
|
+
/** Attention-directed ingestion: the reader opened a still-queued
|
|
140
|
+
* session — ask the daemon to read it next. Advisory; safe to fire on
|
|
141
|
+
* every selection of a pending session. */
|
|
142
|
+
boost(sessionId: string, signal?: AbortSignal): Promise<BoostResponse>;
|
|
143
|
+
runtimes(signal?: AbortSignal): Promise<RuntimesResponse>;
|
|
144
|
+
projects(signal?: AbortSignal): Promise<ProjectsResponse>;
|
|
145
|
+
sessions(options?: {
|
|
146
|
+
project?: string;
|
|
147
|
+
limit?: number;
|
|
148
|
+
native_session_id?: string;
|
|
149
|
+
}, signal?: AbortSignal): Promise<SessionsResponse>;
|
|
150
|
+
/** Resolve canonical rows for provider-native session ids; children come
|
|
151
|
+
* back too, and `root_session_id` names the navigable thread. */
|
|
152
|
+
sessionsByNativeId(nativeSessionIds: readonly string[], signal?: AbortSignal): Promise<SessionsResponse>;
|
|
153
|
+
session(id: string, signal?: AbortSignal): Promise<SessionResponse>;
|
|
154
|
+
/**
|
|
155
|
+
* One backward page. Pass the previous page's `cursor` to continue; a
|
|
156
|
+
* rewrite underneath throws {@link CursorExpiredError} — refetch from the
|
|
157
|
+
* head (no cursor).
|
|
158
|
+
*/
|
|
159
|
+
timeline(sessionId: string, options?: {
|
|
160
|
+
limit?: number;
|
|
161
|
+
cursor?: string;
|
|
162
|
+
}, signal?: AbortSignal): Promise<TimelinePage>;
|
|
163
|
+
/** Complete delivered collaboration history for one team member. The
|
|
164
|
+
* response deliberately excludes private prose and tool rows. */
|
|
165
|
+
collaborationTimeline(sessionId: string, signal?: AbortSignal): Promise<CollaborationTimeline>;
|
|
166
|
+
/** An exact row and the generation it belongs to. */
|
|
167
|
+
timelineEntryResponse(sessionId: string, timelineId: string, signal?: AbortSignal): Promise<TimelineEntryResponse>;
|
|
168
|
+
timelineEntry(sessionId: string, timelineId: string, signal?: AbortSignal): Promise<TimelineEntry>;
|
|
169
|
+
reportWork(sessionId: string, timelineId: string, signal?: AbortSignal): Promise<TimelineEntry[]>;
|
|
170
|
+
/** Recover one deliberately omitted command body from its raw-ledger
|
|
171
|
+
* record. Nothing is fetched until the reader opens the disclosure. */
|
|
172
|
+
command(sessionId: string, timelineId: string, signal?: AbortSignal): Promise<CommandResponse>;
|
|
173
|
+
/** Read the live file named by one canonical file-bearing target. The caller
|
|
174
|
+
* supplies identities and an index, never a path; the daemon resolves the
|
|
175
|
+
* exact path already stored on that timeline row. */
|
|
176
|
+
/** Direct image URLs let the browser share compressed and decoded resources.
|
|
177
|
+
* Recipes are finite, versioned and enforced by the daemon. */
|
|
178
|
+
imageAssetUrl(asset: AssetRef, variant: ImageVariant): string;
|
|
179
|
+
imageFileTargetUrl(sessionId: string, timelineId: string, targetIndex: number, variant: ImageVariant): string;
|
|
180
|
+
readFileTarget(sessionId: string, timelineId: string, targetIndex: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
181
|
+
/** Resolve a canonical oversized-text member only when its disclosure is
|
|
182
|
+
* opened. Asset references are daemon-owned and may not redirect this
|
|
183
|
+
* authenticated/local client to another origin. */
|
|
184
|
+
readTextAsset(asset: AssetRef, signal?: AbortSignal): Promise<string>;
|
|
185
|
+
readAsset(asset: AssetRef, signal?: AbortSignal): Promise<Uint8Array>;
|
|
186
|
+
/** Read one exact plan document selected from timeline_meta. */
|
|
187
|
+
readPlan(sessionId: string, source: TimelineMetaPlanSource, signal?: AbortSignal): Promise<Uint8Array>;
|
|
188
|
+
search(request: SearchRequest, signal?: AbortSignal): Promise<SearchResponse>;
|
|
189
|
+
heatmap(projectId: string, options?: {
|
|
190
|
+
sinceMs?: number;
|
|
191
|
+
offsetMinutes?: number;
|
|
192
|
+
}, signal?: AbortSignal): Promise<HeatmapResponse>;
|
|
193
|
+
contribution(projectId: string, signal?: AbortSignal): Promise<ContributionResponse>;
|
|
194
|
+
/** The heatmap figure's decomposition over the same window: per-model days
|
|
195
|
+
* (they sum back to the heatmap exactly) plus an hour-of-day profile. */
|
|
196
|
+
usage(projectId: string, options?: {
|
|
197
|
+
sinceMs?: number;
|
|
198
|
+
offsetMinutes?: number;
|
|
199
|
+
}, signal?: AbortSignal): Promise<UsageResponse>;
|
|
200
|
+
/** Hourly model tokens for one date, using the heatmap's timezone offset. */
|
|
201
|
+
dayUsage(projectId: string, day: string, offsetMinutes?: number, signal?: AbortSignal): Promise<DayUsageResponse>;
|
|
202
|
+
/** Which top-level sessions were active in a window of at most seven days,
|
|
203
|
+
* newest recorded activity first, each with its tree's turns and the gaps
|
|
204
|
+
* inside them longer than `gapMs` (15 minutes unless asked). It spans
|
|
205
|
+
* sessions, so it needs the bearer. */
|
|
206
|
+
activity(window: {
|
|
207
|
+
sinceMs: number;
|
|
208
|
+
untilMs?: number;
|
|
209
|
+
sessions?: readonly string[];
|
|
210
|
+
gapMs?: number;
|
|
211
|
+
limit?: number;
|
|
212
|
+
}, signal?: AbortSignal): Promise<ActivityResponse>;
|
|
213
|
+
/** The price catalog behind every cost figure: its basis (list-price
|
|
214
|
+
* equivalent), version, sources, and the catalog the projection's rollup
|
|
215
|
+
* was priced with. */
|
|
216
|
+
pricing(signal?: AbortSignal): Promise<PricingResponse>;
|
|
217
|
+
/** A restarted app-owned daemon may bind another port. Abort old requests
|
|
218
|
+
* and reconnect existing consumers without losing the reader's selection. */
|
|
219
|
+
setBaseUrl(baseUrl: string): void;
|
|
220
|
+
onConnectionChange(listener: () => void): () => void;
|
|
221
|
+
private transport;
|
|
222
|
+
subscribeSession(sessionId: string, handlers: SessionSubscriptionHandlers): SessionSubscription;
|
|
223
|
+
subscribeMeta(handlers: MetaSubscriptionHandlers): MetaSubscription;
|
|
224
|
+
subscribeCollaboration(sessionId: string, handlers: CollaborationSubscriptionHandlers): CollaborationSubscription;
|
|
225
|
+
}
|
|
226
|
+
interface SubscriptionTransport {
|
|
227
|
+
url: () => string;
|
|
228
|
+
/** The credential's subprotocol pair, read at every (re)connect. */
|
|
229
|
+
protocols: () => string[] | undefined;
|
|
230
|
+
socket: typeof WebSocket;
|
|
231
|
+
interval: number;
|
|
232
|
+
onClose: (sub: BaseSubscription) => void;
|
|
233
|
+
}
|
|
234
|
+
declare abstract class BaseSubscription {
|
|
235
|
+
protected stamp: Stamp | null;
|
|
236
|
+
protected closed: boolean;
|
|
237
|
+
private readonly transport;
|
|
238
|
+
private socket;
|
|
239
|
+
private attempts;
|
|
240
|
+
private status;
|
|
241
|
+
private reconnectTimer;
|
|
242
|
+
private deadline;
|
|
243
|
+
private changeTimer;
|
|
244
|
+
constructor(transport: SubscriptionTransport);
|
|
245
|
+
protected start(): void;
|
|
246
|
+
private connect;
|
|
247
|
+
private retry;
|
|
248
|
+
private clearDeadline;
|
|
249
|
+
protected live(): void;
|
|
250
|
+
protected setStatus(status: SubscriptionStatus): void;
|
|
251
|
+
protected changed(immediate?: boolean): void;
|
|
252
|
+
protected cancelChange(): void;
|
|
253
|
+
/** Drop a generation and request an authoritative snapshot. */
|
|
254
|
+
restart(): void;
|
|
255
|
+
close(): void;
|
|
256
|
+
protected abstract invalidate(): void;
|
|
257
|
+
protected abstract handleFrame(frame: ServerFrame): void;
|
|
258
|
+
protected abstract flushChanges(): void;
|
|
259
|
+
protected abstract onStatus(status: SubscriptionStatus): void;
|
|
260
|
+
protected abstract onError(error: ApiError): void;
|
|
261
|
+
protected dispose(): void;
|
|
262
|
+
}
|
|
263
|
+
export declare class SessionSubscription extends BaseSubscription {
|
|
264
|
+
private readonly handlers;
|
|
265
|
+
private readonly client;
|
|
266
|
+
private readonly sessionId;
|
|
267
|
+
private readonly rows;
|
|
268
|
+
private readonly visible;
|
|
269
|
+
private timelineMeta;
|
|
270
|
+
private generation;
|
|
271
|
+
private watermark;
|
|
272
|
+
private readonly pending;
|
|
273
|
+
private rowsDirty;
|
|
274
|
+
private metaDirty;
|
|
275
|
+
constructor(transport: SubscriptionTransport, handlers: SessionSubscriptionHandlers, client: RosettaClient, sessionId: string);
|
|
276
|
+
entries(): TimelineEntry[];
|
|
277
|
+
protected dispose(): void;
|
|
278
|
+
protected invalidate(): void;
|
|
279
|
+
protected handleFrame(frame: ServerFrame): void;
|
|
280
|
+
private apply;
|
|
281
|
+
/** Hold a page in this cache without displaying it until the reader pulls. */
|
|
282
|
+
fetchPage(cursor: string, limit?: number, signal?: AbortSignal): Promise<TimelinePage>;
|
|
283
|
+
/** Reveal cached identities using their latest patched values. */
|
|
284
|
+
reveal(entries: readonly TimelineEntry[]): void;
|
|
285
|
+
loadEntry(timelineId: string, signal?: AbortSignal): Promise<boolean>;
|
|
286
|
+
private read;
|
|
287
|
+
protected flushChanges(): void;
|
|
288
|
+
protected onStatus(status: SubscriptionStatus): void;
|
|
289
|
+
protected onError(error: ApiError): void;
|
|
290
|
+
}
|
|
291
|
+
export declare class MetaSubscription extends BaseSubscription {
|
|
292
|
+
private readonly handlers;
|
|
293
|
+
private readonly runtimes;
|
|
294
|
+
private readonly projects;
|
|
295
|
+
private readonly sessions;
|
|
296
|
+
private dirty;
|
|
297
|
+
private source;
|
|
298
|
+
constructor(transport: SubscriptionTransport, handlers: MetaSubscriptionHandlers);
|
|
299
|
+
state(): MetaState;
|
|
300
|
+
protected invalidate(): void;
|
|
301
|
+
protected handleFrame(frame: ServerFrame): void;
|
|
302
|
+
protected flushChanges(): void;
|
|
303
|
+
protected onStatus(status: SubscriptionStatus): void;
|
|
304
|
+
protected onError(error: ApiError): void;
|
|
305
|
+
}
|
|
306
|
+
export interface CollaborationSubscriptionHandlers {
|
|
307
|
+
onChange?: (state: CollaborationTimeline) => void;
|
|
308
|
+
onReset?: () => void;
|
|
309
|
+
onStatus?: (status: SubscriptionStatus) => void;
|
|
310
|
+
onError?: (error: ApiError) => void;
|
|
311
|
+
}
|
|
312
|
+
export declare class CollaborationSubscription extends BaseSubscription {
|
|
313
|
+
private readonly handlers;
|
|
314
|
+
private readonly rows;
|
|
315
|
+
private readonly observations;
|
|
316
|
+
private dirty;
|
|
317
|
+
constructor(transport: SubscriptionTransport, handlers: CollaborationSubscriptionHandlers);
|
|
318
|
+
private observe;
|
|
319
|
+
protected invalidate(): void;
|
|
320
|
+
protected handleFrame(frame: ServerFrame): void;
|
|
321
|
+
protected flushChanges(): void;
|
|
322
|
+
protected onStatus(status: SubscriptionStatus): void;
|
|
323
|
+
protected onError(error: ApiError): void;
|
|
324
|
+
}
|