@exabugs/dynamodb-client 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/dist/client/Collection.d.ts +0 -5
- package/dist/client/Collection.d.ts.map +1 -1
- package/dist/client/Collection.js +7 -1
- package/dist/client/Collection.js.map +1 -1
- package/dist/client/DynamoClient.d.ts +1 -1
- package/dist/client/DynamoClient.d.ts.map +1 -1
- package/dist/client/FindCursor.d.ts.map +1 -1
- package/dist/client/FindCursor.js +2 -1
- package/dist/client/FindCursor.js.map +1 -1
- package/dist/scripts/operations/bulkRecordRepair.d.ts +17 -0
- package/dist/scripts/operations/bulkRecordRepair.d.ts.map +1 -0
- package/dist/scripts/operations/bulkRecordRepair.js +69 -0
- package/dist/scripts/operations/bulkRecordRepair.js.map +1 -0
- package/dist/scripts/operations/singleRecordRepair.d.ts +18 -0
- package/dist/scripts/operations/singleRecordRepair.d.ts.map +1 -0
- package/dist/scripts/operations/singleRecordRepair.js +46 -0
- package/dist/scripts/operations/singleRecordRepair.js.map +1 -0
- package/dist/scripts/repair-shadows.js +26 -160
- package/dist/scripts/repair-shadows.js.map +1 -1
- package/dist/scripts/utils/awsUtils.d.ts +15 -0
- package/dist/scripts/utils/awsUtils.d.ts.map +1 -0
- package/dist/scripts/utils/awsUtils.js +31 -0
- package/dist/scripts/utils/awsUtils.js.map +1 -0
- package/dist/scripts/utils/cliParser.d.ts +30 -0
- package/dist/scripts/utils/cliParser.d.ts.map +1 -0
- package/dist/scripts/utils/cliParser.js +44 -0
- package/dist/scripts/utils/cliParser.js.map +1 -0
- package/dist/scripts/utils/clientFactory.d.ts +22 -0
- package/dist/scripts/utils/clientFactory.d.ts.map +1 -0
- package/dist/scripts/utils/clientFactory.js +31 -0
- package/dist/scripts/utils/clientFactory.js.map +1 -0
- package/dist/scripts/utils/repairUtils.d.ts +58 -0
- package/dist/scripts/utils/repairUtils.d.ts.map +1 -0
- package/dist/scripts/utils/repairUtils.js +52 -0
- package/dist/scripts/utils/repairUtils.js.map +1 -0
- package/dist/server/handler.cjs +2093 -931
- package/dist/server/handler.cjs.map +4 -4
- package/dist/server/handler.d.ts +3 -3
- package/dist/server/handler.d.ts.map +1 -1
- package/dist/server/handler.js +16 -373
- package/dist/server/handler.js.map +1 -1
- package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
- package/dist/server/operations/find/shadowQuery.js +2 -1
- package/dist/server/operations/find/shadowQuery.js.map +1 -1
- package/dist/server/operations/find/utils.js.map +1 -1
- package/dist/server/operations/insertMany.js +2 -2
- package/dist/server/operations/insertMany.js.map +1 -1
- package/dist/server/operations/operationDispatcher.d.ts +10 -0
- package/dist/server/operations/operationDispatcher.d.ts.map +1 -0
- package/dist/server/operations/operationDispatcher.js +84 -0
- package/dist/server/operations/operationDispatcher.js.map +1 -0
- package/dist/server/operations/parameterConverter.d.ts +117 -0
- package/dist/server/operations/parameterConverter.d.ts.map +1 -0
- package/dist/server/operations/parameterConverter.js +155 -0
- package/dist/server/operations/parameterConverter.js.map +1 -0
- package/dist/server/operations/updateMany.js +2 -2
- package/dist/server/operations/updateMany.js.map +1 -1
- package/dist/server/utils/authHandler.d.ts +16 -0
- package/dist/server/utils/authHandler.d.ts.map +1 -0
- package/dist/server/utils/authHandler.js +85 -0
- package/dist/server/utils/authHandler.js.map +1 -0
- package/dist/server/utils/errorHandler.d.ts +15 -0
- package/dist/server/utils/errorHandler.d.ts.map +1 -0
- package/dist/server/utils/errorHandler.js +61 -0
- package/dist/server/utils/errorHandler.js.map +1 -0
- package/dist/server/utils/pagination.d.ts.map +1 -1
- package/dist/server/utils/pagination.js +2 -1
- package/dist/server/utils/pagination.js.map +1 -1
- package/dist/server/utils/requestParser.d.ts +10 -0
- package/dist/server/utils/requestParser.d.ts.map +1 -0
- package/dist/server/utils/requestParser.js +45 -0
- package/dist/server/utils/requestParser.js.map +1 -0
- package/dist/server/utils/responseBuilder.d.ts +33 -0
- package/dist/server/utils/responseBuilder.d.ts.map +1 -0
- package/dist/server/utils/responseBuilder.js +85 -0
- package/dist/server/utils/responseBuilder.js.map +1 -0
- package/dist/shadows/generator.d.ts.map +1 -1
- package/dist/shadows/generator.js +2 -1
- package/dist/shadows/generator.js.map +1 -1
- package/dist/shared/constants/formatting.d.ts +15 -0
- package/dist/shared/constants/formatting.d.ts.map +1 -0
- package/dist/shared/constants/formatting.js +15 -0
- package/dist/shared/constants/formatting.js.map +1 -0
- package/dist/shared/constants/http.d.ts +10 -24
- package/dist/shared/constants/http.d.ts.map +1 -1
- package/dist/shared/constants/http.js +10 -24
- package/dist/shared/constants/http.js.map +1 -1
- package/dist/shared/constants/validation.d.ts +22 -0
- package/dist/shared/constants/validation.d.ts.map +1 -0
- package/dist/shared/constants/validation.js +29 -0
- package/dist/shared/constants/validation.js.map +1 -0
- package/dist/shared/errors/index.d.ts +11 -1
- package/dist/shared/errors/index.d.ts.map +1 -1
- package/dist/shared/errors/index.js +10 -0
- package/dist/shared/errors/index.js.map +1 -1
- package/package.json +2 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.5.0] - 2024-12-23
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- 包括的なAPIリファレンスドキュメント (`docs/API.md`)
|
|
14
|
+
- 3つの認証方式(IAM、Cognito、Token)の詳細な説明
|
|
15
|
+
- すべてのクライアントAPIメソッドの完全な仕様
|
|
16
|
+
- 型定義(Filter、UpdateOperators、結果型)の詳細
|
|
17
|
+
- react-admin統合の使用方法
|
|
18
|
+
- エラーハンドリングとベストプラクティス
|
|
19
|
+
- コントリビューションガイド (`CONTRIBUTING.md`)
|
|
20
|
+
- 開発環境のセットアップから本番リリースまでの完全なワークフロー
|
|
21
|
+
- TypeScript、命名規則、JSDocコメントのコーディング規約
|
|
22
|
+
- AAA パターンに基づくテストガイドライン
|
|
23
|
+
- Conventional Commitsに基づくコミットメッセージ規約
|
|
24
|
+
- セキュリティポリシー (`SECURITY.md`)
|
|
25
|
+
- GitHub Security Advisoriesを使用した脆弱性報告手順
|
|
26
|
+
- 責任ある開示プロセスと協調的開示タイムライン
|
|
27
|
+
- 開発者・利用者向けのセキュリティベストプラクティス
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- アーキテクチャリファクタリングによるコード構造の改善
|
|
31
|
+
- 共通モジュールの抽出 (`src/shared/` ディレクトリ構造)
|
|
32
|
+
- 大きな関数の分割(handler.ts ~520行 → 複数モジュール)
|
|
33
|
+
- コードの重複排除と共通定数の統一
|
|
34
|
+
- エラーハンドリングとログ記録の標準化
|
|
35
|
+
- 依存関係管理と循環依存の解決
|
|
36
|
+
|
|
37
|
+
### Improved
|
|
38
|
+
- コードの可読性と保守性の向上
|
|
39
|
+
- 単一責任原則に基づく関数分割(50行制限)
|
|
40
|
+
- 3回以上繰り返されるコードの共通関数化
|
|
41
|
+
- エラーコード列挙型の拡張
|
|
42
|
+
|
|
10
43
|
## [0.4.1] - 2024-12-23
|
|
11
44
|
|
|
12
45
|
### Fixed
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Collection(共通実装)
|
|
3
|
-
*
|
|
4
|
-
* 認証ハンドラーは外部から注入されます。
|
|
5
|
-
*/
|
|
6
1
|
import type { DeleteResult, Filter, FindOptions, InsertManyResult, InsertOneResult, UpdateOperators, UpdateResult } from '../shared/index.js';
|
|
7
2
|
import type { ClientOptions } from './DynamoClient.js';
|
|
8
3
|
import { FindCursor } from './FindCursor.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Collection.d.ts","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,YAAY,GAAG,OAAO,IAAI,CACtD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,YAAY,KACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,EAAE,YAAY,GAAG,OAAO;IAEnF,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;gBALd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,YAAY,GAAG,SAAS,EACrC,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,cAAc,EAAE,iBAAiB,CAAC,YAAY,CAAC;IAGzD,OAAO,IAAI,MAAM;IAIjB,WAAW,IAAI,MAAM;IAIrB,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC,cAAc,IAAI,YAAY,GAAG,SAAS;IAI1C;;OAEG;YACW,OAAO;IAuDrB,IAAI,CAAC,MAAM,GAAE,MAAM,CAAC,OAAO,CAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;IAatF,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAUzD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU3C,SAAS,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAS9E,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBrF,SAAS,CACb,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EACvB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAC/B,OAAO,CAAC,YAAY,CAAC;IAelB,UAAU,CACd,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EACvB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,GAC/B,OAAO,CAAC,YAAY,CAAC;IAkBlB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IASzD,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAUjE"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection(共通実装)
|
|
3
|
+
*
|
|
4
|
+
* 認証ハンドラーは外部から注入されます。
|
|
5
|
+
*/
|
|
6
|
+
import { DEFAULT_HTTP_TIMEOUT_MS } from '../shared/constants/http.js';
|
|
1
7
|
import { FindCursor } from './FindCursor.js';
|
|
2
8
|
/**
|
|
3
9
|
* コレクション
|
|
@@ -56,7 +62,7 @@ export class Collection {
|
|
|
56
62
|
}
|
|
57
63
|
// タイムアウト設定
|
|
58
64
|
const controller = new AbortController();
|
|
59
|
-
const timeout = this.clientOptions?.timeout ||
|
|
65
|
+
const timeout = this.clientOptions?.timeout || DEFAULT_HTTP_TIMEOUT_MS;
|
|
60
66
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
61
67
|
try {
|
|
62
68
|
const response = await fetch(this.endpoint, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/client/Collection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAWtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA2B7C;;;;;;;;GAQG;AACH,MAAM,OAAO,UAAU;IAEX;IACA;IACA;IACA;IACA;IACA;IANV,YACU,QAAgB,EAChB,cAAsB,EACtB,SAA6B,EAC7B,WAAqC,EACrC,aAAwC,EACxC,cAA+C;QAL/C,aAAQ,GAAR,QAAQ,CAAQ;QAChB,mBAAc,GAAd,cAAc,CAAQ;QACtB,cAAS,GAAT,SAAS,CAAoB;QAC7B,gBAAW,GAAX,WAAW,CAA0B;QACrC,kBAAa,GAAb,aAAa,CAA2B;QACxC,mBAAc,GAAd,cAAc,CAAiC;IACtD,CAAC;IAEJ,OAAO;QACL,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,MAA+B;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,cAAc;YAC/B,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,wBAAwB;QACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5F,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QAEzC,oCAAoC;QACpC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;QACxD,CAAC;QAED,WAAW;QACX,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,IAAI,uBAAuB,CAAC;QACvE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC1C,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAEnF,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;YAC5D,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,IAAI,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAA0B,EAAE,EAAE,OAAqB;QACtD,OAAO,IAAI,UAAU,CACnB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,cAAc,EACnB,MAAM,EACN,OAAO,EACP,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAuB;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,oDAAoD;QACpD,qBAAqB;QACrB,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACtF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,QAAmB,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAa;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACjF,yBAAyB;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAqB,CAAC;QAC/B,CAAC;QACD,MAAM,WAAW,GAAG,QAAiC,CAAC;QACtD,OAAO,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAyC;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,QAAkC,CAAC;QAClD,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAA8C;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,mEAAmE;QACnE,iBAAiB;QACjB,MAAM,MAAM,GAAG,QAKd,CAAC;QACF,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;YAChC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACpC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAuB,EACvB,MAAgC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,QAId,CAAC;QACF,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAuB,EACvB,MAAgC;QAEhC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,mEAAmE;QACnE,iBAAiB;QACjB,MAAM,MAAM,GAAG,QAId,CAAC;QACF,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC/D,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,YAAY,GAAG,WAAW,EAAE,aAAa;YACvD,aAAa,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,aAAa;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAuB;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,QAAoC,CAAC;QACpD,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAuB;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,mEAAmE;QACnE,iBAAiB;QACjB,MAAM,MAAM,GAAG,QAA8B,CAAC;QAC9C,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,aAAa;SAC/C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamoClient.d.ts","sourceRoot":"","sources":["../../src/client/DynamoClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,YAAY,GAAG,OAAO;IACnD,WAAW;IACX,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,yBAAyB;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB
|
|
1
|
+
{"version":3,"file":"DynamoClient.d.ts","sourceRoot":"","sources":["../../src/client/DynamoClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,YAAY,GAAG,OAAO;IACnD,WAAW;IACX,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,yBAAyB;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY,CAAC,YAAY,GAAG,OAAO;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAA8B;IAC9C,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAkC;IAExD;;;;;;OAMG;gBAED,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG,SAAS,EAChD,cAAc,EAAE,iBAAiB,CAAC,YAAY,CAAC;IAiB3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B,EAAE,IAAI,QAAQ,CAAC,YAAY,CAAC;IAiBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,WAAW,IAAI,OAAO;CAGvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FindCursor.d.ts","sourceRoot":"","sources":["../../src/client/FindCursor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FindCursor.d.ts","sourceRoot":"","sources":["../../src/client/FindCursor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAU,CACrB,OAAO,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAC/F,YAAY,GAAG,OAAO;IAoBpB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,SAAS,CAAC;IAClB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,cAAc,CAAC;IAzBzB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAyE;IAE1F;;;;;;;;;;;OAWG;gBAEO,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAC/B,OAAO,GAAE,WAAgB,EACjB,SAAS,CAAC,EAAE,MAAM,YAAA,EAClB,WAAW,CAAC,EAAE,YAAY,YAAA,EAC1B,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,cAAc,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,YAAA;IAK1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI;IAKzD;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB;;;;;OAKG;YACW,OAAO;IAsFrB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAOnC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;QACrB,eAAe,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CAWH"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEFAULT_HTTP_TIMEOUT_MS } from '../shared/constants/http.js';
|
|
1
2
|
/**
|
|
2
3
|
* FindCursor
|
|
3
4
|
*
|
|
@@ -154,7 +155,7 @@ export class FindCursor {
|
|
|
154
155
|
}
|
|
155
156
|
// タイムアウト設定
|
|
156
157
|
const controller = new AbortController();
|
|
157
|
-
const timeout = this.clientOptions?.timeout ||
|
|
158
|
+
const timeout = this.clientOptions?.timeout || DEFAULT_HTTP_TIMEOUT_MS; // デフォルト30秒
|
|
158
159
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
159
160
|
try {
|
|
160
161
|
const response = await fetch(this.endpoint, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FindCursor.js","sourceRoot":"","sources":["../../src/client/FindCursor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FindCursor.js","sourceRoot":"","sources":["../../src/client/FindCursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 一括レコード修復処理
|
|
3
|
+
*
|
|
4
|
+
* 全レコードをスキャンして修復する
|
|
5
|
+
*/
|
|
6
|
+
import type { Collection } from '../../client/index.iam.js';
|
|
7
|
+
/**
|
|
8
|
+
* 全レコードをスキャンして修復
|
|
9
|
+
*
|
|
10
|
+
* @param collection - DynamoClientのコレクション
|
|
11
|
+
* @param dryRun - ドライランモード(trueの場合は実際の修復は行わない)
|
|
12
|
+
*/
|
|
13
|
+
export declare function repairAllRecords<TAuthOptions = unknown>(collection: Collection<{
|
|
14
|
+
id: string;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}, TAuthOptions>, dryRun: boolean): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=bulkRecordRepair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkRecordRepair.d.ts","sourceRoot":"","sources":["../../../src/scripts/operations/bulkRecordRepair.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAS5D;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,GAAG,OAAO,EAC3D,UAAU,EAAE,UAAU,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAAE,YAAY,CAAC,EAC5E,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { checkShadowIntegrity, displayRepairSummary, repairRecordViaDynamoClient, waitForRateLimit, } from '../utils/repairUtils.js';
|
|
2
|
+
/**
|
|
3
|
+
* 全レコードをスキャンして修復
|
|
4
|
+
*
|
|
5
|
+
* @param collection - DynamoClientのコレクション
|
|
6
|
+
* @param dryRun - ドライランモード(trueの場合は実際の修復は行わない)
|
|
7
|
+
*/
|
|
8
|
+
export async function repairAllRecords(collection, dryRun) {
|
|
9
|
+
const stats = {
|
|
10
|
+
scanned: 0,
|
|
11
|
+
needsRepair: 0,
|
|
12
|
+
repaired: 0,
|
|
13
|
+
failed: 0,
|
|
14
|
+
errors: [],
|
|
15
|
+
};
|
|
16
|
+
console.log(`\n=== Scanning all records ===`);
|
|
17
|
+
console.log(`Mode: ${dryRun ? 'DRY RUN' : 'REPAIR'}`);
|
|
18
|
+
// 全レコードを取得
|
|
19
|
+
const records = await fetchAllRecords(collection);
|
|
20
|
+
console.log(`Found ${records.length} records`);
|
|
21
|
+
// 各レコードを処理
|
|
22
|
+
for (const mainRecord of records) {
|
|
23
|
+
await processRecord(mainRecord, stats, dryRun, collection);
|
|
24
|
+
}
|
|
25
|
+
// 統計情報を表示
|
|
26
|
+
displayRepairSummary(stats);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 全レコードを取得
|
|
30
|
+
*
|
|
31
|
+
* @param collection - DynamoClientのコレクション
|
|
32
|
+
* @returns 全レコードの配列
|
|
33
|
+
*/
|
|
34
|
+
async function fetchAllRecords(collection) {
|
|
35
|
+
const cursor = collection.find({});
|
|
36
|
+
return await cursor.toArray();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 単一レコードを処理
|
|
40
|
+
*
|
|
41
|
+
* @param mainRecord - 処理対象のレコード
|
|
42
|
+
* @param stats - 修復統計情報
|
|
43
|
+
* @param dryRun - ドライランモード
|
|
44
|
+
* @param collection - DynamoClientのコレクション
|
|
45
|
+
*/
|
|
46
|
+
async function processRecord(mainRecord, stats, dryRun, collection) {
|
|
47
|
+
stats.scanned++;
|
|
48
|
+
const recordId = mainRecord.id;
|
|
49
|
+
try {
|
|
50
|
+
const { needsRepair, missingShadows, extraShadows } = await checkShadowIntegrity();
|
|
51
|
+
if (needsRepair) {
|
|
52
|
+
stats.needsRepair++;
|
|
53
|
+
console.log(`\n[${stats.scanned}] Record ${recordId}: Missing=${missingShadows}, Extra=${extraShadows}`);
|
|
54
|
+
if (!dryRun) {
|
|
55
|
+
await repairRecordViaDynamoClient(collection, recordId);
|
|
56
|
+
stats.repaired++;
|
|
57
|
+
console.log(` ✓ Repaired`);
|
|
58
|
+
// レート制限を避けるため少し待機
|
|
59
|
+
await waitForRateLimit();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
stats.failed++;
|
|
65
|
+
stats.errors.push({ id: recordId, error: error.message });
|
|
66
|
+
console.error(` ✗ Failed: ${error.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=bulkRecordRepair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkRecordRepair.js","sourceRoot":"","sources":["../../../src/scripts/operations/bulkRecordRepair.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAA4E,EAC5E,MAAe;IAEf,MAAM,KAAK,GAAgB;QACzB,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEtD,WAAW;IACX,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IAE/C,WAAW;IACX,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU;IACV,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAC5B,UAA4E;IAE5E,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,aAAa,CAC1B,UAAkD,EAClD,KAAkB,EAClB,MAAe,EACf,UAA4E;IAE5E,KAAK,CAAC,OAAO,EAAE,CAAC;IAChB,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAEnF,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,OAAO,YAAY,QAAQ,aAAa,cAAc,WAAW,YAAY,EAAE,CAC5F,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACxD,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBAE5B,kBAAkB;gBAClB,MAAM,gBAAgB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 単一レコード修復処理
|
|
3
|
+
*
|
|
4
|
+
* 指定されたIDのレコードを修復する
|
|
5
|
+
*/
|
|
6
|
+
import type { Collection } from '../../client/index.iam.js';
|
|
7
|
+
/**
|
|
8
|
+
* 単一レコードを修復
|
|
9
|
+
*
|
|
10
|
+
* @param collection - DynamoClientのコレクション
|
|
11
|
+
* @param recordId - 修復対象のレコードID
|
|
12
|
+
* @param dryRun - ドライランモード(trueの場合は実際の修復は行わない)
|
|
13
|
+
*/
|
|
14
|
+
export declare function repairSingleRecord<TAuthOptions = unknown>(collection: Collection<{
|
|
15
|
+
id: string;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}, TAuthOptions>, recordId: string, dryRun: boolean): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=singleRecordRepair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleRecordRepair.d.ts","sourceRoot":"","sources":["../../../src/scripts/operations/singleRecordRepair.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAO5D;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,GAAG,OAAO,EAC7D,UAAU,EAAE,UAAU,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EAAE,YAAY,CAAC,EAC5E,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { checkShadowIntegrity, repairRecordViaDynamoClient, } from '../utils/repairUtils.js';
|
|
2
|
+
/**
|
|
3
|
+
* 単一レコードを修復
|
|
4
|
+
*
|
|
5
|
+
* @param collection - DynamoClientのコレクション
|
|
6
|
+
* @param recordId - 修復対象のレコードID
|
|
7
|
+
* @param dryRun - ドライランモード(trueの場合は実際の修復は行わない)
|
|
8
|
+
*/
|
|
9
|
+
export async function repairSingleRecord(collection, recordId, dryRun) {
|
|
10
|
+
console.log(`\n=== Checking record: ${recordId} ===`);
|
|
11
|
+
// 本体レコードを取得
|
|
12
|
+
console.log(`Fetching record with id: ${recordId}`);
|
|
13
|
+
const mainRecord = await collection.findOne({ id: recordId });
|
|
14
|
+
console.log(`findOne result:`, mainRecord);
|
|
15
|
+
if (!mainRecord) {
|
|
16
|
+
console.error(`Record not found: ${recordId}`);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// 整合性チェック
|
|
20
|
+
const integrityResult = await checkShadowIntegrity();
|
|
21
|
+
logIntegrityResult(integrityResult);
|
|
22
|
+
if (!integrityResult.needsRepair) {
|
|
23
|
+
console.log('✓ No repair needed');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (dryRun) {
|
|
27
|
+
console.log('\n[DRY RUN] Would repair this record via DynamoClient.updateOne()');
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// DynamoClient経由で修復
|
|
31
|
+
console.log('\nRepairing via DynamoClient.updateOne() with IAM auth...');
|
|
32
|
+
await repairRecordViaDynamoClient(collection, recordId);
|
|
33
|
+
console.log('✓ Repaired successfully');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 整合性チェック結果をログ出力
|
|
37
|
+
*
|
|
38
|
+
* @param result - 整合性チェック結果
|
|
39
|
+
*/
|
|
40
|
+
function logIntegrityResult(result) {
|
|
41
|
+
// Records Lambdaは__shadowKeysをレスポンスから除外するため、
|
|
42
|
+
// 実際のシャドー数は確認できません
|
|
43
|
+
console.log(`Missing shadows: ${result.missingShadows}`);
|
|
44
|
+
console.log(`Extra shadows: ${result.extraShadows}`);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=singleRecordRepair.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleRecordRepair.js","sourceRoot":"","sources":["../../../src/scripts/operations/singleRecordRepair.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,oBAAoB,EACpB,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAA4E,EAC5E,QAAgB,EAChB,MAAe;IAEf,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,MAAM,CAAC,CAAC;IAEtD,YAAY;IACZ,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAE3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,UAAU;IACV,MAAM,eAAe,GAAG,MAAM,oBAAoB,EAAE,CAAC;IACrD,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAEpC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,MAAM,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,MAA6B;IACvD,6CAA6C;IAC7C,mBAAmB;IACnB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -9,179 +9,45 @@
|
|
|
9
9
|
* pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource articles --id C8CD6F0D81B2B030696E300752 --repair
|
|
10
10
|
* pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource articles --repair
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { repairAllRecords } from './operations/bulkRecordRepair.js';
|
|
13
|
+
import { repairSingleRecord } from './operations/singleRecordRepair.js';
|
|
14
|
+
import { getRecordsApiUrl } from './utils/awsUtils.js';
|
|
15
|
+
import { parseRepairScriptArgs, displayScriptConfig } from './utils/cliParser.js';
|
|
16
|
+
import { createDynamoClientCollection } from './utils/clientFactory.js';
|
|
13
17
|
// 環境変数
|
|
14
18
|
const ENV = process.env.ENV || 'dev';
|
|
15
19
|
const REGION = process.env.AWS_REGION || 'us-east-1';
|
|
16
|
-
// Records Lambda Function URLを取得
|
|
17
|
-
let RECORDS_API_URL = process.env.RECORDS_API_URL || '';
|
|
18
20
|
/**
|
|
19
|
-
*
|
|
21
|
+
* メイン処理
|
|
20
22
|
*/
|
|
21
|
-
async function
|
|
22
|
-
if (RECORDS_API_URL) {
|
|
23
|
-
return RECORDS_API_URL;
|
|
24
|
-
}
|
|
25
|
-
// AWS CLIで取得
|
|
26
|
-
const { execSync } = await import('child_process');
|
|
27
|
-
const functionName = `ainews-${ENV}-records`;
|
|
23
|
+
async function main() {
|
|
28
24
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* 本体レコードのシャドーキーと実際のシャドーレコードを比較
|
|
39
|
-
*
|
|
40
|
-
* 注: Records Lambda は __shadowKeys を HTTP レスポンスから除外するため、
|
|
41
|
-
* このスクリプトでは __shadowKeys の有無を確認できません。
|
|
42
|
-
* そのため、すべてのレコードを修復対象とします。
|
|
43
|
-
*/
|
|
44
|
-
async function checkShadowIntegrity() {
|
|
45
|
-
// Records Lambda は __shadowKeys を除外するため、常に修復対象とする
|
|
46
|
-
return {
|
|
47
|
-
needsRepair: true,
|
|
48
|
-
missingShadows: 0,
|
|
49
|
-
extraShadows: 0,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* DynamoClient(IAM認証)を使用してシャドーを再生成
|
|
54
|
-
*/
|
|
55
|
-
async function repairRecordViaDynamoClient(collection, recordId) {
|
|
56
|
-
// updateOneを呼び出すと、Records Lambdaと同じロジックでシャドーレコードが再生成される
|
|
57
|
-
await collection.updateOne({ id: recordId }, { set: { updatedAt: new Date().toISOString() } });
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* 単一レコードを修復
|
|
61
|
-
*/
|
|
62
|
-
async function repairSingleRecord(collection, recordId, dryRun) {
|
|
63
|
-
console.log(`\n=== Checking record: ${recordId} ===`);
|
|
64
|
-
// 本体レコードを取得
|
|
65
|
-
console.log(`Fetching record with id: ${recordId}`);
|
|
66
|
-
const mainRecord = await collection.findOne({ id: recordId });
|
|
67
|
-
console.log(`findOne result:`, mainRecord);
|
|
68
|
-
if (!mainRecord) {
|
|
69
|
-
console.error(`Record not found: ${recordId}`);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
// 整合性チェック
|
|
73
|
-
const { needsRepair, missingShadows, extraShadows } = await checkShadowIntegrity();
|
|
74
|
-
// Records Lambdaは__shadowKeysをレスポンスから除外するため、
|
|
75
|
-
// 実際のシャドー数は確認できません
|
|
76
|
-
console.log(`Missing shadows: ${missingShadows}`);
|
|
77
|
-
console.log(`Extra shadows: ${extraShadows}`);
|
|
78
|
-
if (!needsRepair) {
|
|
79
|
-
console.log('✓ No repair needed');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
if (dryRun) {
|
|
83
|
-
console.log('\n[DRY RUN] Would repair this record via DynamoClient.updateOne()');
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
// DynamoClient経由で修復
|
|
87
|
-
console.log('\nRepairing via DynamoClient.updateOne() with IAM auth...');
|
|
88
|
-
await repairRecordViaDynamoClient(collection, recordId);
|
|
89
|
-
console.log('✓ Repaired successfully');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* 全レコードをスキャンして修復
|
|
93
|
-
*/
|
|
94
|
-
async function repairAllRecords(collection, dryRun) {
|
|
95
|
-
const stats = {
|
|
96
|
-
scanned: 0,
|
|
97
|
-
needsRepair: 0,
|
|
98
|
-
repaired: 0,
|
|
99
|
-
failed: 0,
|
|
100
|
-
errors: [],
|
|
101
|
-
};
|
|
102
|
-
console.log(`\n=== Scanning all records ===`);
|
|
103
|
-
console.log(`Mode: ${dryRun ? 'DRY RUN' : 'REPAIR'}`);
|
|
104
|
-
// 全レコードを取得
|
|
105
|
-
const cursor = collection.find({});
|
|
106
|
-
const records = await cursor.toArray();
|
|
107
|
-
console.log(`Found ${records.length} records`);
|
|
108
|
-
for (const mainRecord of records) {
|
|
109
|
-
stats.scanned++;
|
|
110
|
-
const recordId = mainRecord.id;
|
|
25
|
+
// コマンドライン引数を解析
|
|
26
|
+
const config = parseRepairScriptArgs(process.argv.slice(2));
|
|
27
|
+
// Records Lambda Function URLを取得
|
|
28
|
+
const apiUrl = await getRecordsApiUrl(ENV, REGION);
|
|
29
|
+
// 設定を表示
|
|
30
|
+
displayScriptConfig(config, apiUrl);
|
|
31
|
+
// DynamoClient(IAM認証)を作成
|
|
32
|
+
const { client, collection } = await createDynamoClientCollection(apiUrl, REGION, config.resource);
|
|
111
33
|
try {
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
stats.repaired++;
|
|
119
|
-
console.log(` ✓ Repaired`);
|
|
120
|
-
// レート制限を避けるため少し待機
|
|
121
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
122
|
-
}
|
|
34
|
+
// 修復処理を実行
|
|
35
|
+
if (config.recordId) {
|
|
36
|
+
await repairSingleRecord(collection, config.recordId, !config.repair);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
await repairAllRecords(collection, !config.repair);
|
|
123
40
|
}
|
|
124
41
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
console.error(` ✗ Failed: ${error.message}`);
|
|
42
|
+
finally {
|
|
43
|
+
// クライアントを閉じる
|
|
44
|
+
await client.close();
|
|
129
45
|
}
|
|
130
46
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
console.log(`Scanned: ${stats.scanned}`);
|
|
134
|
-
console.log(`Needs repair: ${stats.needsRepair}`);
|
|
135
|
-
console.log(`Repaired: ${stats.repaired}`);
|
|
136
|
-
console.log(`Failed: ${stats.failed}`);
|
|
137
|
-
if (stats.errors.length > 0) {
|
|
138
|
-
console.log('\nErrors:');
|
|
139
|
-
stats.errors.forEach(({ id, error }) => {
|
|
140
|
-
console.log(` - ${id}: ${error}`);
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* メイン処理
|
|
146
|
-
*/
|
|
147
|
-
async function main() {
|
|
148
|
-
const args = process.argv.slice(2);
|
|
149
|
-
const resourceIndex = args.indexOf('--resource');
|
|
150
|
-
const idIndex = args.indexOf('--id');
|
|
151
|
-
const dryRun = args.includes('--dry-run');
|
|
152
|
-
const repair = args.includes('--repair');
|
|
153
|
-
if (resourceIndex === -1 || !args[resourceIndex + 1]) {
|
|
154
|
-
console.error('Usage: pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource <resource> [--id <id>] [--dry-run|--repair]');
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error('Fatal error:', error);
|
|
155
49
|
process.exit(1);
|
|
156
50
|
}
|
|
157
|
-
const resource = args[resourceIndex + 1];
|
|
158
|
-
const recordId = idIndex !== -1 ? args[idIndex + 1] : undefined;
|
|
159
|
-
// Records Lambda Function URLを取得
|
|
160
|
-
const apiUrl = await getRecordsApiUrl();
|
|
161
|
-
console.log(`Records API: ${apiUrl}`);
|
|
162
|
-
console.log(`Resource: ${resource}`);
|
|
163
|
-
console.log(`Mode: ${dryRun ? 'DRY RUN' : repair ? 'REPAIR' : 'DRY RUN (default)'}`);
|
|
164
|
-
// DynamoClient(IAM認証)を作成
|
|
165
|
-
console.log(`\nCreating DynamoClient with IAM auth...`);
|
|
166
|
-
console.log(`Region: ${REGION}`);
|
|
167
|
-
console.log(`Endpoint: ${apiUrl}`);
|
|
168
|
-
const client = new DynamoClient(apiUrl, {
|
|
169
|
-
auth: {
|
|
170
|
-
region: REGION,
|
|
171
|
-
},
|
|
172
|
-
autoConnect: true,
|
|
173
|
-
});
|
|
174
|
-
console.log(`Client connected: ${client.isConnected()}\n`);
|
|
175
|
-
const collection = client
|
|
176
|
-
.db()
|
|
177
|
-
.collection(resource);
|
|
178
|
-
if (recordId) {
|
|
179
|
-
await repairSingleRecord(collection, recordId, !repair);
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
await repairAllRecords(collection, !repair);
|
|
183
|
-
}
|
|
184
|
-
await client.close();
|
|
185
51
|
}
|
|
186
52
|
main().catch((error) => {
|
|
187
53
|
console.error('Fatal error:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repair-shadows.js","sourceRoot":"","sources":["../../src/scripts/repair-shadows.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"repair-shadows.js","sourceRoot":"","sources":["../../src/scripts/repair-shadows.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO;AACP,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC;AACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC;AAErD;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,eAAe;QACf,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEnD,QAAQ;QACR,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEpC,yBAAyB;QACzB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,4BAA4B,CAC/D,MAAM,EACN,MAAM,EACN,MAAM,CAAC,QAAQ,CAChB,CAAC;QAEF,IAAI,CAAC;YACH,UAAU;YACV,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,aAAa;YACb,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS関連ユーティリティ
|
|
3
|
+
*
|
|
4
|
+
* AWS CLIやAWSサービスとの連携処理
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Records Lambda Function URLを取得
|
|
8
|
+
*
|
|
9
|
+
* @param env - 環境名
|
|
10
|
+
* @param region - AWSリージョン
|
|
11
|
+
* @returns Function URL
|
|
12
|
+
* @throws {Error} Function URLの取得に失敗した場合
|
|
13
|
+
*/
|
|
14
|
+
export declare function getRecordsApiUrl(env: string, region: string): Promise<string>;
|
|
15
|
+
//# sourceMappingURL=awsUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awsUtils.d.ts","sourceRoot":"","sources":["../../../src/scripts/utils/awsUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBnF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS関連ユーティリティ
|
|
3
|
+
*
|
|
4
|
+
* AWS CLIやAWSサービスとの連携処理
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Records Lambda Function URLを取得
|
|
8
|
+
*
|
|
9
|
+
* @param env - 環境名
|
|
10
|
+
* @param region - AWSリージョン
|
|
11
|
+
* @returns Function URL
|
|
12
|
+
* @throws {Error} Function URLの取得に失敗した場合
|
|
13
|
+
*/
|
|
14
|
+
export async function getRecordsApiUrl(env, region) {
|
|
15
|
+
// 環境変数から取得を試行
|
|
16
|
+
const envUrl = process.env.RECORDS_API_URL;
|
|
17
|
+
if (envUrl) {
|
|
18
|
+
return envUrl;
|
|
19
|
+
}
|
|
20
|
+
// AWS CLIで取得
|
|
21
|
+
const { execSync } = await import('child_process');
|
|
22
|
+
const functionName = `ainews-${env}-records`;
|
|
23
|
+
try {
|
|
24
|
+
const output = execSync(`aws lambda get-function-url-config --function-name ${functionName} --region ${region} --query 'FunctionUrl' --output text`, { encoding: 'utf-8' });
|
|
25
|
+
return output.trim();
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
throw new Error(`Failed to get Function URL for ${functionName}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=awsUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awsUtils.js","sourceRoot":"","sources":["../../../src/scripts/utils/awsUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAc;IAChE,cAAc;IACd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa;IACb,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CACrB,sDAAsD,YAAY,aAAa,MAAM,sCAAsC,EAC3H,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|