@exabugs/dynamodb-client 0.1.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 (230) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.md +283 -0
  4. package/dist/client/Collection.d.ts +57 -0
  5. package/dist/client/Collection.d.ts.map +1 -0
  6. package/dist/client/Collection.js +174 -0
  7. package/dist/client/Collection.js.map +1 -0
  8. package/dist/client/Database.d.ts +35 -0
  9. package/dist/client/Database.d.ts.map +1 -0
  10. package/dist/client/Database.js +48 -0
  11. package/dist/client/Database.js.map +1 -0
  12. package/dist/client/DynamoClient.d.ts +43 -0
  13. package/dist/client/DynamoClient.d.ts.map +1 -0
  14. package/dist/client/DynamoClient.js +62 -0
  15. package/dist/client/DynamoClient.js.map +1 -0
  16. package/dist/client/FindCursor.d.ts +174 -0
  17. package/dist/client/FindCursor.d.ts.map +1 -0
  18. package/dist/client/FindCursor.js +256 -0
  19. package/dist/client/FindCursor.js.map +1 -0
  20. package/dist/client/aws-sigv4.d.ts +10 -0
  21. package/dist/client/aws-sigv4.d.ts.map +1 -0
  22. package/dist/client/aws-sigv4.js +54 -0
  23. package/dist/client/aws-sigv4.js.map +1 -0
  24. package/dist/client/index.cognito.d.ts +34 -0
  25. package/dist/client/index.cognito.d.ts.map +1 -0
  26. package/dist/client/index.cognito.js +30 -0
  27. package/dist/client/index.cognito.js.map +1 -0
  28. package/dist/client/index.d.ts +12 -0
  29. package/dist/client/index.d.ts.map +1 -0
  30. package/dist/client/index.iam.d.ts +34 -0
  31. package/dist/client/index.iam.d.ts.map +1 -0
  32. package/dist/client/index.iam.js +28 -0
  33. package/dist/client/index.iam.js.map +1 -0
  34. package/dist/client/index.js +12 -0
  35. package/dist/client/index.js.map +1 -0
  36. package/dist/client/index.token.d.ts +33 -0
  37. package/dist/client/index.token.d.ts.map +1 -0
  38. package/dist/client/index.token.js +28 -0
  39. package/dist/client/index.token.js.map +1 -0
  40. package/dist/dynamodb.d.ts +20 -0
  41. package/dist/dynamodb.d.ts.map +1 -0
  42. package/dist/dynamodb.js +31 -0
  43. package/dist/dynamodb.js.map +1 -0
  44. package/dist/errors.d.ts +100 -0
  45. package/dist/errors.d.ts.map +1 -0
  46. package/dist/errors.js +146 -0
  47. package/dist/errors.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +7 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/integrations/react-admin/dataProvider.d.ts +59 -0
  53. package/dist/integrations/react-admin/dataProvider.d.ts.map +1 -0
  54. package/dist/integrations/react-admin/dataProvider.js +364 -0
  55. package/dist/integrations/react-admin/dataProvider.js.map +1 -0
  56. package/dist/integrations/react-admin/index.d.ts +24 -0
  57. package/dist/integrations/react-admin/index.d.ts.map +1 -0
  58. package/dist/integrations/react-admin/index.js +23 -0
  59. package/dist/integrations/react-admin/index.js.map +1 -0
  60. package/dist/integrations/react-admin/types.d.ts +47 -0
  61. package/dist/integrations/react-admin/types.d.ts.map +1 -0
  62. package/dist/integrations/react-admin/types.js +5 -0
  63. package/dist/integrations/react-admin/types.js.map +1 -0
  64. package/dist/logger.d.ts +61 -0
  65. package/dist/logger.d.ts.map +1 -0
  66. package/dist/logger.js +87 -0
  67. package/dist/logger.js.map +1 -0
  68. package/dist/scripts/repair-shadows.d.ts +3 -0
  69. package/dist/scripts/repair-shadows.d.ts.map +1 -0
  70. package/dist/scripts/repair-shadows.js +190 -0
  71. package/dist/scripts/repair-shadows.js.map +1 -0
  72. package/dist/server/handler.cjs +31378 -0
  73. package/dist/server/handler.cjs.map +7 -0
  74. package/dist/server/handler.d.ts +18 -0
  75. package/dist/server/handler.d.ts.map +1 -0
  76. package/dist/server/handler.js +435 -0
  77. package/dist/server/handler.js.map +1 -0
  78. package/dist/server/handler.zip +0 -0
  79. package/dist/server/index.d.ts +8 -0
  80. package/dist/server/index.d.ts.map +1 -0
  81. package/dist/server/index.js +8 -0
  82. package/dist/server/index.js.map +1 -0
  83. package/dist/server/operations/deleteMany.d.ts +18 -0
  84. package/dist/server/operations/deleteMany.d.ts.map +1 -0
  85. package/dist/server/operations/deleteMany.js +222 -0
  86. package/dist/server/operations/deleteMany.js.map +1 -0
  87. package/dist/server/operations/deleteOne.d.ts +17 -0
  88. package/dist/server/operations/deleteOne.d.ts.map +1 -0
  89. package/dist/server/operations/deleteOne.js +87 -0
  90. package/dist/server/operations/deleteOne.js.map +1 -0
  91. package/dist/server/operations/find.d.ts +18 -0
  92. package/dist/server/operations/find.d.ts.map +1 -0
  93. package/dist/server/operations/find.js +382 -0
  94. package/dist/server/operations/find.js.map +1 -0
  95. package/dist/server/operations/findMany.d.ts +13 -0
  96. package/dist/server/operations/findMany.d.ts.map +1 -0
  97. package/dist/server/operations/findMany.js +61 -0
  98. package/dist/server/operations/findMany.js.map +1 -0
  99. package/dist/server/operations/findManyReference.d.ts +18 -0
  100. package/dist/server/operations/findManyReference.d.ts.map +1 -0
  101. package/dist/server/operations/findManyReference.js +150 -0
  102. package/dist/server/operations/findManyReference.js.map +1 -0
  103. package/dist/server/operations/findOne.d.ts +14 -0
  104. package/dist/server/operations/findOne.d.ts.map +1 -0
  105. package/dist/server/operations/findOne.js +56 -0
  106. package/dist/server/operations/findOne.js.map +1 -0
  107. package/dist/server/operations/insertMany.d.ts +19 -0
  108. package/dist/server/operations/insertMany.d.ts.map +1 -0
  109. package/dist/server/operations/insertMany.js +243 -0
  110. package/dist/server/operations/insertMany.js.map +1 -0
  111. package/dist/server/operations/insertOne.d.ts +18 -0
  112. package/dist/server/operations/insertOne.d.ts.map +1 -0
  113. package/dist/server/operations/insertOne.js +85 -0
  114. package/dist/server/operations/insertOne.js.map +1 -0
  115. package/dist/server/operations/updateMany.d.ts +20 -0
  116. package/dist/server/operations/updateMany.d.ts.map +1 -0
  117. package/dist/server/operations/updateMany.js +316 -0
  118. package/dist/server/operations/updateMany.js.map +1 -0
  119. package/dist/server/operations/updateOne.d.ts +20 -0
  120. package/dist/server/operations/updateOne.d.ts.map +1 -0
  121. package/dist/server/operations/updateOne.js +159 -0
  122. package/dist/server/operations/updateOne.js.map +1 -0
  123. package/dist/server/query/converter.d.ts +85 -0
  124. package/dist/server/query/converter.d.ts.map +1 -0
  125. package/dist/server/query/converter.js +161 -0
  126. package/dist/server/query/converter.js.map +1 -0
  127. package/dist/server/query/index.d.ts +5 -0
  128. package/dist/server/query/index.d.ts.map +1 -0
  129. package/dist/server/query/index.js +5 -0
  130. package/dist/server/query/index.js.map +1 -0
  131. package/dist/server/shadow/config.d.ts +147 -0
  132. package/dist/server/shadow/config.d.ts.map +1 -0
  133. package/dist/server/shadow/config.js +162 -0
  134. package/dist/server/shadow/config.js.map +1 -0
  135. package/dist/server/shadow/differ.d.ts +42 -0
  136. package/dist/server/shadow/differ.d.ts.map +1 -0
  137. package/dist/server/shadow/differ.js +66 -0
  138. package/dist/server/shadow/differ.js.map +1 -0
  139. package/dist/server/shadow/generator.d.ts +104 -0
  140. package/dist/server/shadow/generator.d.ts.map +1 -0
  141. package/dist/server/shadow/generator.js +148 -0
  142. package/dist/server/shadow/generator.js.map +1 -0
  143. package/dist/server/shadow/index.d.ts +11 -0
  144. package/dist/server/shadow/index.d.ts.map +1 -0
  145. package/dist/server/shadow/index.js +11 -0
  146. package/dist/server/shadow/index.js.map +1 -0
  147. package/dist/server/shadow/types.d.ts +44 -0
  148. package/dist/server/shadow/types.d.ts.map +1 -0
  149. package/dist/server/shadow/types.js +2 -0
  150. package/dist/server/shadow/types.js.map +1 -0
  151. package/dist/server/types.d.ts +295 -0
  152. package/dist/server/types.d.ts.map +1 -0
  153. package/dist/server/types.js +7 -0
  154. package/dist/server/types.js.map +1 -0
  155. package/dist/server/utils/auth.d.ts +43 -0
  156. package/dist/server/utils/auth.d.ts.map +1 -0
  157. package/dist/server/utils/auth.js +123 -0
  158. package/dist/server/utils/auth.js.map +1 -0
  159. package/dist/server/utils/bulkOperations.d.ts +81 -0
  160. package/dist/server/utils/bulkOperations.d.ts.map +1 -0
  161. package/dist/server/utils/bulkOperations.js +147 -0
  162. package/dist/server/utils/bulkOperations.js.map +1 -0
  163. package/dist/server/utils/chunking.d.ts +96 -0
  164. package/dist/server/utils/chunking.d.ts.map +1 -0
  165. package/dist/server/utils/chunking.js +225 -0
  166. package/dist/server/utils/chunking.js.map +1 -0
  167. package/dist/server/utils/dynamodb.d.ts +41 -0
  168. package/dist/server/utils/dynamodb.d.ts.map +1 -0
  169. package/dist/server/utils/dynamodb.js +83 -0
  170. package/dist/server/utils/dynamodb.js.map +1 -0
  171. package/dist/server/utils/filter.d.ts +152 -0
  172. package/dist/server/utils/filter.d.ts.map +1 -0
  173. package/dist/server/utils/filter.js +270 -0
  174. package/dist/server/utils/filter.js.map +1 -0
  175. package/dist/server/utils/pagination.d.ts +27 -0
  176. package/dist/server/utils/pagination.d.ts.map +1 -0
  177. package/dist/server/utils/pagination.js +56 -0
  178. package/dist/server/utils/pagination.js.map +1 -0
  179. package/dist/server/utils/timestamps.d.ts +31 -0
  180. package/dist/server/utils/timestamps.d.ts.map +1 -0
  181. package/dist/server/utils/timestamps.js +84 -0
  182. package/dist/server/utils/timestamps.js.map +1 -0
  183. package/dist/server/utils/ttl.d.ts +17 -0
  184. package/dist/server/utils/ttl.d.ts.map +1 -0
  185. package/dist/server/utils/ttl.js +62 -0
  186. package/dist/server/utils/ttl.js.map +1 -0
  187. package/dist/server/utils/validation.d.ts +40 -0
  188. package/dist/server/utils/validation.d.ts.map +1 -0
  189. package/dist/server/utils/validation.js +54 -0
  190. package/dist/server/utils/validation.js.map +1 -0
  191. package/dist/shadows/config.d.ts +54 -0
  192. package/dist/shadows/config.d.ts.map +1 -0
  193. package/dist/shadows/config.js +95 -0
  194. package/dist/shadows/config.js.map +1 -0
  195. package/dist/shadows/differ.d.ts +42 -0
  196. package/dist/shadows/differ.d.ts.map +1 -0
  197. package/dist/shadows/differ.js +66 -0
  198. package/dist/shadows/differ.js.map +1 -0
  199. package/dist/shadows/generator.d.ts +63 -0
  200. package/dist/shadows/generator.d.ts.map +1 -0
  201. package/dist/shadows/generator.js +107 -0
  202. package/dist/shadows/generator.js.map +1 -0
  203. package/dist/shadows/index.d.ts +15 -0
  204. package/dist/shadows/index.d.ts.map +1 -0
  205. package/dist/shadows/index.js +17 -0
  206. package/dist/shadows/index.js.map +1 -0
  207. package/dist/shadows/types.d.ts +44 -0
  208. package/dist/shadows/types.d.ts.map +1 -0
  209. package/dist/shadows/types.js +2 -0
  210. package/dist/shadows/types.js.map +1 -0
  211. package/dist/types.d.ts +165 -0
  212. package/dist/types.d.ts.map +1 -0
  213. package/dist/types.js +2 -0
  214. package/dist/types.js.map +1 -0
  215. package/dist/ulid.d.ts +46 -0
  216. package/dist/ulid.d.ts.map +1 -0
  217. package/dist/ulid.js +66 -0
  218. package/dist/ulid.js.map +1 -0
  219. package/package.json +136 -0
  220. package/terraform/README.md +222 -0
  221. package/terraform/examples/advanced/README.md +129 -0
  222. package/terraform/examples/advanced/main.tf +158 -0
  223. package/terraform/examples/advanced/shadow.config.json +35 -0
  224. package/terraform/examples/advanced/variables.tf +28 -0
  225. package/terraform/examples/basic/README.md +53 -0
  226. package/terraform/examples/basic/main.tf +99 -0
  227. package/terraform/examples/basic/variables.tf +17 -0
  228. package/terraform/main.tf +159 -0
  229. package/terraform/outputs.tf +56 -0
  230. package/terraform/variables.tf +59 -0
