@exabugs/dynamodb-client 1.13.0 → 1.14.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 (118) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +5 -15
  3. package/bin/dynamodb-access-check.js +6 -0
  4. package/dist/server/handler.cjs +3 -3
  5. package/dist/server/handler.cjs.map +1 -1
  6. package/dist/server/media-handler.cjs +2 -2
  7. package/dist/server/media-process-handler-dlq.cjs +2 -2
  8. package/dist/server/media-process-handler.cjs +2 -2
  9. package/dist/server/operations/parameterConverter.js +3 -3
  10. package/dist/server/operations/parameterConverter.js.map +1 -1
  11. package/dist/sharp-layer.zip +0 -0
  12. package/dist/tools/dynamodb-access-check/allowlist.d.ts +39 -0
  13. package/dist/tools/dynamodb-access-check/allowlist.d.ts.map +1 -0
  14. package/dist/tools/dynamodb-access-check/allowlist.js +34 -0
  15. package/dist/tools/dynamodb-access-check/allowlist.js.map +1 -0
  16. package/dist/tools/dynamodb-access-check/check.d.ts +24 -0
  17. package/dist/tools/dynamodb-access-check/check.d.ts.map +1 -0
  18. package/dist/tools/dynamodb-access-check/check.js +40 -0
  19. package/dist/tools/dynamodb-access-check/check.js.map +1 -0
  20. package/dist/tools/dynamodb-access-check/cli.d.ts +10 -0
  21. package/dist/tools/dynamodb-access-check/cli.d.ts.map +1 -0
  22. package/dist/tools/dynamodb-access-check/cli.js +96 -0
  23. package/dist/tools/dynamodb-access-check/cli.js.map +1 -0
  24. package/dist/tools/dynamodb-access-check/forbidden.d.ts +15 -0
  25. package/dist/tools/dynamodb-access-check/forbidden.d.ts.map +1 -0
  26. package/dist/tools/dynamodb-access-check/forbidden.js +34 -0
  27. package/dist/tools/dynamodb-access-check/forbidden.js.map +1 -0
  28. package/dist/tools/dynamodb-access-check/glob.d.ts +8 -0
  29. package/dist/tools/dynamodb-access-check/glob.d.ts.map +1 -0
  30. package/dist/tools/dynamodb-access-check/glob.js +37 -0
  31. package/dist/tools/dynamodb-access-check/glob.js.map +1 -0
  32. package/dist/tools/dynamodb-access-check/index.d.ts +5 -0
  33. package/dist/tools/dynamodb-access-check/index.d.ts.map +1 -0
  34. package/dist/tools/dynamodb-access-check/index.js +4 -0
  35. package/dist/tools/dynamodb-access-check/index.js.map +1 -0
  36. package/dist/tools/dynamodb-access-check/run.d.ts +2 -0
  37. package/dist/tools/dynamodb-access-check/run.d.ts.map +1 -0
  38. package/dist/tools/dynamodb-access-check/run.js +3 -0
  39. package/dist/tools/dynamodb-access-check/run.js.map +1 -0
  40. package/dist/tools/dynamodb-access-check/scan.d.ts +25 -0
  41. package/dist/tools/dynamodb-access-check/scan.d.ts.map +1 -0
  42. package/dist/tools/dynamodb-access-check/scan.js +151 -0
  43. package/dist/tools/dynamodb-access-check/scan.js.map +1 -0
  44. package/dist/tools/eslint/index.d.ts +28 -0
  45. package/dist/tools/eslint/index.d.ts.map +1 -0
  46. package/dist/tools/eslint/index.js +34 -0
  47. package/dist/tools/eslint/index.js.map +1 -0
  48. package/docs/DYNAMODB_ACCESS.md +152 -0
  49. package/package.json +11 -11
  50. package/bin/dynamodb-mcp.js +0 -12
  51. package/dist/mcp/adapter.d.ts +0 -36
  52. package/dist/mcp/adapter.d.ts.map +0 -1
  53. package/dist/mcp/adapter.js +0 -213
  54. package/dist/mcp/adapter.js.map +0 -1
  55. package/dist/mcp/cli.d.ts +0 -2
  56. package/dist/mcp/cli.d.ts.map +0 -1
  57. package/dist/mcp/cli.js +0 -122
  58. package/dist/mcp/cli.js.map +0 -1
  59. package/dist/mcp/index.d.ts +0 -7
  60. package/dist/mcp/index.d.ts.map +0 -1
  61. package/dist/mcp/index.js +0 -6
  62. package/dist/mcp/index.js.map +0 -1
  63. package/dist/mcp/server.d.ts +0 -18
  64. package/dist/mcp/server.d.ts.map +0 -1
  65. package/dist/mcp/server.js +0 -127
  66. package/dist/mcp/server.js.map +0 -1
  67. package/dist/mcp/tools/deleteMany.d.ts +0 -12
  68. package/dist/mcp/tools/deleteMany.d.ts.map +0 -1
  69. package/dist/mcp/tools/deleteMany.js +0 -24
  70. package/dist/mcp/tools/deleteMany.js.map +0 -1
  71. package/dist/mcp/tools/deleteOne.d.ts +0 -12
  72. package/dist/mcp/tools/deleteOne.d.ts.map +0 -1
  73. package/dist/mcp/tools/deleteOne.js +0 -24
  74. package/dist/mcp/tools/deleteOne.js.map +0 -1
  75. package/dist/mcp/tools/find.d.ts +0 -12
  76. package/dist/mcp/tools/find.d.ts.map +0 -1
  77. package/dist/mcp/tools/find.js +0 -56
  78. package/dist/mcp/tools/find.js.map +0 -1
  79. package/dist/mcp/tools/findMany.d.ts +0 -12
  80. package/dist/mcp/tools/findMany.d.ts.map +0 -1
  81. package/dist/mcp/tools/findMany.js +0 -28
  82. package/dist/mcp/tools/findMany.js.map +0 -1
  83. package/dist/mcp/tools/findManyReference.d.ts +0 -12
  84. package/dist/mcp/tools/findManyReference.d.ts.map +0 -1
  85. package/dist/mcp/tools/findManyReference.js +0 -32
  86. package/dist/mcp/tools/findManyReference.js.map +0 -1
  87. package/dist/mcp/tools/findOne.d.ts +0 -12
  88. package/dist/mcp/tools/findOne.d.ts.map +0 -1
  89. package/dist/mcp/tools/findOne.js +0 -24
  90. package/dist/mcp/tools/findOne.js.map +0 -1
  91. package/dist/mcp/tools/generated.d.ts +0 -11
  92. package/dist/mcp/tools/generated.d.ts.map +0 -1
  93. package/dist/mcp/tools/generated.js +0 -171
  94. package/dist/mcp/tools/generated.js.map +0 -1
  95. package/dist/mcp/tools/index.d.ts +0 -13
  96. package/dist/mcp/tools/index.d.ts.map +0 -1
  97. package/dist/mcp/tools/index.js +0 -29
  98. package/dist/mcp/tools/index.js.map +0 -1
  99. package/dist/mcp/tools/insertMany.d.ts +0 -12
  100. package/dist/mcp/tools/insertMany.d.ts.map +0 -1
  101. package/dist/mcp/tools/insertMany.js +0 -28
  102. package/dist/mcp/tools/insertMany.js.map +0 -1
  103. package/dist/mcp/tools/insertOne.d.ts +0 -12
  104. package/dist/mcp/tools/insertOne.d.ts.map +0 -1
  105. package/dist/mcp/tools/insertOne.js +0 -24
  106. package/dist/mcp/tools/insertOne.js.map +0 -1
  107. package/dist/mcp/tools/updateMany.d.ts +0 -12
  108. package/dist/mcp/tools/updateMany.d.ts.map +0 -1
  109. package/dist/mcp/tools/updateMany.js +0 -28
  110. package/dist/mcp/tools/updateMany.js.map +0 -1
  111. package/dist/mcp/tools/updateOne.d.ts +0 -12
  112. package/dist/mcp/tools/updateOne.d.ts.map +0 -1
  113. package/dist/mcp/tools/updateOne.js +0 -38
  114. package/dist/mcp/tools/updateOne.js.map +0 -1
  115. package/dist/mcp/types.d.ts +0 -50
  116. package/dist/mcp/types.d.ts.map +0 -1
  117. package/dist/mcp/types.js +0 -49
  118. package/dist/mcp/types.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.14.0] - 2026-10-18
