メインコンテンツまでスキップ
バージョン: 0.15.0 (最新)

変更履歴


SDK 0.15.0 (2026-10-16)​

追加​

  • 認証:
    • AuthenticationServiceConfiguration に oauth.allowedRedirectOrigins?: string[] を追加し、OAuth ログイン後の戻り先として許可するオリジンを指定できるようにしました。
    • リダイレクト URL のオリジンを許可リストと照合する validateURL ブロック(blocks からエクスポート)を追加しました。リストが空の場合は拒否します。

変更​

  • 認証:
    • GET /auth/oauth/google、GET /auth/oauth/line、GET /auth/oauth/twitter は、OAuth フローを開始する前に redirectUrl クエリパラメーターを oauth.allowedRedirectOrigins に対して検証します。
    • GET /auth/oauth/google/callback、GET /auth/oauth/line/callback、GET /auth/oauth/twitter/callback は、アイデンティティの作成やワンタイムトークンの発行前に、OAuth state 内の redirectUrl を再検証します。
    • OAuth エンドポイントは、redirectUrl が不正または許可されていない場合に 400、oauth.allowedRedirectOrigins が未設定の場合に 500 を返します。従来、GET /auth/oauth/line と GET /auth/oauth/twitter には、これらの処理に対するエラーの対応付けがありませんでした。
    • generateRedirectURL はリダイレクト URL に decodeURIComponent を適用しなくなりました。onetimeToken クエリパラメーターを追加する際は、URL をそのまま使用します。
  • 基盤:
    • 開発依存関係の vitest、@vitest/coverage-v8、@vitest/coverage-istanbul を 3.x から 4.x に更新し、Vitest 4 のコンストラクターモックの仕様に合わせてテストを更新しました。

セキュリティ​

  • 認証:
    • Google、LINE、X(Twitter)の OAuth フローにおけるオープンリダイレクトを修正しました。従来は任意の redirectUrl が受け入れられ、攻撃者が管理するオリジンにワンタイムログイントークンが送られる可能性がありました。
  • 依存関係の更新:
    • ws を ^8.21.3 に更新しました(CVE-2026-62389)。
    • express を ^4.22.3 に更新し、qs@6.16.0 を必要とするようにしました(GHSA-x5fp-wj9c-mxmx、GHSA-4mjr-xmp4-gh2g)。
    • ajv を ^8.20.0 に更新しました(AIKIDO-2026-273849)。
    • pino-pretty を ^13.2.0 に更新し、fast-copy@^4 を使用するようにしました(GHSA-jggr-w7fw-pc2j)。
    • pino を ^10.4.0、pino-http を ^11.0.0 に更新しました(AIKIDO-2026-10046)。
    • axios、fast-uri、fast-xml-builder、strnum、proxy-addr(GHSA-jqcg-44mw-7w3h)の修正版は、既存の公開バージョン範囲内に含まれます。古いバージョンがロックファイルに固定されているアプリケーションでは、npm update を実行してください。
    • 開発専用の依存関係 sharp を 0.35.5 に更新し、js-yaml、brace-expansion、browserslist、smol-toml、@humanfs/node のロックファイルを更新しました。
    • @google-cloud/storage → gaxios 経由の推移的依存関係 uuid@9(GHSA-w5hq-g745-h8pq)は、現時点では SDK 側で修正できません。アプリケーション側で uuid@^11.1.1 の overrides エントリーを追加することができます。

移行​

  • OAuth ホスト: authService の oauth.allowedRedirectOrigins に、OAuth の戻り先として許可するフロントエンドのオリジンを設定します。例: { oauth: { allowedRedirectOrigins: ['https://app.example.com'] } }。各値はオリジンのみ(スキーム + ホスト + 任意の非デフォルトポート)とし、パスを含めないでください。この設定がないと、すべての OAuth リクエストが 500 で失敗します。
  • OAuth クライアント: 許可リストに含まれるオリジンの絶対 URL を、通常のクエリパラメーターとして 1 回だけエンコードして redirectUrl に送信します。SDK は二重エンコードされた値をデコードしなくなったため、そのような値は検証に失敗します。
  • カスタムロガー: アプリケーション独自の Pino ロガーを SDK に渡す場合は、pino@^10 に更新してください。

