変更履歴
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が受け入れられ、攻撃者が管理するオリジンにワンタイムログイントークンが送られる可能性がありました。
- Google、LINE、X(Twitter)の OAuth フローにおけるオープンリダイレクトを修正しました。従来は任意の
- 依存関係の更新:
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 に渡します。
🔄 変更
バージョン指定
- クイックスタート と マイグレーションガイド は
@nodeblocks/backend-sdk@^0.14.0を対象とします。
認証データストア
authServiceの例は、必須のrefreshtokensをidentitiesと共に渡します。クイックスタート、認証サービス、認証インデックス、OAuth、招待、複合サービス、WebSocketサービス、関数型プログラミング、および メールサービス を参照。- 認証サービス、OAuth、および 招待 のデータストア表では
refreshtokensを必須として記載。
認証リファレンス
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を使っていたカスタム合成)にrefreshtokensMongoDB コレクションを渡してください。このフィールドは必須です — 配線が欠けるとコンパイル時に失敗します。 - 既存セッション: アップグレード後、リフレッシュ / ログアウト / 一括取り消しは
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— アンカー通知までバッチで読としてマーク。
- 作成、バッチ作成、検索、取得、単一更新、およびバッチ更新操作のための通知ブロック。
住所検索
- 新サービス: 住所サービス (Japan Post ドライバー) とともに。
- 新規エンドポイント:
GET /addresses— 郵便番号で日本住所を検索。住所ルート を参照。 - 住所検索結果用のインメモリLRUキャッシングユーティリティ。
組織メンバー保護
- 組織から最後のオーナーを削除できないようにするバリデーター。
- メンバーが自身の階層より上の役割を割り当てられないようにする役割割り当て検証。
- 組織メンバーを削除する前に同以上役割の検証。組織バリデーター を参照。
🐞 修正
アイデンティティ
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スキーマ生成を強化。
🔒 セキュリティ
- NoSQLインジェクション保護のためのMongoDBクエリフィルター検証。スキーマユーティリティ および Schema コンポーネント(
queryFilter強化)を参照。
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— 製品のいいねをするユーザーを取得。製品ルート を参照。
チャットメッセージテンプレート管理
- 新規エンドポイント:
GET /message-templates—findChatMessageTemplatesRoute。GET /organizations/:organizationId/message-templates—findChatMessageTemplatesForOrganizationRoute。PATCH /message-templates/:messageTemplateId—updateChatMessageTemplateRoute。DELETE /message-templates/:messageTemplateId—deleteChatMessageTemplateRoute。
製品バリエーション一括操作
- 新規エンドポイント:
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で製品を検索。
アイデンティティロック/アンロック
- 新規エンドポイント:
POST /identities/:identityId/lock—lockIdentityRoute。POST /identities/:identityId/unlock—unlockIdentityRoute。
チャットチャンネルアイコン管理
- 新規エンドポイント:
GET /channels/:channelId/icon-upload-url—getChatChannelIconUploadUrlRoute。
ソフト削除
- 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— 製品バリエーションを削除。
- 製品フィーチャ および 製品ルート を参照。
組織変更リクエストシステム
- 新規エンドポイント:
createChangeRequestRoute:POST /organizations/:organizationId/change-requests。findChangeRequestsForOrganizationRoute:GET /organizations/:organizationId/change-requests。
組織管理
updateOrganizationAsAdminRoute:PATCH /admin/organizations/:organizationId/。- 認証画像URLが正規化された組織レスポンスに追加。
マルチファクター認証(MFA)
- 新規エンドポイント:
resendMfaCodeRoute:POST /auth/mfa/resend。verifyMfaCodeRoute:POST /auth/mfa/verify。
isMfaEnabled: trueをサービス設定で有効にして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)
✨ 追加機能
チャットメッセージ添付ファイル
- 新規エンドポイント:
createChatMessageAttachmentRoute:POST /messages/:messageId/attachments。deleteChatMessageAttachmentRoute:DELETE /messages/:messageId/attachments/:attachmentId。getChatMessageAttachmentUploadUrlRoute:GET /messages/:messageId/attachment-upload-url。
チャットチャンネルメッセージ
getChannelMessagesRoute:GET /channels/:channelId/messages。
チャット既読受信
upsertChatChannelReadStateRoute:PUT /channels/:channelId/read-state。
チャットWebSocket購読
streamChatMessagesRoute: リアルタイムメッセージストリーミングのための WebSocket/messages/listen。
LINE OAuth認証
- 新規エンドポイント:
lineOAuthRoute:GET /auth/oauth/line。lineOAuthCallbackRoute:GET /auth/oauth/line/callback。
製品画像管理
- 新規エンドポイント:
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 デモ — すべての新機能と機能の完全なウォークスルー。
✨ 追加機能
チャットメッセージテンプレートシステム
- 新規エンドポイント:
createChatMessageTemplateRoute:POST /message-templates。getChatMessageTemplateRoute:GET /message-templates/:messageTemplateId。
- ブロック:
createChatMessageTemplate、getChatMessageTemplateById。 - フィーチャ:
createChatMessageTemplateFeature、getChatMessageTemplateFeature。 - スキーマ:
createChatMessageTemplateSchema。 - バリデーター:
hasOrganizationAccessToMessageTemplate。
Twitter OAuth認証
- 新規エンドポイント:
twitterOAuthRoute:GET /auth/oauth/twitter。twitterOAuthCallbackRoute:GET /auth/oauth/twitter/callback。
- ドライバー:
createTwitterOAuthDriver、verifyTwitterCallback。
リフレッシュトークンシステム
- 新規エンドポイント:
refreshTokenRoute:POST /auth/token/refresh。deleteRefreshTokensRoute:DELETE /auth/:identityId/refresh-tokens。
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 ドキュメントからアップグレード)
@nodeblocks/backend-sdk@^0.15.0をインストールし、クイックスタートに従ってください。userService、/users、およびusersコレクションの例をprofileService、/profiles、およびprofilesに置き換え。- フラットトークンの有効期限キーを
accessTokenSignOptions、refreshTokenSignOptions、およびonetimeTokenSignOptionsに置き換え。2時間 のアクセストークンが必要な場合はaccessTokenSignOptions: { expiresIn: '2h' }を明示的に設定。 - cookieセッションの場合、マウントするすべての保護されたサービスに
authMode: 'cookie'を設定し、それらのルーターの前にcookie-parserを登録し、ログイン/リフレッシュ時にJSON本文ではなくSet-Cookieからトークンを読み取る。 - 削除されたバリデーターインポート(
validateResourceAccess、verifyAuthentication、requireParamなど)を 共通バリデーター とドメインバリデーターページに記載されている現在のエクスポートに置き換え。 - ブロックカタログ とドメイン Reference map テーブルを使用して、各エンドポイントの現在のルート、スキーマ、およびバリデーターコントラクトを見つける。
- cookieモードのリフレッシュとlogoutリクエストに
x-nb-fingerprintヘッダーを送信(SDK 0.12.0)。 authService外でloginWithCredentialsFeatureに構築されたカスタム合成にlogoutFeatureを追加(SDK 0.13.0)。cookieOpts.maxAgeを削除; クッキーの生存期間は一致するトークンのexpiresInに従う(SDK 0.13.0)。mapErrorToFalseをmapMatchingErrorToFalse(errorClass, [...])に置き換え(SDK 0.11.0); 合成ユーティリティ を参照。authService(および以前にリフレッシュトークンにdb.identitiesを使っていたカスタム合成)にrefreshtokensMongoDB コレクションを渡してください。このフィールドは必須です — 配線が欠けるとコンパイル時に失敗します。(SDK 0.14.0)。- OAuth を使用する場合は、
authServiceの第 2 引数で空でないoauth.allowedRedirectOriginsリストを設定してください。フロントエンドのオリジンをパスなしで指定します。開始・コールバックルートは、設定の欠落を500、不正または許可されていない宛先を400で拒否します。(SDK 0.15.0) - OAuth の
redirectUrlクエリパラメーターは絶対 URL から 1 回だけシリアライズしてください。クエリシリアライザーに渡す前に URL 全体をエンコードしないでください。SDK はonetimeTokenを追加する際に再度デコードしなくなりました。ブラウザーフローを参照してください。(SDK 0.15.0) - アプリケーションから渡すロガーを
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モードのログインとリフレッシュの例は、レスポンス本文にアクセスまたはリフレッシュトークンを返さなくなります; クライアントはセッションクッキーを使用する必要があります。