@fluidframework/container-runtime-definitions 2.70.0-361788 → 2.71.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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @fluidframework/container-runtime-definitions
2
2
 
3
+ ## 2.71.0
4
+
5
+ Dependency updates only.
6
+
7
+ ## 2.70.0
8
+
9
+ Dependency updates only.
10
+
3
11
  ## 2.63.0
4
12
 
5
13
  Dependency updates only.
@@ -6,6 +6,7 @@ import type { ILayerCompatDetails } from "@fluid-internal/client-utils";
6
6
  import type { IAudience } from "@fluidframework/container-definitions/internal";
7
7
  import type { BrandedType, InternalUtilityTypes, ITelemetryBaseLogger, JsonDeserialized, JsonSerializable, Listenable, OpaqueJsonDeserialized, TypedMessage } from "@fluidframework/core-interfaces/internal";
8
8
  import type { IQuorumClients } from "@fluidframework/driver-definitions/internal";
9
+ import type { ContainerExtensionId, ContainerExtensionExpectations, ExtensionCompatibilityDetails, UnknownExtensionInstantiation } from "@fluidframework/runtime-definitions/internal";
9
10
  /**
10
11
  * While connected, the id of a client within a session.
11
12
  *
@@ -136,12 +137,37 @@ export type InboundExtensionMessage<TMessage extends TypedMessage = TypedMessage
136
137
  export interface ExtensionRuntimeProperties {
137
138
  SignalMessages: TypedMessage;
138
139
  }
140
+ /**
141
+ * Collection of properties resulting from instantiating an extension via its
142
+ * factory.
143
+ *
144
+ * @remarks
145
+ * All of the members are mutable to allow for handling version or capability
146
+ * mismatches via replacement of interface or extension instances. That is the
147
+ * only time mutation is expected to occur.
148
+ *
149
+ * @internal
150
+ */
151
+ export interface ExtensionInstantiationResult<TInterface, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[]> extends UnknownExtensionInstantiation {
152
+ interface: TInterface;
153
+ extension: ContainerExtension<TRuntimeProperties, TUseContext>;
154
+ }
139
155
  /**
140
156
  * Defines requirements for a component to register with container as an extension.
141
157
  *
142
158
  * @internal
143
159
  */
144
160
  export interface ContainerExtension<TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []> {
161
+ /**
162
+ * Called when a new request is made for an extension with different version
163
+ * or capabilities than were registered for this extension instance.
164
+ *
165
+ * @typeParam TInterface - interface type of new request
166
+ *
167
+ * @param thisExistingInstantiation - registration of this extension in store
168
+ * @param newCompatibilityRequest - compatibility details of the new request
169
+ */
170
+ handleVersionOrCapabilitiesMismatch<TRequestedInterface>(thisExistingInstantiation: Readonly<ExtensionInstantiationResult<unknown, TRuntimeProperties, TUseContext>>, newCompatibilityRequest: ExtensionCompatibilityDetails): Readonly<ExtensionInstantiationResult<TRequestedInterface, TRuntimeProperties, TUseContext>>;
145
171
  /**
146
172
  * Notifies the extension of a new use context.
147
173
  *
@@ -164,11 +190,32 @@ export interface ContainerExtension<TRuntimeProperties extends ExtensionRuntimeP
164
190
  processSignal?: (addressChain: string[], signalMessage: InboundExtensionMessage<TRuntimeProperties["SignalMessages"]>, local: boolean) => void;
165
191
  }
166
192
  /**
167
- * Join status for container.
193
+ * The container is not connected to the service.
194
+ * @internal
195
+ */
196
+ export type JoinedStatus_disconnected = "disconnected";
197
+ /**
198
+ * The container has a connection and read-only operability.
199
+ * @internal
200
+ */
201
+ export type JoinedStatus_joinedForReading = "joinedForReading";
202
+ /**
203
+ * The container has a connection and write operability.
204
+ * @internal
205
+ */
206
+ export type JoinedStatus_joinedForWriting = "joinedForWriting";
207
+ /**
208
+ * Joined status for container.
209
+ *
210
+ * @remarks
211
+ * May be:
212
+ * - {@link JoinedStatus_disconnected|"disconnected"}
213
+ * - {@link JoinedStatus_joinedForReading|"joinedForReading"}
214
+ * - {@link JoinedStatus_joinedForWriting|"joinedForWriting"}
168
215
  *
169
216
  * @internal
170
217
  */
171
- export type JoinedStatus = "disconnected" | "joinedForReading" | "joinedForWriting";
218
+ export type JoinedStatus = JoinedStatus_disconnected | JoinedStatus_joinedForReading | JoinedStatus_joinedForWriting;
172
219
  /**
173
220
  * Events emitted by the {@link ExtensionHost}.
174
221
  *
@@ -183,7 +230,7 @@ export interface ExtensionHostEvents {
183
230
  clientId: ClientConnectionId;
184
231
  canWrite: boolean;
185
232
  }) => void;
186
- "connectionTypeChanged": (canWrite: boolean) => void;
233
+ "operabilityChanged": (canWrite: boolean) => void;
187
234
  }
188
235
  /**
189
236
  * Defines the runtime aspects an extension may access.
@@ -198,16 +245,13 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
198
245
  /**
199
246
  * Gets the current joined status of the container.
200
247
  *
201
- * @remarks
202
- * Returns one of three possible {@link JoinedStatus} values:
203
- * - "disconnected": The container is not connected to the service
204
- * - "joinedForReading": The container has a read-only connection
205
- * - "joinedForWriting": The container has a write connection
248
+ * @returns The current {@link JoinedStatus} of the container.
206
249
  *
250
+ * @remarks
207
251
  * Status changes are signaled through :
208
252
  * - {@link ExtensionHostEvents.disconnected}: Transitioning to Disconnected state
209
- * - {@link ExtensionHostEvents.joined}: Transition to Connected state (either for reading or writing)
210
- * - {@link ExtensionHostEvents.connectionTypeChanged}: When connection type has changed (e.g., write to read)
253
+ * - {@link ExtensionHostEvents.joined}: Transition to CatchingUp or Connected state (either for reading or writing)
254
+ * - {@link ExtensionHostEvents.operabilityChanged}: When operability has changed (e.g., write to read)
211
255
  */
212
256
  readonly getJoinedStatus: () => JoinedStatus;
213
257
  readonly getClientId: () => ClientConnectionId | undefined;
@@ -228,49 +272,45 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
228
272
  * Also contains a map of key-value pairs that must be agreed upon by all clients before being accepted.
229
273
  */
230
274
  getQuorum: () => IQuorumClients;
275
+ /**
276
+ * The collection of all clients as enumerated by the service.
277
+ *
278
+ * @remarks This may include/exclude those found within the quorum.
279
+ * It produces results faster than {@link ExtensionHost.getQuorum}, but
280
+ * will be inaccurate if any signals are lost.
281
+ */
231
282
  getAudience: () => IAudience;
232
283
  }