破壊的変更​

  • 認証: OAuth エンドポイント(/auth/oauth/google、/auth/oauth/line、/auth/oauth/twitter と各コールバック)は、設定がない場合に拒否する動作になりました。oauth.allowedRedirectOrigins を設定するまで、すべてのリクエストを 500 で拒否し、リストにないオリジンの redirectUrl には 400 を返します。
  • 認証: generateRedirectURL は redirectUrl を URL デコードしなくなりました。
  • 依存関係: pino を v9 から v10 に、pino-http を v10 から v11 に更新しました。SDK が公開する Logger 型は Pino v10 の型となり、Node.js 18 はサポート対象外になりました。

統合方法は、OAuth の設定とブラウザーフロー、認証設定、リダイレクトヘルパー、カスタムロガーの移行を参照してください。リリースの詳細は、コミット 256c8181 の SDK 変更履歴に基づきます。


ドキュメントサイト (2026-08-20)​

ドキュメントを SDK 0.14.0 に合わせて更新しました。リフレッシュトークンは専用の refreshtokens コレクションに保存され、ホストの例ではそのストアを authService に渡します。

🔄 変更​

バージョン指定​

認証データストア​

認証リファレンス​

  • softDeleteRefreshTokens は refreshtokens に対して文書化され、jti / email でのフィルタは不要になりました。
  • 認証ルート は、リフレッシュトークン削除、パスワードリセット完了、パスワード変更、非アクティブ化で softDeleteRefreshTokens を db.refreshtokens に接続します。
  • 認証ハンドラ: logout と refreshToken のインベントリは identities の代わりに refreshtokens を使用します。

アイデンティティ​

  • getIdentityById は { id } のみで検索します。jti: { $exists: false } フィルタは文書化されなくなりました。

SDK 0.14.0 (2026-08-19)​

✨ 追加機能​

認証​

  • AuthenticationServiceDataStore に専用の refreshtokens コレクションが必須になりました。ログイン、ログアウト、リフレッシュローテーション、管理者によるトークン削除、一括取り消し(softDeleteRefreshTokens)はすべて、identities ではなくそこにリフレッシュトークンを永続化します。

🔄 変更​

認証​

  • createRefreshToken、logout、refreshToken、deleteToken は db.refreshtokens を読み書きします。
  • softDeleteRefreshTokens はパスワードリセット、パスワード変更、非アクティブ化、リフレッシュトークン削除のルートから refreshtokens に接続され、email / jti でのフィルタは行いません(これらの識別子はトークンが identities コレクションを共有していた間のみ必要でした)。

アイデンティティ​

  • getIdentityById はアイデンティティ検索時に jti: { $exists: false } を適用しなくなりました。

📦 マイグレーション​

  • 認証ホスト: authService(および以前にリフレッシュトークンに db.identities を使っていたカスタム合成)に refreshtokens MongoDB コレクションを渡してください。このフィールドは必須です — 配線が欠けるとコンパイル時に失敗します。
  • 既存セッション: アップグレード後、リフレッシュ / ログアウト / 一括取り消しは refreshtokens のみを参照します。identities に残っている行({ jti: { $exists: true } })はリフレッシュも取り消しもしません。セッションを維持したい場合はそれらを refreshtokens にコピーし、いずれにせよ identities から削除して、アイデンティティ検索が残存トークンドキュメントに当たらないようにしてください。
  • インデックス: ホストデータベースで refreshtokens.jti にユニークインデックスを作成してください。SDK はインデックスを作成しません。

