wenay-react2 1.0.51 → 1.0.52

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.
@@ -0,0 +1,9 @@
1
+ # v1.0.52
2
+
3
+ Date: 2026-07-14
4
+
5
+ - Changed: upgraded `wenay-common2` from `^1.0.75` to `^1.0.76`.
6
+ - Upstream WebRTC maintenance: direct replay now preserves binary `Uint8Array` Media frames across relay/direct hand-offs, and dynamic per-account replay mirrors acquire and release independently.
7
+ - React impact: none. The fixes stay below the React surface; existing `useReplaySubscribe`, route and media consumers require no migration.
8
+
9
+ Verification: installed dependency documentation inspected; `npx tsc -p tsconfig.qa-check.json --noEmit`; full Jest; library build; `git diff --check`.
@@ -555,7 +555,8 @@ useReplayHistory(history, apply, {head?, reset?, tickMs?=300, autoPlay?=true})
555
555
  -> {live, seq, head, pause(), play(), seek({seq?|ts?})}
556
556
  ```
557
557
  Semantics that are easy to get wrong:
558
- - **Identity and reconnect boundary (common2 1.0.75).** `remote` identifies one logical Replay line. A temporary Socket.IO disconnect/reconnect keeps that object identity, so the React effect stays mounted while common2 rebinds the physical Listen subscription, restores live delivery first, catches up from its private `lastDelivered seq`, drains the racing queue, and deduplicates. Do not call `restart()`, remount with a new key, replace `remote`, poll, or attach transport listeners in React. The retained journal must cover the cursor; a sacred-line eviction with no keyframe is terminal `error`/`onError`, never a silent reset to `since: 0` or latest. `policy: 'queue'` is lossless and must deliver every retained event exactly once; `policy: 'frame'` is explicitly lossy/conflated and is not a journal-integrity check.
558
+ - **common2 1.0.76 WebRTC maintenance.** Direct replay now uses a portable binary codec, preserving `Uint8Array` Media frames byte-for-byte across relay WebRTC direct relay hand-offs. Per-account replay mirrors also start and stop independently as accounts appear or disappear. These are core transport/lifecycle fixes: no React API or application wiring changes are required.
559
+ - **Identity and reconnect boundary (common2 1.0.75).** `remote` identifies one logical Replay line. A temporary Socket.IO disconnect/reconnect keeps that object identity, so the React effect stays mounted while common2 rebinds the physical Listen subscription, restores live delivery first, catches up from its private `lastDelivered seq`, drains the racing queue, and deduplicates. Do not call `restart()`, remount with a new key, replace `remote`, poll, or attach transport listeners in React. The retained journal must cover the cursor; a sacred-line eviction with no keyframe is terminal `error`/`onError`, never a silent reset to `since: 0` or latest. `policy: 'queue'` is lossless and must deliver every retained event exactly once; `policy: 'frame'` is explicitly lossy/conflated and is not a journal-integrity check.
559
560
  **Identity matrix**
560
561
  - **Hard teardown is intentional.** `client.close()`/`dispose()` and hub `connect()`/`setToken()` end the old logical generation. React must clean up normally and must not resurrect that subscription automatically; after an intentional new client or credentials generation, provide its new `remote` as a normal new subscription. Ordinary RPC/pipe calls are not replayed by this contract.
561
562
  - `cb`/`apply` go through refs: new function identity does NOT resubscribe. Resubscribe identity is `[remote, enabled, epoch, staleMs, policy]` — changing `staleMs` resubscribes (it is subscribe-time config in common2; under keepSeq the reconnect is a journal tail, so it is cheap); `policy` picks the wire surface (line vs frameLine), so it resubscribes too. `onStale` goes through a ref like `cb`.
package/package.json CHANGED
@@ -1,54 +1,54 @@
1
- {
2
- "name": "wenay-react2",
3
- "version": "1.0.51",
4
- "description": "Common react",
5
- "strict": true,
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "files": [
9
- "lib/**/*",
10
- "doc/**/*",
11
- "!**/*.tsbuildinfo"
12
- ],
13
- "author": "wenay",
14
- "license": "ISC",
15
- "peerDependenciesMeta": {
16
- "react-dom": {
17
- "optional": true
18
- }
19
- },
20
- "dependencies": {
21
- "ag-grid-community": "^35.1.0",
22
- "ag-grid-react": "^35.1.0",
23
- "re-resizable": "^6.11.2",
24
- "react": "^19.2.0",
25
- "react-dom": "^19.2.0",
26
- "react-rnd": "^10.5.3",
27
- "wenay-common2": "^1.0.75"
28
- },
29
- "peerDependencies": {
30
- "react": "^19.2.0",
31
- "react-dom": "^19.2.0"
32
- },
33
- "engines": {
34
- "node": ">=18",
35
- "vscode": "^1.22.0"
36
- },
37
- "browserslist": {
38
- "production": [
39
- ">0.2%",
40
- "not dead"
41
- ],
42
- "development": [
43
- ">1%"
44
- ]
45
- },
46
- "exports": {
47
- ".": "./lib/index.js",
48
- "./native": "./lib/native/index.js",
49
- "./package.json": "./package.json",
50
- "./demo/peer-media": "./lib/common/demo/peerMedia.js",
51
- "./demo/peer-conference": "./lib/common/demo/peerConference.js",
52
- "./demo/stand": "./lib/common/testUseReact/qa.js"
53
- }
54
- }
1
+ {
2
+ "name": "wenay-react2",
3
+ "version": "1.0.52",
4
+ "description": "Common react",
5
+ "strict": true,
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "lib/**/*",
10
+ "doc/**/*",
11
+ "!**/*.tsbuildinfo"
12
+ ],
13
+ "author": "wenay",
14
+ "license": "ISC",
15
+ "peerDependenciesMeta": {
16
+ "react-dom": {
17
+ "optional": true
18
+ }
19
+ },
20
+ "dependencies": {
21
+ "ag-grid-community": "^35.1.0",
22
+ "ag-grid-react": "^35.1.0",
23
+ "re-resizable": "^6.11.2",
24
+ "react": "^19.2.0",
25
+ "react-dom": "^19.2.0",
26
+ "react-rnd": "^10.5.3",
27
+ "wenay-common2": "^1.0.76"
28
+ },
29
+ "peerDependencies": {
30
+ "react": "^19.2.0",
31
+ "react-dom": "^19.2.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18",
35
+ "vscode": "^1.22.0"
36
+ },
37
+ "browserslist": {
38
+ "production": [
39
+ ">0.2%",
40
+ "not dead"
41
+ ],
42
+ "development": [
43
+ ">1%"
44
+ ]
45
+ },
46
+ "exports": {
47
+ ".": "./lib/index.js",
48
+ "./native": "./lib/native/index.js",
49
+ "./package.json": "./package.json",
50
+ "./demo/peer-media": "./lib/common/demo/peerMedia.js",
51
+ "./demo/peer-conference": "./lib/common/demo/peerConference.js",
52
+ "./demo/stand": "./lib/common/testUseReact/qa.js"
53
+ }
54
+ }