233
284
  /**
234
285
  * Factory method to create an extension instance.
235
286
  *
236
287
  * Any such method provided to {@link ContainerExtensionStore.acquireExtension}
237
- * must use the same value for a given {@link ContainerExtensionId} so that an
288
+ * must use the same value for a given {@link @fluidframework/runtime-definitions#ContainerExtensionId} so that an
238
289
  * `instanceof` check may be performed at runtime.
239
290
  *
240
291
  * @typeParam T - Type of extension to create
241
292
  * @typeParam TRuntimeProperties - Extension runtime properties
242
293
  * @typeParam TUseContext - Array of custom use context passed to factory or onNewUse
243
294
  *
244
- * @param host - Host runtime for extension to work against
245
- * @param useContext - Custom use context for extension.
246
- * @returns Record providing:
247
- * `interface` instance (type `T`) that is provided to caller of
248
- * {@link ContainerExtensionStore.acquireExtension} and
249
- * `extension` store/runtime uses to interact with extension.
250
- *
251
295
  * @internal
252
296
  */
253
- export type ContainerExtensionFactory<T, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []> = new (host: ExtensionHost<TRuntimeProperties>, ...useContext: TUseContext) => {
254
- readonly interface: T;
255
- readonly extension: ContainerExtension<TRuntimeProperties, TUseContext>;
256
- };
257
- /**
258
- * Unique identifier for extension
259
- *
260
- * @remarks
261
- * A string known to all clients working with a certain ContainerExtension and unique
262
- * among ContainerExtensions. Not `/` may be used in the string. Recommend using
263
- * concatenation of: type of unique identifier, `:` (required), and unique identifier.
264
- *
265
- * @example Examples
266
- * ```typescript
267
- * "guid:g0fl001d-1415-5000-c00l-g0fa54g0b1g1"
268
- * "name:@foo-scope_bar:v1"
269
- * ```
270
- *
271
- * @internal
272
- */
273
- export type ContainerExtensionId = `${string}:${string}`;
297
+ export interface ContainerExtensionFactory<TInterface, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []> extends ContainerExtensionExpectations {
298
+ resolvePriorInstantiation(priorInstantiation: UnknownExtensionInstantiation): Readonly<ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>>;
299
+ /**
300
+ * @param host - Host runtime for extension to work against
301
+ * @param useContext - Custom use context for extension.
302
+ * @returns Record providing:
303
+ * `interface` instance (type `T`) that is provided to caller of
304
+ * {@link ContainerExtensionStore.acquireExtension} and
305
+ * `extension` store/runtime uses to interact with extension.
306
+ */
307
+ instantiateExtension(host: ExtensionHost<TRuntimeProperties>, ...useContext: TUseContext): ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>;
308
+ /**
309
+ * Determines if an `ExtensionInstantiationResult` came from `instantiateExtension`.
310
+ * Called by the semantics of the instanceof operator.
311
+ */
312
+ [Symbol.hasInstance]: (instance: unknown) => instance is ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>;
313
+ }
274
314
  /**
275
315
  * @sealed
276
316
  * @internal
@@ -281,8 +321,9 @@ export interface ContainerExtensionStore {
281
321
  *
282
322
  * @param id - Identifier for the requested extension
283
323
  * @param factory - Factory to create the extension if not found
324
+ * @param context - Custom use context for extension
284
325
  * @returns The extension
285
326
  */
286
- acquireExtension<T, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []>(id: ContainerExtensionId, factory: ContainerExtensionFactory<T, TRuntimeProperties, TUseContext>, ...context: TUseContext): T;
327
+ acquireExtension<TInterface, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []>(id: ContainerExtensionId, factory: ContainerExtensionFactory<TInterface, TRuntimeProperties, TUseContext>, ...context: TUseContext): TInterface;
287
328
  }
288
329
  //# sourceMappingURL=containerExtension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"containerExtension.d.ts","sourceRoot":"","sources":["../src/containerExtension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"containerExtension.d.ts","sourceRoot":"","sources":["../src/containerExtension.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export type { ClientConnectionId, ContainerExtensionFactory, ContainerExtensionId, ContainerExtensionStore, ContainerExtension, ExtensionHost, ExtensionHostEvents, ExtensionMessage, ExtensionRuntimeProperties, InboundExtensionMessage, JoinedStatus, OutboundExtensionMessage, RawInboundExtensionMessage, UnverifiedBrand, VerifiedInboundExtensionMessage, } from "./containerExtension.js";