⚠️ 破壊的変更​

  • 認証: AuthenticationServiceDataStore.refreshtokens は必須です。省略すると型チェックに失敗し、実行時のトークン書き込みも失敗します。
  • 認証: リフレッシュトークンはもはや identities に保存されません。そのコレクション内の既存トークンドキュメントは、マイグレーションされるまで無視されます(マイグレーションを参照)。

SDK 0.13.0 (2026-07-14)​

✨ 追加機能​

サービス​

  • 保護されたCRUD/ドメインサービス設定に authMode?: 'bearer' | 'cookie' をオプションで追加(属性、プロフィール、製品、カテゴリ、組織、場所、注文、チャット、アイデンティティ、通知、住所)。authMode が 'cookie' の場合、各サービスは getCookieTokenInfo を context.authenticate に接続; それ以外の場合は getBearerTokenInfo を使用。認証サービス およびマウント可能ドメイン統合ガイドを参照。

認証​

  • checkIp?: boolean(デフォルト true)を AuthenticationServiceConfiguration に追加; getBearerTokenInfo と getCookieTokenInfo の両方がこのオプションを取得。認証サービス を参照。
  • whenCookieAuth ユーティリティ(utils からエクスポート)は、authMode に基づいて合成ハンドラーをクッキーモードまたはベアラーモードの実装に分岐させます。
  • context.authenticate の型付きフィールドが ServiceContext / ServiceDefinition に追加され、authMode に応じて getCookieTokenInfo または getBearerTokenInfo で設定されます。
  • スタンドアロンの logoutFeature。authMode に応じて logoutCookieSchema または logoutBearerSchema をコンパイル時に選択。
  • refreshTokenBearerSchema と refreshTokenCookieSchema; refreshTokenSchema は refreshTokenBearerSchema の非推奨エイリアスとして残る。
  • cookieOpts.httpOnly と cookieOpts.secure が設定可能に(従来はハードコード true)。

🔄 変更​

認証​

  • セッションクッキーの maxAge は、クッキー設定時に各トークンの expiresIn(accessTokenSignOptions / refreshTokenSignOptions)から自動的に算出されます。クッキーとトークンは常に同時に期限切れになります。
  • loginWithCredentialsRoute: cookie モードはレスポンス本文に { id } のみを返す; トークンは Set-Cookie で配信。bearer モードは変更なし({ accessToken, id, refreshToken })。
  • refreshTokenRoute: cookie モードは更新されたクッキーを設定し 204 と空の本文を返す; bearer モードは変更なし(200 { accessToken, refreshToken })。
  • setResponseCookie は、共通のオプションを使うのではなく、accessTokenSignOptions.expiresIn と refreshTokenSignOptions.expiresIn からアクセストークンとリフレッシュトークンのクッキーオプションを個別に算出します。

🐞 修正​

認証​

  • logoutRoute: リクエストに refreshToken クッキーがある場合に限らず、accessToken と refreshToken のクッキーを常に削除します。呼び出し元のアイデンティティは、クッキー/ベアラー認証に対応した context.authenticate で解決します。失効済みのリフレッシュトークンはエラーではなく成功として扱い、リフレッシュトークンを解決できない場合も成功を返します。
  • deactivateRoute: cookie モードでアクセストークンを Authorization ヘッダーではなく accessToken クッキーから読み取る。

組織​

  • createChangeRequestRoute: cookie モードでアクセストークンを Authorization ヘッダーではなく accessToken クッキーから読み取る。

🔒 セキュリティ​

  • getCookieTokenInfo の undocumented バイパスを削除し、appタイプの Authorization: Bearer トークンがcookie/セッション検証を完全にスキップできるようにした。
  • getCookieTokenInfo はもはや checkIp: false をハードコードしません; cookie認証されたユーザートークンはbearerトークンと同様にIPチェックがデフォルトで有効。

