smalruby / smalruby3-gui

Smalruby 3.0 GUI project forked from LLK/scratch-gui
https://smalruby.jp/smalruby3-gui
BSD 3-Clause "New" or "Revised" License
21 stars 17 forks source link

Support the new Skyway API of the Mesh extension #350

Open takaokouji opened 7 months ago

takaokouji commented 7 months ago

TL;DR

Support the new Skyway API of the Mesh extension. The current Skyway API is obsolated.

Japanese: Mesh拡張で Skyway の新しいAPIを使う。従来の Skyway API は継続利用できるが新しくAPIキーが発行されない。そのため、スモウルビーのmodが開発できない。

Details

Mesh拡張で Skyway の新しいAPIを使えるようにします。 https://skyway.ntt.com/ja/

まずは従来の Skyway API を使ったバージョンもつかえるようにします。 モジュール化して、URLに新しいバージョンを使う旨のフラグを指定すると、新しいバージョンを使えるようにします。 しばらく使ってみて問題なければ、従来のバージョンを廃止して新しいバージョンのみに切り替えます。

sada commented 6 months ago

旧SkyWayのAPIは、APIキーをソースコードに埋め込んで使用しています。

https://github.com/smalruby/scratch-vm/blob/41f9bb7dd51c131ab35644c354b43c303fe43cb8/src/extensions/scratch3_mesh/mesh-service.js#L192

チュートリアルの注意書きで、トークンの生成をサーバでおこない、クライアントへ渡すべきとあります。 現在のスモウルビーの使い方とは違うように思いました。

本チュートリアルでは、すぐに通信を試していただくために、トークン生成をクライアントアプリケーションで実装していますが、 本来、SkyWay Auth Token はサーバーアプリケーションで生成してクライアントアプリケーションに渡すようにするべきです。 クライアントアプリケーションでトークン生成を行った場合、任意の Channel(Room) に入ることができるようなトークンを第三者が作成する可能性があります。

トークンの生成でアプリケーションIDとシークレットキーを指定する必要があるので、そのためにサーバで生成するのが推奨されているようです。

const token = new SkyWayAuthToken({
  jti: uuidV4(),
  iat: nowInSec(),
  exp: nowInSec() + 60 * 60 * 24,
  scope: {
    app: {
      id: "ここにアプリケーションIDをペーストしてください",
      turn: true,
      actions: ["read"],
      channels: [
        {
          id: "*",
          name: "*",
          actions: ["write"],
          members: [
            {
              id: "*",
              name: "*",
              actions: ["write"],
              publication: {
                actions: ["write"],
              },
              subscription: {
                actions: ["write"],
              },
            },
          ],
          sfuBots: [
            {
              actions: ["write"],
              forwardings: [
                {
                  actions: ["write"],
                },
              ],
            },
          ],
        },
      ],
    },
  },
}).encode("ここにシークレットキーをペーストしてください");

https://skyway.ntt.com/ja/docs/user-guide/javascript-sdk/quickstart/

そのため、このトークンを返すサーバを用意していただく必要があるようです。

sada commented 6 months ago

SkyWayの動作を確認するため https://github.com/smalruby/smalruby3-develop でDocker環境を利用しようとしましたが、こちらのDockerイメージのビルドに失敗しました。 docker compose build すると途中でエラーが発生して失敗します。

guilib のディレクトリ以下で同じように docker build すると失敗しました。 gui の方は npm install の時にエラーが発生しました。

lib の方は ruby:2.3.8-slim-jessieapt update する時に jessie のパッケージ取得先がなくなったことによる影響のようでした。 以下のような似たようなissueが作成されていました。

https://github.com/docker-library/ruby/issues/276

Dockerイメージでの確認方法は使用できないようなので、手元で smalruby3-gui のディレクトリ以下で npm install して npm start して起動できるかを確認しました。 スモウルビーが起動するところまでは確認しました。

takaokouji commented 1 month ago

シーケンス図

https://drive.google.com/file/d/1J8E04zwxFa6JCvY8x_GdjzQLNZh7Xnn-/view?usp=sharing