5
+ export type { ContainerExtensionId, ExtensionCompatibilityDetails, } from "@fluidframework/runtime-definitions/internal";
6
+ export type { ClientConnectionId, ContainerExtensionFactory, ContainerExtensionStore, ContainerExtension, ExtensionHost, ExtensionHostEvents, ExtensionInstantiationResult, ExtensionMessage, ExtensionRuntimeProperties, InboundExtensionMessage, JoinedStatus, JoinedStatus_disconnected, JoinedStatus_joinedForReading, JoinedStatus_joinedForWriting, OutboundExtensionMessage, RawInboundExtensionMessage, UnverifiedBrand, VerifiedInboundExtensionMessage, } from "./containerExtension.js";
6
7
  export type { IContainerRuntime, IContainerRuntimeBaseWithCombinedEvents, IContainerRuntimeEvents, IContainerRuntimeInternal, IContainerRuntimeWithResolveHandle_Deprecated, SummarizerStopReason, ISummarizeEventProps, ISummarizerObservabilityProps, ISummarizerEvents, } from "./containerRuntime.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACX,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,YAAY,EACZ,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,+BAA+B,GAC/B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,iBAAiB,EACjB,uCAAuC,EACvC,uBAAuB,EACvB,yBAAyB,EACzB,6CAA6C,EAC7C,oBAAoB,EACpB,oBAAoB,EACpB,6BAA6B,EAC7B,iBAAiB,GACjB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,YAAY,EACX,oBAAoB,EACpB,6BAA6B,GAC7B,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACX,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,YAAY,EACZ,yBAAyB,EACzB,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,+BAA+B,GAC/B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,iBAAiB,EACjB,uCAAuC,EACvC,uBAAuB,EACvB,yBAAyB,EACzB,6CAA6C,EAC7C,oBAAoB,EACpB,oBAAoB,EACpB,6BAA6B,EAC7B,iBAAiB,GACjB,MAAM,uBAAuB,CAAC"}
@@ -6,6 +6,7 @@ import type { ILayerCompatDetails } from "@fluid-internal/client-utils";
6
6
  import type { IAudience } from "@fluidframework/container-definitions/internal";
7
7
  import type { BrandedType, InternalUtilityTypes, ITelemetryBaseLogger, JsonDeserialized, JsonSerializable, Listenable, OpaqueJsonDeserialized, TypedMessage } from "@fluidframework/core-interfaces/internal";
8
8
  import type { IQuorumClients } from "@fluidframework/driver-definitions/internal";
9
+ import type { ContainerExtensionId, ContainerExtensionExpectations, ExtensionCompatibilityDetails, UnknownExtensionInstantiation } from "@fluidframework/runtime-definitions/internal";
9
10
  /**
10
11
  * While connected, the id of a client within a session.
11
12
  *
@@ -136,12 +137,37 @@ export type InboundExtensionMessage<TMessage extends TypedMessage = TypedMessage
136
137
  export interface ExtensionRuntimeProperties {
137
138
  SignalMessages: TypedMessage;
138
139
  }
140
+ /**
141
+ * Collection of properties resulting from instantiating an extension via its
142
+ * factory.
143
+ *
144
+ * @remarks
145
+ * All of the members are mutable to allow for handling version or capability
146
+ * mismatches via replacement of interface or extension instances. That is the
147
+ * only time mutation is expected to occur.
148
+ *
149
+ * @internal
150
+ */
151
+ export interface ExtensionInstantiationResult<TInterface, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[]> extends UnknownExtensionInstantiation {
152
+ interface: TInterface;
153
+ extension: ContainerExtension<TRuntimeProperties, TUseContext>;
154
+ }
139
155
  /**
140
156
  * Defines requirements for a component to register with container as an extension.
141
157
  *
142
158
  * @internal
143
159
  */
144
160
  export interface ContainerExtension<TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []> {
161
+ /**
162
+ * Called when a new request is made for an extension with different version
163
+ * or capabilities than were registered for this extension instance.
164
+ *
165
+ * @typeParam TInterface - interface type of new request
166
+ *
167
+ * @param thisExistingInstantiation - registration of this extension in store
168
+ * @param newCompatibilityRequest - compatibility details of the new request
169
+ */
170
+ handleVersionOrCapabilitiesMismatch<TRequestedInterface>(thisExistingInstantiation: Readonly<ExtensionInstantiationResult<unknown, TRuntimeProperties, TUseContext>>, newCompatibilityRequest: ExtensionCompatibilityDetails): Readonly<ExtensionInstantiationResult<TRequestedInterface, TRuntimeProperties, TUseContext>>;
145
171
  /**
146
172
  * Notifies the extension of a new use context.
147
173
  *
@@ -164,11 +190,32 @@ export interface ContainerExtension<TRuntimeProperties extends ExtensionRuntimeP
164
190
  processSignal?: (addressChain: string[], signalMessage: InboundExtensionMessage<TRuntimeProperties["SignalMessages"]>, local: boolean) => void;
165
191
  }
166
192
  /**
167
- * Join status for container.
193
+ * The container is not connected to the service.
194
+ * @internal
195
+ */
196
+ export type JoinedStatus_disconnected = "disconnected";
197
+ /**
198
+ * The container has a connection and read-only operability.
199
+ * @internal
200
+ */
201
+ export type JoinedStatus_joinedForReading = "joinedForReading";
202
+ /**
203
+ * The container has a connection and write operability.
204
+ * @internal
205
+ */
206
+ export type JoinedStatus_joinedForWriting = "joinedForWriting";
207
+ /**
208
+ * Joined status for container.
209
+ *
210
+ * @remarks
211
+ * May be:
212
+ * - {@link JoinedStatus_disconnected|"disconnected"}
213
+ * - {@link JoinedStatus_joinedForReading|"joinedForReading"}
214
+ * - {@link JoinedStatus_joinedForWriting|"joinedForWriting"}
168
215
  *
169
216
  * @internal
170
217
  */
171
- export type JoinedStatus = "disconnected" | "joinedForReading" | "joinedForWriting";
218
+ export type JoinedStatus = JoinedStatus_disconnected | JoinedStatus_joinedForReading | JoinedStatus_joinedForWriting;
172
219
  /**
173
220
  * Events emitted by the {@link ExtensionHost}.
174
221
  *
@@ -183,7 +230,7 @@ export interface ExtensionHostEvents {
183
230
  clientId: ClientConnectionId;
184
231
  canWrite: boolean;
185
232
  }) => void;
186
- "connectionTypeChanged": (canWrite: boolean) => void;
233
+ "operabilityChanged": (canWrite: boolean) => void;
187
234
  }
188
235
  /**
189
236
  * Defines the runtime aspects an extension may access.
@@ -198,16 +245,13 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
198
245
  /**
199
246
  * Gets the current joined status of the container.
200
247
  *
201
- * @remarks
202
- * Returns one of three possible {@link JoinedStatus} values:
203
- * - "disconnected": The container is not connected to the service
204
- * - "joinedForReading": The container has a read-only connection
205
- * - "joinedForWriting": The container has a write connection
248
+ * @returns The current {@link JoinedStatus} of the container.
206
249
  *
250
+ * @remarks
207
251
  * Status changes are signaled through :
208
252
  * - {@link ExtensionHostEvents.disconnected}: Transitioning to Disconnected state
209
- * - {@link ExtensionHostEvents.joined}: Transition to Connected state (either for reading or writing)
210
- * - {@link ExtensionHostEvents.connectionTypeChanged}: When connection type has changed (e.g., write to read)
253
+ * - {@link ExtensionHostEvents.joined}: Transition to CatchingUp or Connected state (either for reading or writing)
254
+ * - {@link ExtensionHostEvents.operabilityChanged}: When operability has changed (e.g., write to read)
211
255
  */
212
256
  readonly getJoinedStatus: () => JoinedStatus;
213
257
  readonly getClientId: () => ClientConnectionId | undefined;
@@ -228,49 +272,45 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
228
272
  * Also contains a map of key-value pairs that must be agreed upon by all clients before being accepted.
229
273
  */
230
274
  getQuorum: () => IQuorumClients;
275
+ /**
276
+ * The collection of all clients as enumerated by the service.
277
+ *
278
+ * @remarks This may include/exclude those found within the quorum.
279
+ * It produces results faster than {@link ExtensionHost.getQuorum}, but
280
+ * will be inaccurate if any signals are lost.
281
+ */
231
282
  getAudience: () => IAudience;
232
283
  }
