Skip to main content
Version: v1

Client Class

Signature​

export declare class Client

Constructors​

ConstructorDescription
(constructor)(specToSegment, logger, options)Constructs a new instance of the Client class

Properties​

PropertyTypeDescription
accumOpsnumber
accumTimenumber
accumWindownumber
accumWindowTimenumber
localOpsnumber
localTimenumber
loggerITelemetryLogger
longClientIdstring | undefined
maxWindowTimenumber
measureOpsboolean
mergeTreeMergeTree
mergeTreeDeltaCallbackMergeTreeDeltaCallback | undefined
mergeTreeMaintenanceCallbackMergeTreeMaintenanceCallback | undefined
specToSegment(spec: IJSONSegment) => ISegment

Methods​

MethodAlertsReturn TypeDescription
addLocalReference(lref)Deprecatedvoid
addLongClientId(longClientId)void
annotateMarker(marker, props, combiningOp)IMergeTreeAnnotateMsg | undefinedAnnotates the markers with the provided properties
annotateMarkerNotifyConsensus(marker, props, consensusCallback)IMergeTreeAnnotateMsg | undefinedAnnotate a marker and call the callback on consensus.
annotateRangeLocal(start, end, props, combiningOp)IMergeTreeAnnotateMsg | undefinedAnnotates the range with the provided properties
applyMsg(msg, local)void
applyStashedOp(op)SegmentGroup
applyStashedOp(op)SegmentGroup[]
applyStashedOp(op)SegmentGroup | SegmentGroup[]
cloneFromSegments()Client
createLocalReferencePosition(segment, offset, refType, properties)LocalReferencePosition
createTextHelper()MergeTreeTextHelper
findReconnectionPosition(segment, localSeq)numberDuring reconnect, we must find the positions to pending segments relative to other pending segments. This methods computes that position relative to a localSeq. Pending segments above the localSeq will be ignored.
findTile(startPos, tileLabel, preceding){ tile: ReferencePosition; pos: number; } | undefined
getClientId()number
getCollabWindow()CollaborationWindow
getContainingSegment(pos, op){ segment: T | undefined; offset: number | undefined; }
getCurrentSeq()number
getLength()number
getLongClientId(shortClientId)string
getMarkerFromId(id)ISegment | undefined
getOrAddShortClientId(longClientId)number
getPosition(segment)numberReturns the current position of a segment, and -1 if the segment does not exist in this merge tree
getPropertiesAtPosition(pos)PropertySet | undefined
getRangeExtentsOfPosition(pos){ posStart: number | undefined; posAfterEnd: number | undefined; }
getShortClientId(longClientId)number
getSlideToSegment(segoff){ segment: ISegment | undefined; offset: number | undefined; }Returns the position to slide a reference to if a slide is required.
getStackContext(startPos, rangeLabels)RangeStackMap
insertAtReferencePositionLocal(refPos, segment)IMergeTreeInsertMsg | undefined
insertSegmentLocal(pos, segment)IMergeTreeInsertMsg | undefined
load(runtime, storage, serializer)Promise<{ catchupOpsP: Promise<ISequencedDocumentMessage[]>; }>
localReferencePositionToPosition(lref)number
localTransaction(groupOp)void
peekPendingSegmentGroups(count)SegmentGroup | SegmentGroup[] | undefinedThe merge tree maintains a queue of segment groups for each local operation. These segment groups track segments modified by an operation. This method peeks the tail of that queue, and returns the segments groups there. It is used to get the segment group(s) for the previous operations.
posFromRelativePos(relativePos)numberGiven a position specified relative to a marker id, lookup the marker and convert the position to a character position.
rebasePosition(pos, seqNumberFrom, localSeq)number

Rebases a (local) position from the perspective { seq: seqNumberFrom, localSeq } to the perspective of the current sequence number. This is desirable when rebasing operations for reconnection.

If the position refers to a segment/offset that was removed by some operation between seqNumberFrom and the current sequence number, the returned position will align with the position of a reference given SlideOnRemove semantics.

