@exabugs/dynamodb-client 0.4.0 → 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.
Files changed (97) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/client/Collection.d.ts +0 -5
  3. package/dist/client/Collection.d.ts.map +1 -1
  4. package/dist/client/Collection.js +7 -1
  5. package/dist/client/Collection.js.map +1 -1
  6. package/dist/client/DynamoClient.d.ts +1 -1
  7. package/dist/client/DynamoClient.d.ts.map +1 -1
  8. package/dist/client/FindCursor.d.ts.map +1 -1
  9. package/dist/client/FindCursor.js +2 -1
  10. package/dist/client/FindCursor.js.map +1 -1
  11. package/dist/scripts/operations/bulkRecordRepair.d.ts +17 -0
  12. package/dist/scripts/operations/bulkRecordRepair.d.ts.map +1 -0
  13. package/dist/scripts/operations/bulkRecordRepair.js +69 -0
  14. package/dist/scripts/operations/bulkRecordRepair.js.map +1 -0
  15. package/dist/scripts/operations/singleRecordRepair.d.ts +18 -0
  16. package/dist/scripts/operations/singleRecordRepair.d.ts.map +1 -0
  17. package/dist/scripts/operations/singleRecordRepair.js +46 -0
  18. package/dist/scripts/operations/singleRecordRepair.js.map +1 -0
  19. package/dist/scripts/repair-shadows.js +26 -160
  20. package/dist/scripts/repair-shadows.js.map +1 -1
  21. package/dist/scripts/utils/awsUtils.d.ts +15 -0
  22. package/dist/scripts/utils/awsUtils.d.ts.map +1 -0
  23. package/dist/scripts/utils/awsUtils.js +31 -0
  24. package/dist/scripts/utils/awsUtils.js.map +1 -0
  25. package/dist/scripts/utils/cliParser.d.ts +30 -0
  26. package/dist/scripts/utils/cliParser.d.ts.map +1 -0
  27. package/dist/scripts/utils/cliParser.js +44 -0
  28. package/dist/scripts/utils/cliParser.js.map +1 -0
  29. package/dist/scripts/utils/clientFactory.d.ts +22 -0
  30. package/dist/scripts/utils/clientFactory.d.ts.map +1 -0
  31. package/dist/scripts/utils/clientFactory.js +31 -0
  32. package/dist/scripts/utils/clientFactory.js.map +1 -0
  33. package/dist/scripts/utils/repairUtils.d.ts +58 -0
  34. package/dist/scripts/utils/repairUtils.d.ts.map +1 -0
  35. package/dist/scripts/utils/repairUtils.js +52 -0
  36. package/dist/scripts/utils/repairUtils.js.map +1 -0
  37. package/dist/server/handler.cjs +2093 -931
  38. package/dist/server/handler.cjs.map +4 -4
  39. package/dist/server/handler.d.ts +3 -3
  40. package/dist/server/handler.d.ts.map +1 -1
  41. package/dist/server/handler.js +16 -373
  42. package/dist/server/handler.js.map +1 -1
  43. package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
  44. package/dist/server/operations/find/shadowQuery.js +2 -1
  45. package/dist/server/operations/find/shadowQuery.js.map +1 -1
  46. package/dist/server/operations/find/utils.js.map +1 -1
  47. package/dist/server/operations/insertMany.js +2 -2
  48. package/dist/server/operations/insertMany.js.map +1 -1
  49. package/dist/server/operations/operationDispatcher.d.ts +10 -0
  50. package/dist/server/operations/operationDispatcher.d.ts.map +1 -0
  51. package/dist/server/operations/operationDispatcher.js +84 -0
  52. package/dist/server/operations/operationDispatcher.js.map +1 -0
  53. package/dist/server/operations/parameterConverter.d.ts +117 -0
  54. package/dist/server/operations/parameterConverter.d.ts.map +1 -0
  55. package/dist/server/operations/parameterConverter.js +155 -0
  56. package/dist/server/operations/parameterConverter.js.map +1 -0
  57. package/dist/server/operations/updateMany.js +2 -2
  58. package/dist/server/operations/updateMany.js.map +1 -1
  59. package/dist/server/utils/authHandler.d.ts +16 -0
  60. package/dist/server/utils/authHandler.d.ts.map +1 -0
  61. package/dist/server/utils/authHandler.js +85 -0
  62. package/dist/server/utils/authHandler.js.map +1 -0
  63. package/dist/server/utils/errorHandler.d.ts +15 -0
  64. package/dist/server/utils/errorHandler.d.ts.map +1 -0
  65. package/dist/server/utils/errorHandler.js +61 -0
  66. package/dist/server/utils/errorHandler.js.map +1 -0
  67. package/dist/server/utils/pagination.d.ts.map +1 -1
  68. package/dist/server/utils/pagination.js +2 -1
  69. package/dist/server/utils/pagination.js.map +1 -1
  70. package/dist/server/utils/requestParser.d.ts +10 -0
  71. package/dist/server/utils/requestParser.d.ts.map +1 -0
  72. package/dist/server/utils/requestParser.js +45 -0
  73. package/dist/server/utils/requestParser.js.map +1 -0
  74. package/dist/server/utils/responseBuilder.d.ts +33 -0
  75. package/dist/server/utils/responseBuilder.d.ts.map +1 -0
  76. package/dist/server/utils/responseBuilder.js +85 -0
  77. package/dist/server/utils/responseBuilder.js.map +1 -0
  78. package/dist/shadows/generator.d.ts.map +1 -1
  79. package/dist/shadows/generator.js +2 -1
  80. package/dist/shadows/generator.js.map +1 -1
  81. package/dist/shared/constants/formatting.d.ts +15 -0
  82. package/dist/shared/constants/formatting.d.ts.map +1 -0
  83. package/dist/shared/constants/formatting.js +15 -0
  84. package/dist/shared/constants/formatting.js.map +1 -0
  85. package/dist/shared/constants/http.d.ts +10 -24
  86. package/dist/shared/constants/http.d.ts.map +1 -1
  87. package/dist/shared/constants/http.js +10 -24
  88. package/dist/shared/constants/http.js.map +1 -1
  89. package/dist/shared/constants/validation.d.ts +22 -0
  90. package/dist/shared/constants/validation.d.ts.map +1 -0
  91. package/dist/shared/constants/validation.js +29 -0
  92. package/dist/shared/constants/validation.js.map +1 -0
  93. package/dist/shared/errors/index.d.ts +11 -1
  94. package/dist/shared/errors/index.d.ts.map +1 -1
  95. package/dist/shared/errors/index.js +10 -0
  96. package/dist/shared/errors/index.js.map +1 -1
  97. package/package.json +2 -5