233
284
  /**
234
285
  * Factory method to create an extension instance.
235
286
  *
236
287
  * Any such method provided to {@link ContainerExtensionStore.acquireExtension}
237
- * must use the same value for a given {@link ContainerExtensionId} so that an
288
+ * must use the same value for a given {@link @fluidframework/runtime-definitions#ContainerExtensionId} so that an
238
289
  * `instanceof` check may be performed at runtime.
239
290
  *
240
291
  * @typeParam T - Type of extension to create
241
292
  * @typeParam TRuntimeProperties - Extension runtime properties
242
293
  * @typeParam TUseContext - Array of custom use context passed to factory or onNewUse
243
294
  *
244
- * @param host - Host runtime for extension to work against
245
- * @param useContext - Custom use context for extension.
246
- * @returns Record providing:
247
- * `interface` instance (type `T`) that is provided to caller of
248
- * {@link ContainerExtensionStore.acquireExtension} and
249
- * `extension` store/runtime uses to interact with extension.
250
- *
251
295
  * @internal
252
296
  */
253
- export type ContainerExtensionFactory<T, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []> = new (host: ExtensionHost<TRuntimeProperties>, ...useContext: TUseContext) => {
254
- readonly interface: T;
255
- readonly extension: ContainerExtension<TRuntimeProperties, TUseContext>;
256
- };
257
- /**
258
- * Unique identifier for extension
259
- *
260
- * @remarks
261
- * A string known to all clients working with a certain ContainerExtension and unique
262
- * among ContainerExtensions. Not `/` may be used in the string. Recommend using
263
- * concatenation of: type of unique identifier, `:` (required), and unique identifier.
264
- *
265
- * @example Examples
266
- * ```typescript
267
- * "guid:g0fl001d-1415-5000-c00l-g0fa54g0b1g1"
268
- * "name:@foo-scope_bar:v1"
269
- * ```
270
- *
271
- * @internal
272
- */
273
- export type ContainerExtensionId = `${string}:${string}`;
297
+ export interface ContainerExtensionFactory<TInterface, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []> extends ContainerExtensionExpectations {
298
+ resolvePriorInstantiation(priorInstantiation: UnknownExtensionInstantiation): Readonly<ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>>;
299
+ /**
300
+ * @param host - Host runtime for extension to work against
301
+ * @param useContext - Custom use context for extension.
302
+ * @returns Record providing:
303
+ * `interface` instance (type `T`) that is provided to caller of
304
+ * {@link ContainerExtensionStore.acquireExtension} and
305
+ * `extension` store/runtime uses to interact with extension.
306
+ */
307
+ instantiateExtension(host: ExtensionHost<TRuntimeProperties>, ...useContext: TUseContext): ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>;
308
+ /**
309
+ * Determines if an `ExtensionInstantiationResult` came from `instantiateExtension`.
310
+ * Called by the semantics of the instanceof operator.
311
+ */
312
+ [Symbol.hasInstance]: (instance: unknown) => instance is ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>;
313
+ }
274
314
  /**
275
315
  * @sealed
276
316
  * @internal
@@ -281,8 +321,9 @@ export interface ContainerExtensionStore {
281
321
  *
282
322
  * @param id - Identifier for the requested extension
283
323
  * @param factory - Factory to create the extension if not found
324
+ * @param context - Custom use context for extension
284
325
  * @returns The extension
285
326
  */
286
- acquireExtension<T, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []>(id: ContainerExtensionId, factory: ContainerExtensionFactory<T, TRuntimeProperties, TUseContext>, ...context: TUseContext): T;
327
+ acquireExtension<TInterface, TRuntimeProperties extends ExtensionRuntimeProperties, TUseContext extends unknown[] = []>(id: ContainerExtensionId, factory: ContainerExtensionFactory<TInterface, TRuntimeProperties, TUseContext>, ...context: TUseContext): TInterface;
287
328
  }