regeneratePendingOp(resetOp, segmentGroup)IMergeTreeOpGiven an pending operation and segment group, regenerate the op, so it can be resubmitted
removeLocalReference(lref)DeprecatedLocalReferencePosition | undefined
removeLocalReferencePosition(lref)LocalReferencePosition | undefined
removeRangeLocal(start, end)IMergeTreeRemoveMsg | undefinedRemoves the range
resolveRemoteClientPosition(remoteClientPosition, remoteClientRefSeq, remoteClientId)number | undefinedResolves a remote client's position against the local sequence and returns the remote client's position relative to the local sequence
serializeGCData(handle, handleCollectingSerializer)voidSerializes the data required for garbage collection. The IFluidHandles stored in all segments that haven't been removed represent routes to other objects. We serialize the data in these segments using the passed in serializer which keeps track of all serialized handles.
startOrUpdateCollaboration(longClientId, minSeq, currentSeq)void
summarize(runtime, handle, serializer, catchUpMsgs)ISummaryTreeWithStats
updateConsensusProperty(op, msg)void
updateMinSeq(minSeq)void
updateSeqNumbers(min, seq)void
walkSegments(handler, start, end, accum, splitRange)void
walkSegments(handler, start, end, accum, splitRange)void

Constructor Details​

(constructor)​

Constructs a new instance of the Client class

Signature​

constructor(specToSegment: (spec: IJSONSegment) => ISegment, logger: ITelemetryLogger, options?: PropertySet);

Parameters​

ParameterModifiersTypeDescription
specToSegment(spec: IJSONSegment) => ISegment
loggerITelemetryLogger
optionsoptionalPropertySet

Property Details​

accumOps​

Signature​

accumOps: number;

Type: number

accumTime​

Signature​

accumTime: number;

Type: number

accumWindow​

Signature​

accumWindow: number;

Type: number

accumWindowTime​

Signature​

accumWindowTime: number;

Type: number

localOps​

Signature​

localOps: number;

Type: number

localTime​

Signature​

localTime: number;

Type: number

logger​

Signature​

readonly logger: ITelemetryLogger;

Type: ITelemetryLogger

longClientId​

Signature​

longClientId: string | undefined;

Type: string | undefined

maxWindowTime​

Signature​

maxWindowTime: number;

Type: number

measureOps​

Signature​

measureOps: boolean;

Type: boolean

mergeTree​

Signature​

protected readonly mergeTree: MergeTree;

Type: MergeTree

mergeTreeDeltaCallback​

Signature​

get mergeTreeDeltaCallback(): MergeTreeDeltaCallback | undefined;

set mergeTreeDeltaCallback(callback: MergeTreeDeltaCallback | undefined);

Type: MergeTreeDeltaCallback | undefined

mergeTreeMaintenanceCallback​

Signature​

get mergeTreeMaintenanceCallback(): MergeTreeMaintenanceCallback | undefined;

set mergeTreeMaintenanceCallback(callback: MergeTreeMaintenanceCallback | undefined);

Type: MergeTreeMaintenanceCallback | undefined

specToSegment​

Signature​

readonly specToSegment: (spec: IJSONSegment) => ISegment;

Type: (spec: IJSONSegment) => ISegment

Method Details​

addLocalReference​

This API is deprecated and will be removed in a future release.
  • use createReferencePosition instead

Signature​

addLocalReference(lref: LocalReference): void;

Parameters​

ParameterTypeDescription
lrefLocalReference

addLongClientId​

Signature​

addLongClientId(longClientId: string): void;

Parameters​

ParameterTypeDescription
longClientIdstring

annotateMarker​

Annotates the markers with the provided properties

Signature​

annotateMarker(marker: Marker, props: PropertySet, combiningOp?: ICombiningOp): IMergeTreeAnnotateMsg | undefined;

Parameters​

ParameterModifiersTypeDescription
markerMarkerThe marker to annotate
propsPropertySetThe properties to annotate the marker with
combiningOpoptionalICombiningOpOptional. Specifies how to combine values for the property, such as "incr" for increment.

Returns​

The annotate op if valid, otherwise undefined

Return type: IMergeTreeAnnotateMsg | undefined

annotateMarkerNotifyConsensus​

Annotate a marker and call the callback on consensus.

Signature​

annotateMarkerNotifyConsensus(marker: Marker, props: PropertySet, consensusCallback: (m: Marker) => void): IMergeTreeAnnotateMsg | undefined;

Parameters​

ParameterTypeDescription
markerMarkerThe marker to annotate
propsPropertySetThe properties to annotate the marker with
consensusCallback(m: Marker) => voidThe callback called when consensus is reached

Returns​

The annotate op if valid, otherwise undefined

Return type: IMergeTreeAnnotateMsg | undefined

annotateRangeLocal​

Annotates the range with the provided properties

Signature​

annotateRangeLocal(start: number, end: number, props: PropertySet, combiningOp: ICombiningOp | undefined): IMergeTreeAnnotateMsg | undefined;

Parameters​

