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