288
329
  //# sourceMappingURL=containerExtension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"containerExtension.d.ts","sourceRoot":"","sources":["../src/containerExtension.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"containerExtension.d.ts","sourceRoot":"","sources":["../src/containerExtension.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,KAAK,EACX,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,sBAAsB,EACtB,YAAY,EACZ,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,KAAK,EACX,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,EAC7B,6BAA6B,EAC7B,MAAM,8CAA8C,CAAC;AAEtD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,CAC3B,QAAQ,SAAS,YAAY,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAC/D,IAED,QAAQ,SAAS,YAAY,GAC1B,oBAAoB,CAAC,mBAAmB,CACxC,QAAQ,GAAG;IACV;;;OAGG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACpC,CACD,GACA,KAAK,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,CAAC,QAAQ,SAAS,YAAY,GAAG,YAAY,IAChF,gBAAgB,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AAE9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACpF,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,OAAO;CACP;AAED;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,CAAC,QAAQ,SAAS,YAAY,GAAG,YAAY,IAElF,QAAQ,SAAS,YAAY,GAC1B,oBAAoB,CAAC,mBAAmB,CACxC,gBAAgB,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;CACzC,CAAC,GAAG;IACJ;;;OAGG;IAEH,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC,CACD,GACA,eAAe,CAAC,QAAQ,CAAC,GACzB,KAAK,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,+BAA+B,CAAC,QAAQ,SAAS,YAAY,GAAG,YAAY,IAEvF,QAAQ,SAAS,YAAY,GAC1B,oBAAoB,CAAC,mBAAmB,CACxC,gBAAgB,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,SAAS,QAAQ,CAAC,SAAS,CAAC,GACzC,sBAAsB,CAAC,OAAO,CAAC,GAC/B,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;CACzC,CAAC,GAAG;IACJ;;;OAGG;IAEH,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC,CACD,GACA,KAAK,CAAC;AAEV;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,CAAC,QAAQ,SAAS,YAAY,GAAG,YAAY,IAC7E,0BAA0B,CAAC,QAAQ,CAAC,GACpC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,WAAW,0BAA0B;IAC1C,cAAc,EAAE,YAAY,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,4BAA4B,CAC5C,UAAU,EACV,kBAAkB,SAAS,0BAA0B,EACrD,WAAW,SAAS,OAAO,EAAE,CAC5B,SAAQ,6BAA6B;IACtC,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;CAC/D;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB,CAClC,kBAAkB,SAAS,0BAA0B,EACrD,WAAW,SAAS,OAAO,EAAE,GAAG,EAAE;IAElC;;;;;;;;OAQG;IACH,mCAAmC,CAAC,mBAAmB,EACtD,yBAAyB,EAAE,QAAQ,CAClC,4BAA4B,CAAC,OAAO,EAAE,kBAAkB,EAAE,WAAW,CAAC,CACtE,EACD,uBAAuB,EAAE,6BAA6B,GACpD,QAAQ,CACV,4BAA4B,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAClF,CAAC;IAEF;;;;;;;;;OASG;IACH,QAAQ,CAAC,GAAG,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;IAE3C;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,CACf,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,EAC5E,KAAK,EAAE,OAAO,KACV,IAAI,CAAC;CACV;AAID;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC;AACvD;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAC/D;;;GAGG;AACH,MAAM,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAE/D;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,GACrB,yBAAyB,GACzB,6BAA6B,GAC7B,6BAA6B,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IACnC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,oBAAoB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAClD;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa,CAAC,kBAAkB,SAAS,0BAA0B;IACnF;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,YAAY,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAE3D,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAEjD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEtC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAErE;;;;;;;OAOG;IACH,qBAAqB,EAAE,CACtB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,wBAAwB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,KACnE,IAAI,CAAC;IAEV;;;OAGG;IACH,SAAS,EAAE,MAAM,cAAc,CAAC;IAEhC;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,SAAS,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,yBAAyB,CACzC,UAAU,EACV,kBAAkB,SAAS,0BAA0B,EACrD,WAAW,SAAS,OAAO,EAAE,GAAG,EAAE,CACjC,SAAQ,8BAA8B;IACvC,yBAAyB,CACxB,kBAAkB,EAAE,6BAA6B,GAC/C,QAAQ,CAAC,4BAA4B,CAAC,UAAU,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvF;;;;;;;OAOG;IACH,oBAAoB,CACnB,IAAI,EAAE,aAAa,CAAC,kBAAkB,CAAC,EACvC,GAAG,UAAU,EAAE,WAAW,GACxB,4BAA4B,CAAC,UAAU,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;IAE7E;;;OAGG;IACH,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACrB,QAAQ,EAAE,OAAO,KACb,QAAQ,IAAI,4BAA4B,CAAC,UAAU,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;CAC3F;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;;;;;OAOG;IACH,gBAAgB,CACf,UAAU,EACV,kBAAkB,SAAS,0BAA0B,EACrD,WAAW,SAAS,OAAO,EAAE,GAAG,EAAE,EAElC,EAAE,EAAE,oBAAoB,EACxB,OAAO,EAAE,yBAAyB,CAAC,UAAU,EAAE,kBAAkB,EAAE,WAAW,CAAC,EAC/E,GAAG,OAAO,EAAE,WAAW,GACrB,UAAU,CAAC;CACd"}