ParameterTypeDescription
startnumberThe inclusive start position of the range to annotate
endnumberThe exclusive end position of the range to annotate
propsPropertySetThe properties to annotate the range with
combiningOpICombiningOp | undefinedSpecifies how to combine values for the property, such as "incr" for increment.

Returns​

The annotate op if valid, otherwise undefined

Return type: IMergeTreeAnnotateMsg | undefined

applyMsg​

Signature​

applyMsg(msg: ISequencedDocumentMessage, local?: boolean): void;

Parameters​

ParameterModifiersTypeDescription
msgISequencedDocumentMessage
localoptionalboolean

applyStashedOp​

Signature​

applyStashedOp(op: IMergeTreeDeltaOp): SegmentGroup;

Parameters​

ParameterTypeDescription
opIMergeTreeDeltaOp

Returns​

Return type: SegmentGroup

applyStashedOp​

Signature​

applyStashedOp(op: IMergeTreeGroupMsg): SegmentGroup[];

Parameters​

ParameterTypeDescription
opIMergeTreeGroupMsg

Returns​

Return type: SegmentGroup[]

applyStashedOp​

Signature​

applyStashedOp(op: IMergeTreeOp): SegmentGroup | SegmentGroup[];

Parameters​

ParameterTypeDescription
opIMergeTreeOp

Returns​

Return type: SegmentGroup | SegmentGroup[]

cloneFromSegments​

Signature​

cloneFromSegments(): Client;

Returns​

Return type: Client

createLocalReferencePosition​

Signature​

createLocalReferencePosition(segment: ISegment, offset: number | undefined, refType: ReferenceType, properties: PropertySet | undefined): LocalReferencePosition;

Parameters​

ParameterTypeDescription
segmentISegment
offsetnumber | undefined
refTypeReferenceType
propertiesPropertySet | undefined

Returns​

Return type: LocalReferencePosition

createTextHelper​

Signature​

createTextHelper(): MergeTreeTextHelper;

Returns​

Return type: MergeTreeTextHelper

findReconnectionPosition​

During reconnect, we must find the positions to pending segments relative to other pending segments. This methods computes that position relative to a localSeq. Pending segments above the localSeq will be ignored.

Signature​

protected findReconnectionPosition(segment: ISegment, localSeq: number): number;

Parameters​

ParameterTypeDescription
segmentISegmentThe segment to find the position for
localSeqnumberThe localSeq to find the position of the segment at

Returns​

Return type: number

findTile​

Signature​

findTile(startPos: number, tileLabel: string, preceding?: boolean): {
tile: ReferencePosition;
pos: number;
} | undefined;

Parameters​

ParameterModifiersTypeDescription
startPosnumber
tileLabelstring
precedingoptionalboolean

Returns​

Return type: { tile: ReferencePosition; pos: number; } | undefined

getClientId​

Signature​

getClientId(): number;

Returns​

Return type: number

getCollabWindow​

Signature​

getCollabWindow(): CollaborationWindow;

Returns​

Return type: CollaborationWindow

getContainingSegment​

Signature​

getContainingSegment<T extends ISegment>(pos: number, op?: ISequencedDocumentMessage): {
segment: T | undefined;
offset: number | undefined;
};
Type Parameters​
ParameterConstraintDescription
TISegment

Parameters​

ParameterModifiersTypeDescription
posnumber
opoptionalISequencedDocumentMessage

Returns​

Return type: { segment: T | undefined; offset: number | undefined; }

getCurrentSeq​

Signature​

getCurrentSeq(): number;

Returns​

Return type: number

getLength​

Signature​

getLength(): number;

Returns​

Return type: number

getLongClientId​

Signature​

getLongClientId(shortClientId: number): string;

Parameters​

ParameterTypeDescription
shortClientIdnumber

Returns​

Return type: string

getMarkerFromId​

Signature​

getMarkerFromId(id: string): ISegment | undefined;

Parameters​

ParameterTypeDescription
idstring

Returns​

Return type: ISegment | undefined

getOrAddShortClientId​

Signature​

getOrAddShortClientId(longClientId: string): number;

Parameters​

ParameterTypeDescription
longClientIdstring

Returns​

Return type: number

getPosition​

Returns the current position of a segment, and -1 if the segment does not exist in this merge tree

Signature​

getPosition(segment: ISegment): number;

Parameters​

ParameterTypeDescription
segmentISegmentThe segment to get the position of

Returns​

Return type: number

getPropertiesAtPosition​

Signature​

getPropertiesAtPosition(pos: number): PropertySet | undefined;

Parameters​