@@ -0,0 +1,190 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * シャドーレコード修復スクリプト
4
+ *
5
+ * DynamoClient(IAM認証)を使用してレコードを更新し、シャドーレコードを再生成します。
6
+ *
7
+ * 使用方法:
8
+ * pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource articles --dry-run
9
+ * pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource articles --id C8CD6F0D81B2B030696E300752 --repair
10
+ * pnpm --filter @exabugs/dynamodb-client tsx scripts/repair-shadows.ts --resource articles --repair
11
+ */
12
+ import { DynamoClient } from '../client/index.iam.js';
13
+ // 環境変数
14
+ const ENV = process.env.ENV || 'dev';
15
+ 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
+ /**
19
+ * Records Lambda Function URLを取得
20
+ */
21
+ async function getRecordsApiUrl() {
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`;
28
+ try {
29
+ const output = execSync(`aws lambda get-function-url-config --function-name ${functionName} --region ${REGION} --query 'FunctionUrl' --output text`, { encoding: 'utf-8' });
30
+ RECORDS_API_URL = output.trim();
31
+ return RECORDS_API_URL;
32
+ }
33
+ catch {
34
+ throw new Error(`Failed to get Function URL for ${functionName}`);
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;
111
+ try {
112
+ const { needsRepair, missingShadows, extraShadows } = await checkShadowIntegrity();
113
+ if (needsRepair) {
114
+ stats.needsRepair++;
115
+ console.log(`\n[${stats.scanned}] Record ${recordId}: Missing=${missingShadows}, Extra=${extraShadows}`);
116
+ if (!dryRun) {
117
+ await repairRecordViaDynamoClient(collection, recordId);
118
+ stats.repaired++;
119
+ console.log(` ✓ Repaired`);
120
+ // レート制限を避けるため少し待機
121
+ await new Promise((resolve) => setTimeout(resolve, 100));
122
+ }
123
+ }
124
+ }
125
+ catch (error) {
126
+ stats.failed++;
127
+ stats.errors.push({ id: recordId, error: error.message });
128
+ console.error(` ✗ Failed: ${error.message}`);
129
+ }
130
+ }
131
+ // 統計情報を表示
132
+ console.log('\n=== Repair Summary ===');
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]');
155
+ process.exit(1);
156
+ }
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('ainews')
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
+ }
186
+ main().catch((error) => {
187
+ console.error('Fatal error:', error);
188
+ process.exit(1);
189
+ });
190
+ //# sourceMappingURL=repair-shadows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-shadows.js","sourceRoot":"","sources":["../../src/scripts/repair-shadows.ts"],"names":[],"mappings":"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"}