@fluidframework/container-loader 2.0.0-internal.6.4.0 → 2.0.0-internal.7.0.1

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.
Files changed (88) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/dist/catchUpMonitor.d.ts +2 -2
  3. package/dist/catchUpMonitor.d.ts.map +1 -1
  4. package/dist/connectionManager.d.ts.map +1 -1
  5. package/dist/connectionManager.js +89 -67
  6. package/dist/connectionManager.js.map +1 -1
  7. package/dist/connectionState.js +1 -1
  8. package/dist/connectionState.js.map +1 -1
  9. package/dist/connectionStateHandler.js +9 -9
  10. package/dist/connectionStateHandler.js.map +1 -1
  11. package/dist/container.d.ts +6 -1
  12. package/dist/container.d.ts.map +1 -1
  13. package/dist/container.js +215 -215
  14. package/dist/container.js.map +1 -1
  15. package/dist/containerContext.js +16 -16
  16. package/dist/containerContext.js.map +1 -1
  17. package/dist/containerStorageAdapter.d.ts.map +1 -1
  18. package/dist/containerStorageAdapter.js +6 -8
  19. package/dist/containerStorageAdapter.js.map +1 -1
  20. package/dist/contracts.d.ts +2 -1
  21. package/dist/contracts.d.ts.map +1 -1
  22. package/dist/contracts.js +1 -1
  23. package/dist/contracts.js.map +1 -1
  24. package/dist/debugLogger.js +4 -4
  25. package/dist/debugLogger.js.map +1 -1
  26. package/dist/deltaManager.d.ts.map +1 -1
  27. package/dist/deltaManager.js +86 -89
  28. package/dist/deltaManager.js.map +1 -1
  29. package/dist/deltaQueue.js +14 -14
  30. package/dist/deltaQueue.js.map +1 -1
  31. package/dist/loader.d.ts +2 -5
  32. package/dist/loader.d.ts.map +1 -1
  33. package/dist/loader.js +19 -84
  34. package/dist/loader.js.map +1 -1
  35. package/dist/packageVersion.d.ts +1 -1
  36. package/dist/packageVersion.js +1 -1
  37. package/dist/packageVersion.js.map +1 -1
  38. package/dist/protocol.d.ts +1 -2
  39. package/dist/protocol.d.ts.map +1 -1
  40. package/dist/protocol.js +3 -5
  41. package/dist/protocol.js.map +1 -1
  42. package/dist/tsdoc-metadata.json +1 -1
  43. package/lib/catchUpMonitor.d.ts +2 -2
  44. package/lib/catchUpMonitor.d.ts.map +1 -1
  45. package/lib/connectionManager.d.ts.map +1 -1
  46. package/lib/connectionManager.js +92 -68
  47. package/lib/connectionManager.js.map +1 -1
  48. package/lib/connectionStateHandler.js +9 -9
  49. package/lib/connectionStateHandler.js.map +1 -1
  50. package/lib/container.d.ts +6 -1
  51. package/lib/container.d.ts.map +1 -1
  52. package/lib/container.js +216 -216
  53. package/lib/container.js.map +1 -1
  54. package/lib/containerContext.js +16 -16
  55. package/lib/containerContext.js.map +1 -1
  56. package/lib/containerStorageAdapter.d.ts.map +1 -1
  57. package/lib/containerStorageAdapter.js +6 -8
  58. package/lib/containerStorageAdapter.js.map +1 -1
  59. package/lib/contracts.d.ts +2 -1
  60. package/lib/contracts.d.ts.map +1 -1
  61. package/lib/contracts.js.map +1 -1
  62. package/lib/debugLogger.js +4 -4
  63. package/lib/debugLogger.js.map +1 -1
  64. package/lib/deltaManager.d.ts.map +1 -1
  65. package/lib/deltaManager.js +86 -89
  66. package/lib/deltaManager.js.map +1 -1
  67. package/lib/deltaQueue.js +14 -14
  68. package/lib/deltaQueue.js.map +1 -1
  69. package/lib/loader.d.ts +2 -5
  70. package/lib/loader.d.ts.map +1 -1
  71. package/lib/loader.js +19 -84
  72. package/lib/loader.js.map +1 -1
  73. package/lib/packageVersion.d.ts +1 -1
  74. package/lib/packageVersion.js +1 -1
  75. package/lib/packageVersion.js.map +1 -1
  76. package/lib/protocol.d.ts +1 -2
  77. package/lib/protocol.d.ts.map +1 -1
  78. package/lib/protocol.js +1 -3
  79. package/lib/protocol.js.map +1 -1
  80. package/package.json +24 -18
  81. package/src/connectionManager.ts +37 -5
  82. package/src/container.ts +15 -15
  83. package/src/containerStorageAdapter.ts +0 -6
  84. package/src/contracts.ts +5 -1
  85. package/src/deltaManager.ts +6 -8
  86. package/src/loader.ts +23 -91
  87. package/src/packageVersion.ts +1 -1
  88. package/src/protocol.ts +2 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,113 @@