ParameterTypeDescription
posnumber

Returns​

Return type: PropertySet | undefined

getRangeExtentsOfPosition​

Signature​

getRangeExtentsOfPosition(pos: number): {
posStart: number | undefined;
posAfterEnd: number | undefined;
};

Parameters​

ParameterTypeDescription
posnumber

Returns​

Return type: { posStart: number | undefined; posAfterEnd: number | undefined; }

getShortClientId​

Signature​

getShortClientId(longClientId: string): number;

Parameters​

ParameterTypeDescription
longClientIdstring

Returns​

Return type: number

getSlideToSegment​

Returns the position to slide a reference to if a slide is required.

Signature​

getSlideToSegment(segoff: {
segment: ISegment | undefined;
offset: number | undefined;
}): {
segment: ISegment | undefined;
offset: number | undefined;
};

Parameters​

ParameterTypeDescription
segoff{ segment: ISegment | undefined; offset: number | undefined; }The segment and offset to slide from

Returns​

  • segment and offset to slide the reference to

Return type: { segment: ISegment | undefined; offset: number | undefined; }

getStackContext​

Signature​

getStackContext(startPos: number, rangeLabels: string[]): RangeStackMap;

Parameters​

ParameterTypeDescription
startPosnumber
rangeLabelsstring[]

Returns​

Return type: RangeStackMap

insertAtReferencePositionLocal​

Signature​

insertAtReferencePositionLocal(refPos: ReferencePosition, segment: ISegment): IMergeTreeInsertMsg | undefined;

Parameters​

ParameterTypeDescription
refPosReferencePositionThe reference position to insert the segment at
segmentISegmentThe segment to insert

Returns​

Return type: IMergeTreeInsertMsg | undefined

insertSegmentLocal​

Signature​

insertSegmentLocal(pos: number, segment: ISegment): IMergeTreeInsertMsg | undefined;

Parameters​

ParameterTypeDescription
posnumberThe position to insert the segment at
segmentISegmentThe segment to insert

Returns​

Return type: IMergeTreeInsertMsg | undefined

load​

Signature​

load(runtime: IFluidDataStoreRuntime, storage: IChannelStorageService, serializer: IFluidSerializer): Promise<{
catchupOpsP: Promise<ISequencedDocumentMessage[]>;
}>;

Parameters​

ParameterTypeDescription
runtimeIFluidDataStoreRuntime
storageIChannelStorageService
serializerIFluidSerializer

Returns​

Return type: Promise<{ catchupOpsP: Promise<ISequencedDocumentMessage[]>; }>

localReferencePositionToPosition​

Signature​

localReferencePositionToPosition(lref: ReferencePosition): number;

Parameters​

ParameterTypeDescription
lrefReferencePosition

Returns​

Return type: number

localTransaction​

Signature​

localTransaction(groupOp: IMergeTreeGroupMsg): void;

Parameters​

ParameterTypeDescription
groupOpIMergeTreeGroupMsg

peekPendingSegmentGroups​

The merge tree maintains a queue of segment groups for each local operation. These segment groups track segments modified by an operation. This method peeks the tail of that queue, and returns the segments groups there. It is used to get the segment group(s) for the previous operations.

Signature​

peekPendingSegmentGroups(count?: number): SegmentGroup | SegmentGroup[] | undefined;

Parameters​

ParameterModifiersTypeDescription
countoptionalnumberThe number segment groups to get peek from the tail of the queue. Default 1.

Returns​

Return type: SegmentGroup | SegmentGroup[] | undefined

posFromRelativePos​

Given a position specified relative to a marker id, lookup the marker and convert the position to a character position.

Signature​

posFromRelativePos(relativePos: IRelativePosition): number;

Parameters​

ParameterTypeDescription
relativePosIRelativePositionId of marker (may be indirect) and whether position is before or after marker.

Returns​

Return type: number

rebasePosition​

Rebases a (local) position from the perspective { seq: seqNumberFrom, localSeq } to the perspective of the current sequence number. This is desirable when rebasing operations for reconnection.

If the position refers to a segment/offset that was removed by some operation between seqNumberFrom and the current sequence number, the returned position will align with the position of a reference given SlideOnRemove semantics.

Signature​

rebasePosition(pos: number, seqNumberFrom: number, localSeq: number): number;

Parameters​

ParameterTypeDescription
posnumber
seqNumberFromnumber
localSeqnumber

Returns​

Return type: number

regeneratePendingOp​

Given an pending operation and segment group, regenerate the op, so it can be resubmitted

Signature​