📦 移行​

  • クッキー認証ホスト: 認証サービスだけに authMode: 'cookie' を設定しても十分ではありません。クッキーセッションを受け付けるすべての保護対象サービスに authMode: 'cookie' を渡し、cookie-parser ミドルウェアを登録してください。
  • クッキーモードのクライアント: POST /auth/login と POST /auth/token/refresh の Set-Cookie レスポンスヘッダーからアクセス/リフレッシュトークンを読み取ってください。レスポンス本文には含まれなくなりました。
  • loginWithCredentialsFeature の手動合成: POST /auth/logout を維持するには、logoutFeature を明示的に追加してください(authService ファクトリーは自動的に追加します)。
  • アクセストークンの有効期間: デフォルトの 2h に依存していた場合は、accessTokenSignOptions: { expiresIn: '2h' } を明示的に設定してください。デフォルトは 15m になりました。
  • クッキー認証の IP 検査: プロキシやモバイルネットワークなどで、正当なリクエスト間でもクライアント IP が変わり得る場合は、AuthenticationServiceConfiguration に checkIp: false を明示的に設定してください。
  • 削除されたバリデーター: validateResourceAccess、validateOrganizationAccess、validateOrderAccess、validateMessageAccess、validateChannelAccess、verifyAuthentication、requireParam、isUUID、isNumber の直接インポートを、現在の対応機能(isAuthenticated、hasOrgRole、ownsResource、ownsOrder、ownsMessage、ownsChannel など)に置き換えてください。

⚠️ 破壊的変更​

  • 認証: AuthenticationServiceConfiguration.cookieOpts.maxAge を削除しました。クッキーの有効期間は対応するトークンの expiresIn に従います。cookieOpts.maxAge の設定を削除してください。
  • 認証: accessTokenSignOptions.expiresIn のデフォルトを 2h から 15m に変更しました。
  • 認証: loginWithCredentialsFeature は logoutRoute を合成しなくなりました。authService を使用せずに loginWithCredentialsFeature から直接構築するカスタム合成には、logoutFeature を別途追加する必要があります。
  • 認証: クッキーモードのログインと更新では、レスポンス本文にトークンを返さなくなりました。
  • 認証: getCookieTokenInfo は、クッキー認証を迂回する Authorization: Bearer を受け付けなくなりました。
  • バリデーター: 共通バリデーターから、未使用の旧エクスポート validateResourceAccess、validateOrganizationAccess、validateOrderAccess、validateMessageAccess、validateChannelAccess、verifyAuthentication、requireParam、isUUID、isNumber を削除しました。

SDK 0.12.0 (2026-07-07)​

🐞 修正​

認証​

  • completePasswordResetRoute: ユーザーがパスワードをリセットしたときに、すべてのアクティブなリフレッシュトークンを撤销し、すべてのデバイスで既存のセッションを終了。
  • changePasswordRoute: ユーザーがパスワードを変更したときに、すべてのアクティブなリフレッシュトークンを撤销。
  • 指紋セキュリティチェック: tokenPassesSecurityCheck は undefined と '' を同等として扱います; トークン生成は生成時点で指紋を '' に正規化。
  • logoutRoute: リフレッシュトークンの撤销が成功した場合のみ、認証トークンクッキーを消去。

🔄 変更​

認証​

  • softDeleteRefreshTokens は delFlg の代わりに deletedAt を設定し、リフレッシュトークンの撤销チェックと整合。
  • refreshTokenRoute: 各使用時にリフレッシュトークンを回転(新しい jti + DB行); 取り消されたリフレッシュトークンの再利用に対して 401 を返す(他のデバイスのセッションを取り消さず); cookie/本文解決のために resolveRefreshTokenFromRequest を使用。
  • logoutRoute: 認証されたアイデンティティに属することを確認した後、提示されたリフレッシュトークン(cookieまたは本文)を取り消す。
  • cookieベースのリフレッシュは指紋を x-nb-fingerprint ヘッダーから読み取る(本文パスと同じ)し、IP/UAチェックを実行。cookie ユーティリティ を参照。

