SDK 0.6 へのアップグレードと新しい関数ルール
JavaScript SDK から Edge Functions を呼び出すプロジェクトのチェックリストと、ローテーションが必要なシークレットを示します。
1. 何が変わったのか
新しいバージョンをインストールします。
このリリースには、1 つのセキュリティ変更と、エラーと応答の報告方法に関するいくつかの修正が含まれています。セキュリティの変更は関数サービスにも適用されます。使用している SDK バージョンに関係なく、サービスが更新されるとすぐにプロジェクトに適用されます。
2. 重大な変更
管理呼び出しには service_role キーが必要になりました
functions.list()、 get()、 listJobs()、 getJob()、 enqueueJob()、 listCronJobs()、 createCronJob() および deleteCronJob() は、公開キーまたはサインインしているユーザーに 403 を返します。以前は、list() と get() は、公開キーを保持している人にすべての関数のソース コードと変数を返していました。 セキュリティ モデルを参照してください。
フロントエンドが必要とするもの (名前など) のみを返し、定義全体を返すことはありません。
JSONにできないボディは拒否される
invoke(name, { body: new Blob(…) })、および ArrayBufferと同様に、型付き配列、 FormData、 URLSearchParams または ReadableStreamは、エラー コード invalid_bodyを返すようになりました。以前は、関数は {} を受け取りましたが、エラーは報告されませんでした。バイナリ データ (base64) をエンコードするか、ストレージにアップロードしてそのパスを送信します。
関数自体の 502、 503 、または 504 は FunctionsHttpError です
以前は、コードがステータスを返した場合でも、これらのステータスは常に FunctionsRelayErrorとして分類されていました。ここで、FunctionsRelayError は、プラットフォーム が失敗したことを意味します。 FunctionsRelayErrorで再試行した場合は、再試行ロジックがまだ一致していることを確認してください。 エラー、タイムアウト、および再試行を参照してください。
FunctionDef の方が正確です
env_vars は Record<string, string> (以前は Record<string, unknown>でした) に permissions が追加されています。これらのフィールドを読み取るコードは動作し続けます。別の型の値を割り当てたコードはコンパイルされなくなりました。
3. 動作の修正
| 以前 | 今 |
|---|---|
テキスト付きの 500 を返す関数により、メッセージ "null" が生成されました | メッセージは関数が返したテキストです |
{ data: null, error: null } を生成したテキストを含む 200 を返す関数 | data はテキストです |
デフォルトモードでのバイナリ応答は { data: null, error: null } を生成しました | error.code は invalid_response であり、メッセージは responseType を示唆しています |
responseType: 'text' とエラー JSON { "error": "…" } は HTTP 503 を示しました | メッセージはデフォルト モードと同様に JSON から読み取られます。 |
'text'、 'blob' 、 'arrayBuffer' にはデフォルトのタイムアウトがありませんでした | クライアントタイムアウト(30秒)が適用されます |
| 関数名がエンコードされずに URL に挿入されました | エンコードされています: a/../b はパス内に留まります |
ジョブの delaySecs は無視されました: ジョブはすぐに実行されました | ジョブは日付を待機します |
新しいエクスポート: FunctionsHttpError、 FunctionsRelayError、 isRelayStatus および FunctionsResponseType は、 @aurabase/aurabase-js および @aurabase/functionsからのものです。 @aurabase/functionsからインポートした場合は、引き続き機能します。 pnpm を使用すると、そのパッケージを直接の依存関係として必要なくなります。
@aurabase/authでは、 getClaims() の結果の email の型は string | nullになり、これは電子メール アドレスを持たないユーザーに対してサービスが返すものです。
CLI。 aura functions deploy は、既存の関数のシークレットを消去しなくなりました。 aura functions invoke --data は、 {}を送信する代わりに、無効な JSON を拒否します。 aura functions download は Deno 関数に対して機能します。 aura functions serve は、アナウンスしたポートをリッスンします。 aura studio はポート 3000 で Studio を開きます。
4. 公開された秘密をローテーションする
この変更より前のサービス バージョンでプロジェクトが実行されていた場合、公開キーの所有者は誰でも関数のコードと変数を読み取ることができます。それらが読み取られたと仮定します。
service_roleキーを使用して関数をリストし、それぞれの変数を開きます。- 支払いキー、Webhook シークレット、サードパーティ トークンなど、含まれるすべてのシークレットをローテーションします。
index.tsに直接書き込まれたシークレットを削除し、変数に移動します。- プロジェクトのジョブとアラート ルールを確認して、作成していないエントリがないか確認してください。
5. チェックリスト
- ブラウザー内または公開キーを使用して実行されるコード内で、
functions.list(、functions.get(、listJobs(、getJob(、enqueueJob(、createCronJob(、deleteCronJob(、およびlistCronJobs(を検索します。 - プレーン JSON ではない
body:値を検索します。 FunctionsRelayErrorに依存する再試行ロジックを確認してください。- 上で説明したようにシークレットをローテーションします。
- CLIを更新します。