package/lib/index.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- export type { ClientConnectionId, ContainerExtensionFactory, ContainerExtensionId, ContainerExtensionStore, ContainerExtension, ExtensionHost, ExtensionHostEvents, ExtensionMessage, ExtensionRuntimeProperties, InboundExtensionMessage, JoinedStatus, OutboundExtensionMessage, RawInboundExtensionMessage, UnverifiedBrand, VerifiedInboundExtensionMessage, } from "./containerExtension.js";
5
+ export type { ContainerExtensionId, ExtensionCompatibilityDetails, } from "@fluidframework/runtime-definitions/internal";
6
+ export type { ClientConnectionId, ContainerExtensionFactory, ContainerExtensionStore, ContainerExtension, ExtensionHost, ExtensionHostEvents, ExtensionInstantiationResult, ExtensionMessage, ExtensionRuntimeProperties, InboundExtensionMessage, JoinedStatus, JoinedStatus_disconnected, JoinedStatus_joinedForReading, JoinedStatus_joinedForWriting, OutboundExtensionMessage, RawInboundExtensionMessage, UnverifiedBrand, VerifiedInboundExtensionMessage, } from "./containerExtension.js";
6
7
  export type { IContainerRuntime, IContainerRuntimeBaseWithCombinedEvents, IContainerRuntimeEvents, IContainerRuntimeInternal, IContainerRuntimeWithResolveHandle_Deprecated, SummarizerStopReason, ISummarizeEventProps, ISummarizerObservabilityProps, ISummarizerEvents, } from "./containerRuntime.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACX,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,YAAY,EACZ,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,+BAA+B,GAC/B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,iBAAiB,EACjB,uCAAuC,EACvC,uBAAuB,EACvB,yBAAyB,EACzB,6CAA6C,EAC7C,oBAAoB,EACpB,oBAAoB,EACpB,6BAA6B,EAC7B,iBAAiB,GACjB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,YAAY,EACX,oBAAoB,EACpB,6BAA6B,GAC7B,MAAM,8CAA8C,CAAC;AACtD,YAAY,EACX,kBAAkB,EAClB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,YAAY,EACZ,yBAAyB,EACzB,6BAA6B,EAC7B,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,eAAe,EACf,+BAA+B,GAC/B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACX,iBAAiB,EACjB,uCAAuC,EACvC,uBAAuB,EACvB,yBAAyB,EACzB,6CAA6C,EAC7C,oBAAoB,EACpB,oBAAoB,EACpB,6BAA6B,EAC7B,iBAAiB,GACjB,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/container-runtime-definitions",
3
- "version": "2.70.0-361788",
3
+ "version": "2.71.0",
4
4
  "description": "Fluid Runtime definitions",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -41,11 +41,11 @@
41
41
  "main": "",
42
42
  "types": "lib/public.d.ts",
43
43
  "dependencies": {
44
- "@fluid-internal/client-utils": "2.70.0-361788",
45
- "@fluidframework/container-definitions": "2.70.0-361788",
46
- "@fluidframework/core-interfaces": "2.70.0-361788",
47
- "@fluidframework/driver-definitions": "2.70.0-361788",
48
- "@fluidframework/runtime-definitions": "2.70.0-361788"
44
+ "@fluid-internal/client-utils": "~2.71.0",
45
+ "@fluidframework/container-definitions": "~2.71.0",
46
+ "@fluidframework/core-interfaces": "~2.71.0",
47
+ "@fluidframework/driver-definitions": "~2.71.0",
48
+ "@fluidframework/runtime-definitions": "~2.71.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@arethetypeswrong/cli": "^0.17.1",
@@ -53,8 +53,8 @@
53
53
  "@fluid-tools/build-cli": "^0.58.3",
54
54
  "@fluidframework/build-common": "^2.0.3",
55
55
  "@fluidframework/build-tools": "^0.58.3",
56
- "@fluidframework/container-runtime-definitions-previous": "npm:@fluidframework/container-runtime-definitions@2.63.0",
57
- "@fluidframework/eslint-config-fluid": "^6.1.0",
56
+ "@fluidframework/container-runtime-definitions-previous": "npm:@fluidframework/container-runtime-definitions@2.70.0",
57
+ "@fluidframework/eslint-config-fluid": "^7.0.0",
58
58
  "@microsoft/api-extractor": "7.52.11",
59
59
  "concurrently": "^8.2.1",
60
60
  "copyfiles": "^2.4.1",
@@ -63,14 +63,7 @@
63
63
  "typescript": "~5.4.5"
64
64
  },
65
65
  "typeValidation": {
66
- "broken": {
67
- "Interface_IContainerRuntime": {
68
- "backCompat": false
69
- },
70
- "Interface_IContainerRuntimeWithResolveHandle_Deprecated": {
71
- "backCompat": false
72
- }
73
- },
66
+ "broken": {},
74
67
  "entrypoint": "legacy"
75
68
  },
