メインコンテンツまでスキップ
バージョン: 0.3.1

@dicks/cloudflare

再利用可能なWorkersプラットフォームアダプターで、AGPL-3.0-onlyです。@dicks/core は共通の名目的な型と純粋なホストプリミティブ、@dicks/http はHTTPのレコードと補助関数を定義します。Cloudflareパッケージは両方に依存します。hosts.json がプラットフォームのプリミティブのシグネチャとエフェクトを宣言し、bridge.mjs が標準ホストとプラットフォームのホストを接続します。DaaSの経路、カテゴリー、SQL文、検証、認可ポリシー、再試行はDicksアプリケーション側に置きます。

型ID 5〜17は、このABIが予約します。正確な契約は packages/core/types.dicks、packages/http/types.dicks と各パッケージの hosts.json を参照してください。外部のリスト値は {kind:"List",type,items} を使い、内部の永続木の表現はDicksランタイムが管理します。Resultとレコードのフィールドは、アプリケーションが使う前にランタイムで検証します。HTTPリクエストはレコード14(メソッド、パス、クエリJSON、未加工の検索文字列、ヘッダーJSON)、レスポンスはレコード13(本文JSON、ステータス、ヘッダーJSON、形式)です。

入出力のエラーは、宣言している箇所では、内容を秘匿したResult値にします。フォーム通信と本文の読み込みには上限とキャンセルを設けます。SQLはプリペアドステートメントと値のバインドを使い、自動再試行しません。ログに出すのはアプリケーションが渡したJSONだけです。秘密情報を渡してはいけません。リソースは不変のビルド時データです。JSONの複製、文字列、コレクション、実行の上限は言語のランタイムで強制します。

createHosts には、コンパイル済みモジュールの json 境界関数を json オプションで渡す必要があります。createWorker なら自動で渡します。解析したリクエスト本文と、上流・DBからの値は、プリミティブのResult境界内で検証します。不正なUnicodeや深すぎるJSONは、実行時トラップとして外へ抜けず、エラーのResultになります。

net.request(ホスト44)は、メソッド、HTTPS URL、ヘッダーのJsonオブジェクト、本文のText、タイムアウトのミリ秒(1〜4500)、レスポンスのバイト上限(1〜65536)を受け取ります。204や429を含め、有効なHTTPレスポンスなら Result<Json,Text> の中に {status, headers, body} を返します。本文はテキストのままなので、呼び出し側が空・JSON・その他の形式を区別できます。リダイレクトには追従しません。認証情報やフラグメント付きのURL、hop-by-hopヘッダー、GET/HEADの本文、64KiB超のペイロードは拒否します。キャンセルと期限は、レスポンス本文全体の読み込みにも適用します。エラーは上限付きのコードで、上流の認証情報やリクエスト内容を含めません。既存の net.form はインターフェースを維持し、本文の読み込み全体にも期限を適用します。

crypto.ed25519.verify(ホスト45)は、16進表記の32バイトの公開鍵、16進表記の64バイトの署名、元のメッセージのTextを受け取ります。Boolを返し、鍵・署名の形式が不正な場合や暗号処理に失敗した場合は、検証を通しません。検証には crypto エフェクトの許可を使います。時刻の検査と再送攻撃への方針は、プロトコル側で別途実装する必要があります。このプリミティブがDiscord固有の認可まで行うわけではありません。