⚠️ 破壊的変更​

  • cookieベースのリフレッシュ (refreshTokenRoute) および cookieベースのlogout (logoutRoute) は x-nb-fingerprint ヘッダーを必要とする。cookieパス上では request.body.fingerprint はもはや読み取られない。

SDK 0.11.0 (2026-05-26)​

✨ 追加機能​

コンビネーター​

  • mapMatchingErrorToFalse: 特定のエラークラスを ok(false) にマッピングする(従来の mapErrorToFalse はすべてのエラーを変換)。

🔄 変更​

プロフィール(旧ユーザー)​

  • ユーザーハンドラ、ブロック、ルート、スキーマ、フィーチャ、およびサービス名をプロフィールに変更。プロフィールサービス および プロフィールブロック を参照。
  • 組織および製品ルートおよびサービスで users コレクション参照を profiles に更新。
  • 非推奨 validateUserProfileAccess バリデーターを削除。
  • getProfileById の戻り型を更新。

🔒 セキュリティ​

メール変更​

  • changeEmailRoute: リクエストされたメールアドレスが既に使用されている場合に、エラーの代わりに 204 を返し、メールの列挙を防ぐ。
  • 競合エラーのみを ok(false) に変換するために mapMatchingErrorToFalse を使用。

⚠️ 破壊的変更​

  • プロフィールリネーム: user サービス、ルート、ブロック、スキーマ、およびフィーチャは profile にリネームされました。すべてのインポートを user* から profile* に更新してください。
  • バリデーター: validateUserProfileAccess が削除されました。代わりに更新された プロフィールバリデーター を使用してください。
  • コンビネーター: mapErrorToFalse は mapMatchingErrorToFalse にリネームされ、第一引数としてエラークラスを必要とします。

SDK 0.10.0 (2026-03-17)​

✨ 追加機能​

通知管理​

  • 新サービス: 通知サービス。
  • 新規エンドポイント:
    • GET /notifications/identities/:identityId — ページネーション付きで通知を検索。通知ルート を参照。
    • POST /notifications/:notificationId/read — 単一通知を読としてマーク。
    • POST /notifications/identities/:identityId/read — アンカー通知までバッチで読としてマーク。
  • 作成、バッチ作成、検索、取得、単一更新、およびバッチ更新操作のための通知ブロック。

住所検索​

組織メンバー保護​

  • 組織から最後のオーナーを削除できないようにするバリデーター。
  • メンバーが自身の階層より上の役割を割り当てられないようにする役割割り当て検証。
  • 組織メンバーを削除する前に同以上役割の検証。組織バリデーター を参照。

🐞 修正​

アイデンティティ​

  • getIdentityRoute: identities コレクションに保存されたトークン記録を除外し、一致するトークンレコードを防ぐ(jti のドキュメントを除く)。

住所検索​

  • Japan Post 郵便番号処理は検索時に完全な7桁のコードを必要とする。
  • 複数の町が同じ郵便番号を共有する場合、推測するのではなく null を返す。

🔄 変更​

認証設定​

  • ストリングベースの有効期限設定を accessTokenSignOptions、refreshTokenSignOptions、および onetimeTokenSignOptions に置き換え。認証サービス および auth ユーティリティ を参照。
  • パスワードリセット、メール変更、MFA、およびOAuthフロー全体で共有のワンタイムトークン署名オプションを適用。

認可ルール​

  • 組織メンバーのアップsert および削除ルートに追加の役割階層チェックを追加。

SDK 0.9.1 (2026-01-22)​

✨ 追加機能​

認証​

  • 新しいパスワードが現在のパスワードと同じでないかを確認するパスワード検証。
  • 個別のbcrypt比較と一致ロジックを2つのブロックに分割; password-must-not-matchフローのための新しい assertDoesNotMatch ブロック。