@@ -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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * コマンドライン引数解析ユーティリティ
3
+ *
4
+ * スクリプトのコマンドライン引数を解析する
5
+ */
6
+ /**
7
+ * 修復スクリプトの設定
8
+ */
9
+ export interface RepairScriptConfig {
10
+ resource: string;
11
+ recordId?: string;
12
+ dryRun: boolean;
13
+ repair: boolean;
14
+ }
15
+ /**
16
+ * コマンドライン引数を解析する
17
+ *
18
+ * @param args - process.argv.slice(2)の結果
19
+ * @returns 解析された設定
20
+ * @throws {Error} 必須引数が不足している場合
21
+ */
22
+ export declare function parseRepairScriptArgs(args: string[]): RepairScriptConfig;
23
+ /**
24
+ * スクリプト設定を表示する
25
+ *
26
+ * @param config - スクリプト設定
27
+ * @param apiUrl - Records API URL
28
+ */
29
+ export declare function displayScriptConfig(config: RepairScriptConfig, apiUrl: string): void;
30
+ //# sourceMappingURL=cliParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliParser.d.ts","sourceRoot":"","sources":["../../../src/scripts/utils/cliParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAqBxE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQpF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * コマンドライン引数解析ユーティリティ
3
+ *
4
+ * スクリプトのコマンドライン引数を解析する
5
+ */
6
+ /**
7
+ * コマンドライン引数を解析する
8
+ *
9
+ * @param args - process.argv.slice(2)の結果
10
+ * @returns 解析された設定
11
+ * @throws {Error} 必須引数が不足している場合
12
+ */
13
+ export function parseRepairScriptArgs(args) {
14
+ const resourceIndex = args.indexOf('--resource');
15
+ const idIndex = args.indexOf('--id');
16
+ const dryRun = args.includes('--dry-run');
17
+ const repair = args.includes('--repair');
18
+ if (resourceIndex === -1 || !args[resourceIndex + 1]) {
19
+ throw new Error('Usage: pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource <resource> [--id <id>] [--dry-run|--repair]');
20
+ }
21
+ const resource = args[resourceIndex + 1];
22
+ const recordId = idIndex !== -1 ? args[idIndex + 1] : undefined;
23
+ return {
24
+ resource,
25
+ recordId,
26
+ dryRun,
27
+ repair,
28
+ };
29
+ }
30
+ /**
31
+ * スクリプト設定を表示する
32
+ *
33
+ * @param config - スクリプト設定
34
+ * @param apiUrl - Records API URL
35
+ */
36
+ export function displayScriptConfig(config, apiUrl) {
37
+ console.log(`Records API: ${apiUrl}`);
38
+ console.log(`Resource: ${config.resource}`);
39
+ console.log(`Mode: ${config.dryRun ? 'DRY RUN' : config.repair ? 'REPAIR' : 'DRY RUN (default)'}`);
40
+ if (config.recordId) {
41
+ console.log(`Target Record ID: ${config.recordId}`);
42
+ }
43
+ }
44
+ //# sourceMappingURL=cliParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliParser.js","sourceRoot":"","sources":["../../../src/scripts/utils/cliParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,oIAAoI,CACrI,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0B,EAAE,MAAc;IAC5E,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEnG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * DynamoClientファクトリー
3
+ *
4
+ * DynamoClientの初期化処理
5
+ */
6
+ import { DynamoClient, type Collection } from '../../client/index.iam.js';
7
+ /**
8
+ * DynamoClient(IAM認証)を作成・初期化する
9
+ *
10
+ * @param apiUrl - Records API URL
11
+ * @param region - AWSリージョン
12
+ * @param resource - リソース名
13
+ * @returns 初期化されたコレクション
14
+ */
15
+ export declare function createDynamoClientCollection(apiUrl: string, region: string, resource: string): Promise<{
16
+ client: DynamoClient;
17
+ collection: Collection<{
18
+ id: string;
19
+ [key: string]: unknown;
20
+ }>;
21
+ }>;
22
+ //# sourceMappingURL=clientFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientFactory.d.ts","sourceRoot":"","sources":["../../../src/scripts/utils/clientFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;CAChE,CAAC,CAmBD"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * DynamoClientファクトリー
3
+ *
4
+ * DynamoClientの初期化処理
5
+ */
6
+ import { DynamoClient } from '../../client/index.iam.js';
7
+ /**
8
+ * DynamoClient(IAM認証)を作成・初期化する
9
+ *
10
+ * @param apiUrl - Records API URL
11
+ * @param region - AWSリージョン
12
+ * @param resource - リソース名
13
+ * @returns 初期化されたコレクション
14
+ */
15
+ export async function createDynamoClientCollection(apiUrl, region, resource) {
16
+ console.log(`\nCreating DynamoClient with IAM auth...`);
17
+ console.log(`Region: ${region}`);
18
+ console.log(`Endpoint: ${apiUrl}`);
19
+ const client = new DynamoClient(apiUrl, {
20
+ auth: {
21
+ region: region,
22
+ },
23
+ autoConnect: true,
24
+ });
25
+ console.log(`Client connected: ${client.isConnected()}\n`);
26
+ const collection = client
27
+ .db()
28
+ .collection(resource);
29
+ return { client, collection: collection };
30
+ }
31
+ //# sourceMappingURL=clientFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientFactory.js","sourceRoot":"","sources":["../../../src/scripts/utils/clientFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAmB,MAAM,2BAA2B,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAc,EACd,MAAc,EACd,QAAgB;IAKhB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE;QACtC,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;SACf;QACD,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,MAAM;SACtB,EAAE,EAAE;SACJ,UAAU,CAAyC,QAAQ,CAAC,CAAC;IAEhE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAiB,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * シャドーレコード修復ユーティリティ
3
+ *
4
+ * 修復処理で使用する共通ロジック
5
+ */
6
+ import type { Collection } from '../../client/index.iam.js';
7
+ /**
8
+ * 修復統計情報
9
+ */
10
+ export interface RepairStats {
11
+ scanned: number;
12
+ needsRepair: number;
13
+ repaired: number;
14
+ failed: number;
15
+ errors: Array<{
16
+ id: string;
17
+ error: string;
18
+ }>;
19
+ }
20
+ /**
21
+ * シャドー整合性チェック結果
22
+ */
23
+ export interface ShadowIntegrityResult {
24
+ needsRepair: boolean;
25
+ missingShadows: number;
26
+ extraShadows: number;
27
+ }
28
+ /**
29
+ * 本体レコードのシャドーキーと実際のシャドーレコードを比較
30
+ *
31
+ * 注: Records Lambdaは__shadowKeysをHTTPレスポンスから除外するため、
32
+ * このスクリプトでは__shadowKeysの有無を確認できません。
33
+ * そのため、すべてのレコードを修復対象とします。
34
+ */
35
+ export declare function checkShadowIntegrity(): Promise<ShadowIntegrityResult>;
36
+ /**
37
+ * DynamoClient(IAM認証)を使用してシャドーを再生成
38
+ *
39
+ * @param collection - DynamoClientのコレクション
40
+ * @param recordId - レコードID
41
+ */
42
+ export declare function repairRecordViaDynamoClient<TAuthOptions = unknown>(collection: Collection<{
43
+ id: string;
44
+ [key: string]: unknown;
45
+ }, TAuthOptions>, recordId: string): Promise<void>;
46
+ /**
47
+ * 修復統計情報を表示する
48
+ *
49
+ * @param stats - 修復統計情報
50
+ */
51
+ export declare function displayRepairSummary(stats: RepairStats): void;
52
+ /**
53
+ * レート制限を避けるための待機
54
+ *
55
+ * @param ms - 待機時間(ミリ秒)
56
+ */
57
+ export declare function waitForRateLimit(ms?: number): Promise<void>;
58
+ //# sourceMappingURL=repairUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repairUtils.d.ts","sourceRoot":"","sources":["../../../src/scripts/utils/repairUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAO3E;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAAC,YAAY,GAAG,OAAO,EACtE,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,GACf,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAa7D;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 本体レコードのシャドーキーと実際のシャドーレコードを比較
3
+ *
4
+ * 注: Records Lambdaは__shadowKeysをHTTPレスポンスから除外するため、
5
+ * このスクリプトでは__shadowKeysの有無を確認できません。
6
+ * そのため、すべてのレコードを修復対象とします。
7
+ */
8
+ export async function checkShadowIntegrity() {
9
+ // Records Lambdaは__shadowKeysを除外するため、常に修復対象とする
10
+ return {
11
+ needsRepair: true,
12
+ missingShadows: 0,
13
+ extraShadows: 0,
14
+ };
15
+ }
16
+ /**
17
+ * DynamoClient(IAM認証)を使用してシャドーを再生成
18
+ *
19
+ * @param collection - DynamoClientのコレクション
20
+ * @param recordId - レコードID
21
+ */
22
+ export async function repairRecordViaDynamoClient(collection, recordId) {
23
+ // updateOneを呼び出すと、Records Lambdaと同じロジックでシャドーレコードが再生成される
24
+ await collection.updateOne({ id: recordId }, { set: { updatedAt: new Date().toISOString() } });
25
+ }
26
+ /**
27
+ * 修復統計情報を表示する
28
+ *
29
+ * @param stats - 修復統計情報
30
+ */
31
+ export function displayRepairSummary(stats) {
32
+ console.log('\n=== Repair Summary ===');
33
+ console.log(`Scanned: ${stats.scanned}`);
34
+ console.log(`Needs repair: ${stats.needsRepair}`);
35
+ console.log(`Repaired: ${stats.repaired}`);
36
+ console.log(`Failed: ${stats.failed}`);
37
+ if (stats.errors.length > 0) {
38
+ console.log('\nErrors:');
39
+ stats.errors.forEach(({ id, error }) => {
40
+ console.log(` - ${id}: ${error}`);
41
+ });
42
+ }
43
+ }
44
+ /**
45
+ * レート制限を避けるための待機
46
+ *
47
+ * @param ms - 待機時間(ミリ秒)
48
+ */
49
+ export async function waitForRateLimit(ms = 100) {
50
+ await new Promise((resolve) => setTimeout(resolve, ms));
51
+ }
52
+ //# sourceMappingURL=repairUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repairUtils.js","sourceRoot":"","sources":["../../../src/scripts/utils/repairUtils.ts"],"names":[],"mappings":"AA2BA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,+CAA+C;IAC/C,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;KAChB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAA4E,EAC5E,QAAgB;IAEhB,wDAAwD;IACxD,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAa,GAAG;IACrD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}