@exabugs/dynamodb-client 1.26.0 → 1.27.1
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 +45 -0
- package/dist/__generated__/models/apiOperation.d.ts +1 -0
- package/dist/__generated__/models/apiOperation.d.ts.map +1 -1
- package/dist/__generated__/models/apiOperation.js +1 -0
- package/dist/__generated__/models/apiOperation.js.map +1 -1
- package/dist/__generated__/models/bulkOperationResult.d.ts +2 -0
- package/dist/__generated__/models/bulkOperationResult.d.ts.map +1 -1
- package/dist/__generated__/models/countParams.d.ts +31 -0
- package/dist/__generated__/models/countParams.d.ts.map +1 -0
- package/dist/__generated__/models/countParams.js +2 -0
- package/dist/__generated__/models/countParams.js.map +1 -0
- package/dist/__generated__/models/countResult.d.ts +37 -0
- package/dist/__generated__/models/countResult.d.ts.map +1 -0
- package/dist/__generated__/models/countResult.js +2 -0
- package/dist/__generated__/models/countResult.js.map +1 -0
- package/dist/__generated__/models/countResultConsumedCapacity.d.ts +35 -0
- package/dist/__generated__/models/countResultConsumedCapacity.d.ts.map +1 -0
- package/dist/__generated__/models/countResultConsumedCapacity.js +25 -0
- package/dist/__generated__/models/countResultConsumedCapacity.js.map +1 -0
- package/dist/__generated__/models/executeOperationBodyOp.d.ts +1 -0
- package/dist/__generated__/models/executeOperationBodyOp.d.ts.map +1 -1
- package/dist/__generated__/models/executeOperationBodyOp.js +1 -0
- package/dist/__generated__/models/executeOperationBodyOp.js.map +1 -1
- package/dist/__generated__/models/findResultPageInfo.d.ts +2 -0
- package/dist/__generated__/models/findResultPageInfo.d.ts.map +1 -1
- package/dist/__generated__/models/index.d.ts +3 -0
- package/dist/__generated__/models/index.d.ts.map +1 -1
- package/dist/__generated__/models/index.js +3 -0
- package/dist/__generated__/models/index.js.map +1 -1
- package/dist/client/Collection.d.ts +7 -0
- package/dist/client/Collection.d.ts.map +1 -1
- package/dist/client/Collection.js +20 -1
- package/dist/client/Collection.js.map +1 -1
- package/dist/scripts/repair-shadows.js +86 -42
- package/dist/scripts/repair-shadows.js.map +1 -1
- package/dist/scripts/utils/cliParser.d.ts +9 -22
- package/dist/scripts/utils/cliParser.d.ts.map +1 -1
- package/dist/scripts/utils/cliParser.js +14 -37
- package/dist/scripts/utils/cliParser.js.map +1 -1
- package/dist/scripts/utils/shadowAudit.d.ts +49 -0
- package/dist/scripts/utils/shadowAudit.d.ts.map +1 -0
- package/dist/scripts/utils/shadowAudit.js +84 -0
- package/dist/scripts/utils/shadowAudit.js.map +1 -0
- package/dist/scripts/utils/shadowRepair.d.ts +42 -0
- package/dist/scripts/utils/shadowRepair.d.ts.map +1 -0
- package/dist/scripts/utils/shadowRepair.js +110 -0
- package/dist/scripts/utils/shadowRepair.js.map +1 -0
- package/dist/server/handler.cjs +1237 -1122
- package/dist/server/handler.cjs.map +4 -4
- package/dist/server/handler.js +2 -2
- package/dist/server/handler.js.map +1 -1
- package/dist/server/media-handler.cjs +2 -2
- package/dist/server/media-process-handler-dlq.cjs +19 -3
- package/dist/server/media-process-handler-dlq.cjs.map +2 -2
- package/dist/server/media-process-handler.cjs +19 -3
- package/dist/server/media-process-handler.cjs.map +2 -2
- package/dist/server/operations/count.d.ts +3 -0
- package/dist/server/operations/count.d.ts.map +1 -0
- package/dist/server/operations/count.js +81 -0
- package/dist/server/operations/count.js.map +1 -0
- package/dist/server/operations/deleteMany.d.ts.map +1 -1
- package/dist/server/operations/deleteMany.js +2 -1
- package/dist/server/operations/deleteMany.js.map +1 -1
- package/dist/server/operations/deleteOne.d.ts.map +1 -1
- package/dist/server/operations/deleteOne.js +3 -12
- package/dist/server/operations/deleteOne.js.map +1 -1
- package/dist/server/operations/find/handler.d.ts.map +1 -1
- package/dist/server/operations/find/handler.js +4 -1
- package/dist/server/operations/find/handler.js.map +1 -1
- package/dist/server/operations/find/keyCondition.d.ts +38 -0
- package/dist/server/operations/find/keyCondition.d.ts.map +1 -0
- package/dist/server/operations/find/keyCondition.js +184 -0
- package/dist/server/operations/find/keyCondition.js.map +1 -0
- package/dist/server/operations/find/nearQuery.d.ts +4 -1
- package/dist/server/operations/find/nearQuery.d.ts.map +1 -1
- package/dist/server/operations/find/nearQuery.js +30 -42
- package/dist/server/operations/find/nearQuery.js.map +1 -1
- package/dist/server/operations/find/shadowQuery.d.ts.map +1 -1
- package/dist/server/operations/find/shadowQuery.js +16 -143
- package/dist/server/operations/find/shadowQuery.js.map +1 -1
- package/dist/server/operations/find/utils.d.ts.map +1 -1
- package/dist/server/operations/find/utils.js +0 -5
- package/dist/server/operations/find/utils.js.map +1 -1
- package/dist/server/operations/insertMany.d.ts.map +1 -1
- package/dist/server/operations/insertMany.js +1 -4
- package/dist/server/operations/insertMany.js.map +1 -1
- package/dist/server/operations/insertOne.d.ts.map +1 -1
- package/dist/server/operations/insertOne.js +2 -6
- package/dist/server/operations/insertOne.js.map +1 -1
- package/dist/server/operations/operationDispatcher.d.ts.map +1 -1
- package/dist/server/operations/operationDispatcher.js +3 -0
- package/dist/server/operations/operationDispatcher.js.map +1 -1
- package/dist/server/operations/updateMany.d.ts.map +1 -1
- package/dist/server/operations/updateMany.js +23 -17
- package/dist/server/operations/updateMany.js.map +1 -1
- package/dist/server/operations/updateOne.d.ts.map +1 -1
- package/dist/server/operations/updateOne.js +10 -21
- package/dist/server/operations/updateOne.js.map +1 -1
- package/dist/server/query/nearSearch.d.ts +37 -25
- package/dist/server/query/nearSearch.d.ts.map +1 -1
- package/dist/server/query/nearSearch.js +87 -125
- package/dist/server/query/nearSearch.js.map +1 -1
- package/dist/server/types.d.ts +7 -1
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/utils/bulkError.d.ts +12 -0
- package/dist/server/utils/bulkError.d.ts.map +1 -0
- package/dist/server/utils/bulkError.js +21 -0
- package/dist/server/utils/bulkError.js.map +1 -0
- package/dist/server/utils/chunking.d.ts +9 -1
- package/dist/server/utils/chunking.d.ts.map +1 -1
- package/dist/server/utils/chunking.js +20 -3
- package/dist/server/utils/chunking.js.map +1 -1
- package/dist/server/utils/filter.d.ts +3 -105
- package/dist/server/utils/filter.d.ts.map +1 -1
- package/dist/server/utils/filter.js +14 -218
- package/dist/server/utils/filter.js.map +1 -1
- package/dist/server/utils/updateOperators.d.ts +12 -1
- package/dist/server/utils/updateOperators.d.ts.map +1 -1
- package/dist/server/utils/updateOperators.js +53 -6
- package/dist/server/utils/updateOperators.js.map +1 -1
- package/docs/README.md +9 -12
- package/package.json +1 -1
- package/dist/scripts/operations/bulkRecordRepair.d.ts +0 -17
- package/dist/scripts/operations/bulkRecordRepair.d.ts.map +0 -1
- package/dist/scripts/operations/bulkRecordRepair.js +0 -76
- package/dist/scripts/operations/bulkRecordRepair.js.map +0 -1
- package/dist/scripts/operations/singleRecordRepair.d.ts +0 -18
- package/dist/scripts/operations/singleRecordRepair.d.ts.map +0 -1
- package/dist/scripts/operations/singleRecordRepair.js +0 -46
- package/dist/scripts/operations/singleRecordRepair.js.map +0 -1
- package/dist/scripts/utils/awsUtils.d.ts +0 -15
- package/dist/scripts/utils/awsUtils.d.ts.map +0 -1
- package/dist/scripts/utils/awsUtils.js +0 -31
- package/dist/scripts/utils/awsUtils.js.map +0 -1
- package/dist/scripts/utils/clientFactory.d.ts +0 -22
- package/dist/scripts/utils/clientFactory.d.ts.map +0 -1
- package/dist/scripts/utils/clientFactory.js +0 -36
- package/dist/scripts/utils/clientFactory.js.map +0 -1
- package/dist/scripts/utils/repairUtils.d.ts +0 -58
- package/dist/scripts/utils/repairUtils.d.ts.map +0 -1
- package/dist/scripts/utils/repairUtils.js +0 -52
- package/dist/scripts/utils/repairUtils.js.map +0 -1
- package/dist/server/utils/ttl.d.ts +0 -17
- package/dist/server/utils/ttl.d.ts.map +0 -1
- package/dist/server/utils/ttl.js +0 -64
- package/dist/server/utils/ttl.js.map +0 -1
|
@@ -1,76 +0,0 @@
|
|
|
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
|
-
// 修復中にレコードが更新されても取りこぼし・重複が出ないよう、不変の id 順で列挙する
|
|
36
|
-
return await collection.find({}).sort({ id: 'asc' }).toArrayAll();
|
|
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
|
-
/**
|
|
65
|
-
* NOTE: スクリプトでのエラーハンドリング
|
|
66
|
-
*
|
|
67
|
-
* このスクリプトはメンテナンス用のツールであり、本番コードではありません。
|
|
68
|
-
* エラーメッセージの取得のために unknown 型から Error 型への変換を行っています。
|
|
69
|
-
*/
|
|
70
|
-
stats.failed++;
|
|
71
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
72
|
-
stats.errors.push({ id: recordId, error: errorMessage });
|
|
73
|
-
console.error(` ✗ Failed: ${errorMessage}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=bulkRecordRepair.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bulkRecordRepair.js","sourceRoot":"","sources":["../../../src/scripts/operations/bulkRecordRepair.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,gBAAgB,GACjB,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,8CAA8C;IAC9C,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AACpE,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,KAAc,EAAE,CAAC;QACxB;;;;;WAKG;QACH,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,KAAK,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"singleRecordRepair.js","sourceRoot":"","sources":["../../../src/scripts/operations/singleRecordRepair.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,oBAAoB,EACpB,2BAA2B,GAC5B,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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DynamoClientファクトリー
|
|
3
|
-
*
|
|
4
|
-
* DynamoClientの初期化処理
|
|
5
|
-
*/
|
|
6
|
-
import { type Collection, 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 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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clientFactory.d.ts","sourceRoot":"","sources":["../../../src/scripts/utils/clientFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,UAAU,EAAE,YAAY,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,CAwBD"}
|
|
@@ -1,36 +0,0 @@
|
|
|
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.db().collection(resource);
|
|
27
|
-
/**
|
|
28
|
-
* NOTE: テストユーティリティでの型アサーション
|
|
29
|
-
*
|
|
30
|
-
* このファイルはテスト・スクリプト用のユーティリティであり、本番コードではありません。
|
|
31
|
-
* Collection型の柔軟性を保つため、型アサーションを使用しています。
|
|
32
|
-
*/
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
-
return { client, collection: collection };
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=clientFactory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clientFactory.js","sourceRoot":"","sources":["../../../src/scripts/utils/clientFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAmB,YAAY,EAAE,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,CAAC,EAAE,EAAE,CAAC,UAAU,CAAyC,QAAQ,CAAC,CAAC;IAE5F;;;;;OAKG;IACH,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAiB,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,52 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAClG,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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TTLを計算する
|
|
3
|
-
*
|
|
4
|
-
* @param resource - リソース名
|
|
5
|
-
* @param createdAt - 作成日時(ISO 8601形式)
|
|
6
|
-
* @returns TTL(Unix timestamp、秒単位)、TTL不要の場合はundefined
|
|
7
|
-
*/
|
|
8
|
-
export declare function calculateTTL(resource: string, createdAt: string): number | undefined;
|
|
9
|
-
/**
|
|
10
|
-
* レコードデータにTTLを追加する
|
|
11
|
-
*
|
|
12
|
-
* @param resource - リソース名
|
|
13
|
-
* @param recordData - レコードデータ
|
|
14
|
-
* @returns TTLが追加されたレコードデータ
|
|
15
|
-
*/
|
|
16
|
-
export declare function addTTL(resource: string, recordData: Record<string, unknown>): Record<string, unknown>;
|
|
17
|
-
//# sourceMappingURL=ttl.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ttl.d.ts","sourceRoot":"","sources":["../../../src/server/utils/ttl.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA+BpF;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
|
package/dist/server/utils/ttl.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TTL(Time To Live)ユーティリティ
|
|
3
|
-
* DynamoDB TTL設定を管理
|
|
4
|
-
*/
|
|
5
|
-
import { createLogger } from '../../index.js';
|
|
6
|
-
const logger = createLogger({ service: 'records-lambda' });
|
|
7
|
-
/**
|
|
8
|
-
* TTLを計算する
|
|
9
|
-
*
|
|
10
|
-
* @param resource - リソース名
|
|
11
|
-
* @param createdAt - 作成日時(ISO 8601形式)
|
|
12
|
-
* @returns TTL(Unix timestamp、秒単位)、TTL不要の場合はundefined
|
|
13
|
-
*/
|
|
14
|
-
export function calculateTTL(resource, createdAt) {
|
|
15
|
-
// 新しい実装: 環境変数ベースのTTL設定
|
|
16
|
-
// 環境変数から取得(例: ARTICLES_TTL_DAYS=30)
|
|
17
|
-
const envKey = `${resource.toUpperCase()}_TTL_DAYS`;
|
|
18
|
-
const ttlDaysStr = process.env[envKey];
|
|
19
|
-
if (!ttlDaysStr) {
|
|
20
|
-
// TTL設定がないリソースはundefinedを返す
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
const ttlDays = parseInt(ttlDaysStr, 10);
|
|
24
|
-
if (isNaN(ttlDays) || ttlDays <= 0) {
|
|
25
|
-
logger.warn('Invalid TTL_DAYS value', { resource, envKey, value: ttlDaysStr });
|
|
26
|
-
return undefined;
|
|
27
|
-
}
|
|
28
|
-
// 作成日時からTTLを計算
|
|
29
|
-
const createdAtMs = new Date(createdAt).getTime();
|
|
30
|
-
const ttlMs = createdAtMs + ttlDays * 24 * 60 * 60 * 1000;
|
|
31
|
-
const ttl = Math.floor(ttlMs / 1000);
|
|
32
|
-
logger.debug('TTL calculated', {
|
|
33
|
-
resource,
|
|
34
|
-
ttlDays,
|
|
35
|
-
createdAt,
|
|
36
|
-
ttl,
|
|
37
|
-
ttlDate: new Date(ttl * 1000).toISOString(),
|
|
38
|
-
});
|
|
39
|
-
return ttl;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* レコードデータにTTLを追加する
|
|
43
|
-
*
|
|
44
|
-
* @param resource - リソース名
|
|
45
|
-
* @param recordData - レコードデータ
|
|
46
|
-
* @returns TTLが追加されたレコードデータ
|
|
47
|
-
*/
|
|
48
|
-
export function addTTL(resource, recordData) {
|
|
49
|
-
const createdAt = recordData.createdAt;
|
|
50
|
-
if (!createdAt) {
|
|
51
|
-
logger.warn('createdAt not found, skipping TTL calculation', { resource });
|
|
52
|
-
return recordData;
|
|
53
|
-
}
|
|
54
|
-
const ttl = calculateTTL(resource, createdAt);
|
|
55
|
-
if (ttl === undefined) {
|
|
56
|
-
// TTL不要のリソース
|
|
57
|
-
return recordData;
|
|
58
|
-
}
|
|
59
|
-
return {
|
|
60
|
-
...recordData,
|
|
61
|
-
ttl,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=ttl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ttl.js","sourceRoot":"","sources":["../../../src/server/utils/ttl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,SAAiB;IAC9D,uBAAuB;IACvB,oCAAoC;IACpC,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,4BAA4B;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,eAAe;IACf,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,WAAW,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAErC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;QAC7B,QAAQ;QACR,OAAO;QACP,SAAS;QACT,GAAG;QACH,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;KAC5C,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,QAAgB,EAChB,UAAmC;IAEnC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAmB,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,aAAa;QACb,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO;QACL,GAAG,UAAU;QACb,GAAG;KACJ,CAAC;AACJ,CAAC"}
|