11
+
12
+ ### Added
13
+
14
+ - **`dynamodb-access-check` CLI**: DynamoDB への直接アクセスの検査。ソースの import(`@aws-sdk/client-dynamodb` / `lib-dynamodb` / `util-dynamodb`、aws-sdk v2 の DynamoDB クライアント、このライブラリの内部で DynamoDB に触れる `server` / `server/handler` / `server/media-handler` / `server/media-process-handler` / `server/media-process-handler-dlq`)と、Terraform の `dynamodb:*` の権限(`resource` / `data` ブロック、AWS 管理ポリシー `AmazonDynamoDB*`)を走査し、許可リスト(JSON)と照合する。許可リストに無い違反は終了コード 1、許可リストにあるのに検出されないエントリと行番号のずれは警告。引数: `--allowlist <path>`(必須)、`--root <dir>`、`--src <dir>...`、`--tf <dir>...`、`--ignore <glob>...`。許可リストの形式(`file` / `terraform` / `kind` / `reason` / `todo` / `exclude` / `line` / `eslintOnly` / `notes`)と使い方は [docs/DYNAMODB_ACCESS.md](docs/DYNAMODB_ACCESS.md)
15
+ - **`@exabugs/dynamodb-client/eslint`**: `createDynamoDbGuardConfig({ allowlistPath, files?, message?, patterns? })`。同じ許可リストから、ESLint の flat config(`no-restricted-imports` と、許可するファイルの overrides)を返す。ESLint 自体は import しない
16
+
17
+ ### Removed
18
+
19
+ - **MCP を削除した**: `dynamodb-mcp`(`bin`)、`@exabugs/dynamodb-client/mcp`(`exports`)、`generate-mcp-tools`、`@modelcontextprotocol/sdk`(依存)。利用者はいないと確認済み。破壊的変更だが、利用者がいないため minor とする
20
+
21
+ ### 利用側(asanowa・astro・asaichi)の移行手順
22
+
23
+ 3 リポジトリでコピーしていた検査スクリプト(`check-dynamodb-access.mjs`)と ESLint の生成(`eslint.dynamodb-guard.cjs`)を、このライブラリのものに置き換える。
24
+
25
+ 1. `@exabugs/dynamodb-client` を 1.14.0 に上げる
26
+ 2. 許可リストの JSON を、共通の形式にする: コードのエントリは `{ "file": "<パス>", "kind", "reason", "todo" }`(asanowa の `type: "code"` の `path` は `file` に)。Terraform のエントリは `{ "file": "<.tf のパス>", "terraform": "<resource 名>", ... }`(asanowa の `type: "iam"` の `path` / `resource`)。astro の `source` / `terraform`(ファイルごと・`imports` / `actions` の配列)は、ファイルごとに 1 エントリにする(import・アクション単位の許可はなくなる)
27
+ 3. スクリプトの呼び出しを CLI にする。例(asanowa): `npx dynamodb-access-check --allowlist infra/scripts/dynamodb-access-allowlist.json --src . --tf . --ignore <旧スクリプトがあれば、そのパス>`。例(astro): `--src apps functions packages scripts --tf infra --ignore '**/__tests__/**' '**/generated/**' '**/*.test.*' '**/*.spec.*'`(テストを検査から外していた場合)
28
+ 4. ESLint は `eslint.dynamodb-guard.cjs` を、`createDynamoDbGuardConfig({ allowlistPath })` に置き換える
29
+ 5. 旧スクリプトと `eslint.dynamodb-guard.cjs` を削除する。旧スクリプトの結果と同じ(違反ゼロ、同じ警告)になることを確かめる
30
+
31
+ ## [1.13.1] - 2026-10-16
32
+
33
+ ### Fixed
34
+
35
+ - **sharp レイヤーの zip を再現可能にした**(`dist/sharp-layer.zip`): 同じ入力から常に同じバイト列を作る(mtime・エントリの順序・パーミッション・uid/gid などの追加フィールドを固定)。これまでは、中身が同じでも、ビルドのたびに zip のバイト列が変わり、Terraform の `aws_lambda_layer_version`(`source_code_hash = filebase64sha256(...)`)が、ライブラリの版を上げるたびに差分になっていた。`scripts/verify-reproducible-layer.sh` と CI で、2 回ビルドして一致することを確かめる。ランタイムの挙動は変わらない。**利用側への影響: 1.13.1 に最初に上げるときだけ、バイト列が 1.11.x / 1.13.0 と違うため、レイヤーが 1 回置き換わる(レイヤーに依存する Lambda、CloudFront 公開鍵、Lambda 権限なども連鎖して置き換わる)。それ以降は、版を上げてもレイヤーは置き換わらない**(sharp の版や、推移依存の中身が変わらない限り)
36
+
10
37
  ## [1.13.0] - 2026-10-16