76
69
  "scripts": {
@@ -101,8 +94,8 @@
101
94
  "ci:build:api-reports:legacy": "api-extractor run --config api-extractor/api-extractor.legacy.json",
102
95
  "ci:build:docs": "api-extractor run",
103
96
  "clean": "rimraf --glob dist lib {alpha,beta,internal,legacy}.d.ts \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp",
104
- "eslint": "eslint --format stylish src",
105
- "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
97
+ "eslint": "eslint --quiet --format stylish src",
98
+ "eslint:fix": "eslint --quiet --format stylish src --fix --fix-type problem,suggestion,layout",
106
99
  "format": "npm run format:biome",
107
100
  "format:biome": "biome check . --write",
108
101
  "lint": "fluid-build . --task lint",
@@ -5,7 +5,6 @@
5
5
 
6
6
  import type { ILayerCompatDetails } from "@fluid-internal/client-utils";
7
7
  import type { IAudience } from "@fluidframework/container-definitions/internal";
8
- // eslint-disable-next-line @typescript-eslint/consistent-type-imports -- BrandedType is a class declaration only
9
8
  import type {
10
9
  BrandedType,
11
10
  InternalUtilityTypes,
@@ -17,6 +16,12 @@ import type {
17
16
  TypedMessage,
18
17
  } from "@fluidframework/core-interfaces/internal";
19
18
  import type { IQuorumClients } from "@fluidframework/driver-definitions/internal";
19
+ import type {
20
+ ContainerExtensionId,
21
+ ContainerExtensionExpectations,
22
+ ExtensionCompatibilityDetails,
23
+ UnknownExtensionInstantiation,
24
+ } from "@fluidframework/runtime-definitions/internal";
20
25
 
21
26
  /**
22
27
  * While connected, the id of a client within a session.
@@ -180,6 +185,26 @@ export interface ExtensionRuntimeProperties {
180
185
  SignalMessages: TypedMessage;
181
186
  }
182
187
 
188
+ /**
189
+ * Collection of properties resulting from instantiating an extension via its
190
+ * factory.
191
+ *
192
+ * @remarks
193
+ * All of the members are mutable to allow for handling version or capability
194
+ * mismatches via replacement of interface or extension instances. That is the
195
+ * only time mutation is expected to occur.
196
+ *
197
+ * @internal
198
+ */
199
+ export interface ExtensionInstantiationResult<
200
+ TInterface,
201
+ TRuntimeProperties extends ExtensionRuntimeProperties,
202
+ TUseContext extends unknown[],
203
+ > extends UnknownExtensionInstantiation {
204
+ interface: TInterface;
205
+ extension: ContainerExtension<TRuntimeProperties, TUseContext>;
206
+ }
207
+
183
208
  /**
184
209
  * Defines requirements for a component to register with container as an extension.
185
210
  *
@@ -189,6 +214,24 @@ export interface ContainerExtension<
189
214
  TRuntimeProperties extends ExtensionRuntimeProperties,
190
215
  TUseContext extends unknown[] = [],
191
216
  > {
217
+ /**
218
+ * Called when a new request is made for an extension with different version
219
+ * or capabilities than were registered for this extension instance.
220
+ *
221
+ * @typeParam TInterface - interface type of new request
222
+ *
223
+ * @param thisExistingInstantiation - registration of this extension in store
224
+ * @param newCompatibilityRequest - compatibility details of the new request
225
+ */
226
+ handleVersionOrCapabilitiesMismatch<TRequestedInterface>(
227
+ thisExistingInstantiation: Readonly<
228
+ ExtensionInstantiationResult<unknown, TRuntimeProperties, TUseContext>
229
+ >,
230
+ newCompatibilityRequest: ExtensionCompatibilityDetails,
231
+ ): Readonly<
232
+ ExtensionInstantiationResult<TRequestedInterface, TRuntimeProperties, TUseContext>
233
+ >;
234
+
192
235
  /**
193
236
  * Notifies the extension of a new use context.
194
237
  *
@@ -216,12 +259,39 @@ export interface ContainerExtension<
216
259
  ) => void;
217
260
  }
218
261
 
262
+ // These are exported individual types as this is a type only package and does
263
+ // not support enums with runtime footprint.
264
+ /**
265
+ * The container is not connected to the service.
266
+ * @internal
267
+ */
268
+ export type JoinedStatus_disconnected = "disconnected";
269
+ /**
270
+ * The container has a connection and read-only operability.
271
+ * @internal
272
+ */
273
+ export type JoinedStatus_joinedForReading = "joinedForReading";
274
+ /**
275
+ * The container has a connection and write operability.
276
+ * @internal
277
+ */
278
+ export type JoinedStatus_joinedForWriting = "joinedForWriting";
279
+
219
280
  /**
220
- * Join status for container.
281
+ * Joined status for container.
282
+ *
283
+ * @remarks
284
+ * May be:
285
+ * - {@link JoinedStatus_disconnected|"disconnected"}
286
+ * - {@link JoinedStatus_joinedForReading|"joinedForReading"}
287
+ * - {@link JoinedStatus_joinedForWriting|"joinedForWriting"}
221
288
  *
222
289
  * @internal
223
290
  */
224
- export type JoinedStatus = "disconnected" | "joinedForReading" | "joinedForWriting";
291
+ export type JoinedStatus =
292
+ | JoinedStatus_disconnected
293
+ | JoinedStatus_joinedForReading
294
+ | JoinedStatus_joinedForWriting;
225
295
 
226
296
  /**
227
297
  * Events emitted by the {@link ExtensionHost}.
@@ -234,7 +304,7 @@ export type JoinedStatus = "disconnected" | "joinedForReading" | "joinedForWriti
234
304
  export interface ExtensionHostEvents {
235
305
  "disconnected": () => void;
236
306
  "joined": (props: { clientId: ClientConnectionId; canWrite: boolean }) => void;
237
- "connectionTypeChanged": (canWrite: boolean) => void;
307
+ "operabilityChanged": (canWrite: boolean) => void;
238
308
  }
239
309
 
240
310
  /**
@@ -250,16 +320,13 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
250
320
  /**
251
321
  * Gets the current joined status of the container.
252
322
  *
253
- * @remarks
254
- * Returns one of three possible {@link JoinedStatus} values:
255
- * - "disconnected": The container is not connected to the service
256
- * - "joinedForReading": The container has a read-only connection
257
- * - "joinedForWriting": The container has a write connection
323
+ * @returns The current {@link JoinedStatus} of the container.
258
324
  *
325
+ * @remarks
259
326
  * Status changes are signaled through :
260
327
  * - {@link ExtensionHostEvents.disconnected}: Transitioning to Disconnected state
261
- * - {@link ExtensionHostEvents.joined}: Transition to Connected state (either for reading or writing)
262
- * - {@link ExtensionHostEvents.connectionTypeChanged}: When connection type has changed (e.g., write to read)
328
+ * - {@link ExtensionHostEvents.joined}: Transition to CatchingUp or Connected state (either for reading or writing)
329
+ * - {@link ExtensionHostEvents.operabilityChanged}: When operability has changed (e.g., write to read)
263
330
  */
264
331
  readonly getJoinedStatus: () => JoinedStatus;
265
332
  readonly getClientId: () => ClientConnectionId | undefined;
@@ -289,6 +356,13 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
289
356
  */
290
357
  getQuorum: () => IQuorumClients;
291
358
 
359
+ /**
360
+ * The collection of all clients as enumerated by the service.
361
+ *
362
+ * @remarks This may include/exclude those found within the quorum.
363
+ * It produces results faster than {@link ExtensionHost.getQuorum}, but
364
+ * will be inaccurate if any signals are lost.
365
+ */
292
366
  getAudience: () => IAudience;
293
367
  }
294
368
 
@@ -296,51 +370,45 @@ export interface ExtensionHost<TRuntimeProperties extends ExtensionRuntimeProper
296
370
  * Factory method to create an extension instance.
297
371
  *
298
372
  * Any such method provided to {@link ContainerExtensionStore.acquireExtension}
299
- * must use the same value for a given {@link ContainerExtensionId} so that an
373
+ * must use the same value for a given {@link @fluidframework/runtime-definitions#ContainerExtensionId} so that an
300
374
  * `instanceof` check may be performed at runtime.
301
375
  *
302
376
  * @typeParam T - Type of extension to create
303
377
  * @typeParam TRuntimeProperties - Extension runtime properties
304
378
  * @typeParam TUseContext - Array of custom use context passed to factory or onNewUse
305
379
  *
306
- * @param host - Host runtime for extension to work against
307
- * @param useContext - Custom use context for extension.
308
- * @returns Record providing:
309
- * `interface` instance (type `T`) that is provided to caller of
310
- * {@link ContainerExtensionStore.acquireExtension} and
311
- * `extension` store/runtime uses to interact with extension.
312
- *
313
380
  * @internal
314
381
  */
315
- export type ContainerExtensionFactory<
316
- T,
382
+ export interface ContainerExtensionFactory<
383
+ TInterface,
317
384
  TRuntimeProperties extends ExtensionRuntimeProperties,
318
385
  TUseContext extends unknown[] = [],
319
- > = new (
320
- host: ExtensionHost<TRuntimeProperties>,
321
- ...useContext: TUseContext
322
- ) => {
323
- readonly interface: T;
324
- readonly extension: ContainerExtension<TRuntimeProperties, TUseContext>;
325
- };
386
+ > extends ContainerExtensionExpectations {
387
+ resolvePriorInstantiation(
388
+ priorInstantiation: UnknownExtensionInstantiation,
389
+ ): Readonly<ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>>;
326
390
 
327
- /**
328
- * Unique identifier for extension
329
- *
330
- * @remarks
331
- * A string known to all clients working with a certain ContainerExtension and unique
332
- * among ContainerExtensions. Not `/` may be used in the string. Recommend using
333
- * concatenation of: type of unique identifier, `:` (required), and unique identifier.
334
- *
335
- * @example Examples
336
- * ```typescript
337
- * "guid:g0fl001d-1415-5000-c00l-g0fa54g0b1g1"
338
- * "name:@foo-scope_bar:v1"
339
- * ```
340
- *
341
- * @internal
342
- */
343
- export type ContainerExtensionId = `${string}:${string}`;
391
+ /**
392
+ * @param host - Host runtime for extension to work against
393
+ * @param useContext - Custom use context for extension.
394
+ * @returns Record providing:
395
+ * `interface` instance (type `T`) that is provided to caller of
396
+ * {@link ContainerExtensionStore.acquireExtension} and
397
+ * `extension` store/runtime uses to interact with extension.
398
+ */
399
+ instantiateExtension(
400
+ host: ExtensionHost<TRuntimeProperties>,
401
+ ...useContext: TUseContext
402
+ ): ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>;
403
+
404
+ /**
405
+ * Determines if an `ExtensionInstantiationResult` came from `instantiateExtension`.
406
+ * Called by the semantics of the instanceof operator.
407
+ */
408
+ [Symbol.hasInstance]: (
409
+ instance: unknown,
410
+ ) => instance is ExtensionInstantiationResult<TInterface, TRuntimeProperties, TUseContext>;
411
+ }
344
412
 
345
413
  /**
346
414
  * @sealed
@@ -352,15 +420,16 @@ export interface ContainerExtensionStore {
352
420
  *
353
421
  * @param id - Identifier for the requested extension
354
422
  * @param factory - Factory to create the extension if not found
423
+ * @param context - Custom use context for extension
355
424
  * @returns The extension
356
425
  */
357
426
  acquireExtension<
358
- T,
427
+ TInterface,
359
428
  TRuntimeProperties extends ExtensionRuntimeProperties,
360
429
  TUseContext extends unknown[] = [],
361
430
  >(
362
431
  id: ContainerExtensionId,
363
- factory: ContainerExtensionFactory<T, TRuntimeProperties, TUseContext>,
432
+ factory: ContainerExtensionFactory<TInterface, TRuntimeProperties, TUseContext>,
364
433
  ...context: TUseContext
365
- ): T;
434
+ ): TInterface;
366
435
  }
package/src/index.ts CHANGED
@@ -3,18 +3,28 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ // Re-export selected types from runtime-definitions internal module
7
+ // that are core to more complete container runtime extensions types
8
+ // maintained here.
9
+ export type {
10
+ ContainerExtensionId,
11
+ ExtensionCompatibilityDetails,
12
+ } from "@fluidframework/runtime-definitions/internal";
6
13
  export type {
7
14
  ClientConnectionId,
8
15
  ContainerExtensionFactory,
9
- ContainerExtensionId,
10
16
  ContainerExtensionStore,
11
17
  ContainerExtension,
12
18
  ExtensionHost,
13
19
  ExtensionHostEvents,
20
+ ExtensionInstantiationResult,
14
21
  ExtensionMessage,
15
22
  ExtensionRuntimeProperties,
16
23
  InboundExtensionMessage,
17
24
  JoinedStatus,
25
+ JoinedStatus_disconnected,
26
+ JoinedStatus_joinedForReading,
27
+ JoinedStatus_joinedForWriting,
18
28
  OutboundExtensionMessage,
19
29
  RawInboundExtensionMessage,
20
30
  UnverifiedBrand,