@fluidframework/container-runtime 2.23.0 → 2.31.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.
Files changed (317) hide show
  1. package/CHANGELOG.md +593 -537
  2. package/api-report/container-runtime.legacy.alpha.api.md +0 -246
  3. package/dist/blobManager/blobManager.d.ts +11 -9
  4. package/dist/blobManager/blobManager.d.ts.map +1 -1
  5. package/dist/blobManager/blobManager.js +38 -39
  6. package/dist/blobManager/blobManager.js.map +1 -1
  7. package/dist/blobManager/blobManagerSnapSum.d.ts +2 -4
  8. package/dist/blobManager/blobManagerSnapSum.d.ts.map +1 -1
  9. package/dist/blobManager/blobManagerSnapSum.js +6 -6
  10. package/dist/blobManager/blobManagerSnapSum.js.map +1 -1
  11. package/dist/channelCollection.d.ts +1 -7
  12. package/dist/channelCollection.d.ts.map +1 -1
  13. package/dist/channelCollection.js +2 -27
  14. package/dist/channelCollection.js.map +1 -1
  15. package/dist/connectionTelemetry.d.ts +0 -43
  16. package/dist/connectionTelemetry.d.ts.map +1 -1
  17. package/dist/connectionTelemetry.js.map +1 -1
  18. package/dist/containerRuntime.d.ts +40 -145
  19. package/dist/containerRuntime.d.ts.map +1 -1
  20. package/dist/containerRuntime.js +149 -364
  21. package/dist/containerRuntime.js.map +1 -1
  22. package/dist/dataStoreContext.d.ts +6 -14
  23. package/dist/dataStoreContext.d.ts.map +1 -1
  24. package/dist/dataStoreContext.js +14 -26
  25. package/dist/dataStoreContext.js.map +1 -1
  26. package/dist/gc/garbageCollection.d.ts.map +1 -1
  27. package/dist/gc/garbageCollection.js +2 -20
  28. package/dist/gc/garbageCollection.js.map +1 -1
  29. package/dist/gc/gcConfigs.d.ts.map +1 -1
  30. package/dist/gc/gcConfigs.js +0 -2
  31. package/dist/gc/gcConfigs.js.map +1 -1
  32. package/dist/gc/gcDefinitions.d.ts +8 -24
  33. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  34. package/dist/gc/gcDefinitions.js +1 -3
  35. package/dist/gc/gcDefinitions.js.map +1 -1
  36. package/dist/gc/gcHelpers.d.ts.map +1 -1
  37. package/dist/gc/gcHelpers.js +1 -4
  38. package/dist/gc/gcHelpers.js.map +1 -1
  39. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  40. package/dist/gc/gcSummaryStateTracker.js +0 -1
  41. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  42. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  43. package/dist/gc/gcTelemetry.js +6 -18
  44. package/dist/gc/gcTelemetry.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +2 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/legacy.d.ts +0 -29
  50. package/dist/messageTypes.d.ts.map +1 -1
  51. package/dist/messageTypes.js.map +1 -1
  52. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  53. package/dist/opLifecycle/batchManager.js +16 -5
  54. package/dist/opLifecycle/batchManager.js.map +1 -1
  55. package/dist/opLifecycle/outbox.d.ts +12 -3
  56. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  57. package/dist/opLifecycle/outbox.js +41 -21
  58. package/dist/opLifecycle/outbox.js.map +1 -1
  59. package/dist/packageVersion.d.ts +1 -1
  60. package/dist/packageVersion.js +1 -1
  61. package/dist/packageVersion.js.map +1 -1
  62. package/dist/pendingStateManager.d.ts +1 -0
  63. package/dist/pendingStateManager.d.ts.map +1 -1
  64. package/dist/pendingStateManager.js +12 -2
  65. package/dist/pendingStateManager.js.map +1 -1
  66. package/dist/runCounter.d.ts +11 -0
  67. package/dist/runCounter.d.ts.map +1 -0
  68. package/dist/runCounter.js +43 -0
  69. package/dist/runCounter.js.map +1 -0
  70. package/dist/runtimeLayerCompatState.d.ts +51 -0
  71. package/dist/runtimeLayerCompatState.d.ts.map +1 -0
  72. package/dist/runtimeLayerCompatState.js +123 -0
  73. package/dist/runtimeLayerCompatState.js.map +1 -0
  74. package/dist/signalTelemetryProcessing.d.ts +33 -0
  75. package/dist/signalTelemetryProcessing.d.ts.map +1 -0
  76. package/dist/signalTelemetryProcessing.js +149 -0
  77. package/dist/signalTelemetryProcessing.js.map +1 -0
  78. package/dist/summary/documentSchema.d.ts +7 -31
  79. package/dist/summary/documentSchema.d.ts.map +1 -1
  80. package/dist/summary/documentSchema.js +2 -18
  81. package/dist/summary/documentSchema.js.map +1 -1
  82. package/dist/summary/index.d.ts +2 -1
  83. package/dist/summary/index.d.ts.map +1 -1
  84. package/dist/summary/index.js +7 -1
  85. package/dist/summary/index.js.map +1 -1
  86. package/dist/summary/orderedClientElection.d.ts +1 -3
  87. package/dist/summary/orderedClientElection.d.ts.map +1 -1
  88. package/dist/summary/orderedClientElection.js.map +1 -1
  89. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -3
  90. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  91. package/dist/summary/runWhileConnectedCoordinator.js +2 -7
  92. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  93. package/dist/summary/runningSummarizer.d.ts +1 -2
  94. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  95. package/dist/summary/runningSummarizer.js +4 -23
  96. package/dist/summary/runningSummarizer.js.map +1 -1
  97. package/dist/summary/summarizer.d.ts +2 -5
  98. package/dist/summary/summarizer.d.ts.map +1 -1
  99. package/dist/summary/summarizer.js +3 -11
  100. package/dist/summary/summarizer.js.map +1 -1
  101. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  102. package/dist/summary/summarizerClientElection.js +0 -1
  103. package/dist/summary/summarizerClientElection.js.map +1 -1
  104. package/dist/summary/summarizerHeuristics.d.ts +1 -1
  105. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  106. package/dist/summary/summarizerHeuristics.js.map +1 -1
  107. package/dist/summary/summarizerNode/summarizerNode.d.ts +2 -2
  108. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  109. package/dist/summary/summarizerNode/summarizerNode.js +4 -4
  110. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  111. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -18
  112. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  113. package/dist/summary/summarizerNode/summarizerNodeUtils.js +0 -27
  114. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  115. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -2
  116. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  117. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +1 -2
  118. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  119. package/dist/summary/summarizerTypes.d.ts +109 -22
  120. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  121. package/dist/summary/summarizerTypes.js.map +1 -1
  122. package/dist/summary/summaryFormat.d.ts +3 -9
  123. package/dist/summary/summaryFormat.d.ts.map +1 -1
  124. package/dist/summary/summaryFormat.js.map +1 -1
  125. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  126. package/dist/summary/summaryGenerator.js +3 -9
  127. package/dist/summary/summaryGenerator.js.map +1 -1
  128. package/dist/summary/summaryHelpers.d.ts +19 -0
  129. package/dist/summary/summaryHelpers.d.ts.map +1 -0
  130. package/dist/summary/summaryHelpers.js +90 -0
  131. package/dist/summary/summaryHelpers.js.map +1 -0
  132. package/dist/summary/summaryManager.d.ts.map +1 -1
  133. package/dist/summary/summaryManager.js +0 -2
  134. package/dist/summary/summaryManager.js.map +1 -1
  135. package/lib/blobManager/blobManager.d.ts +11 -9
  136. package/lib/blobManager/blobManager.d.ts.map +1 -1
  137. package/lib/blobManager/blobManager.js +37 -37
  138. package/lib/blobManager/blobManager.js.map +1 -1
  139. package/lib/blobManager/blobManagerSnapSum.d.ts +2 -4
  140. package/lib/blobManager/blobManagerSnapSum.d.ts.map +1 -1
  141. package/lib/blobManager/blobManagerSnapSum.js +6 -6
  142. package/lib/blobManager/blobManagerSnapSum.js.map +1 -1
  143. package/lib/channelCollection.d.ts +1 -7
  144. package/lib/channelCollection.d.ts.map +1 -1
  145. package/lib/channelCollection.js +3 -30
  146. package/lib/channelCollection.js.map +1 -1
  147. package/lib/connectionTelemetry.d.ts +0 -43
  148. package/lib/connectionTelemetry.d.ts.map +1 -1
  149. package/lib/connectionTelemetry.js.map +1 -1
  150. package/lib/containerRuntime.d.ts +40 -145
  151. package/lib/containerRuntime.d.ts.map +1 -1
  152. package/lib/containerRuntime.js +151 -372
  153. package/lib/containerRuntime.js.map +1 -1
  154. package/lib/dataStoreContext.d.ts +6 -14
  155. package/lib/dataStoreContext.d.ts.map +1 -1
  156. package/lib/dataStoreContext.js +14 -26
  157. package/lib/dataStoreContext.js.map +1 -1
  158. package/lib/gc/garbageCollection.d.ts.map +1 -1
  159. package/lib/gc/garbageCollection.js +3 -23
  160. package/lib/gc/garbageCollection.js.map +1 -1
  161. package/lib/gc/gcConfigs.d.ts.map +1 -1
  162. package/lib/gc/gcConfigs.js +0 -2
  163. package/lib/gc/gcConfigs.js.map +1 -1
  164. package/lib/gc/gcDefinitions.d.ts +8 -24
  165. package/lib/gc/gcDefinitions.d.ts.map +1 -1
  166. package/lib/gc/gcDefinitions.js +1 -3
  167. package/lib/gc/gcDefinitions.js.map +1 -1
  168. package/lib/gc/gcHelpers.d.ts.map +1 -1
  169. package/lib/gc/gcHelpers.js +1 -4
  170. package/lib/gc/gcHelpers.js.map +1 -1
  171. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
  172. package/lib/gc/gcSummaryStateTracker.js +0 -1
  173. package/lib/gc/gcSummaryStateTracker.js.map +1 -1
  174. package/lib/gc/gcTelemetry.d.ts.map +1 -1
  175. package/lib/gc/gcTelemetry.js +7 -21
  176. package/lib/gc/gcTelemetry.js.map +1 -1
  177. package/lib/index.d.ts +2 -2
  178. package/lib/index.d.ts.map +1 -1
  179. package/lib/index.js +2 -2
  180. package/lib/index.js.map +1 -1
  181. package/lib/legacy.d.ts +0 -29
  182. package/lib/messageTypes.d.ts.map +1 -1
  183. package/lib/messageTypes.js.map +1 -1
  184. package/lib/opLifecycle/batchManager.d.ts.map +1 -1
  185. package/lib/opLifecycle/batchManager.js +16 -5
  186. package/lib/opLifecycle/batchManager.js.map +1 -1
  187. package/lib/opLifecycle/outbox.d.ts +12 -3
  188. package/lib/opLifecycle/outbox.d.ts.map +1 -1
  189. package/lib/opLifecycle/outbox.js +43 -23
  190. package/lib/opLifecycle/outbox.js.map +1 -1
  191. package/lib/packageVersion.d.ts +1 -1
  192. package/lib/packageVersion.js +1 -1
  193. package/lib/packageVersion.js.map +1 -1
  194. package/lib/pendingStateManager.d.ts +1 -0
  195. package/lib/pendingStateManager.d.ts.map +1 -1
  196. package/lib/pendingStateManager.js +12 -2
  197. package/lib/pendingStateManager.js.map +1 -1
  198. package/lib/runCounter.d.ts +11 -0
  199. package/lib/runCounter.d.ts.map +1 -0
  200. package/lib/runCounter.js +39 -0
  201. package/lib/runCounter.js.map +1 -0
  202. package/lib/runtimeLayerCompatState.d.ts +51 -0
  203. package/lib/runtimeLayerCompatState.d.ts.map +1 -0
  204. package/lib/runtimeLayerCompatState.js +118 -0
  205. package/lib/runtimeLayerCompatState.js.map +1 -0
  206. package/lib/signalTelemetryProcessing.d.ts +33 -0
  207. package/lib/signalTelemetryProcessing.d.ts.map +1 -0
  208. package/lib/signalTelemetryProcessing.js +145 -0
  209. package/lib/signalTelemetryProcessing.js.map +1 -0
  210. package/lib/summary/documentSchema.d.ts +7 -31
  211. package/lib/summary/documentSchema.d.ts.map +1 -1
  212. package/lib/summary/documentSchema.js +2 -18
  213. package/lib/summary/documentSchema.js.map +1 -1
  214. package/lib/summary/index.d.ts +2 -1
  215. package/lib/summary/index.d.ts.map +1 -1
  216. package/lib/summary/index.js +1 -0
  217. package/lib/summary/index.js.map +1 -1
  218. package/lib/summary/orderedClientElection.d.ts +1 -3
  219. package/lib/summary/orderedClientElection.d.ts.map +1 -1
  220. package/lib/summary/orderedClientElection.js.map +1 -1
  221. package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -3
  222. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  223. package/lib/summary/runWhileConnectedCoordinator.js +2 -7
  224. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
  225. package/lib/summary/runningSummarizer.d.ts +1 -2
  226. package/lib/summary/runningSummarizer.d.ts.map +1 -1
  227. package/lib/summary/runningSummarizer.js +4 -23
  228. package/lib/summary/runningSummarizer.js.map +1 -1
  229. package/lib/summary/summarizer.d.ts +2 -5
  230. package/lib/summary/summarizer.d.ts.map +1 -1
  231. package/lib/summary/summarizer.js +3 -11
  232. package/lib/summary/summarizer.js.map +1 -1
  233. package/lib/summary/summarizerClientElection.d.ts.map +1 -1
  234. package/lib/summary/summarizerClientElection.js +0 -1
  235. package/lib/summary/summarizerClientElection.js.map +1 -1
  236. package/lib/summary/summarizerHeuristics.d.ts +1 -1
  237. package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
  238. package/lib/summary/summarizerHeuristics.js.map +1 -1
  239. package/lib/summary/summarizerNode/summarizerNode.d.ts +2 -2
  240. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  241. package/lib/summary/summarizerNode/summarizerNode.js +5 -5
  242. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
  243. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +1 -18
  244. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  245. package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -25
  246. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  247. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -2
  248. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  249. package/lib/summary/summarizerNode/summarizerNodeWithGc.js +1 -2
  250. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  251. package/lib/summary/summarizerTypes.d.ts +109 -22
  252. package/lib/summary/summarizerTypes.d.ts.map +1 -1
  253. package/lib/summary/summarizerTypes.js.map +1 -1
  254. package/lib/summary/summaryFormat.d.ts +3 -9
  255. package/lib/summary/summaryFormat.d.ts.map +1 -1
  256. package/lib/summary/summaryFormat.js.map +1 -1
  257. package/lib/summary/summaryGenerator.d.ts.map +1 -1
  258. package/lib/summary/summaryGenerator.js +3 -9
  259. package/lib/summary/summaryGenerator.js.map +1 -1
  260. package/lib/summary/summaryHelpers.d.ts +19 -0
  261. package/lib/summary/summaryHelpers.d.ts.map +1 -0
  262. package/lib/summary/summaryHelpers.js +84 -0
  263. package/lib/summary/summaryHelpers.js.map +1 -0
  264. package/lib/summary/summaryManager.d.ts.map +1 -1
  265. package/lib/summary/summaryManager.js +0 -2
  266. package/lib/summary/summaryManager.js.map +1 -1
  267. package/lib/tsdoc-metadata.json +1 -1
  268. package/package.json +20 -23
  269. package/src/blobManager/blobManager.ts +70 -62
  270. package/src/blobManager/blobManagerSnapSum.ts +7 -9
  271. package/src/channelCollection.ts +4 -32
  272. package/src/connectionTelemetry.ts +0 -51
  273. package/src/containerRuntime.ts +259 -622
  274. package/src/dataStoreContext.ts +24 -33
  275. package/src/gc/{garbageCollection.md → README.md} +17 -19
  276. package/src/gc/garbageCollection.ts +9 -26
  277. package/src/gc/gcConfigs.ts +3 -6
  278. package/src/gc/gcDefinitions.ts +10 -28
  279. package/src/gc/gcHelpers.ts +0 -5
  280. package/src/gc/gcSummaryStateTracker.ts +1 -2
  281. package/src/gc/gcTelemetry.ts +8 -15
  282. package/src/index.ts +6 -6
  283. package/src/messageTypes.ts +0 -2
  284. package/src/opLifecycle/batchManager.ts +20 -6
  285. package/src/opLifecycle/outbox.ts +64 -24
  286. package/src/packageVersion.ts +1 -1
  287. package/src/pendingStateManager.ts +18 -2
  288. package/src/runCounter.ts +25 -0
  289. package/src/runtimeLayerCompatState.ts +143 -0
  290. package/src/signalTelemetryProcessing.ts +233 -0
  291. package/src/summary/documentSchema.ts +7 -38
  292. package/src/summary/index.ts +12 -0
  293. package/src/summary/orderedClientElection.ts +1 -3
  294. package/src/summary/runWhileConnectedCoordinator.ts +3 -8
  295. package/src/summary/runningSummarizer.ts +12 -20
  296. package/src/summary/summarizer.ts +6 -18
  297. package/src/summary/summarizerClientElection.ts +0 -2
  298. package/src/summary/summarizerHeuristics.ts +1 -2
  299. package/src/summary/summarizerNode/summarizerNode.ts +6 -5
  300. package/src/summary/summarizerNode/summarizerNodeUtils.ts +1 -27
  301. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +2 -3
  302. package/src/summary/summarizerTypes.ts +119 -23
  303. package/src/summary/summaryFormat.ts +4 -13
  304. package/src/summary/summaryGenerator.ts +1 -8
  305. package/src/summary/summaryHelpers.ts +118 -0
  306. package/src/summary/summaryManager.ts +0 -2
  307. package/tsconfig.json +1 -0
  308. package/dist/layerCompatState.d.ts +0 -19
  309. package/dist/layerCompatState.d.ts.map +0 -1
  310. package/dist/layerCompatState.js +0 -64
  311. package/dist/layerCompatState.js.map +0 -1
  312. package/lib/layerCompatState.d.ts +0 -19
  313. package/lib/layerCompatState.d.ts.map +0 -1
  314. package/lib/layerCompatState.js +0 -60
  315. package/lib/layerCompatState.js.map +0 -1
  316. package/prettier.config.cjs +0 -8
  317. package/src/layerCompatState.ts +0 -75
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
9
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
10
+ };
11
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
+ if (kind === "m") throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var _RunCounter_runs;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RunCounter = void 0;
20
+ class RunCounter {
21
+ constructor() {
22
+ _RunCounter_runs.set(this, 0);
23
+ }
24
+ get running() {
25
+ return __classPrivateFieldGet(this, _RunCounter_runs, "f") !== 0;
26
+ }
27
+ get runs() {
28
+ return __classPrivateFieldGet(this, _RunCounter_runs, "f");
29
+ }
30
+ run(act) {
31
+ var _a, _b;
32
+ __classPrivateFieldSet(this, _RunCounter_runs, (_a = __classPrivateFieldGet(this, _RunCounter_runs, "f"), _a++, _a), "f");
33
+ try {
34
+ return act();
35
+ }
36
+ finally {
37
+ __classPrivateFieldSet(this, _RunCounter_runs, (_b = __classPrivateFieldGet(this, _RunCounter_runs, "f"), _b--, _b), "f");
38
+ }
39
+ }
40
+ }
41
+ exports.RunCounter = RunCounter;
42
+ _RunCounter_runs = new WeakMap();
43
+ //# sourceMappingURL=runCounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runCounter.js","sourceRoot":"","sources":["../src/runCounter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;AAEH,MAAa,UAAU;IAAvB;QACC,2BAAQ,CAAC,EAAC;IAkBX,CAAC;IAhBA,IAAW,OAAO;QACjB,OAAO,uBAAA,IAAI,wBAAM,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,IAAW,IAAI;QACd,OAAO,uBAAA,IAAI,wBAAM,CAAC;IACnB,CAAC;IAEM,GAAG,CAAI,GAAY;;QACzB,+CAAA,CAAA,wDAAU,EAAV,IAAY,IAAA,CAAA,MAAA,CAAC;QACb,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC;QACd,CAAC;gBAAS,CAAC;YACV,+CAAA,CAAA,wDAAU,EAAV,IAAY,IAAA,CAAA,MAAA,CAAC;QACd,CAAC;IACF,CAAC;CACD;AAnBD,gCAmBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport class RunCounter {\n\t#runs = 0;\n\n\tpublic get running(): boolean {\n\t\treturn this.#runs !== 0;\n\t}\n\n\tpublic get runs(): number {\n\t\treturn this.#runs;\n\t}\n\n\tpublic run<T>(act: () => T): T {\n\t\tthis.#runs++;\n\t\ttry {\n\t\t\treturn act();\n\t\t} finally {\n\t\t\tthis.#runs--;\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,51 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { type ILayerCompatDetails, type ILayerCompatSupportRequirements } from "@fluid-internal/client-utils";
6
+ import type { ICriticalContainerError } from "@fluidframework/container-definitions";
7
+ /**
8
+ * The core compatibility details of the Runtime layer that is the same across all layer boundaries.
9
+ * @internal
10
+ */
11
+ export declare const runtimeCoreCompatDetails: {
12
+ /**
13
+ * The package version of the Runtime layer.
14
+ */
15
+ pkgVersion: string;
16
+ /**
17
+ * The current generation of the Runtime layer.
18
+ */
19
+ generation: number;
20
+ };
21
+ /**
22
+ * Runtime's compatibility details that is exposed to the Loader layer.
23
+ * @internal
24
+ */
25
+ export declare const runtimeCompatDetailsForLoader: ILayerCompatDetails;
26
+ /**
27
+ * The requirements that the Loader layer must meet to be compatible with this Runtime.
28
+ * @internal
29
+ */
30
+ export declare const loaderSupportRequirements: ILayerCompatSupportRequirements;
31
+ /**
32
+ * Runtime's compatibility details that is exposed to the DataStore layer.
33
+ * @internal
34
+ */
35
+ export declare const runtimeCompatDetailsForDataStore: ILayerCompatDetails;
36
+ /**
37
+ * The requirements that the DataStore layer must meet to be compatible with this Runtime.
38
+ * @internal
39
+ */
40
+ export declare const dataStoreSupportRequirements: ILayerCompatSupportRequirements;
41
+ /**
42
+ * Validates that the Loader layer is compatible with this Runtime.
43
+ * @internal
44
+ */
45
+ export declare function validateLoaderCompatibility(maybeloaderCompatDetailsForRuntime: ILayerCompatDetails | undefined, disposeFn: (error?: ICriticalContainerError) => void): void;
46
+ /**
47
+ * Validates that the DataStore layer is compatible with this Runtime.
48
+ * @internal
49
+ */
50
+ export declare function validateDatastoreCompatibility(maybeDataStoreCompatDetails: ILayerCompatDetails | undefined, disposeFn: () => void): void;
51
+ //# sourceMappingURL=runtimeLayerCompatState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLayerCompatState.d.ts","sourceRoot":"","sources":["../src/runtimeLayerCompatState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEN,KAAK,mBAAmB,EACxB,KAAK,+BAA+B,EACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAKrF;;;GAGG;AACH,eAAO,MAAM,wBAAwB;IACpC;;OAEG;;IAEH;;OAEG;;CAEH,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,mBAM3C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,+BAUvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gCAAgC,EAAE,mBAM9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,+BAU1C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,kCAAkC,EAAE,mBAAmB,GAAG,SAAS,EACnE,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,KAAK,IAAI,GAClD,IAAI,CAoBN;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC7C,2BAA2B,EAAE,mBAAmB,GAAG,SAAS,EAC5D,SAAS,EAAE,MAAM,IAAI,GACnB,IAAI,CAoBN"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.validateDatastoreCompatibility = exports.validateLoaderCompatibility = exports.dataStoreSupportRequirements = exports.runtimeCompatDetailsForDataStore = exports.loaderSupportRequirements = exports.runtimeCompatDetailsForLoader = exports.runtimeCoreCompatDetails = void 0;
8
+ const client_utils_1 = require("@fluid-internal/client-utils");
9
+ const internal_1 = require("@fluidframework/telemetry-utils/internal");
10
+ const packageVersion_js_1 = require("./packageVersion.js");
11
+ /**
12
+ * The core compatibility details of the Runtime layer that is the same across all layer boundaries.
13
+ * @internal
14
+ */
15
+ exports.runtimeCoreCompatDetails = {
16
+ /**
17
+ * The package version of the Runtime layer.
18
+ */
19
+ pkgVersion: packageVersion_js_1.pkgVersion,
20
+ /**
21
+ * The current generation of the Runtime layer.
22
+ */
23
+ generation: 1,
24
+ };
25
+ /**
26
+ * Runtime's compatibility details that is exposed to the Loader layer.
27
+ * @internal
28
+ */
29
+ exports.runtimeCompatDetailsForLoader = {
30
+ ...exports.runtimeCoreCompatDetails,
31
+ /**
32
+ * The features supported by the Runtime layer across the Runtime / Loader boundary.
33
+ */
34
+ supportedFeatures: new Set(),
35
+ };
36
+ /**
37
+ * The requirements that the Loader layer must meet to be compatible with this Runtime.
38
+ * @internal
39
+ */
40
+ exports.loaderSupportRequirements = {
41
+ /**
42
+ * Minimum generation that Loader must be at to be compatible with Runtime. Note that 0 is used here so
43
+ * that Loader layers before the introduction of the layer compatibility enforcement are compatible.
44
+ */
45
+ minSupportedGeneration: 0,
46
+ /**
47
+ * The features that the Loader must support to be compatible with Runtime.
48
+ */
49
+ requiredFeatures: [],
50
+ };
51
+ /**
52
+ * Runtime's compatibility details that is exposed to the DataStore layer.
53
+ * @internal
54
+ */
55
+ exports.runtimeCompatDetailsForDataStore = {
56
+ ...exports.runtimeCoreCompatDetails,
57
+ /**
58
+ * The features supported by the Runtime layer across the Runtime / Loader boundary.
59
+ */
60
+ supportedFeatures: new Set(),
61
+ };
62
+ /**
63
+ * The requirements that the DataStore layer must meet to be compatible with this Runtime.
64
+ * @internal
65
+ */
66
+ exports.dataStoreSupportRequirements = {
67
+ /**
68
+ * Minimum generation that DataStore must be at to be compatible with Runtime. Note that 0 is used here so
69
+ * that DataStore layers before the introduction of the layer compatibility enforcement are compatible.
70
+ */
71
+ minSupportedGeneration: 0,
72
+ /**
73
+ * The features that the DataStore must support to be compatible with Runtime.
74
+ */
75
+ requiredFeatures: [],
76
+ };
77
+ /**
78
+ * Validates that the Loader layer is compatible with this Runtime.
79
+ * @internal
80
+ */
81
+ function validateLoaderCompatibility(maybeloaderCompatDetailsForRuntime, disposeFn) {
82
+ const layerCheckResult = (0, client_utils_1.checkLayerCompatibility)(exports.loaderSupportRequirements, maybeloaderCompatDetailsForRuntime);
83
+ if (!layerCheckResult.isCompatible) {
84
+ const error = new internal_1.UsageError("Runtime is not compatible with Loader", {
85
+ errorDetails: JSON.stringify({
86
+ runtimeVersion: exports.runtimeCoreCompatDetails.pkgVersion,
87
+ loaderVersion: maybeloaderCompatDetailsForRuntime?.pkgVersion,
88
+ runtimeGeneration: exports.runtimeCoreCompatDetails.generation,
89
+ loaderGeneration: maybeloaderCompatDetailsForRuntime?.generation,
90
+ minSupportedGeneration: exports.loaderSupportRequirements.minSupportedGeneration,
91
+ isGenerationCompatible: layerCheckResult.isGenerationCompatible,
92
+ unsupportedFeatures: layerCheckResult.unsupportedFeatures,
93
+ }),
94
+ });
95
+ disposeFn(error);
96
+ throw error;
97
+ }
98
+ }
99
+ exports.validateLoaderCompatibility = validateLoaderCompatibility;
100
+ /**
101
+ * Validates that the DataStore layer is compatible with this Runtime.
102
+ * @internal
103
+ */
104
+ function validateDatastoreCompatibility(maybeDataStoreCompatDetails, disposeFn) {
105
+ const layerCheckResult = (0, client_utils_1.checkLayerCompatibility)(exports.dataStoreSupportRequirements, maybeDataStoreCompatDetails);
106
+ if (!layerCheckResult.isCompatible) {
107
+ const error = new internal_1.UsageError("Runtime is not compatible with DataStore", {
108
+ errorDetails: JSON.stringify({
109
+ runtimeVersion: exports.runtimeCoreCompatDetails.pkgVersion,
110
+ dataStoreVersion: maybeDataStoreCompatDetails?.pkgVersion,
111
+ runtimeGeneration: exports.runtimeCoreCompatDetails.generation,
112
+ dataStoreGeneration: maybeDataStoreCompatDetails?.generation,
113
+ minSupportedGeneration: exports.dataStoreSupportRequirements.minSupportedGeneration,
114
+ isGenerationCompatible: layerCheckResult.isGenerationCompatible,
115
+ unsupportedFeatures: layerCheckResult.unsupportedFeatures,
116
+ }),
117
+ });
118
+ disposeFn();
119
+ throw error;
120
+ }
121
+ }
122
+ exports.validateDatastoreCompatibility = validateDatastoreCompatibility;
123
+ //# sourceMappingURL=runtimeLayerCompatState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLayerCompatState.js","sourceRoot":"","sources":["../src/runtimeLayerCompatState.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAIsC;AAEtC,uEAAsE;AAEtE,2DAAiD;AAEjD;;;GAGG;AACU,QAAA,wBAAwB,GAAG;IACvC;;OAEG;IACH,UAAU,EAAV,8BAAU;IACV;;OAEG;IACH,UAAU,EAAE,CAAC;CACb,CAAC;AAEF;;;GAGG;AACU,QAAA,6BAA6B,GAAwB;IACjE,GAAG,gCAAwB;IAC3B;;OAEG;IACH,iBAAiB,EAAE,IAAI,GAAG,EAAU;CACpC,CAAC;AAEF;;;GAGG;AACU,QAAA,yBAAyB,GAAoC;IACzE;;;OAGG;IACH,sBAAsB,EAAE,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,EAAE;CACpB,CAAC;AAEF;;;GAGG;AACU,QAAA,gCAAgC,GAAwB;IACpE,GAAG,gCAAwB;IAC3B;;OAEG;IACH,iBAAiB,EAAE,IAAI,GAAG,EAAU;CACpC,CAAC;AAEF;;;GAGG;AACU,QAAA,4BAA4B,GAAoC;IAC5E;;;OAGG;IACH,sBAAsB,EAAE,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE,EAAE;CACpB,CAAC;AAEF;;;GAGG;AACH,SAAgB,2BAA2B,CAC1C,kCAAmE,EACnE,SAAoD;IAEpD,MAAM,gBAAgB,GAAG,IAAA,sCAAuB,EAC/C,iCAAyB,EACzB,kCAAkC,CAClC,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,qBAAU,CAAC,uCAAuC,EAAE;YACrE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5B,cAAc,EAAE,gCAAwB,CAAC,UAAU;gBACnD,aAAa,EAAE,kCAAkC,EAAE,UAAU;gBAC7D,iBAAiB,EAAE,gCAAwB,CAAC,UAAU;gBACtD,gBAAgB,EAAE,kCAAkC,EAAE,UAAU;gBAChE,sBAAsB,EAAE,iCAAyB,CAAC,sBAAsB;gBACxE,sBAAsB,EAAE,gBAAgB,CAAC,sBAAsB;gBAC/D,mBAAmB,EAAE,gBAAgB,CAAC,mBAAmB;aACzD,CAAC;SACF,CAAC,CAAC;QACH,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAvBD,kEAuBC;AAED;;;GAGG;AACH,SAAgB,8BAA8B,CAC7C,2BAA4D,EAC5D,SAAqB;IAErB,MAAM,gBAAgB,GAAG,IAAA,sCAAuB,EAC/C,oCAA4B,EAC5B,2BAA2B,CAC3B,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,qBAAU,CAAC,0CAA0C,EAAE;YACxE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5B,cAAc,EAAE,gCAAwB,CAAC,UAAU;gBACnD,gBAAgB,EAAE,2BAA2B,EAAE,UAAU;gBACzD,iBAAiB,EAAE,gCAAwB,CAAC,UAAU;gBACtD,mBAAmB,EAAE,2BAA2B,EAAE,UAAU;gBAC5D,sBAAsB,EAAE,oCAA4B,CAAC,sBAAsB;gBAC3E,sBAAsB,EAAE,gBAAgB,CAAC,sBAAsB;gBAC/D,mBAAmB,EAAE,gBAAgB,CAAC,mBAAmB;aACzD,CAAC;SACF,CAAC,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAvBD,wEAuBC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\tcheckLayerCompatibility,\n\ttype ILayerCompatDetails,\n\ttype ILayerCompatSupportRequirements,\n} from \"@fluid-internal/client-utils\";\nimport type { ICriticalContainerError } from \"@fluidframework/container-definitions\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { pkgVersion } from \"./packageVersion.js\";\n\n/**\n * The core compatibility details of the Runtime layer that is the same across all layer boundaries.\n * @internal\n */\nexport const runtimeCoreCompatDetails = {\n\t/**\n\t * The package version of the Runtime layer.\n\t */\n\tpkgVersion,\n\t/**\n\t * The current generation of the Runtime layer.\n\t */\n\tgeneration: 1,\n};\n\n/**\n * Runtime's compatibility details that is exposed to the Loader layer.\n * @internal\n */\nexport const runtimeCompatDetailsForLoader: ILayerCompatDetails = {\n\t...runtimeCoreCompatDetails,\n\t/**\n\t * The features supported by the Runtime layer across the Runtime / Loader boundary.\n\t */\n\tsupportedFeatures: new Set<string>(),\n};\n\n/**\n * The requirements that the Loader layer must meet to be compatible with this Runtime.\n * @internal\n */\nexport const loaderSupportRequirements: ILayerCompatSupportRequirements = {\n\t/**\n\t * Minimum generation that Loader must be at to be compatible with Runtime. Note that 0 is used here so\n\t * that Loader layers before the introduction of the layer compatibility enforcement are compatible.\n\t */\n\tminSupportedGeneration: 0,\n\t/**\n\t * The features that the Loader must support to be compatible with Runtime.\n\t */\n\trequiredFeatures: [],\n};\n\n/**\n * Runtime's compatibility details that is exposed to the DataStore layer.\n * @internal\n */\nexport const runtimeCompatDetailsForDataStore: ILayerCompatDetails = {\n\t...runtimeCoreCompatDetails,\n\t/**\n\t * The features supported by the Runtime layer across the Runtime / Loader boundary.\n\t */\n\tsupportedFeatures: new Set<string>(),\n};\n\n/**\n * The requirements that the DataStore layer must meet to be compatible with this Runtime.\n * @internal\n */\nexport const dataStoreSupportRequirements: ILayerCompatSupportRequirements = {\n\t/**\n\t * Minimum generation that DataStore must be at to be compatible with Runtime. Note that 0 is used here so\n\t * that DataStore layers before the introduction of the layer compatibility enforcement are compatible.\n\t */\n\tminSupportedGeneration: 0,\n\t/**\n\t * The features that the DataStore must support to be compatible with Runtime.\n\t */\n\trequiredFeatures: [],\n};\n\n/**\n * Validates that the Loader layer is compatible with this Runtime.\n * @internal\n */\nexport function validateLoaderCompatibility(\n\tmaybeloaderCompatDetailsForRuntime: ILayerCompatDetails | undefined,\n\tdisposeFn: (error?: ICriticalContainerError) => void,\n): void {\n\tconst layerCheckResult = checkLayerCompatibility(\n\t\tloaderSupportRequirements,\n\t\tmaybeloaderCompatDetailsForRuntime,\n\t);\n\tif (!layerCheckResult.isCompatible) {\n\t\tconst error = new UsageError(\"Runtime is not compatible with Loader\", {\n\t\t\terrorDetails: JSON.stringify({\n\t\t\t\truntimeVersion: runtimeCoreCompatDetails.pkgVersion,\n\t\t\t\tloaderVersion: maybeloaderCompatDetailsForRuntime?.pkgVersion,\n\t\t\t\truntimeGeneration: runtimeCoreCompatDetails.generation,\n\t\t\t\tloaderGeneration: maybeloaderCompatDetailsForRuntime?.generation,\n\t\t\t\tminSupportedGeneration: loaderSupportRequirements.minSupportedGeneration,\n\t\t\t\tisGenerationCompatible: layerCheckResult.isGenerationCompatible,\n\t\t\t\tunsupportedFeatures: layerCheckResult.unsupportedFeatures,\n\t\t\t}),\n\t\t});\n\t\tdisposeFn(error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Validates that the DataStore layer is compatible with this Runtime.\n * @internal\n */\nexport function validateDatastoreCompatibility(\n\tmaybeDataStoreCompatDetails: ILayerCompatDetails | undefined,\n\tdisposeFn: () => void,\n): void {\n\tconst layerCheckResult = checkLayerCompatibility(\n\t\tdataStoreSupportRequirements,\n\t\tmaybeDataStoreCompatDetails,\n\t);\n\tif (!layerCheckResult.isCompatible) {\n\t\tconst error = new UsageError(\"Runtime is not compatible with DataStore\", {\n\t\t\terrorDetails: JSON.stringify({\n\t\t\t\truntimeVersion: runtimeCoreCompatDetails.pkgVersion,\n\t\t\t\tdataStoreVersion: maybeDataStoreCompatDetails?.pkgVersion,\n\t\t\t\truntimeGeneration: runtimeCoreCompatDetails.generation,\n\t\t\t\tdataStoreGeneration: maybeDataStoreCompatDetails?.generation,\n\t\t\t\tminSupportedGeneration: dataStoreSupportRequirements.minSupportedGeneration,\n\t\t\t\tisGenerationCompatible: layerCheckResult.isGenerationCompatible,\n\t\t\t\tunsupportedFeatures: layerCheckResult.unsupportedFeatures,\n\t\t\t}),\n\t\t});\n\t\tdisposeFn();\n\t\tthrow error;\n\t}\n}\n"]}
@@ -0,0 +1,33 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import type { ISignalEnvelope } from "@fluidframework/core-interfaces/internal";
6
+ import type { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
7
+ export declare class SignalTelemetryManager {
8
+ private readonly signalTracking;
9
+ /**
10
+ * Identifier to track broadcast signals being submitted in order to
11
+ * allow collection of data around the roundtrip of signal messages.
12
+ */
13
+ private broadcastSignalSequenceNumber;
14
+ /**
15
+ * Resets the signal tracking state in the {@link SignalTelemetryManager}.
16
+ */
17
+ resetTracking(): void;
18
+ /**
19
+ * Perform telemetry-related processing of incoming signals.
20
+ * @param envelope - The signal envelope to process.
21
+ * @param logger - The telemetry logger to use for emitting telemetry events.
22
+ * @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.
23
+ */
24
+ trackReceivedSignal(envelope: ISignalEnvelope, logger: ITelemetryLoggerExt, consecutiveReconnects: number): void;
25
+ /**
26
+ * Updates tracking state for broadcast signals based on the provided signal envelope, and updates the
27
+ * envelope with additional information that the signal needs to have stamped on it.
28
+ * @remarks Do not call this for non-broadcast signals.
29
+ * @param envelope - The signal envelope to process.
30
+ */
31
+ applyTrackingToBroadcastSignalEnvelope(envelope: ISignalEnvelope): void;
32
+ }
33
+ //# sourceMappingURL=signalTelemetryProcessing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalTelemetryProcessing.d.ts","sourceRoot":"","sources":["../src/signalTelemetryProcessing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EACX,mBAAmB,EAEnB,MAAM,0CAA0C,CAAC;AAsDlD,qBAAa,sBAAsB;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAS7B;IAEF;;;OAGG;IACH,OAAO,CAAC,6BAA6B,CAAa;IAElD;;OAEG;IACI,aAAa,IAAI,IAAI;IAW5B;;;;;OAKG;IACI,mBAAmB,CACzB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,mBAAmB,EAC3B,qBAAqB,EAAE,MAAM,GAC3B,IAAI;IA2FP;;;;;OAKG;IACI,sCAAsC,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;CA8B9E"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SignalTelemetryManager = void 0;
8
+ const defaultTelemetrySignalSampleCount = 100;
9
+ class SignalTelemetryManager {
10
+ constructor() {
11
+ this.signalTracking = {
12
+ totalSignalsSentInLatencyWindow: 0,
13
+ signalsLost: 0,
14
+ signalsOutOfOrder: 0,
15
+ signalsSentSinceLastLatencyMeasurement: 0,
16
+ signalTimestamp: 0,
17
+ roundTripSignalSequenceNumber: undefined,
18
+ trackingSignalSequenceNumber: undefined,
19
+ minimumTrackingSignalSequenceNumber: undefined,
20
+ };
21
+ /**
22
+ * Identifier to track broadcast signals being submitted in order to
23
+ * allow collection of data around the roundtrip of signal messages.
24
+ */
25
+ this.broadcastSignalSequenceNumber = 0;
26
+ }
27
+ /**
28
+ * Resets the signal tracking state in the {@link SignalTelemetryManager}.
29
+ */
30
+ resetTracking() {
31
+ this.signalTracking.signalsLost = 0;
32
+ this.signalTracking.signalsOutOfOrder = 0;
33
+ this.signalTracking.signalTimestamp = 0;
34
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
35
+ this.signalTracking.totalSignalsSentInLatencyWindow = 0;
36
+ this.signalTracking.roundTripSignalSequenceNumber = undefined;
37
+ this.signalTracking.trackingSignalSequenceNumber = undefined;
38
+ this.signalTracking.minimumTrackingSignalSequenceNumber = undefined;
39
+ }
40
+ /**
41
+ * Perform telemetry-related processing of incoming signals.
42
+ * @param envelope - The signal envelope to process.
43
+ * @param logger - The telemetry logger to use for emitting telemetry events.
44
+ * @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.
45
+ */
46
+ trackReceivedSignal(envelope, logger, consecutiveReconnects) {
47
+ const { clientBroadcastSignalSequenceNumber, contents: envelopeContents, address: envelopeAddress, } = envelope;
48
+ if (clientBroadcastSignalSequenceNumber === undefined) {
49
+ return undefined;
50
+ }
51
+ // If no tracking window has been set, nothing to do
52
+ if (this.signalTracking.trackingSignalSequenceNumber === undefined ||
53
+ this.signalTracking.minimumTrackingSignalSequenceNumber === undefined) {
54
+ return undefined;
55
+ }
56
+ if (clientBroadcastSignalSequenceNumber >= this.signalTracking.trackingSignalSequenceNumber) {
57
+ // Calculate the number of signals lost and log the event.
58
+ const signalsLost = clientBroadcastSignalSequenceNumber - this.signalTracking.trackingSignalSequenceNumber;
59
+ if (signalsLost > 0) {
60
+ this.signalTracking.signalsLost += signalsLost;
61
+ logger.sendErrorEvent({
62
+ eventName: "SignalLost",
63
+ details: {
64
+ signalsLost, // Number of lost signals detected.
65
+ expectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
66
+ clientBroadcastSignalSequenceNumber, // Actual signal sequence number received.
67
+ },
68
+ });
69
+ }
70
+ // Update the tracking signal sequence number to the next expected signal in the sequence.
71
+ this.signalTracking.trackingSignalSequenceNumber =
72
+ clientBroadcastSignalSequenceNumber + 1;
73
+ }
74
+ else if (
75
+ // Check if this is a signal in range of interest.
76
+ clientBroadcastSignalSequenceNumber >=
77
+ this.signalTracking.minimumTrackingSignalSequenceNumber) {
78
+ this.signalTracking.signalsOutOfOrder++;
79
+ const details = {
80
+ expectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.
81
+ clientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.
82
+ };
83
+ // Only log `contents.type` when address is for container to avoid chance that contents type is customer data.
84
+ if (envelopeAddress === undefined) {
85
+ details.contentsType = envelopeContents.type; // Type of signal that was received out of order.
86
+ }
87
+ logger.sendTelemetryEvent({
88
+ eventName: "SignalOutOfOrder",
89
+ details,
90
+ });
91
+ }
92
+ if (this.signalTracking.roundTripSignalSequenceNumber !== undefined &&
93
+ clientBroadcastSignalSequenceNumber >= this.signalTracking.roundTripSignalSequenceNumber) {
94
+ if (clientBroadcastSignalSequenceNumber ===
95
+ this.signalTracking.roundTripSignalSequenceNumber) {
96
+ // Latency tracked signal has been received.
97
+ // We now emit telemetry with the roundtrip duration of the tracked signal.
98
+ // The telemetry event also includes metrics for broadcast signals (sent, lost, and out of order),
99
+ // and these metrics are reset after emitting the event.
100
+ const duration = Date.now() - this.signalTracking.signalTimestamp;
101
+ logger.sendPerformanceEvent({
102
+ eventName: "SignalLatency",
103
+ details: {
104
+ duration, // Roundtrip duration of the tracked signal in milliseconds.
105
+ sent: this.signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.
106
+ lost: this.signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.
107
+ outOfOrder: this.signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.
108
+ reconnectCount: consecutiveReconnects, // Container reconnect count.
109
+ },
110
+ });
111
+ this.signalTracking.signalsLost = 0;
112
+ this.signalTracking.signalsOutOfOrder = 0;
113
+ this.signalTracking.signalTimestamp = 0;
114
+ this.signalTracking.totalSignalsSentInLatencyWindow = 0;
115
+ }
116
+ this.signalTracking.roundTripSignalSequenceNumber = undefined;
117
+ }
118
+ }
119
+ /**
120
+ * Updates tracking state for broadcast signals based on the provided signal envelope, and updates the
121
+ * envelope with additional information that the signal needs to have stamped on it.
122
+ * @remarks Do not call this for non-broadcast signals.
123
+ * @param envelope - The signal envelope to process.
124
+ */
125
+ applyTrackingToBroadcastSignalEnvelope(envelope) {
126
+ const broadcastSignalSequenceNumber = ++this.broadcastSignalSequenceNumber;
127
+ // Stamp with the broadcast signal sequence number.
128
+ envelope.clientBroadcastSignalSequenceNumber = broadcastSignalSequenceNumber;
129
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement++;
130
+ // If we don't have a signal monitoring window yet,
131
+ // initialize tracking to expect the next signal sent by the connected client.
132
+ if (this.signalTracking.minimumTrackingSignalSequenceNumber === undefined ||
133
+ this.signalTracking.trackingSignalSequenceNumber === undefined) {
134
+ this.signalTracking.minimumTrackingSignalSequenceNumber = broadcastSignalSequenceNumber;
135
+ this.signalTracking.trackingSignalSequenceNumber = broadcastSignalSequenceNumber;
136
+ }
137
+ // Start tracking roundtrip for a new signal only if we are not tracking one already (and sampling logic is met)
138
+ if (this.signalTracking.roundTripSignalSequenceNumber === undefined &&
139
+ broadcastSignalSequenceNumber % defaultTelemetrySignalSampleCount === 1) {
140
+ this.signalTracking.signalTimestamp = Date.now();
141
+ this.signalTracking.roundTripSignalSequenceNumber = broadcastSignalSequenceNumber;
142
+ this.signalTracking.totalSignalsSentInLatencyWindow +=
143
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement;
144
+ this.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;
145
+ }
146
+ }
147
+ }
148
+ exports.SignalTelemetryManager = SignalTelemetryManager;
149
+ //# sourceMappingURL=signalTelemetryProcessing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalTelemetryProcessing.js","sourceRoot":"","sources":["../src/signalTelemetryProcessing.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAQH,MAAM,iCAAiC,GAAG,GAAG,CAAC;AAoD9C,MAAa,sBAAsB;IAAnC;QACkB,mBAAc,GAA6B;YAC3D,+BAA+B,EAAE,CAAC;YAClC,WAAW,EAAE,CAAC;YACd,iBAAiB,EAAE,CAAC;YACpB,sCAAsC,EAAE,CAAC;YACzC,eAAe,EAAE,CAAC;YAClB,6BAA6B,EAAE,SAAS;YACxC,4BAA4B,EAAE,SAAS;YACvC,mCAAmC,EAAE,SAAS;SAC9C,CAAC;QAEF;;;WAGG;QACK,kCAA6B,GAAW,CAAC,CAAC;IAyJnD,CAAC;IAvJA;;OAEG;IACI,aAAa;QACnB,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,sCAAsC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,+BAA+B,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,CAAC,6BAA6B,GAAG,SAAS,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,4BAA4B,GAAG,SAAS,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,mCAAmC,GAAG,SAAS,CAAC;IACrE,CAAC;IAED;;;;;OAKG;IACI,mBAAmB,CACzB,QAAyB,EACzB,MAA2B,EAC3B,qBAA6B;QAE7B,MAAM,EACL,mCAAmC,EACnC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,eAAe,GACxB,GAAG,QAAQ,CAAC;QAEb,IAAI,mCAAmC,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,oDAAoD;QACpD,IACC,IAAI,CAAC,cAAc,CAAC,4BAA4B,KAAK,SAAS;YAC9D,IAAI,CAAC,cAAc,CAAC,mCAAmC,KAAK,SAAS,EACpE,CAAC;YACF,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IACC,mCAAmC,IAAI,IAAI,CAAC,cAAc,CAAC,4BAA4B,EACtF,CAAC;YACF,0DAA0D;YAC1D,MAAM,WAAW,GAChB,mCAAmC,GAAG,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC;YACxF,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,cAAc,CAAC,WAAW,IAAI,WAAW,CAAC;gBAC/C,MAAM,CAAC,cAAc,CAAC;oBACrB,SAAS,EAAE,YAAY;oBACvB,OAAO,EAAE;wBACR,WAAW,EAAE,mCAAmC;wBAChD,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,4BAA4B,EAAE,4CAA4C;wBACtH,mCAAmC,EAAE,0CAA0C;qBAC/E;iBACD,CAAC,CAAC;YACJ,CAAC;YACD,0FAA0F;YAC1F,IAAI,CAAC,cAAc,CAAC,4BAA4B;gBAC/C,mCAAmC,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM;QACN,kDAAkD;QAClD,mCAAmC;YACnC,IAAI,CAAC,cAAc,CAAC,mCAAmC,EACtD,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;YACxC,MAAM,OAAO,GAAkC;gBAC9C,sBAAsB,EAAE,IAAI,CAAC,cAAc,CAAC,4BAA4B,EAAE,4CAA4C;gBACtH,mCAAmC,EAAE,8CAA8C;aACnF,CAAC;YACF,8GAA8G;YAC9G,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,iDAAiD;YAChG,CAAC;YACD,MAAM,CAAC,kBAAkB,CAAC;gBACzB,SAAS,EAAE,kBAAkB;gBAC7B,OAAO;aACP,CAAC,CAAC;QACJ,CAAC;QAED,IACC,IAAI,CAAC,cAAc,CAAC,6BAA6B,KAAK,SAAS;YAC/D,mCAAmC,IAAI,IAAI,CAAC,cAAc,CAAC,6BAA6B,EACvF,CAAC;YACF,IACC,mCAAmC;gBACnC,IAAI,CAAC,cAAc,CAAC,6BAA6B,EAChD,CAAC;gBACF,4CAA4C;gBAC5C,2EAA2E;gBAC3E,kGAAkG;gBAClG,wDAAwD;gBACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;gBAClE,MAAM,CAAC,oBAAoB,CAAC;oBAC3B,SAAS,EAAE,eAAe;oBAC1B,OAAO,EAAE;wBACR,QAAQ,EAAE,4DAA4D;wBACtE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,+BAA+B,EAAE,0DAA0D;wBACrH,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,0DAA0D;wBACjG,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,kEAAkE;wBACrH,cAAc,EAAE,qBAAqB,EAAE,6BAA6B;qBACpE;iBACD,CAAC,CAAC;gBACH,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,CAAC,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC;gBACxC,IAAI,CAAC,cAAc,CAAC,+BAA+B,GAAG,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,6BAA6B,GAAG,SAAS,CAAC;QAC/D,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,sCAAsC,CAAC,QAAyB;QACtE,MAAM,6BAA6B,GAAG,EAAE,IAAI,CAAC,6BAA6B,CAAC;QAE3E,mDAAmD;QACnD,QAAQ,CAAC,mCAAmC,GAAG,6BAA6B,CAAC;QAE7E,IAAI,CAAC,cAAc,CAAC,sCAAsC,EAAE,CAAC;QAE7D,mDAAmD;QACnD,8EAA8E;QAC9E,IACC,IAAI,CAAC,cAAc,CAAC,mCAAmC,KAAK,SAAS;YACrE,IAAI,CAAC,cAAc,CAAC,4BAA4B,KAAK,SAAS,EAC7D,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,mCAAmC,GAAG,6BAA6B,CAAC;YACxF,IAAI,CAAC,cAAc,CAAC,4BAA4B,GAAG,6BAA6B,CAAC;QAClF,CAAC;QAED,gHAAgH;QAChH,IACC,IAAI,CAAC,cAAc,CAAC,6BAA6B,KAAK,SAAS;YAC/D,6BAA6B,GAAG,iCAAiC,KAAK,CAAC,EACtE,CAAC;YACF,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjD,IAAI,CAAC,cAAc,CAAC,6BAA6B,GAAG,6BAA6B,CAAC;YAClF,IAAI,CAAC,cAAc,CAAC,+BAA+B;gBAClD,IAAI,CAAC,cAAc,CAAC,sCAAsC,CAAC;YAC5D,IAAI,CAAC,cAAc,CAAC,sCAAsC,GAAG,CAAC,CAAC;QAChE,CAAC;IACF,CAAC;CACD;AAzKD,wDAyKC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ISignalEnvelope } from \"@fluidframework/core-interfaces/internal\";\nimport type {\n\tITelemetryLoggerExt,\n\tTelemetryEventPropertyTypeExt,\n} from \"@fluidframework/telemetry-utils/internal\";\n\nconst defaultTelemetrySignalSampleCount = 100;\n\n/**\n * Set of stats/values used to keep track of telemetry related to signals.\n */\ninterface ISignalTelemetryTracking {\n\t/**\n\t * Accumulates the total number of broadcast signals sent during the current signal latency measurement window.\n\t * This value represents the total number of signals sent since the latency measurement began and is used\n\t * logged in telemetry when the latency measurement completes.\n\t */\n\ttotalSignalsSentInLatencyWindow: number;\n\n\t/**\n\t * Counts the number of broadcast signals sent since the last latency measurement was initiated.\n\t * This counter increments with each broadcast signal sent. When a new latency measurement starts,\n\t * this counter is added to `totalSignalsSentInLatencyWindow` and then reset to zero.\n\t */\n\tsignalsSentSinceLastLatencyMeasurement: number;\n\n\t/**\n\t * Number of signals that were expected but not received.\n\t */\n\tsignalsLost: number;\n\n\t/**\n\t * Number of signals received out of order/non-sequentially.\n\t */\n\tsignalsOutOfOrder: number;\n\n\t/**\n\t * Timestamp before submitting the signal we will trace.\n\t */\n\tsignalTimestamp: number;\n\n\t/**\n\t * Signal we will trace for roundtrip latency.\n\t */\n\troundTripSignalSequenceNumber: number | undefined;\n\n\t/**\n\t * Next expected signal sequence number to be received.\n\t */\n\ttrackingSignalSequenceNumber: number | undefined;\n\n\t/**\n\t * Inclusive lower bound of signal monitoring window.\n\t * Used by the logic that checks if signals are received out of order.\n\t */\n\tminimumTrackingSignalSequenceNumber: number | undefined;\n}\n\nexport class SignalTelemetryManager {\n\tprivate readonly signalTracking: ISignalTelemetryTracking = {\n\t\ttotalSignalsSentInLatencyWindow: 0,\n\t\tsignalsLost: 0,\n\t\tsignalsOutOfOrder: 0,\n\t\tsignalsSentSinceLastLatencyMeasurement: 0,\n\t\tsignalTimestamp: 0,\n\t\troundTripSignalSequenceNumber: undefined,\n\t\ttrackingSignalSequenceNumber: undefined,\n\t\tminimumTrackingSignalSequenceNumber: undefined,\n\t};\n\n\t/**\n\t * Identifier to track broadcast signals being submitted in order to\n\t * allow collection of data around the roundtrip of signal messages.\n\t */\n\tprivate broadcastSignalSequenceNumber: number = 0;\n\n\t/**\n\t * Resets the signal tracking state in the {@link SignalTelemetryManager}.\n\t */\n\tpublic resetTracking(): void {\n\t\tthis.signalTracking.signalsLost = 0;\n\t\tthis.signalTracking.signalsOutOfOrder = 0;\n\t\tthis.signalTracking.signalTimestamp = 0;\n\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;\n\t\tthis.signalTracking.totalSignalsSentInLatencyWindow = 0;\n\t\tthis.signalTracking.roundTripSignalSequenceNumber = undefined;\n\t\tthis.signalTracking.trackingSignalSequenceNumber = undefined;\n\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber = undefined;\n\t}\n\n\t/**\n\t * Perform telemetry-related processing of incoming signals.\n\t * @param envelope - The signal envelope to process.\n\t * @param logger - The telemetry logger to use for emitting telemetry events.\n\t * @param consecutiveReconnects - The number of consecutive reconnects that have occurred. Only used for logging.\n\t */\n\tpublic trackReceivedSignal(\n\t\tenvelope: ISignalEnvelope,\n\t\tlogger: ITelemetryLoggerExt,\n\t\tconsecutiveReconnects: number,\n\t): void {\n\t\tconst {\n\t\t\tclientBroadcastSignalSequenceNumber,\n\t\t\tcontents: envelopeContents,\n\t\t\taddress: envelopeAddress,\n\t\t} = envelope;\n\n\t\tif (clientBroadcastSignalSequenceNumber === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// If no tracking window has been set, nothing to do\n\t\tif (\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber === undefined ||\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber === undefined\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (\n\t\t\tclientBroadcastSignalSequenceNumber >= this.signalTracking.trackingSignalSequenceNumber\n\t\t) {\n\t\t\t// Calculate the number of signals lost and log the event.\n\t\t\tconst signalsLost =\n\t\t\t\tclientBroadcastSignalSequenceNumber - this.signalTracking.trackingSignalSequenceNumber;\n\t\t\tif (signalsLost > 0) {\n\t\t\t\tthis.signalTracking.signalsLost += signalsLost;\n\t\t\t\tlogger.sendErrorEvent({\n\t\t\t\t\teventName: \"SignalLost\",\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tsignalsLost, // Number of lost signals detected.\n\t\t\t\t\t\texpectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.\n\t\t\t\t\t\tclientBroadcastSignalSequenceNumber, // Actual signal sequence number received.\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Update the tracking signal sequence number to the next expected signal in the sequence.\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber =\n\t\t\t\tclientBroadcastSignalSequenceNumber + 1;\n\t\t} else if (\n\t\t\t// Check if this is a signal in range of interest.\n\t\t\tclientBroadcastSignalSequenceNumber >=\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber\n\t\t) {\n\t\t\tthis.signalTracking.signalsOutOfOrder++;\n\t\t\tconst details: TelemetryEventPropertyTypeExt = {\n\t\t\t\texpectedSequenceNumber: this.signalTracking.trackingSignalSequenceNumber, // The next expected signal sequence number.\n\t\t\t\tclientBroadcastSignalSequenceNumber, // Sequence number of the out of order signal.\n\t\t\t};\n\t\t\t// Only log `contents.type` when address is for container to avoid chance that contents type is customer data.\n\t\t\tif (envelopeAddress === undefined) {\n\t\t\t\tdetails.contentsType = envelopeContents.type; // Type of signal that was received out of order.\n\t\t\t}\n\t\t\tlogger.sendTelemetryEvent({\n\t\t\t\teventName: \"SignalOutOfOrder\",\n\t\t\t\tdetails,\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber !== undefined &&\n\t\t\tclientBroadcastSignalSequenceNumber >= this.signalTracking.roundTripSignalSequenceNumber\n\t\t) {\n\t\t\tif (\n\t\t\t\tclientBroadcastSignalSequenceNumber ===\n\t\t\t\tthis.signalTracking.roundTripSignalSequenceNumber\n\t\t\t) {\n\t\t\t\t// Latency tracked signal has been received.\n\t\t\t\t// We now emit telemetry with the roundtrip duration of the tracked signal.\n\t\t\t\t// The telemetry event also includes metrics for broadcast signals (sent, lost, and out of order),\n\t\t\t\t// and these metrics are reset after emitting the event.\n\t\t\t\tconst duration = Date.now() - this.signalTracking.signalTimestamp;\n\t\t\t\tlogger.sendPerformanceEvent({\n\t\t\t\t\teventName: \"SignalLatency\",\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tduration, // Roundtrip duration of the tracked signal in milliseconds.\n\t\t\t\t\t\tsent: this.signalTracking.totalSignalsSentInLatencyWindow, // Signals sent since the last logged SignalLatency event.\n\t\t\t\t\t\tlost: this.signalTracking.signalsLost, // Signals lost since the last logged SignalLatency event.\n\t\t\t\t\t\toutOfOrder: this.signalTracking.signalsOutOfOrder, // Out of order signals since the last logged SignalLatency event.\n\t\t\t\t\t\treconnectCount: consecutiveReconnects, // Container reconnect count.\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis.signalTracking.signalsLost = 0;\n\t\t\t\tthis.signalTracking.signalsOutOfOrder = 0;\n\t\t\t\tthis.signalTracking.signalTimestamp = 0;\n\t\t\t\tthis.signalTracking.totalSignalsSentInLatencyWindow = 0;\n\t\t\t}\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Updates tracking state for broadcast signals based on the provided signal envelope, and updates the\n\t * envelope with additional information that the signal needs to have stamped on it.\n\t * @remarks Do not call this for non-broadcast signals.\n\t * @param envelope - The signal envelope to process.\n\t */\n\tpublic applyTrackingToBroadcastSignalEnvelope(envelope: ISignalEnvelope): void {\n\t\tconst broadcastSignalSequenceNumber = ++this.broadcastSignalSequenceNumber;\n\n\t\t// Stamp with the broadcast signal sequence number.\n\t\tenvelope.clientBroadcastSignalSequenceNumber = broadcastSignalSequenceNumber;\n\n\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement++;\n\n\t\t// If we don't have a signal monitoring window yet,\n\t\t// initialize tracking to expect the next signal sent by the connected client.\n\t\tif (\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber === undefined ||\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber === undefined\n\t\t) {\n\t\t\tthis.signalTracking.minimumTrackingSignalSequenceNumber = broadcastSignalSequenceNumber;\n\t\t\tthis.signalTracking.trackingSignalSequenceNumber = broadcastSignalSequenceNumber;\n\t\t}\n\n\t\t// Start tracking roundtrip for a new signal only if we are not tracking one already (and sampling logic is met)\n\t\tif (\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber === undefined &&\n\t\t\tbroadcastSignalSequenceNumber % defaultTelemetrySignalSampleCount === 1\n\t\t) {\n\t\t\tthis.signalTracking.signalTimestamp = Date.now();\n\t\t\tthis.signalTracking.roundTripSignalSequenceNumber = broadcastSignalSequenceNumber;\n\t\t\tthis.signalTracking.totalSignalsSentInLatencyWindow +=\n\t\t\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement;\n\t\t\tthis.signalTracking.signalsSentSinceLastLatencyMeasurement = 0;\n\t\t}\n\t}\n}\n"]}
@@ -7,9 +7,7 @@
7
7
  * Please note that for all property types we should use undefined to indicate that particular capability is off.
8
8
  * Using false, or some string value (like "off") will result in clients who do not understand that property failing, whereas
9
9
  * we want them to continue to collaborate alongside clients who support that capability, but such capability is shipping dark for now.
10
- * @legacy
11
- * @alpha
12
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
10
+ * @internal
13
11
  */
14
12
  export type DocumentSchemaValueType = string | string[] | true | number | undefined;
15
13
  /**
@@ -50,9 +48,7 @@ export type IdCompressorMode = "on" | "delayed" | undefined;
50
48
  *
51
49
  * For now we are limiting it to just plain properties, and only really simple types, but that can be changed in the future.
52
50
  *
53
- * @legacy
54
- * @alpha
55
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
51
+ * @internal
56
52
  */
57
53
  export interface IDocumentSchema {
58
54
  version: number;
@@ -65,9 +61,7 @@ export interface IDocumentSchema {
65
61
  * ContainerMessageType.DocumentSchemaChange messages use CAS (Compare-and-swap) semantics, and convey
66
62
  * regSeq of last known schema change (known to a client proposing schema change).
67
63
  * @see ContainerRuntimeDocumentSchemaMessage
68
- * @legacy
69
- * @alpha
70
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
64
+ * @internal
71
65
  */
72
66
  export type IDocumentSchemaChangeMessage = IDocumentSchema;
73
67
  /**
@@ -76,9 +70,7 @@ export type IDocumentSchemaChangeMessage = IDocumentSchema;
76
70
  * WARNING: This type is used to infer IDocumentSchemaCurrent type!
77
71
  * Any changes here (including renaming of properties) are potentially changing document format and should be considered carefully!
78
72
  *
79
- * @legacy
80
- * @alpha
81
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
73
+ * @internal
82
74
  */
83
75
  export interface IDocumentSchemaFeatures {
84
76
  explicitSchemaControl: boolean;
@@ -102,16 +94,12 @@ export interface IDocumentSchemaFeatures {
102
94
  * This must be bumped whenever the format of document schema or protocol for changing the current document schema changes.
103
95
  * Ex: adding a new configuration property (under IDocumentSchema.runtime) does not require changing this version.
104
96
  * Ex: Changing the 'document schema acceptance' mechanism from convert-and-swap to one requiring consensus does require changing this version.
105
- * @legacy
106
- * @alpha
107
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
97
+ * @internal
108
98
  */
109
99
  export declare const currentDocumentVersionSchema = 1;
110
100
  /**
111
101
  * Current document schema.
112
- * @legacy
113
- * @alpha
114
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
102
+ * @internal
115
103
  */
116
104
  export type IDocumentSchemaCurrent = {
117
105
  version: 1;
@@ -183,9 +171,7 @@ export type IDocumentSchemaCurrent = {
183
171
  * Clients can retry, but current implementation is simply - they will not (and will rely on next session / reload to do
184
172
  * recalc and decide if schema needs to be changed or not).
185
173
  *
186
- * @legacy
187
- * @alpha
188
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
174
+ * @internal
189
175
  * @sealed
190
176
  */
191
177
  export declare class DocumentsSchemaController {
@@ -213,16 +199,6 @@ export declare class DocumentsSchemaController {
213
199
  */
214
200
  maybeSendSchemaMessage(): IDocumentSchemaChangeMessage | undefined;
215
201
  private validateSeqNumber;
216
- /**
217
- * Process document schema change message
218
- * Called by ContainerRuntime whenever it sees document schema messages.
219
- * @param content - content of the message
220
- * @param local - whether op is local
221
- * @param sequenceNumber - sequence number of the op
222
- * @returns - true if schema was accepted, otherwise false (rejected due to failed CAS)
223
- * @deprecated It has been replaced by processDocumentSchemaMessages instead.
224
- */
225
- processDocumentSchemaOp(content: IDocumentSchemaChangeMessage, local: boolean, sequenceNumber: number): boolean;
226
202
  /**
227
203
  * Process document schema change messages
228
204
  * Called by ContainerRuntime whenever it sees document schema messages.
@@ -1 +1 @@
1
- {"version":3,"file":"documentSchema.d.ts","sourceRoot":"","sources":["../../src/summary/documentSchema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,eAAe;IAI/B,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAE3D;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB;IAIvC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;;;;;;;OASG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;;;GAKG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE;SACP,CAAC,IAAI,MAAM,uBAAuB,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,SAAS,OAAO,GAC9E,IAAI,GACJ,uBAAuB,CAAC,CAAC,CAAC;KAC7B,CAAC;CACF,CAAC;AAyOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,qBAAa,yBAAyB;IAiCpC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAhChC,OAAO,CAAC,qBAAqB,CAAU;IACvC,OAAO,CAAC,MAAM,CAAQ;IAGtB,OAAO,CAAC,cAAc,CAAyB;IAI/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAGvD,OAAO,CAAC,YAAY,CAAqC;IAOlD,aAAa,EAAE,sBAAsB,CAAC;IAE7C;;;;;;OAMG;gBAEF,QAAQ,EAAE,OAAO,EACjB,sBAAsB,EAAE,MAAM,EAC9B,sBAAsB,EAAE,eAAe,GAAG,SAAS,EACnD,QAAQ,EAAE,uBAAuB,EAChB,cAAc,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI;IA0EnE,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAsBlF;;;;;OAKG;IACI,sBAAsB,IAAI,4BAA4B,GAAG,SAAS;IAczE,OAAO,CAAC,iBAAiB;IAmBzB;;;;;;;;OAQG;IACI,uBAAuB,CAC7B,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACpB,OAAO;IAIV;;;;;;;OAOG;IACI,6BAA6B,CACnC,QAAQ,EAAE,4BAA4B,EAAE,EACxC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACpB,OAAO;IAgDH,YAAY,IAAI,IAAI;CAG3B"}
1
+ {"version":3,"file":"documentSchema.d.ts","sourceRoot":"","sources":["../../src/summary/documentSchema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,eAAe;IAI/B,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjD;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,uBAAuB;IAIvC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;;;;;;;OASG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C;;;GAGG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IAEf,OAAO,EAAE;SACP,CAAC,IAAI,MAAM,uBAAuB,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,SAAS,OAAO,GAC9E,IAAI,GACJ,uBAAuB,CAAC,CAAC,CAAC;KAC7B,CAAC;CACF,CAAC;AAyOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,qBAAa,yBAAyB;IAiCpC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAhChC,OAAO,CAAC,qBAAqB,CAAU;IACvC,OAAO,CAAC,MAAM,CAAQ;IAGtB,OAAO,CAAC,cAAc,CAAyB;IAI/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IAGvD,OAAO,CAAC,YAAY,CAAqC;IAOlD,aAAa,EAAE,sBAAsB,CAAC;IAE7C;;;;;;OAMG;gBAEF,QAAQ,EAAE,OAAO,EACjB,sBAAsB,EAAE,MAAM,EAC9B,sBAAsB,EAAE,eAAe,GAAG,SAAS,EACnD,QAAQ,EAAE,uBAAuB,EAChB,cAAc,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI;IA0EnE,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAsBlF;;;;;OAKG;IACI,sBAAsB,IAAI,4BAA4B,GAAG,SAAS;IAczE,OAAO,CAAC,iBAAiB;IAmBzB;;;;;;;OAOG;IACI,6BAA6B,CACnC,QAAQ,EAAE,4BAA4B,EAAE,EACxC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,MAAM,GACpB,OAAO;IAgDH,YAAY,IAAI,IAAI;CAG3B"}
@@ -13,9 +13,7 @@ const packageVersion_js_1 = require("../packageVersion.js");
13
13
  * This must be bumped whenever the format of document schema or protocol for changing the current document schema changes.
14
14
  * Ex: adding a new configuration property (under IDocumentSchema.runtime) does not require changing this version.
15
15
  * Ex: Changing the 'document schema acceptance' mechanism from convert-and-swap to one requiring consensus does require changing this version.
16
- * @legacy
17
- * @alpha
18
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
16
+ * @internal
19
17
  */
20
18
  exports.currentDocumentVersionSchema = 1;
21
19
  class TrueOrUndefined {
@@ -248,9 +246,7 @@ function arrayToProp(arr) {
248
246
  * Clients can retry, but current implementation is simply - they will not (and will rely on next session / reload to do
249
247
  * recalc and decide if schema needs to be changed or not).
250
248
  *
251
- * @legacy
252
- * @alpha
253
- * @deprecated This type will be moved to internal in 2.30. External usage is not necessary or supported.
249
+ * @internal
254
250
  * @sealed
255
251
  */
256
252
  class DocumentsSchemaController {
@@ -365,18 +361,6 @@ class DocumentsSchemaController {
365
361
  });
366
362
  }
367
363
  }
368
- /**
369
- * Process document schema change message
370
- * Called by ContainerRuntime whenever it sees document schema messages.
371
- * @param content - content of the message
372
- * @param local - whether op is local
373
- * @param sequenceNumber - sequence number of the op
374
- * @returns - true if schema was accepted, otherwise false (rejected due to failed CAS)
375
- * @deprecated It has been replaced by processDocumentSchemaMessages instead.
376
- */
377
- processDocumentSchemaOp(content, local, sequenceNumber) {
378
- return this.processDocumentSchemaMessages([content], local, sequenceNumber);
379
- }
380
364
  /**
381
365
  * Process document schema change messages
382
366
  * Called by ContainerRuntime whenever it sees document schema messages.