11
38
 
12
39
  ### Added
package/README.md CHANGED
@@ -570,7 +570,7 @@ We welcome contributions!
570
570
 
571
571
  ### OpenAPI-Driven Development
572
572
 
573
- This project uses OpenAPI specification as the Single Source of Truth (SSOT) for MCP tool definitions.
573
+ This project uses OpenAPI specification as the Single Source of Truth (SSOT) for TypeScript type definitions.
574
574
 
575
575
  #### Workflow
576
576
 
@@ -581,11 +581,11 @@ This project uses OpenAPI specification as the Single Source of Truth (SSOT) for
581
581
  vim docs/specs/openapi.yaml
582
582
  ```
583
583
 
584
- 2. **Generate MCP Tools**
584
+ 2. **Generate Types**
585
585
 
586
586
  ```bash
587
- # Regenerate MCP tool definitions from OpenAPI spec
588
- npm run generate-mcp-tools
587
+ # Regenerate TypeScript types from OpenAPI spec
588
+ npm run generate-types
589
589
  ```
590
590
 
591
591
  3. **Verify Changes**
@@ -599,17 +599,7 @@ This project uses OpenAPI specification as the Single Source of Truth (SSOT) for
599
599
 
600
600
  - **Location**: `docs/specs/openapi.yaml`
601
601
  - **Components**: `docs/specs/components/schemas/`
602
- - **Generator**: `scripts/generate-mcp-tools-v2.ts`
603
- - **Output**: `src/mcp/tools/generated.ts` (auto-generated, do not edit manually)
604
-
605
- #### Key Design Principles
606
-
607
- - **OpenAPI as SSOT**: All MCP tool definitions are derived from OpenAPI spec
608
- - **Minimal Inference**: Generator extracts information directly from OpenAPI, avoiding complex inference logic
609
- - **Type Safety**: Generated TypeScript code maintains full type safety
610
- - **Consistency**: All tools follow the same structure and naming conventions
611
-
612
- For more details, see the [OpenAPI to MCP Generator Spec](.kiro/specs/openapi-to-mcp-generator/design.md).
602
+ - **Output**: `src/__generated__/` (auto-generated, do not edit manually)
613
603
 
614
604
  ---
615
605
 
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * DynamoDB への直接アクセスの検査(docs/DYNAMODB_ACCESS.md)
5
+ */
6
+ import '../dist/tools/dynamodb-access-check/run.js';
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.13.0
2
- // Built: 2026-10-16T09:59:05.142Z
1
+ // @exabugs/dynamodb-client v1.14.0
2
+ // Built: 2026-10-18T05:26:53.693Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -38980,7 +38980,7 @@ async function handler(event) {
38980
38980
  return createCorsResponse(HTTP_STATUS.OK);
38981
38981
  }
38982
38982
  if (event.requestContext.http.method === "GET" && event.requestContext.http.path === "/version") {
38983
- const version = "1.13.0";
38983
+ const version = "1.14.0";
38984
38984
  return createSuccessResponse({ version, timestamp: (/* @__PURE__ */ new Date()).toISOString() }, requestId);
38985
38985
  }
38986
38986
  if (event.requestContext.http.method !== "POST") {