@exabugs/dynamodb-client 1.21.0 → 1.23.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 (110) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +2 -1
  3. package/bin/dynamodb-admins.js +6 -0
  4. package/dist/admins/add.d.ts +60 -0
  5. package/dist/admins/add.d.ts.map +1 -0
  6. package/dist/admins/add.js +37 -0
  7. package/dist/admins/add.js.map +1 -0
  8. package/dist/admins/index.d.ts +12 -0
  9. package/dist/admins/index.d.ts.map +1 -0
  10. package/dist/admins/index.js +10 -0
  11. package/dist/admins/index.js.map +1 -0
  12. package/dist/admins/record.d.ts +44 -0
  13. package/dist/admins/record.d.ts.map +1 -0
  14. package/dist/admins/record.js +44 -0
  15. package/dist/admins/record.js.map +1 -0
  16. package/dist/integrations/react-admin/components/Admins/AdminDeleteButton.d.ts +12 -0
  17. package/dist/integrations/react-admin/components/Admins/AdminDeleteButton.d.ts.map +1 -0
  18. package/dist/integrations/react-admin/components/Admins/AdminDeleteButton.js +32 -0
  19. package/dist/integrations/react-admin/components/Admins/AdminDeleteButton.js.map +1 -0
  20. package/dist/integrations/react-admin/components/Admins/AdminsCreate.d.ts +12 -0
  21. package/dist/integrations/react-admin/components/Admins/AdminsCreate.d.ts.map +1 -0
  22. package/dist/integrations/react-admin/components/Admins/AdminsCreate.js +55 -0
  23. package/dist/integrations/react-admin/components/Admins/AdminsCreate.js.map +1 -0
  24. package/dist/integrations/react-admin/components/Admins/AdminsList.d.ts +19 -0
  25. package/dist/integrations/react-admin/components/Admins/AdminsList.d.ts.map +1 -0
  26. package/dist/integrations/react-admin/components/Admins/AdminsList.js +14 -0
  27. package/dist/integrations/react-admin/components/Admins/AdminsList.js.map +1 -0
  28. package/dist/integrations/react-admin/components/Admins/AdminsShow.d.ts +4 -0
  29. package/dist/integrations/react-admin/components/Admins/AdminsShow.d.ts.map +1 -0
  30. package/dist/integrations/react-admin/components/Admins/AdminsShow.js +11 -0
  31. package/dist/integrations/react-admin/components/Admins/AdminsShow.js.map +1 -0
  32. package/dist/integrations/react-admin/components/Admins/adminsResource.d.ts +21 -0
  33. package/dist/integrations/react-admin/components/Admins/adminsResource.d.ts.map +1 -0
  34. package/dist/integrations/react-admin/components/Admins/adminsResource.js +21 -0
  35. package/dist/integrations/react-admin/components/Admins/adminsResource.js.map +1 -0
  36. package/dist/integrations/react-admin/components/Admins/adminsView.d.ts +30 -0
  37. package/dist/integrations/react-admin/components/Admins/adminsView.d.ts.map +1 -0
  38. package/dist/integrations/react-admin/components/Admins/adminsView.js +38 -0
  39. package/dist/integrations/react-admin/components/Admins/adminsView.js.map +1 -0
  40. package/dist/integrations/react-admin/components/Admins/index.d.ts +13 -0
  41. package/dist/integrations/react-admin/components/Admins/index.d.ts.map +1 -0
  42. package/dist/integrations/react-admin/components/Admins/index.js +8 -0
  43. package/dist/integrations/react-admin/components/Admins/index.js.map +1 -0
  44. package/dist/integrations/react-admin/components/Admins/useAdminsMessages.d.ts +7 -0
  45. package/dist/integrations/react-admin/components/Admins/useAdminsMessages.d.ts.map +1 -0
  46. package/dist/integrations/react-admin/components/Admins/useAdminsMessages.js +20 -0
  47. package/dist/integrations/react-admin/components/Admins/useAdminsMessages.js.map +1 -0
  48. package/dist/integrations/react-admin/components/index.d.ts +2 -1
  49. package/dist/integrations/react-admin/components/index.d.ts.map +1 -1
  50. package/dist/integrations/react-admin/components/index.js +2 -1
  51. package/dist/integrations/react-admin/components/index.js.map +1 -1
  52. package/dist/integrations/react-admin/i18n/createI18nProvider.d.ts +27 -0
  53. package/dist/integrations/react-admin/i18n/createI18nProvider.d.ts.map +1 -0
  54. package/dist/integrations/react-admin/i18n/createI18nProvider.js +42 -0
  55. package/dist/integrations/react-admin/i18n/createI18nProvider.js.map +1 -0
  56. package/dist/integrations/react-admin/i18n/index.d.ts +11 -0
  57. package/dist/integrations/react-admin/i18n/index.d.ts.map +1 -0
  58. package/dist/integrations/react-admin/i18n/index.js +9 -0
  59. package/dist/integrations/react-admin/i18n/index.js.map +1 -0
  60. package/dist/integrations/react-admin/i18n/merge.d.ts +15 -0
  61. package/dist/integrations/react-admin/i18n/merge.d.ts.map +1 -0
  62. package/dist/integrations/react-admin/i18n/merge.js +31 -0
  63. package/dist/integrations/react-admin/i18n/merge.js.map +1 -0
  64. package/dist/integrations/react-admin/i18n/raJapaneseMessages.d.ts +194 -0
  65. package/dist/integrations/react-admin/i18n/raJapaneseMessages.d.ts.map +1 -0
  66. package/dist/integrations/react-admin/i18n/raJapaneseMessages.js +202 -0
  67. package/dist/integrations/react-admin/i18n/raJapaneseMessages.js.map +1 -0
  68. package/dist/integrations/react-admin/i18n/resources.d.ts +55 -0
  69. package/dist/integrations/react-admin/i18n/resources.d.ts.map +1 -0
  70. package/dist/integrations/react-admin/i18n/resources.js +49 -0
  71. package/dist/integrations/react-admin/i18n/resources.js.map +1 -0
  72. package/dist/integrations/react-admin/index.d.ts +1 -0
  73. package/dist/integrations/react-admin/index.d.ts.map +1 -1
  74. package/dist/integrations/react-admin/index.js +2 -0
  75. package/dist/integrations/react-admin/index.js.map +1 -1
  76. package/dist/notify/admins.d.ts.map +1 -1
  77. package/dist/notify/admins.js +3 -3
  78. package/dist/notify/admins.js.map +1 -1
  79. package/dist/notify/ops/index.d.ts +10 -0
  80. package/dist/notify/ops/index.d.ts.map +1 -0
  81. package/dist/notify/ops/index.js +9 -0
  82. package/dist/notify/ops/index.js.map +1 -0
  83. package/dist/notify/ops-notify.d.ts +106 -0
  84. package/dist/notify/ops-notify.d.ts.map +1 -0
  85. package/dist/notify/ops-notify.js +205 -0
  86. package/dist/notify/ops-notify.js.map +1 -0
  87. package/dist/notify/store.d.ts +5 -0
  88. package/dist/notify/store.d.ts.map +1 -1
  89. package/dist/notify/store.js +9 -2
  90. package/dist/notify/store.js.map +1 -1
  91. package/dist/server/handler.cjs +3 -3
  92. package/dist/server/media-handler.cjs +2 -2
  93. package/dist/server/media-process-handler-dlq.cjs +2 -2
  94. package/dist/server/media-process-handler.cjs +2 -2
  95. package/dist/tools/dynamodb-admins/cli.d.ts +39 -0
  96. package/dist/tools/dynamodb-admins/cli.d.ts.map +1 -0
  97. package/dist/tools/dynamodb-admins/cli.js +174 -0
  98. package/dist/tools/dynamodb-admins/cli.js.map +1 -0
  99. package/dist/tools/dynamodb-admins/index.d.ts +6 -0
  100. package/dist/tools/dynamodb-admins/index.d.ts.map +1 -0
  101. package/dist/tools/dynamodb-admins/index.js +5 -0
  102. package/dist/tools/dynamodb-admins/index.js.map +1 -0
  103. package/dist/tools/dynamodb-admins/run.d.ts +2 -0
  104. package/dist/tools/dynamodb-admins/run.d.ts.map +1 -0
  105. package/dist/tools/dynamodb-admins/run.js +11 -0
  106. package/dist/tools/dynamodb-admins/run.js.map +1 -0
  107. package/docs/ADMINS.md +57 -0
  108. package/docs/NOTIFY.md +51 -0
  109. package/package.json +28 -3
  110. package/terraform/ops-notify/README.md +2 -2