スキーマ検証​

  • applySchemaDefaults でオブジェクト関連キーワードを含むタイプなしスキーマの処理。
  • スキーマ検証でのオブジェクトを含むユニオンタイプのサポート。

🔄 変更​

  • タグ伝播と Nullable スキーマサポートを改善したOpenAPIスキーマ生成を強化。

🔒 セキュリティ​


SDK 0.9.0 (2025-11-04)​

✨ 追加機能​

場所管理​

  • 新サービス: 場所サービス。
  • 新規エンドポイント: POST /locations、GET /locations/:locationId、PATCH /locations/:locationId、DELETE /locations/:locationId、GET /locations。場所ルート を参照。
  • 自動祖先計算による親子関係の処理。

プロフィールフォローシステム​

  • 新規エンドポイント:
    • PUT /profiles/:profileId/profile-follows/:followProfileId — プロフィールフォローを作成。プロフィールルート を参照。
    • DELETE /profiles/:profileId/profile-follows/:followProfileId — プロフィールフォローを削除。
    • GET /profiles/:profileId/followers — ページネーション付きでプロフィールのフォロワーを取得。

組織フォローシステム​

  • 新規エンドポイント:
    • PUT /profiles/:profileId/organization-follows/:followOrganizationId — 組織フォローを作成。
    • DELETE /profiles/:profileId/organization-follows/:followOrganizationId — 組織フォローを削除。
    • GET /organizations/:organizationId/followers — 組織のフォロワーを取得。組織ルート を参照。

製品いいねシステム​

  • 新規エンドポイント:
    • PUT /profiles/:profileId/product-likes/:likeProductId — 製品いいねを作成。
    • DELETE /profiles/:profileId/product-likes/:likeProductId — 製品いいねを削除。
    • GET /products/:productId/likers — 製品のいいねをするユーザーを取得。製品ルート を参照。

チャットメッセージテンプレート管理​

製品バリエーション一括操作​

  • 新規エンドポイント:
    • POST /products/:productId/variants/bulk、PATCH /products/:productId/variants/bulk、DELETE /products/:productId/variants/bulk、GET /products/:productId/variants。製品ルート を参照。

検索エンドポイント​

  • GET /profiles/identities/:identityId — アイデンティティIDでプロフィールを検索。
  • GET /organizations/:organizationId/orders — 組織IDで注文を検索。
  • GET /organizations/:organizationId/products — 組織IDで製品を検索。

アイデンティティロック/アンロック​

チャットチャンネルアイコン管理​

ソフト削除​

  • MongoDBコレクションの withSoftDelete コンビネーター(自動フィルタリングと監査証跡付き)。

🐞 修正​

  • すべての作成および更新操作に updatedAt/createdAt タイムスタンプを追加。
  • セキュリティのためにすべてのデータベースクエリでIDを文字列にキャスト。

🔄 変更​

  • チャットメッセージの更新はメッセージ所有者のみ(管理者オーバーライドを削除)。updateChatMessageRoute を参照。
  • エンティティ作成を簡素化: メッセージと製品は添付ファイル/画像なしで作成; 添付ファイルは専用エンドポイント経由で管理。

SDK 0.8.0 (2025-09-24)​

✨ 追加機能​

製品バリエーション管理​

  • 新規エンドポイント:
    • POST /products/:productId/variants — 製品バリエーションを作成。
    • GET /products/:productId/variants/:productVariantId — IDで製品バリエーションを取得。
    • PATCH /products/:productId/variants/:productVariantId — 製品バリエーションを更新。
    • DELETE /products/:productId/variants/:productVariantId — 製品バリエーションを削除。
  • 製品フィーチャ および 製品ルート を参照。

組織変更リクエストシステム​

