Open3
半手動WebRTC

とりあえず、 URLフラグメントでSDPとICEを交換して接続する まで作ってみよう。
使う npm モジュール
- https://www.npmjs.com/package/jose
- https://www.npmjs.com/package/node-datachannel
- https://www.npmjs.com/package/hono
今回はexpress.jsのかわりにhono使ってみようかな。たぶん静的ファイルの配信くらいミドルウェアあるでしょ。

手動WebRTC
まず、これを改造してdataChannelにしてみた。
-
(A)
Connect
をクリック (Connectをクリックしたブラウザが親になる) -
(A)
SDP to send
に表われた文字列をクリップボードにコピー -
(B)
SDP to receive
にクリップボードからペーストし、Receive Remote SDP
をクリック -
(B)
SDP to send
に表われた文字列をクリップボードにコピー -
(A)
SDP to receive
にクリップボードからペーストし、Receive Remote SDP
をクリック
これで接続が確立される。 Message
に何か入力して Send
すると、対向のブラウザの Receive
に表われる。

必要性
一応 localhost
はinsecureなhttpでもCORSリクエストの対象にできることになっている。 ただ、今回の場合は(テストはlocalhostでやってるけど、)ローカルネットワーク上の一般的なホストで動作することが期待される。
ただこの挙動をinsecureと見做す人もいる。Safariは未だにlocalhostを特別扱いしていないし、
Braveはallowlistを開示している https://github.com/brave/adblock-lists/blob/master/brave-lists/localhost-permission-allow-list.txt (このリストにないサイトはプロンプトされる)。たとえば、IntelとかLenovoのツールは、管理用webからlocalhostにアクセスしてローカルPCの情報にアクセスする。