1
1
  # @fluidframework/container-loader
2
2
 
3
+ ## 2.0.0-internal.7.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - odsp-driver: Load container in readonly mode when driver throws DriverErrorType.outOfStorage [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
8
+
9
+ Handle DriverErrorType.outOfStorage error from driver and load the container in readonly mode. Currently there is no
10
+ handling and when the join session throws this error, the container will get closed. With this we use NoDeltaStream
11
+ object as connection and load the container in read mode, so that it loads properly. We also notify the that the
12
+ container is "readonly" through the event on delta manager so that apps can listen to this and show any UX etc. The app
13
+ can listen to the event like this:
14
+
15
+ ```ts
16
+ container.deltaManager.on(
17
+ "readonly",
18
+ (readonly?: boolean, readonlyConnectionReason?: { text: string; error?: IErrorBase }) => {
19
+ // error?.errorType will be equal to DriverErrorType.outOfStorage in this case
20
+ // App logic
21
+ },
22
+ );
23
+ ```
24
+
25
+ - Dependencies on @fluidframework/protocol-definitions package updated to 3.0.0 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
26
+
27
+ This included the following changes from the protocol-definitions release:
28
+
29
+ - Updating signal interfaces for some planned improvements. The intention is split the interface between signals
30
+ submitted by clients to the server and the resulting signals sent from the server to clients.
31
+ - A new optional type member is available on the ISignalMessage interface and a new ISentSignalMessage interface has
32
+ been added, which will be the typing for signals sent from the client to the server. Both extend a new
33
+ ISignalMessageBase interface that contains common members.
34
+ - The @fluidframework/common-definitions package dependency has been updated to version 1.0.0.
35
+
36
+ - DEPRECATED: container-loader: Various request related APIs have been deprecated [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
37
+
38
+ Please remove all calls to the following functions and instead use the new `entryPoint` pattern:
39
+
40
+ - `requestFluidObject`
41
+ - `requestResolvedObjectFromContainer`
42
+ - `getDefaultObjectFromContainer`
43
+ - `getObjectWithIdFromContainer`
44
+ - `getObjectFromContainer`
45
+
46
+ See [Removing-IFluidRouter.md](https://github.com/microsoft/FluidFramework/blob/main/packages/common/core-interfaces/Removing-IFluidRouter.md) for more details.
47
+
48
+ - container-definitions: IContainer's and IDataStore's IFluidRouter capabilities are deprecated [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
49
+
50
+ `IFluidRouter` and `request({ url: "/" })` on `IContainer` and `IDataStore` are deprecated and will be removed in a future major release. Please migrate all usage to the appropriate `getEntryPoint()` or `entryPoint` APIs.
51
+
52
+ See [Removing-IFluidRouter.md](https://github.com/microsoft/FluidFramework/blob/main/packages/common/core-interfaces/Removing-IFluidRouter.md) for more details.
53
+
54
+ - routerlicious-driver: remove dead blob aggregation concepts and code [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
55
+
56
+ Dead concepts blob aggregation like `aggregateBlobsSmallerThanBytes` and `minBlobSize` have been removed.
57
+
58
+ - Server upgrade: dependencies on Fluid server packages updated to 2.0.1 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
59
+
60
+ Dependencies on the following Fluid server package have been updated to version 2.0.1:
61
+
62
+ - @fluidframework/gitresources: 2.0.1
63
+ - @fluidframework/server-kafka-orderer: 2.0.1
64
+ - @fluidframework/server-lambdas: 2.0.1
65
+ - @fluidframework/server-lambdas-driver: 2.0.1
66
+ - @fluidframework/server-local-server: 2.0.1
67
+ - @fluidframework/server-memory-orderer: 2.0.1
68
+ - @fluidframework/protocol-base: 2.0.1
69
+ - @fluidframework/server-routerlicious: 2.0.1
70
+ - @fluidframework/server-routerlicious-base: 2.0.1
71
+ - @fluidframework/server-services: 2.0.1
72
+ - @fluidframework/server-services-client: 2.0.1
73
+ - @fluidframework/server-services-core: 2.0.1
74
+ - @fluidframework/server-services-ordering-kafkanode: 2.0.1
75
+ - @fluidframework/server-services-ordering-rdkafka: 2.0.1
76
+ - @fluidframework/server-services-ordering-zookeeper: 2.0.1
77
+ - @fluidframework/server-services-shared: 2.0.1
78
+ - @fluidframework/server-services-telemetry: 2.0.1
79
+ - @fluidframework/server-services-utils: 2.0.1
80
+ - @fluidframework/server-test-utils: 2.0.1
81
+ - tinylicious: 2.0.1
82
+
83
+ - test-utils: provideEntryPoint is required [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
84
+
85
+ The optional `provideEntryPoint` method has become required on a number of constructors. A value will need to be provided to the following classes:
86
+
87
+ - `BaseContainerRuntimeFactory`
88
+ - `RuntimeFactory`
89
+ - `ContainerRuntime` (constructor and `loadRuntime`)
90
+ - `FluidDataStoreRuntime`
91
+
92
+ See [testContainerRuntimeFactoryWithDefaultDataStore.ts](https://github.com/microsoft/FluidFramework/tree/main/packages/test/test-utils/src/testContainerRuntimeFactoryWithDefaultDataStore.ts) for an example implemtation of `provideEntryPoint` for ContainerRuntime.
93
+ See [pureDataObjectFactory.ts](https://github.com/microsoft/FluidFramework/tree/main/packages/framework/aqueduct/src/data-object-factories/pureDataObjectFactory.ts#L83) for an example implementation of `provideEntryPoint` for DataStoreRuntime.
94
+
95
+ Subsequently, various `entryPoint` and `getEntryPoint()` endpoints have become required. Please see [containerRuntime.ts](https://github.com/microsoft/FluidFramework/tree/main/packages/runtime/container-runtime/src/containerRuntime.ts) for example implementations of these APIs.
96
+
97
+ For more details, see [Removing-IFluidRouter.md](https://github.com/microsoft/FluidFramework/blob/main/packages/common/core-interfaces/Removing-IFluidRouter.md)
98
+
99
+ - Minimum TypeScript version now 5.1.6 [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
100
+
101
+ The minimum supported TypeScript version for Fluid 2.0 clients is now 5.1.6.
102
+
103
+ - container-loader: Containers will connect in read-mode by default [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
104
+
105
+ When a container is loaded, it will connect in read-mode unless it is loaded with a pending state containing stashed ops.
106
+
107
+ - container-loader: Container caching in the Loader is removed [871b3493dd](https://github.com/microsoft/FluidFramework/commits/871b3493dd0d7ea3a89be64998ceb6cb9021a04e)
108
+
109
+ Container caching in the Loader has been removed. Do not to rely on caching and inform the FluidFramework team ASAP if you cannot do so.
110
+
3
111
  ## 2.0.0-internal.6.4.0
4
112
 
5
113
  Dependency updates only.
@@ -5,9 +5,9 @@
5
5
  import { IDisposable } from "@fluidframework/core-interfaces";
6
6
  import { IDeltaManager } from "@fluidframework/container-definitions";
7
7
  /** @see CatchUpMonitor for usage */
8
- declare type CaughtUpListener = () => void;
8
+ type CaughtUpListener = () => void;
9
9
  /** Monitor that emits an event when a Container has caught up to a given point in the op stream */
10
- export declare type ICatchUpMonitor = IDisposable;
10
+ export type ICatchUpMonitor = IDisposable;
11
11
  /**
12
12
  * Monitors a Container's DeltaManager, notifying listeners when all ops have been processed
13
13
  * that were known at the time the monitor was created.
@@ -1 +1 @@
1
- {"version":3,"file":"catchUpMonitor.d.ts","sourceRoot":"","sources":["../src/catchUpMonitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAGtE,oCAAoC;AACpC,aAAK,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAEnC,mGAAmG;AACnG,oBAAY,eAAe,GAAG,WAAW,CAAC;AAE1C;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;IAepD,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAf1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKxB;IAEF;;OAEG;gBAEe,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EACrC,QAAQ,EAAE,gBAAgB;IAerC,QAAQ,EAAE,OAAO,CAAS;IAC1B,OAAO;CAQd"}
1
+ {"version":3,"file":"catchUpMonitor.d.ts","sourceRoot":"","sources":["../src/catchUpMonitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAGtE,oCAAoC;AACpC,KAAK,gBAAgB,GAAG,MAAM,IAAI,CAAC;AAEnC,mGAAmG;AACnG,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;IAepD,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAf1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAkB;IAElC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKxB;IAEF;;OAEG;gBAEe,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EACrC,QAAQ,EAAE,gBAAgB;IAerC,QAAQ,EAAE,OAAO,CAAS;IAC1B,OAAO;CAQd"}
@@ -1 +1 @@
1
- {"version":3,"file":"connectionManager.d.ts","sourceRoot":"","sources":["../src/connectionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connectionManager.d.ts","sourceRoot":"","sources":["../src/connectionManager.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.ConnectionManager = void 0;
8
8
  const core_utils_1 = require("@fluidframework/core-utils");
9
9
  const client_utils_1 = require("@fluid-internal/client-utils");
10
+ const driver_definitions_1 = require("@fluidframework/driver-definitions");
10
11
  const driver_utils_1 = require("@fluidframework/driver-utils");
11
12
  const protocol_definitions_1 = require("@fluidframework/protocol-definitions");
12
13
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
@@ -36,9 +37,15 @@ const clientNoDeltaStream = {
36
37
  };
37
38
  const clientIdNoDeltaStream = "storage-only client";
38
39
  class NoDeltaStream extends client_utils_1.TypedEventEmitter {
39
- constructor(storageOnlyReason) {
40
+ /**
41
+ * Connection which is not connected to socket.
42
+ * @param storageOnlyReason - Reason on why the connection to delta stream is not allowed.
43
+ * @param readonlyConnectionReason - reason/error if any which lead to using NoDeltaStream.
44
+ */
45
+ constructor(storageOnlyReason, readonlyConnectionReason) {
40
46
  super();
41
47
  this.storageOnlyReason = storageOnlyReason;
48
+ this.readonlyConnectionReason = readonlyConnectionReason;
42
49
  this.clientId = clientIdNoDeltaStream;
43
50
  this.claims = {
44
51
  scopes: [protocol_definitions_1.ScopeType.DocRead],
@@ -101,67 +108,6 @@ const waitForOnline = async () => {
101
108
  * Exposes various controls to influence this process, including manual reconnects, forced read-only mode, etc.
102
109
  */
103
110
  class ConnectionManager {
104
- constructor(serviceProvider, containerDirty, client, reconnectAllowed, logger, props) {
105
- this.serviceProvider = serviceProvider;
106
- this.containerDirty = containerDirty;
107
- this.client = client;
108
- this.logger = logger;
109
- this.props = props;
110
- /** tracks host requiring read-only mode. */
111
- this._forceReadonly = false;
112
- /** True if there is pending (async) reconnection from "read" to "write" */
113
- this.pendingReconnect = false;
114
- this.clientSequenceNumber = 0;
115
- this.clientSequenceNumberObserved = 0;
116
- /** Counts the number of non-runtime ops sent by the client which may not be acked. */
117
- this.localOpsToIgnore = 0;
118
- this.connectFirstConnection = true;
119
- this._connectionVerboseProps = {};
120
- this._connectionProps = {};
121
- this._disposed = false;
122
- this.opHandler = (documentId, messagesArg) => {
123
- const messages = Array.isArray(messagesArg) ? messagesArg : [messagesArg];
124
- this.props.incomingOpHandler(messages, "opHandler");
125
- };
126
- // Always connect in write mode after getting nacked.
127
- this.nackHandler = (documentId, messages) => {
128
- const message = messages[0];
129
- if (this._readonlyPermissions === true) {
130
- this.props.closeHandler((0, driver_utils_1.createWriteError)("writeOnReadOnlyDocument", { driverVersion: undefined }));
131
- return;
132
- }
133
- const reconnectInfo = getNackReconnectInfo(message.content);
134
- // If the nack indicates we cannot retry, then close the container outright
135
- if (!reconnectInfo.canRetry) {
136
- this.props.closeHandler(reconnectInfo);
137
- return;
138
- }
139
- this.reconnectOnError("write", reconnectInfo);
140
- };
141
- // Connection mode is always read on disconnect/error unless the system mode was write.
142
- this.disconnectHandlerInternal = (disconnectReason) => {
143
- // Note: we might get multiple disconnect calls on same socket, as early disconnect notification
144
- // ("server_disconnect", ODSP-specific) is mapped to "disconnect"
145
- this.reconnectOnError(this.defaultReconnectionMode, disconnectReason);
146
- };
147
- this.errorHandler = (error) => {
148
- this.reconnectOnError(this.defaultReconnectionMode, error);
149
- };
150
- this.clientDetails = this.client.details;
151
- this.defaultReconnectionMode = this.client.mode;
152
- this._reconnectMode = reconnectAllowed ? contracts_1.ReconnectMode.Enabled : contracts_1.ReconnectMode.Never;
153
- // Outbound message queue. The outbound queue is represented as a queue of an array of ops. Ops contained
154
- // within an array *must* fit within the maxMessageSize and are guaranteed to be ordered sequentially.
155
- this._outbound = new deltaQueue_1.DeltaQueue((messages) => {
156
- if (this.connection === undefined) {
157
- throw new Error("Attempted to submit an outbound message without connection");
158
- }
159
- this.connection.submit(messages);
160
- });
161
- this._outbound.on("error", (error) => {
162
- this.props.closeHandler((0, telemetry_utils_1.normalizeError)(error));
163
- });
164
- }
165
111
  get connectionVerboseProps() {
166
112
  return this._connectionVerboseProps;
167
113
  }
@@ -275,6 +221,67 @@ class ConnectionManager {
275
221
  reason,
276
222
  };
277
223
  }
224
+ constructor(serviceProvider, containerDirty, client, reconnectAllowed, logger, props) {
225
+ this.serviceProvider = serviceProvider;
226
+ this.containerDirty = containerDirty;
227
+ this.client = client;
228
+ this.logger = logger;
229
+ this.props = props;
230
+ /** tracks host requiring read-only mode. */
231
+ this._forceReadonly = false;
232
+ /** True if there is pending (async) reconnection from "read" to "write" */
233
+ this.pendingReconnect = false;
234
+ this.clientSequenceNumber = 0;
235
+ this.clientSequenceNumberObserved = 0;
236
+ /** Counts the number of non-runtime ops sent by the client which may not be acked. */
237
+ this.localOpsToIgnore = 0;
238
+ this.connectFirstConnection = true;
239
+ this._connectionVerboseProps = {};
240
+ this._connectionProps = {};
241
+ this._disposed = false;
242
+ this.opHandler = (documentId, messagesArg) => {
243
+ const messages = Array.isArray(messagesArg) ? messagesArg : [messagesArg];
244
+ this.props.incomingOpHandler(messages, "opHandler");
245
+ };
246
+ // Always connect in write mode after getting nacked.
247
+ this.nackHandler = (documentId, messages) => {
248
+ const message = messages[0];
249
+ if (this._readonlyPermissions === true) {
250
+ this.props.closeHandler((0, driver_utils_1.createWriteError)("writeOnReadOnlyDocument", { driverVersion: undefined }));
251
+ return;
252
+ }
253
+ const reconnectInfo = getNackReconnectInfo(message.content);
254
+ // If the nack indicates we cannot retry, then close the container outright
255
+ if (!reconnectInfo.canRetry) {
256
+ this.props.closeHandler(reconnectInfo);
257
+ return;
258
+ }
259
+ this.reconnectOnError("write", reconnectInfo);
260
+ };
261
+ // Connection mode is always read on disconnect/error unless the system mode was write.
262
+ this.disconnectHandlerInternal = (disconnectReason) => {
263
+ // Note: we might get multiple disconnect calls on same socket, as early disconnect notification
264
+ // ("server_disconnect", ODSP-specific) is mapped to "disconnect"
265
+ this.reconnectOnError(this.defaultReconnectionMode, disconnectReason);
266
+ };
267
+ this.errorHandler = (error) => {
268
+ this.reconnectOnError(this.defaultReconnectionMode, error);
269
+ };
270
+ this.clientDetails = this.client.details;
271
+ this.defaultReconnectionMode = this.client.mode;
272
+ this._reconnectMode = reconnectAllowed ? contracts_1.ReconnectMode.Enabled : contracts_1.ReconnectMode.Never;
273
+ // Outbound message queue. The outbound queue is represented as a queue of an array of ops. Ops contained
274
+ // within an array *must* fit within the maxMessageSize and are guaranteed to be ordered sequentially.
275
+ this._outbound = new deltaQueue_1.DeltaQueue((messages) => {
276
+ if (this.connection === undefined) {
277
+ throw new Error("Attempted to submit an outbound message without connection");
278
+ }
279
+ this.connection.submit(messages);
280
+ });
281
+ this._outbound.on("error", (error) => {
282
+ this.props.closeHandler((0, telemetry_utils_1.normalizeError)(error));
283
+ });
284
+ }
278
285
  dispose(error, switchToReadonly = true) {
279
286
  if (this._disposed) {
280
287
  return;
@@ -294,7 +301,7 @@ class ConnectionManager {
294
301
  // Notify everyone we are in read-only state.
295
302
  // Useful for data stores in case we hit some critical error,
296
303
  // to switch to a mode where user edits are not accepted
297
- this.set_readonlyPermissions(true, oldReadonlyValue);
304
+ this.set_readonlyPermissions(true, oldReadonlyValue, disconnectReason);
298
305
  }
299
306
  }
300
307
  /**
@@ -344,10 +351,10 @@ class ConnectionManager {
344
351
  }
345
352
  }
346
353
  }
347
- set_readonlyPermissions(newReadonlyValue, oldReadonlyValue) {
354
+ set_readonlyPermissions(newReadonlyValue, oldReadonlyValue, readonlyConnectionReason) {
348
355
  this._readonlyPermissions = newReadonlyValue;
349
356
  if (oldReadonlyValue !== this.readonly) {
350
- this.props.readonlyChangeHandler(this.readonly);
357
+ this.props.readonlyChangeHandler(this.readonly, readonlyConnectionReason);
351
358
  }
352
359
  }
353
360
  connect(reason, connectionMode) {
@@ -428,7 +435,22 @@ class ConnectionManager {
428
435
  }
429
436
  catch (origError) {
430
437
  if ((0, utils_1.isDeltaStreamConnectionForbiddenError)(origError)) {
431
- connection = new NoDeltaStream(origError.storageOnlyReason);
438
+ connection = new NoDeltaStream(origError.storageOnlyReason, {
439
+ text: origError.message,
440
+ error: origError,
441
+ });
442
+ requestedMode = "read";
443
+ break;
444
+ }
445
+ else if ((0, telemetry_utils_1.isFluidError)(origError) &&
446
+ // eslint-disable-next-line import/no-deprecated
447
+ origError.errorType === driver_definitions_1.DriverErrorType.outOfStorageError) {
448
+ // If we get out of storage error from calling joinsession, then use the NoDeltaStream object so
449
+ // that user can at least load the container.
450
+ connection = new NoDeltaStream(undefined, {
451
+ text: origError.message,
452
+ error: origError,
453
+ });
432
454
  requestedMode = "read";
433
455
  break;
434
456
  }
@@ -589,7 +611,7 @@ class ConnectionManager {
589
611
  // removed after those packages have released and become ubiquitous.
590
612
  (0, core_utils_1.assert)(requestedMode === "read" || readonly === (this.connectionMode === "read"), 0x0e7 /* "claims/connectionMode mismatch" */);
591
613
  (0, core_utils_1.assert)(!readonly || this.connectionMode === "read", 0x0e8 /* "readonly perf with write connection" */);
592
- this.set_readonlyPermissions(readonly, oldReadonlyValue);
614
+ this.set_readonlyPermissions(readonly, oldReadonlyValue, isNoDeltaStreamConnection(connection) ? connection.readonlyConnectionReason : undefined);
593
615
  if (this._disposed) {
594
616
  // Raise proper events, Log telemetry event and close connection.
595
617
  this.disconnectFromDeltaStream({ text: "ConnectionManager already closed" });