regeneratePendingOp(resetOp: IMergeTreeOp, segmentGroup: SegmentGroup | SegmentGroup[]): IMergeTreeOp;

Parameters​

ParameterTypeDescription
resetOpIMergeTreeOpThe op to reset
segmentGroupSegmentGroup | SegmentGroup[]The segment group associated with the op

Returns​

Return type: IMergeTreeOp

removeLocalReference​

This API is deprecated and will be removed in a future release.
  • use removeReferencePosition instead

Signature​

removeLocalReference(lref: LocalReference): LocalReferencePosition | undefined;

Parameters​

ParameterTypeDescription
lrefLocalReference

Returns​

Return type: LocalReferencePosition | undefined

removeLocalReferencePosition​

Signature​

removeLocalReferencePosition(lref: LocalReferencePosition): LocalReferencePosition | undefined;

Parameters​

ParameterTypeDescription
lrefLocalReferencePosition

Returns​

Return type: LocalReferencePosition | undefined

removeRangeLocal​

Removes the range

Signature​

removeRangeLocal(start: number, end: number): IMergeTreeRemoveMsg | undefined;

Parameters​

ParameterTypeDescription
startnumberThe inclusive start of the range to remove
endnumberThe exclusive end of the range to remove

Returns​

Return type: IMergeTreeRemoveMsg | undefined

resolveRemoteClientPosition​

Resolves a remote client's position against the local sequence and returns the remote client's position relative to the local sequence

Signature​

resolveRemoteClientPosition(remoteClientPosition: number, remoteClientRefSeq: number, remoteClientId: string): number | undefined;

Parameters​

ParameterTypeDescription
remoteClientPositionnumberThe remote client's position to resolve
remoteClientRefSeqnumberThe reference sequence number of the remote client
remoteClientIdstringThe client id of the remote client

Returns​

Return type: number | undefined

serializeGCData​

Serializes the data required for garbage collection. The IFluidHandles stored in all segments that haven't been removed represent routes to other objects. We serialize the data in these segments using the passed in serializer which keeps track of all serialized handles.

Signature​

serializeGCData(handle: IFluidHandle, handleCollectingSerializer: IFluidSerializer): void;

Parameters​

ParameterTypeDescription
handleIFluidHandle
handleCollectingSerializerIFluidSerializer

startOrUpdateCollaboration​

Signature​

startOrUpdateCollaboration(longClientId: string | undefined, minSeq?: number, currentSeq?: number): void;

Parameters​

ParameterModifiersTypeDescription
longClientIdstring | undefined
minSeqoptionalnumber
currentSeqoptionalnumber

summarize​

Signature​

summarize(runtime: IFluidDataStoreRuntime, handle: IFluidHandle, serializer: IFluidSerializer, catchUpMsgs: ISequencedDocumentMessage[]): ISummaryTreeWithStats;

Parameters​

ParameterTypeDescription
runtimeIFluidDataStoreRuntime
handleIFluidHandle
serializerIFluidSerializer
catchUpMsgsISequencedDocumentMessage[]

Returns​

Return type: ISummaryTreeWithStats

updateConsensusProperty​

Signature​

updateConsensusProperty(op: IMergeTreeAnnotateMsg, msg: ISequencedDocumentMessage): void;

Parameters​

ParameterTypeDescription
opIMergeTreeAnnotateMsg
msgISequencedDocumentMessage

updateMinSeq​

Signature​

updateMinSeq(minSeq: number): void;

Parameters​

ParameterTypeDescription
minSeqnumber

updateSeqNumbers​

Signature​

updateSeqNumbers(min: number, seq: number): void;

Parameters​

ParameterTypeDescription
minnumber
seqnumber

walkSegments​

Signature​

walkSegments<TClientData>(handler: ISegmentAction<TClientData>, start: number | undefined, end: number | undefined, accum: TClientData, splitRange?: boolean): void;
Type Parameters​
ParameterDescription
TClientData

Parameters​

ParameterModifiersTypeDescription
handlerISegmentAction<TClientData>
startnumber | undefined
endnumber | undefined
accumTClientData
splitRangeoptionalboolean

walkSegments​

Signature​

walkSegments<undefined>(handler: ISegmentAction<undefined>, start?: number, end?: number, accum?: undefined, splitRange?: boolean): void;
Type Parameters​
ParameterDescription
undefined

Parameters​

ParameterModifiersTypeDescription
handlerISegmentAction<undefined>
startoptionalnumber
endoptionalnumber
accumoptionalundefined
splitRangeoptionalboolean