組織管理​

  • updateOrganizationAsAdminRoute: PATCH /admin/organizations/:organizationId/。
  • 認証画像URLが正規化された組織レスポンスに追加。

マルチファクター認証(MFA)​

ワンタイムトークン(OTT)認証​

  • loginWithOnetimeTokenRoute: POST /auth/ott/login。
  • OAuthコールバックフローはワンタイムトークンを返す; フロントエンドはOTTログインエンドポイント経由で交換。

ページネーションシステム​

  • PaginationResult<T> をデータとメタデータに分離するように再構造化。
  • リストエンドポイントは { data, metadata: { pagination } } を返す(従来の { count, total, value } に置き換え)。
  • 標準クエリパラメータとメタデータの paginationQueryParametersSchema と paginationSchema。
  • findOrganizationMembersRoute: withPaginatedProperty 経由で埋め込みページネーション。

🐞 修正​

  • WebSocketリクエストのWebSocket IPアドレスの可用性。
  • ページネーションメタデータの戻り問題。

SDK 0.7.0 (2025-09-12)​

✨ 追加機能​

チャットメッセージ添付ファイル​

チャットチャンネルメッセージ​

チャット既読受信​

チャットWebSocket購読​

  • streamChatMessagesRoute: リアルタイムメッセージストリーミングのための WebSocket /messages/listen。

LINE OAuth認証​

製品画像管理​

  • 新規エンドポイント:
    • POST /products/:productId/images — 製品画像を作成。
    • DELETE /products/:productId/images/:imageId — 製品画像を削除。
  • 製品ルート を参照。

ブロック​

  • チャット状態ブロック: createChatChannelReadState、updateChatChannelReadState、findChatChannelReadStates、およびクエリ/ペイロードビルダー。
  • チャットメッセージブロック: createChatMessage、getChatMessageById、添付ファイルCRUD、および正規化ヘルパー。
  • 製品ブロック: getProductById、findProducts、画像正規化ヘルパー。
  • OAuthブロック: requestLineOAuth、authenticateLineOAuth、verifyLineOAuth。
  • normalizeFile: 集中ファイル正規化ユーティリティ。

🔄 変更​

  • チャットと製品の正規化は集中的な normalizeFile ユーティリティを使用するようにリファクタリング。
  • エンティティ作成を簡素化: コアメッセージと製品は添付ファイル/画像なしで作成; 添付ファイルは専用エンドポイント経由で管理。

🐞 修正​

  • チャット添付ファイルの正規化(更新レスポンス内); セキュリティIDのキャスト; 添付ファイル操作の管理者アクセス制限。
  • OAuth: GoogleとTwitterフローはemailワークアラウンドの代わりに provider/providerId を使用するように修正。

SDK 0.6.0 (2025-08-28)​

🎥 デモ動画​

📹 NodeBlocks Backend SDK v0.6.0 デモ — すべての新機能と機能の完全なウォークスルー。


✨ 追加機能​

チャットメッセージテンプレートシステム​

Twitter OAuth認証​

リフレッシュトークンシステム​

RxJSによるWebSocketサポート​

  • defService を強化し、WebSocketサーバー統合をサポート。
  • RxJS ブリッジによる WebSocket ルート処理。protocol: 'ws' ルートを HTTP ルートと並行して扱います。
  • notFromEmitter および markAsFromEmitter はエミッターベースのメッセージフィルター用です。

🔄 変更​

サービス​

  • 認証サービス: Twitter OAuthサポートとリフレッシュトークン機能を追加; データストアに chatMessageTemplates コレクションを含めるように更新。

🐞 修正​

  • 組織ブロックのエクスポート問題。
  • refreshTokenRoute: リフローフローから isAuthenticated バリデーターを削除。
  • 設定プロパティ名を修正(user.typeIds → identity.typeIds; user?: string → regular?: string)。