@@ -0,0 +1,205 @@
1
+ /**
2
+ * 運用通知 Lambda のハンドラのファクトリ(ADR 0006 の延長。asanowa・astro の通知のエントリを 1 つにしたもの)。
3
+ *
4
+ * 入力: CloudWatch Logs の購読(warn 以上のログ)、EventBridge(CloudWatch アラームの状態変化)、
5
+ * 直接呼び出し(週 1 回の生存確認など)。重複抑制・流量制限のうえ、Slack とメール(管理者全員)へ送る。
6
+ * 処理そのものは `createNotifyHandler`。ここは、その周りの定型(環境変数の読み取り、チャネル・通知ストア・
7
+ * 管理者の一覧・alerts の書き込み先の組み立て)を持つ。docs/NOTIFY.md
8
+ *
9
+ * 環境変数(terraform/ops-notify が設定する):
10
+ * PROJECT_NAME / ENV_NAME / RECORDS_IAM_URL / NOTICE_TABLE(必須。PROJECT_NAME は `app` を渡せば不要)
11
+ * SLACK_WEBHOOK_PARAM(SSM の SecureString の名前。Webhook の URL は秘密)
12
+ * MAIL_FROM(送信元。未設定ならメールは送らない)/ SES_REGION(既定 us-east-1)
13
+ * DRY_RUN=true(送らず、計画だけを返す)
14
+ * ADMIN_BASE_URL(任意。あるときだけ alerts に記録し、通知に詳細の URL を載せる)
15
+ * SKIP_RECORD_LOG_GROUPS(カンマ区切り。記録しないロググループ。Records のロググループを必ず入れる。
16
+ * 記録の失敗 → Records のエラーログ → 通知 → 記録、のループを防ぐ。通知は送る)
17
+ *
18
+ * ハンドラは最初の呼び出しで組み立て、以降はコンテナの中で使い回す(重複抑制の遮断・管理者の一覧の
19
+ * キャッシュを保つため)。組み立てに失敗したら、次の呼び出しでやり直す。
20
+ * このハンドラ自身のロググループは購読しない(自分のログで無限ループになる)。
21
+ *
22
+ * 公開はサブパス `@exabugs/dynamodb-client/notify/ops`(`./ops/index.ts`)だけ。`notify` 本体からは読まない
23
+ * (SSM・SES の SDK を静的に import するので、それを使わない Lambda に読み込ませない)。静的 import にするのは、
24
+ * `--external:@aws-sdk/*` の CJS バンドルで `require()` になり、Lambda の同梱 SDK(NODE_PATH)で解決されるため
25
+ * (動的 `import()` は NODE_PATH を使わない)。ops/__tests__/bundle.test.ts で固定する。
26
+ */
27
+ import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';
28
+ import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';
29
+ import { lazyCollection, withCollection, } from '../client/recordsClient.js';
30
+ import { createAdminDirectory, } from './admins.js';
31
+ import { ALERTS_RESOURCE, createAlertRecorder } from './alerts.js';
32
+ import { createEmailChannel, sesSender } from './channels/email.js';
33
+ import { createSlackChannel } from './channels/slack.js';
34
+ import { createNotifyHandler } from './handler.js';
35
+ import { logJson } from './logger.js';
36
+ import { createDynamoNoticeStore } from './store.js';
37
+ /** 環境変数(terraform/ops-notify の契約)を読む。必須が無ければ、名前を示して例外 */
38
+ export function readOpsNotifyConfig(env = process.env) {
39
+ const need = (name) => {
40
+ const v = env[name];
41
+ if (!v)
42
+ throw new Error(`${name} environment variable is required`);
43
+ return v;
44
+ };
45
+ return {
46
+ projectName: need('PROJECT_NAME'),
47
+ envName: need('ENV_NAME'),
48
+ recordsIamUrl: need('RECORDS_IAM_URL'),
49
+ noticeTable: need('NOTICE_TABLE'),
50
+ slackWebhookParam: env.SLACK_WEBHOOK_PARAM || undefined,
51
+ mailFrom: env.MAIL_FROM || undefined,
52
+ sesRegion: env.SES_REGION || 'us-east-1',
53
+ dryRun: env.DRY_RUN === 'true',
54
+ adminBaseUrl: env.ADMIN_BASE_URL || undefined,
55
+ skipRecordLogGroups: (env.SKIP_RECORD_LOG_GROUPS ?? '')
56
+ .split(',')
57
+ .map((g) => g.trim())
58
+ .filter(Boolean),
59
+ };
60
+ }
61
+ /** 記録の上限(`createNotifyHandler` の既定値と同じ。明示して、変えるときに見えるようにする) */
62
+ export const OPS_NOTIFY_RECORD_LIMITS = { timeoutMs: 3000, maxAlerts: 50, concurrency: 5 };
63
+ /** 記録の遮断(同上) */
64
+ export const OPS_NOTIFY_RECORD_BREAKER = { failures: 3, cooldownMs: 60_000 };
65
+ /**
66
+ * alerts の書き込みの HTTP の時間切れ(ミリ秒)。記録の上限(3 秒)より短くする
67
+ * (打ち切った後に HTTP が残らないように)
68
+ */
69
+ export const OPS_NOTIFY_RECORD_HTTP_TIMEOUT_MS = 2500;
70
+ /**
71
+ * 運用通知 Lambda のハンドラを作る。アプリのエントリは、これを export するだけ:
72
+ * `export const handler = createOpsNotifyHandler();`
73
+ */
74
+ export function createOpsNotifyHandler(options = {}) {
75
+ let built;
76
+ return async (event) => {
77
+ if (!built) {
78
+ const env = options.app ? { ...process.env, PROJECT_NAME: options.app } : process.env;
79
+ built = buildOpsNotifyHandler(readOpsNotifyConfig(env), options);
80
+ }
81
+ return built(event);
82
+ };
83
+ }
84
+ function regionOf(options) {
85
+ const region = options.region ?? (process.env.AWS_REGION || process.env.REGION || undefined);
86
+ if (!region)
87
+ throw new Error('AWS_REGION environment variable is not set');
88
+ return region;
89
+ }
90
+ /** 設定からハンドラを組み立てる(`createOpsNotifyHandler` の中身。設定を自前で用意するとき・テスト用) */
91
+ export function buildOpsNotifyHandler(config, options = {}) {
92
+ const region = regionOf(options);
93
+ const o = options.overrides ?? {};
94
+ const channels = o.channels ?? buildChannels(config, region, o);
95
+ const store = o.store ?? createDynamoNoticeStore(config.noticeTable, region);
96
+ return createNotifyHandler({
97
+ // 一部のチャネルだけの失敗(Webhook の失効など)も、Lambda の失敗先(運用者のメール)へ届ける
98
+ failOnAnyChannelError: true,
99
+ // 記録の上限・遮断は、記録するときだけ opsNotifyAlertOptions が渡す(現行の両アプリと同じ)
100
+ ...options.notify,
101
+ app: options.app ?? config.projectName,
102
+ env: config.envName,
103
+ channels,
104
+ store,
105
+ admins: o.admins ?? adminDirectoryOf(config, region, options.admins),
106
+ dryRun: config.dryRun,
107
+ region,
108
+ ...opsNotifyAlertOptions(config, store, region, options),
109
+ });
110
+ }
111
+ function adminDirectoryOf(config, region, admins = {}) {
112
+ const { lister, ...directory } = admins;
113
+ const records = {
114
+ url: config.recordsIamUrl,
115
+ region,
116
+ ...(directory.timeout !== undefined ? { timeout: directory.timeout } : {}),
117
+ };
118
+ if (!lister)
119
+ return createAdminDirectory({ ...directory, ...records });
120
+ const name = directory.collection ?? 'admins';
121
+ return createAdminDirectory({
122
+ ...directory,
123
+ source: {
124
+ list: (filter, listOptions) => withCollection(name, (raw) => lister(raw).list(filter, listOptions), records),
125
+ },
126
+ });
127
+ }
128
+ /** Slack(SSM の Webhook。実行環境の間はキャッシュ)とメール(SES v2)のチャネル */
129
+ function buildChannels(config, region, o) {
130
+ const channels = [];
131
+ if (config.slackWebhookParam) {
132
+ const name = config.slackWebhookParam;
133
+ let ssm = o.ssmClient;
134
+ let cached;
135
+ channels.push(createSlackChannel({
136
+ getWebhookUrl: async () => {
137
+ if (cached)
138
+ return cached;
139
+ ssm ??= new SSMClient({ region });
140
+ const r = await ssm.send(new GetParameterCommand({ Name: name, WithDecryption: true }));
141
+ const value = r.Parameter?.Value;
142
+ if (!value)
143
+ throw new Error('Slack の Webhook の URL が取得できません');
144
+ cached = value;
145
+ return value;
146
+ },
147
+ }));
148
+ }
149
+ if (config.mailFrom) {
150
+ channels.push(createEmailChannel({
151
+ from: config.mailFrom,
152
+ send: o.emailSender ?? lazySesSender(config.sesRegion),
153
+ }));
154
+ }
155
+ return channels;
156
+ }
157
+ /** SES v2 の送信。クライアントは最初の送信のときに作る */
158
+ function lazySesSender(sesRegion) {
159
+ let send;
160
+ return async (message) => {
161
+ send ??= sesSender({ client: new SESv2Client({ region: sesRegion }), SendEmailCommand });
162
+ return send(message);
163
+ };
164
+ }
165
+ /**
166
+ * alerts の記録(ADMIN_BASE_URL があるときだけ)。集計(ID・件数)は通知ストアの行(UpdateItem だけ)、
167
+ * レコードは Records の IAM URL(管理者の一覧と同じ経路)に書く。無ければ何も足さない(記録しない)
168
+ */
169
+ export function opsNotifyAlertOptions(config, index, region, options = {}) {
170
+ if (!config.adminBaseUrl)
171
+ return {};
172
+ if (config.skipRecordLogGroups.length === 0) {
173
+ // 自分のログは購読されないので、Lambda の設定の誤りとして残すだけ(遮断が最後の防壁)
174
+ (options.log ?? logJson)('warn', {
175
+ event: 'ALERTS_SKIP_LOG_GROUPS_EMPTY',
176
+ message: 'SKIP_RECORD_LOG_GROUPS が空です(Records のロググループを入れないと、記録の失敗がループしうる)',
177
+ });
178
+ }
179
+ return {
180
+ recorder: createAlertRecorder({
181
+ collection: options.overrides?.alertsCollection ?? alertsCollectionOf(config, region, options),
182
+ index,
183
+ }),
184
+ adminBaseUrl: config.adminBaseUrl,
185
+ region,
186
+ skipRecordLogGroups: config.skipRecordLogGroups,
187
+ recordLimits: options.notify?.recordLimits ?? OPS_NOTIFY_RECORD_LIMITS,
188
+ recordBreaker: options.notify?.recordBreaker ?? OPS_NOTIFY_RECORD_BREAKER,
189
+ };
190
+ }
191
+ /** alerts の書き込み先。生のコレクションは最初の書き込みで接続し、使い回す */
192
+ function alertsCollectionOf(config, region, options) {
193
+ const get = lazyCollection(ALERTS_RESOURCE, {
194
+ url: config.recordsIamUrl,
195
+ region,
196
+ timeout: options.recordHttpTimeoutMs ?? OPS_NOTIFY_RECORD_HTTP_TIMEOUT_MS,
197
+ });
198
+ const wrap = options.alertsCollection ?? ((raw) => raw);
199
+ return {
200
+ async updateOne(filter, update, updateOptions) {
201
+ return wrap(await get()).updateOne(filter, update, updateOptions);
202
+ },
203
+ };
204
+ }
205
+ //# sourceMappingURL=ops-notify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops-notify.js","sourceRoot":"","sources":["../../src/notify/ops-notify.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,11 @@ export declare class DynamoNoticeStore implements NoticeStore, AlertIndex {
14
14
  */
