追記(2023/4/29、deno@1.33.0)
deno v1.33よりfirebase-adminが使えるようになりました!
2023年4月28日にdeno v1.33がリリースされました🎉
上記記事によると、crypto.getCurves
が実装された様子
ということで使ってみたところ、無事使えました!
これでやっとfirebaseを管理者権限でdenoから扱えるようになりましたね(^▽^)/
記事本文
Denoでは最近のアップデートでimport時にnpm:
とつけることでNodeモジュールをインポートできるようになりました。
私はあるプロジェクトでfirebase-admin
をDenoから利用したいのですが、まだNode.jsのcryptoモジュールが完全にポリフィル出来ていないようで実行できません。
(crypto.getCurves
が実装されてない?)
以下の確認コードを実行して上手く使えるようになったらDenoでfirebase-admin
を使えそうです!
確認コード
main.ts
import { getAuth } from "npm:firebase-admin/auth";
getAuth();
結果(2023/3/17、deno@1.31.2時点)
PS C:\Users\kamekyame\Documents\gh\kakomimasu\server> deno run -A test.ts
error: Uncaught Error: Not implemented: crypto.getCurves
at notImplemented (ext:deno_node/_utils.ts:7:11)
at getCurves (ext:deno_node/internal/crypto/util.ts:107:5)
at Object.<anonymous> (file:///C:/Users/kamekyame/AppData/Local/deno/npm/registry.npmjs.org/jose/2.0.6/lib/r
egistry/ec_curves.js:5:5) at Object.<anonymous> (file:///C:/Users/kamekyame/AppData/Local/deno/npm/registry.npmjs.org/jose/2.0.6/lib/r
egistry/ec_curves.js:23:4) at Module._compile (ext:deno_node_loading/02_require.js:745:34)
at Object.Module._extensions..js (ext:deno_node_loading/02_require.js:778:10)
at Module.load (ext:deno_node_loading/02_require.js:656:32)
at Function.Module._load (ext:deno_node_loading/02_require.js:513:12)
at Module.require (ext:deno_node_loading/02_require.js:678:19)
at require (ext:deno_node_loading/02_require.js:818:16)
過去の結果
結果(2022/10/08、deno@1.26.1時点)
error: Uncaught Error: Not implemented: crypto.getCurves
throw new Error(message);
^
at notImplemented (https://deno.land/std@0.159.0/node/_utils.ts:25:9)
at getCurves (https://deno.land/std@0.159.0/node/internal/crypto/util.ts:60:3)
at Object.<anonymous> (file:///C:/Users/kamekyame/AppData/Local/deno/npm/registry.npmjs.org/jose/2.0.6/lib/registry/ec_curves.js:5:5)
at Object.<anonymous> (file:///C:/Users/kamekyame/AppData/Local/deno/npm/registry.npmjs.org/jose/2.0.6/lib/registry/ec_curves.js:23:4)
at Module._compile (deno:ext/node/02_require.js:719:36)
at Object.Module._extensions..js (deno:ext/node/02_require.js:752:12)
at Module.load (deno:ext/node/02_require.js:636:34)
at Function.Module._load (deno:ext/node/02_require.js:493:14)
at Module.require (deno:ext/node/02_require.js:658:21)
at require (deno:ext/node/02_require.js:789:18)
補足
esm.sh というサービスもありますが、deno用にバンドルするのに、nodeの機能をstd/node
で補っている(npm:
を使ってimportするときと同じ仕組み)ので、esm.shを使っても同じエラーに遭遇します。