マイグレーションガイド(0.6.x ドキュメントからアップグレード)​

  1. @nodeblocks/backend-sdk@^0.15.0 をインストールし、クイックスタートに従ってください。
  2. userService、/users、および users コレクションの例を profileService、/profiles、および profiles に置き換え。
  3. フラットトークンの有効期限キーを accessTokenSignOptions、refreshTokenSignOptions、および onetimeTokenSignOptions に置き換え。2時間 のアクセストークンが必要な場合は accessTokenSignOptions: { expiresIn: '2h' } を明示的に設定。
  4. cookieセッションの場合、マウントするすべての保護されたサービスに authMode: 'cookie' を設定し、それらのルーターの前に cookie-parser を登録し、ログイン/リフレッシュ時にJSON本文ではなく Set-Cookie からトークンを読み取る。
  5. 削除されたバリデーターインポート(validateResourceAccess、verifyAuthentication、requireParam など)を 共通バリデーター とドメインバリデーターページに記載されている現在のエクスポートに置き換え。
  6. ブロックカタログ とドメイン Reference map テーブルを使用して、各エンドポイントの現在のルート、スキーマ、およびバリデーターコントラクトを見つける。
  7. cookieモードのリフレッシュとlogoutリクエストに x-nb-fingerprint ヘッダーを送信(SDK 0.12.0)。
  8. authService 外で loginWithCredentialsFeature に構築されたカスタム合成に logoutFeature を追加(SDK 0.13.0)。
  9. cookieOpts.maxAge を削除; クッキーの生存期間は一致するトークンの expiresIn に従う(SDK 0.13.0)。
  10. mapErrorToFalse を mapMatchingErrorToFalse(errorClass, [...]) に置き換え(SDK 0.11.0); 合成ユーティリティ を参照。
  11. authService(および以前にリフレッシュトークンに db.identities を使っていたカスタム合成)に refreshtokens MongoDB コレクションを渡してください。このフィールドは必須です — 配線が欠けるとコンパイル時に失敗します。(SDK 0.14.0)。
  12. OAuth を使用する場合は、authService の第 2 引数で空でない oauth.allowedRedirectOrigins リストを設定してください。フロントエンドのオリジンをパスなしで指定します。開始・コールバックルートは、設定の欠落を 500、不正または許可されていない宛先を 400 で拒否します。(SDK 0.15.0)
  13. OAuth の redirectUrl クエリパラメーターは絶対 URL から 1 回だけシリアライズしてください。クエリシリアライザーに渡す前に URL 全体をエンコードしないでください。SDK は onetimeToken を追加する際に再度デコードしなくなりました。ブラウザーフローを参照してください。(SDK 0.15.0)
  14. アプリケーションから渡すロガーを pino@^10 に更新してください。Pino 10 は Node.js 18 のサポートを終了しました。クイックスタートは Node.js 22.x または 24.x を対象とします。(SDK 0.15.0)

破壊的ドキュメント変更​

  • バージョン指定スナップショットは backend_versioned_docs/version-0.6.0 および version-0.7.0 に歴史的参照として残ります。新しい統合では canary v2 ドキュメント /v2/backend/next を使用すべきです。
  • 例はもはやフラットSDKインポート、user* サービス名、または従来のページネーションエンベロープを表示しない。
  • cookieモードのログインとリフレッシュの例は、レスポンス本文にアクセスまたはリフレッシュトークンを返さなくなります; クライアントはセッションクッキーを使用する必要があります。

セキュリティドキュメント更新​

  • cookie認証はcookie保護ルートにundocumented Bearerバイパスを文書しなくなりました; IPチェックは有効デフォルトで checkIp が有効になっています。認証サービス を参照。
  • 変更メールレスポンスは列挙エラーの代わりに 204 を文書化してメールの列挙を減らします; 認証ルート を参照。
  • 組織メンバー保護、通知所有権、および住所検索検証は、それぞれの バリデーター および ルート ページに現在のアクセスルールとともに文書化。