15
15
  touchAlert(alertKey: string, input: AlertTouchInput): Promise<AlertTouchResult>;
16
16
  }
17
+ /**
18
+ * 通知テーブル(notices)の `DynamoNoticeStore` を、リージョンの DynamoDB クライアントで作る
19
+ * (`createOpsNotifyHandler` の既定。SDK のクライアントの生成を、許可リストに載ったこのファイルに閉じる)
20
+ */
21
+ export declare function createDynamoNoticeStore(tableName: string, region: string): DynamoNoticeStore;
17
22
  /** テスト・ローカル用(1 プロセス内だけ) */
18
23
  export declare class MemoryNoticeStore implements NoticeStore, AlertIndex {
19
24
  readonly alerts: Map<string, {
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/notify/store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAiB,MAAM,uBAAuB,CAAC;AAE9E,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAIpB,qBAAa,iBAAkB,YAAW,WAAW,EAAE,UAAU;IAE7D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,EACzC,SAAS,EAAE,MAAM;IAG9B,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,CAAC;IAiDjB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe5F;;;;OAIG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAwDtF;AAcD,2BAA2B;AAC3B,qBAAa,iBAAkB,YAAW,WAAW,EAAE,UAAU;IAC/D,QAAQ,CAAC,MAAM;iBAEF,MAAM;aAAO,MAAM;qBAAe,MAAM;oBAAc,MAAM;aAAO,MAAM;OAClF;IACJ,QAAQ,CAAC,GAAG;mBAAgC,MAAM;oBAAc,MAAM;OAAM;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAE9C,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,CAAC;IAWjB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAmBtF"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/notify/store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAiB,MAAM,uBAAuB,CAAC;AAE9E,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAIpB,qBAAa,iBAAkB,YAAW,WAAW,EAAE,UAAU;IAE7D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,GAAG,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,EACzC,SAAS,EAAE,MAAM;IAG9B,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,CAAC;IAiDjB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe5F;;;;OAIG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAwDtF;AAcD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAK5F;AAED,2BAA2B;AAC3B,qBAAa,iBAAkB,YAAW,WAAW,EAAE,UAAU;IAC/D,QAAQ,CAAC,MAAM;iBAEF,MAAM;aAAO,MAAM;qBAAe,MAAM;oBAAc,MAAM;aAAO,MAAM;OAClF;IACJ,QAAQ,CAAC,GAAG;mBAAgC,MAAM;oBAAc,MAAM;OAAM;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAE9C,KAAK,CACT,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,CAAC;IAWjB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAmBtF"}
@@ -2,8 +2,8 @@
2
2
  * 重複抑制・流量制限の記録(DynamoDB。専用のテーブル: パーティションキー `pk`(文字列)、TTL 属性 `ttl`)
3
3
  * 同時実行でも二重に確保しないよう、条件付き更新を使う。窓の判定は `expiresAt`(TTL の削除の遅れに影響されない)。
4
4
  */
5
- import { ConditionalCheckFailedException } from '@aws-sdk/client-dynamodb';
6
- import { UpdateCommand } from '@aws-sdk/lib-dynamodb';
5
+ import { ConditionalCheckFailedException, DynamoDBClient } from '@aws-sdk/client-dynamodb';
6
+ import { DynamoDBDocumentClient, UpdateCommand } from '@aws-sdk/lib-dynamodb';
7
7
  const KEEP_SEC = 86400;
8
8
  export class DynamoNoticeStore {
9
9
  doc;
@@ -156,6 +156,13 @@ function touched(attrs, input) {
156
156
  const firstSeenAt = typeof attrs?.firstSeenAt === 'string' ? attrs.firstSeenAt : (input.firstAt ?? input.at);
157
157
  return { alertId, count, firstSeenAt, isNew: alertId === input.newId };
158
158
  }
159
+ /**
160
+ * 通知テーブル(notices)の `DynamoNoticeStore` を、リージョンの DynamoDB クライアントで作る
161
+ * (`createOpsNotifyHandler` の既定。SDK のクライアントの生成を、許可リストに載ったこのファイルに閉じる)
162
+ */
163
+ export function createDynamoNoticeStore(tableName, region) {
164
+ return new DynamoNoticeStore(DynamoDBDocumentClient.from(new DynamoDBClient({ region })), tableName);
165
+ }
159
166
  /** テスト・ローカル用(1 プロセス内だけ) */
160
167
  export class MemoryNoticeStore {
161
168
  alerts = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/notify/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/notify/store.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.21.0
2
- // Built: 2026-10-24T14:04:54.676Z
1
+ // @exabugs/dynamodb-client v1.23.0
2
+ // Built: 2026-10-25T07:47:29.081Z
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.21.0";
38983
+ const version = "1.23.0";
38984
38984
  return createSuccessResponse({ version, timestamp: (/* @__PURE__ */ new Date()).toISOString() }, requestId);
38985
38985
  }
38986
38986
  if (event.requestContext.http.method !== "POST") {
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.21.0
2
- // Built: 2026-10-24T14:04:54.676Z
1
+ // @exabugs/dynamodb-client v1.23.0
2
+ // Built: 2026-10-25T07:47:29.081Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.21.0
2
- // Built: 2026-10-24T14:04:54.676Z
1
+ // @exabugs/dynamodb-client v1.23.0
2
+ // Built: 2026-10-25T07:47:29.081Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- // @exabugs/dynamodb-client v1.21.0
2
- // Built: 2026-10-24T14:04:54.676Z
1
+ // @exabugs/dynamodb-client v1.23.0
2
+ // Built: 2026-10-25T07:47:29.081Z
3
3
  "use strict";
4
4
  var __create = Object.create;
5
5
  var __defProp = Object.defineProperty;
@@ -0,0 +1,39 @@
1
+ export interface CliIo {
2
+ out: (s: string) => void;
3
+ err: (s: string) => void;
4
+ }
5
+ export interface CliDeps {
6
+ env?: NodeJS.ProcessEnv;
7
+ /** SSM のパラメータの値を読む(テストで差し替える)。既定は SSM の GetParameter(復号つき) */
8
+ getParameter?: (name: string, region: string) => Promise<string>;
9
+ }
10
+ export declare const EXIT_OK = 0;
11
+ export declare const EXIT_ERROR = 1;
12
+ export declare const EXIT_USAGE = 2;
13
+ /** 既に登録されている(何も書いていない) */
14
+ export declare const EXIT_EXISTS = 3;
15
+ export declare const USAGE = "\u4F7F\u3044\u65B9:\n dynamodb-admins add <email> --app <app> --env <env> --name <name> [\u30AA\u30D7\u30B7\u30E7\u30F3]\n \u2192 admins \u306B\u7BA1\u7406\u8005\u3092\u767B\u9332\u3059\u308B\uFF08id \u3068 email \u306F\u5C0F\u6587\u5B57\u306E\u30E1\u30FC\u30EB\uFF09\u3002\u65E2\u306B\u3042\u308C\u3070\u4F55\u3082\u66F8\u304B\u306A\u3044\n\n <email> \u7BA1\u7406\u8005\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\uFF08\u524D\u5F8C\u306E\u7A7A\u767D\u3092\u9664\u304D\u3001\u5C0F\u6587\u5B57\u306B\u3059\u308B\uFF09\n --app <app> \u30A2\u30D7\u30EA\u540D\uFF08SSM \u306E\u30D1\u30E9\u30E1\u30FC\u30BF\u540D\u306B\u4F7F\u3046\uFF09\n --env <env> \u74B0\u5883\uFF08dev / prd \u306A\u3069\uFF09\n --name <name> \u8868\u793A\u540D\uFF08\u5FC5\u9808\uFF09\n\u30AA\u30D7\u30B7\u30E7\u30F3:\n --region <region> \u65E2\u5B9A: AWS_REGION\u3001\u7121\u3051\u308C\u3070 ap-northeast-1\n --url <url> Records \u306E IAM \u7248 Function URL\uFF08\u6307\u5B9A\u3059\u308B\u3068 SSM \u3092\u8AAD\u307E\u306A\u3044\uFF09\n --collection <name> \u65E2\u5B9A: admins\n --dry-run \u5B58\u5728\u78BA\u8A8D\u3060\u3051\u3057\u3066\u66F8\u304D\u8FBC\u307E\u306A\u3044\uFF08\u767B\u9332\u3059\u308B\u5185\u5BB9\u3092\u51FA\u3059\uFF09\n --confirm <env> \u66F8\u304D\u8FBC\u3080\u74B0\u5883\u306E\u540D\u524D\u306E\u78BA\u8A8D\u3002--env prd \u3067\u66F8\u304D\u8FBC\u3080\u3068\u304D\u306F --confirm prd \u304C\u8981\u308B\n\n\u8A8D\u8A3C: AWS \u306E\u8A8D\u8A3C\u60C5\u5831\uFF08AWS_PROFILE \u306A\u3069\uFF09\u3002SSM \u306E\u8AAD\u307F\u53D6\u308A\u3068\u3001Records \u306E Function URL \u306E\u547C\u3073\u51FA\u3057\u306E\u6A29\u9650\u304C\u8981\u308B\n\u7D42\u4E86\u30B3\u30FC\u30C9: 0 = \u767B\u9332\u3057\u305F\uFF08--dry-run \u3067\u306F\u767B\u9332\u3067\u304D\u308B\uFF09\u30013 = \u65E2\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u30012 = \u5F15\u6570\u306E\u8AA4\u308A\u30FB\u78BA\u8A8D\u306E\u4E0D\u8DB3\u30011 = \u305D\u306E\u307B\u304B\u306E\u5931\u6557";
16
+ export interface AddArgs {
17
+ email: string;
18
+ app: string;
19
+ env: string;
20
+ name: string;
21
+ region?: string;
22
+ url?: string;
23
+ collection: string;
24
+ dryRun: boolean;
25
+ confirm?: string;
26
+ }
27
+ /** 書き込みに `--confirm <env>` が要る環境 */
28
+ export declare const CONFIRM_REQUIRED_ENVS: readonly string[];
29
+ /** `add` の引数を解釈する(誤りは Error) */
30
+ export declare function parseAddArgs(argv: string[]): AddArgs;
31
+ /** Records の IAM 版 Function URL の SSM のパラメータ名(terraform/modules/parameter-store と同じ) */
32
+ export declare const recordsIamUrlParameterName: (app: string, env: string) => string;
33
+ /** SSM のパラメータを読む(復号つき) */
34
+ export declare function ssmGetParameter(name: string, region: string): Promise<string>;
35
+ /** 確認が要るのに無い・違うなら、その理由(要らない・合っていれば null) */
36
+ export declare function missingConfirmation(args: AddArgs): string | null;
37
+ /** CLI 本体。終了コードを返す(process.exitCode は run.ts が設定する) */
38
+ export declare function main(argv: string[], io: CliIo, deps?: CliDeps): Promise<number>;
39
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/tools/dynamodb-admins/cli.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,0BAA0B;AAC1B,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,eAAO,MAAM,KAAK,y/DAgB2D,CAAC;AAE9E,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oCAAoC;AACpC,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA2B,CAAC;AAa/E,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAmCpD;AAED,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,GAAI,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAClB,CAAC;AAErD,0BAA0B;AAC1B,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUnF;AAID,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIhE;AA0DD,uDAAuD;AACvD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAE,OAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CASzF"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * `dynamodb-admins add <email> --app <app> --env <env> --name <name>`: 管理者を admins に登録する(ADR 0007 §7)。
3
+ * 最初の 1 人(管理画面にまだ誰もログインできないとき)の登録に使う。2 人目以降は管理画面の「管理者」から。
4
+ *
5
+ * 経路: Records の IAM 版 Function URL を、利用者の AWS の認証情報(SigV4。`AWS_PROFILE` など)で呼ぶ。
6
+ * URL は SSM の `/<app>/<env>/infra/dynamodb-client-api-iam-url`(ライブラリの parameter-store が作る)から読む。
7
+ * 作成の前に `id` で存在を確かめ、既にあれば何も書かずに終了コード 3 で終わる(上書きしない)。
8
+ * 誤操作の防止: `--env prd` で書き込むときは `--confirm prd` が要る(astro の `make … CONFIRM=prd` と同じ流儀。
9
+ * `--dry-run` は書き込まないので要らない)。無ければ何も読まず・書かずに終了コード 2。
10
+ */
11
+ import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';
12
+ import { addAdmin, adminWriterOf } from '../../admins/add.js';
13
+ import { withCollection } from '../../client/recordsClient.js';
14
+ export const EXIT_OK = 0;
15
+ export const EXIT_ERROR = 1;
16
+ export const EXIT_USAGE = 2;
17
+ /** 既に登録されている(何も書いていない) */
18
+ export const EXIT_EXISTS = 3;
19
+ export const USAGE = `使い方:
20
+ dynamodb-admins add <email> --app <app> --env <env> --name <name> [オプション]
21
+ → admins に管理者を登録する(id と email は小文字のメール)。既にあれば何も書かない
22
+
23
+ <email> 管理者のメールアドレス(前後の空白を除き、小文字にする)
24
+ --app <app> アプリ名(SSM のパラメータ名に使う)
25
+ --env <env> 環境(dev / prd など)
26
+ --name <name> 表示名(必須)
27
+ オプション:
28
+ --region <region> 既定: AWS_REGION、無ければ ap-northeast-1
29
+ --url <url> Records の IAM 版 Function URL(指定すると SSM を読まない)
30
+ --collection <name> 既定: admins
31
+ --dry-run 存在確認だけして書き込まない(登録する内容を出す)
32
+ --confirm <env> 書き込む環境の名前の確認。--env prd で書き込むときは --confirm prd が要る
33
+
34
+ 認証: AWS の認証情報(AWS_PROFILE など)。SSM の読み取りと、Records の Function URL の呼び出しの権限が要る
35
+ 終了コード: 0 = 登録した(--dry-run では登録できる)、3 = 既に登録されている、2 = 引数の誤り・確認の不足、1 = そのほかの失敗`;
36
+ /** 書き込みに `--confirm <env>` が要る環境 */
37
+ export const CONFIRM_REQUIRED_ENVS = Object.freeze(['prd']);
38
+ const SINGLE = {
39
+ '--app': 'app',
40
+ '--env': 'env',
41
+ '--name': 'name',
42
+ '--region': 'region',
43
+ '--url': 'url',
44
+ '--collection': 'collection',
45
+ '--confirm': 'confirm',
46
+ };
47
+ /** `add` の引数を解釈する(誤りは Error) */
48
+ export function parseAddArgs(argv) {
49
+ const v = {};
50
+ const positional = [];
51
+ let dryRun = false;
52
+ for (let i = 0; i < argv.length; i++) {
53
+ const a = argv[i];
54
+ if (a in SINGLE) {
55
+ const value = argv[++i];
56
+ if (value === undefined || value.trim() === '' || value.startsWith('--')) {
57
+ throw new Error(`${a} に値が要る`);
58
+ }
59
+ v[SINGLE[a]] = value;
60
+ }
61
+ else if (a === '--dry-run') {
62
+ dryRun = true;
63
+ }
64
+ else if (a.startsWith('--')) {
65
+ throw new Error(`未知の引数: ${a}`);
66
+ }
67
+ else {
68
+ positional.push(a);
69
+ }
70
+ }
71
+ if (positional.length !== 1)
72
+ throw new Error('メールアドレスを 1 つ指定する');
73
+ for (const k of ['app', 'env', 'name']) {
74
+ if (!v[k])
75
+ throw new Error(`--${k} が要る`);
76
+ }
77
+ return {
78
+ email: positional[0],
79
+ app: v.app,
80
+ env: v.env,
81
+ name: v.name,
82
+ region: v.region,
83
+ url: v.url,
84
+ collection: v.collection ?? 'admins',
85
+ dryRun,
86
+ confirm: v.confirm,
87
+ };
88
+ }
89
+ /** Records の IAM 版 Function URL の SSM のパラメータ名(terraform/modules/parameter-store と同じ) */
90
+ export const recordsIamUrlParameterName = (app, env) => `/${app}/${env}/infra/dynamodb-client-api-iam-url`;
91
+ /** SSM のパラメータを読む(復号つき) */
92
+ export async function ssmGetParameter(name, region) {
93
+ const ssm = new SSMClient({ region });
94
+ try {
95
+ const r = await ssm.send(new GetParameterCommand({ Name: name, WithDecryption: true }));
96
+ const value = r.Parameter?.Value;
97
+ if (!value)
98
+ throw new Error(`SSM のパラメータが空です: ${name}`);
99
+ return value;
100
+ }
101
+ finally {
102
+ ssm.destroy();
103
+ }
104
+ }
105
+ const describe = (r) => `${r.id}(${r.name})`;
106
+ /** 確認が要るのに無い・違うなら、その理由(要らない・合っていれば null) */
107
+ export function missingConfirmation(args) {
108
+ if (args.dryRun || !CONFIRM_REQUIRED_ENVS.includes(args.env))
109
+ return null;
110
+ if (args.confirm === args.env)
111
+ return null;
112
+ return `${args.env} の ${args.collection} に書き込みます。よければ --confirm ${args.env} を付けて実行してください(--dry-run なら不要)`;
113
+ }
114
+ /** 出力に出す宛先(URL のホスト。--url の指定と --app/--env の食い違いに気づけるように) */
115
+ const hostOf = (url) => {
116
+ try {
117
+ return new URL(url).host;
118
+ }
119
+ catch {
120
+ return url;
121
+ }
122
+ };
123
+ async function runAdd(argv, io, deps) {
124
+ let args;
125
+ try {
126
+ args = parseAddArgs(argv);
127
+ }
128
+ catch (e) {
129
+ io.err(`引数の誤り: ${e.message}\n\n${USAGE}\n`);
130
+ return EXIT_USAGE;
131
+ }
132
+ const unconfirmed = missingConfirmation(args);
133
+ if (unconfirmed) {
134
+ io.err(`確認が要ります(何も書いていません): ${unconfirmed}\n`);
135
+ return EXIT_USAGE;
136
+ }
137
+ const env = deps.env ?? process.env;
138
+ const region = args.region || env.AWS_REGION || 'ap-northeast-1';
139
+ try {
140
+ const url = args.url ??
141
+ (await (deps.getParameter ?? ssmGetParameter)(recordsIamUrlParameterName(args.app, args.env), region));
142
+ const where = `${args.app}/${args.env} の ${args.collection}、${hostOf(url)}`;
143
+ const r = await withCollection(args.collection, (collection) => addAdmin({ email: args.email, name: args.name }, adminWriterOf(collection), {
144
+ dryRun: args.dryRun,
145
+ }), { url, region });
146
+ if (r.status === 'exists') {
147
+ io.err(`既に登録されています(何も書いていません): ${r.record.id}(${where})\n`);
148
+ return EXIT_EXISTS;
149
+ }
150
+ if (r.status === 'dry-run') {
151
+ io.out(`[dry-run] 登録します: ${describe(r.record)}(${where})\n`);
152
+ return EXIT_OK;
153
+ }
154
+ io.out(`管理者を登録しました: ${describe(r.record)}(${where})\n`);
155
+ return EXIT_OK;
156
+ }
157
+ catch (e) {
158
+ io.err(`登録に失敗しました: ${e.message}\n`);
159
+ return EXIT_ERROR;
160
+ }
161
+ }
162
+ /** CLI 本体。終了コードを返す(process.exitCode は run.ts が設定する) */
163
+ export async function main(argv, io, deps = {}) {
164
+ const [sub, ...rest] = argv;
165
+ if (sub === '--help' || sub === '-h') {
166
+ io.out(`${USAGE}\n`);
167
+ return EXIT_OK;
168
+ }
169
+ if (sub === 'add')
170
+ return runAdd(rest, io, deps);
171
+ io.err(`サブコマンドは add(got: ${sub ?? 'なし'})\n\n${USAGE}\n`);
172
+ return EXIT_USAGE;
173
+ }
174
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/tools/dynamodb-admins/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `dynamodb-admins`(管理者の登録の CLI。ADR 0007 §7)の部品。使い方は docs/ADMINS.md の「最初の管理者の登録」
3
+ */
4
+ export { CONFIRM_REQUIRED_ENVS, EXIT_ERROR, EXIT_EXISTS, EXIT_OK, EXIT_USAGE, USAGE, main, missingConfirmation, parseAddArgs, recordsIamUrlParameterName, ssmGetParameter, } from './cli.js';
5
+ export type { AddArgs, CliDeps, CliIo } from './cli.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/dynamodb-admins/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,EACL,IAAI,EACJ,mBAAmB,EACnB,YAAY,EACZ,0BAA0B,EAC1B,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * `dynamodb-admins`(管理者の登録の CLI。ADR 0007 §7)の部品。使い方は docs/ADMINS.md の「最初の管理者の登録」
3
+ */
4
+ export { CONFIRM_REQUIRED_ENVS, EXIT_ERROR, EXIT_EXISTS, EXIT_OK, EXIT_USAGE, USAGE, main, missingConfirmation, parseAddArgs, recordsIamUrlParameterName, ssmGetParameter, } from './cli.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/dynamodb-admins/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,EACL,IAAI,EACJ,mBAAmB,EACnB,YAAY,EACZ,0BAA0B,EAC1B,eAAe,GAChB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/tools/dynamodb-admins/run.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { main } from './cli.js';
2
+ main(process.argv.slice(2), {
3
+ out: (s) => process.stdout.write(s),
4
+ err: (s) => process.stderr.write(s),
5
+ }).then((code) => {
6
+ process.exitCode = code;
7
+ }, (e) => {
8
+ process.stderr.write(`${e instanceof Error ? e.message : String(e)}\n`);
9
+ process.exitCode = 1;
10
+ });
11
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/tools/dynamodb-admins/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;CACpC,CAAC,CAAC,IAAI,CACL,CAAC,IAAI,EAAE,EAAE;IACP,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,EACD,CAAC,CAAU,EAAE,EAAE;IACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CACF,CAAC"}