@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,202 @@
1
+ /**
2
+ * react-admin の文言(`ra.*`)の日本語(ADR 0007 の A4)
3
+ *
4
+ * asanowa・asaichi の管理画面の `i18n/ja.ts` の `ra.*`(両アプリで同じ)を移したもの。
5
+ * 訳の無いキー(react-admin の新しい版で増えたものなど)は、`createI18nProvider` が英語(ra-language-english)で補う。
6
+ * 依存を持たない純粋な値(ra-i18n-polyglot・ra-language-english を読まない)
7
+ */
8
+ import { deepFreeze } from './merge.js';
9
+ export const raJapaneseMessages = deepFreeze({
10
+ ra: {
11
+ action: {
12
+ add_filter: 'フィルターを追加',
13
+ add: '追加',
14
+ back: '戻る',
15
+ bulk_actions: '%{smart_count}件選択中',
16
+ cancel: 'キャンセル',
17
+ clear_array_input: 'リストをクリア',
18
+ clear_input_value: '値をクリア',
19
+ clone: 'コピー',
20
+ confirm: '確認',
21
+ create: '作成',
22
+ create_item: '%{item}を作成',
23
+ delete: '削除',
24
+ edit: '編集',
25
+ export: 'エクスポート',
26
+ list: '一覧',
27
+ refresh: '更新',
28
+ remove_all_filters: 'フィルターをすべて削除',
29
+ remove_filter: 'このフィルターを削除',
30
+ remove: '削除',
31
+ save: '保存',
32
+ search: '検索',
33
+ select_all: 'すべて選択',
34
+ select_row: 'この行を選択',
35
+ show: '詳細',
36
+ sort: '並べ替え',
37
+ undo: '元に戻す',
38
+ unselect: '選択解除',
39
+ expand: '展開',
40
+ close: '閉じる',
41
+ open_menu: 'メニューを開く',
42
+ close_menu: 'メニューを閉じる',
43
+ update: '更新',
44
+ move_up: '上に移動',
45
+ move_down: '下に移動',
46
+ open: '開く',
47
+ toggle_theme: 'テーマ切替',
48
+ select_columns: 'カラム',
49
+ },
50
+ boolean: {
51
+ true: 'はい',
52
+ false: 'いいえ',
53
+ null: ' ',
54
+ },
55
+ page: {
56
+ create: '%{name}を作成',
57
+ dashboard: 'ダッシュボード',
58
+ edit: '%{name} #%{id}',
59
+ error: 'エラーが発生しました',
60
+ list: '%{name}',
61
+ loading: '読み込み中...',
62
+ not_found: '見つかりません',
63
+ empty: '%{name}はまだありません。',
64
+ invite: '新しく追加しますか?',
65
+ access_denied: 'アクセス拒否',
66
+ authentication_error: '認証エラー',
67
+ },
68
+ input: {
69
+ file: {
70
+ upload_several: 'ファイルをドロップするか、クリックして選択してください。',
71
+ upload_single: 'ファイルをドロップするか、クリックして選択してください。',
72
+ },
73
+ image: {
74
+ upload_several: '画像をドロップするか、クリックして選択してください。',
75
+ upload_single: '画像をドロップするか、クリックして選択してください。',
76
+ },
77
+ references: {
78
+ all_missing: '参照データが見つかりません。',
79
+ many_missing: '一部の参照データが見つかりません。',
80
+ single_missing: '参照データが見つかりません。',
81
+ },
82
+ password: {
83
+ toggle_visible: 'パスワードを隠す',
84
+ toggle_hidden: 'パスワードを表示',
85
+ },
86
+ },
87
+ message: {
88
+ about: 'アバウト',
89
+ are_you_sure: '本当によろしいですか?',
90
+ auth_error: '認証トークンの検証中にエラーが発生しました。',
91
+ bulk_delete_content: 'この%{name}を削除してもよいですか? |||| %{smart_count}件を削除してもよいですか?',
92
+ bulk_delete_title: '%{name}を削除 |||| %{smart_count}件の%{name}を削除',
93
+ bulk_update_content: 'この%{name}を更新してもよいですか? |||| %{smart_count}件を更新してもよいですか?',
94
+ bulk_update_title: '%{name}を更新 |||| %{smart_count}件の%{name}を更新',
95
+ clear_array_input: 'リスト全体をクリアしてもよいですか?',
96
+ delete_content: 'このアイテムを削除してもよいですか?',
97
+ delete_title: '%{name} #%{id}を削除',
98
+ details: '詳細',
99
+ error: 'クライアントエラーが発生しました。',
100
+ invalid_form: 'フォームが無効です。エラーを確認してください。',
101
+ loading: 'ページを読み込み中です。しばらくお待ちください。',
102
+ no: 'いいえ',
103
+ not_found: 'URLが間違っているか、リンクが無効です。',
104
+ yes: 'はい',
105
+ unsaved_changes: '変更が保存されていません。このまま移動しますか?',
106
+ access_denied: 'アクセス権限がありません。',
107
+ authentication_error: '認証エラーが発生しました。',
108
+ },
109
+ navigation: {
110
+ first: '最初',
111
+ last: '最後',
112
+ next: '次',
113
+ no_results: '結果なし',
114
+ page_out_from_begin: 'ページ1より前には移動できません',
115
+ page_out_from_end: '最後のページより後には移動できません',
116
+ page_out_of_boundaries: 'ページ%{page}は範囲外です',
117
+ page_range_info: '%{total}件中%{offsetBegin}-%{offsetEnd}',
118
+ partial_page_range_info: '%{offsetEnd}件以上中%{offsetBegin}-%{offsetEnd}',
119
+ current_page: '%{page}ページ',
120
+ page: '%{page}ページへ',
121
+ previous: '前',
122
+ skip_nav: 'コンテンツへスキップ',
123
+ },
124
+ sort: {
125
+ sort_by: '%{field}で%{order}',
126
+ ASC: '昇順',
127
+ DESC: '降順',
128
+ },
129
+ auth: {
130
+ auth_check_error: 'ログインが必要です',
131
+ user_menu: 'プロフィール',
132
+ username: 'ユーザー名',
133
+ password: 'パスワード',
134
+ email: 'メールアドレス',
135
+ sign_in: 'ログイン',
136
+ sign_in_error: '認証に失敗しました。再試行してください。',
137
+ logout: 'ログアウト',
138
+ },
139
+ notification: {
140
+ updated: '更新しました',
141
+ created: '作成しました',
142
+ deleted: '削除しました',
143
+ bad_item: '不正なアイテムです',
144
+ item_doesnt_exist: 'このアイテムは存在しません',
145
+ http_error: 'サーバーとの通信エラーが発生しました',
146
+ data_provider_error: 'dataProvider エラーが発生しました。コンソールを確認してください。',
147
+ i18n_error: '指定された言語の翻訳を読み込めません',
148
+ canceled: 'アクションがキャンセルされました',
149
+ logged_out: 'セッションが終了しました。再度ログインしてください。',
150
+ not_authorized: 'このリソースへのアクセス権限がありません。',
151
+ application_update_available: '新しいバージョンが利用可能です。',
152
+ },
153
+ validation: {
154
+ required: '必須項目です',
155
+ minLength: '%{min}文字以上入力してください',
156
+ maxLength: '%{max}文字以下で入力してください',
157
+ minValue: '%{min}以上の値を入力してください',
158
+ maxValue: '%{max}以下の値を入力してください',
159
+ number: '数値を入力してください',
160
+ email: '有効なメールアドレスを入力してください',
161
+ oneOf: '次のいずれかを選択してください: %{options}',
162
+ regex: '指定された形式(正規表現)に一致する必要があります: %{pattern}',
163
+ },
164
+ saved_queries: {
165
+ label: '保存済みクエリ',
166
+ query_name: 'クエリ名',
167
+ new_label: '現在のクエリを保存...',
168
+ new_dialog_title: '現在のクエリを名前を付けて保存',
169
+ remove_label: '保存済みクエリを削除',
170
+ remove_label_with_name: 'クエリ"%{name}"を削除',
171
+ remove_dialog_title: '保存済みクエリを削除しますか?',
172
+ remove_message: '保存済みクエリリストからこのアイテムを削除してもよいですか?',
173
+ help: 'リストをフィルタリングしてクエリを保存',
174
+ },
175
+ configurable: {
176
+ customize: 'カスタマイズ',
177
+ configureMode: 'このページを設定',
178
+ inspector: {
179
+ title: 'インスペクター',
180
+ content: 'アプリケーションの UI 要素にカーソルを合わせて設定してください',
181
+ reset: '設定をリセット',
182
+ hideAll: 'すべて非表示',
183
+ showAll: 'すべて表示',
184
+ },
185
+ Datagrid: {
186
+ title: 'データグリッド',
187
+ unlabeled: 'ラベルなしカラム #%{column}',
188
+ },
189
+ SimpleForm: {
190
+ title: 'フォーム',
191
+ unlabeled: 'ラベルなし入力 #%{input}',
192
+ },
193
+ SimpleList: {
194
+ title: 'リスト',
195
+ primaryText: 'プライマリテキスト',
196
+ secondaryText: 'セカンダリテキスト',
197
+ tertiaryText: '補助テキスト',
198
+ },
199
+ },
200
+ },
201
+ });
202
+ //# sourceMappingURL=raJapaneseMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raJapaneseMessages.js","sourceRoot":"","sources":["../../../../src/integrations/react-admin/i18n/raJapaneseMessages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export declare const LIBRARY_RESOURCE_MESSAGES_JA: Readonly<{
2
+ resources: {
3
+ admins: {
4
+ name: string;
5
+ fields: {
6
+ id: string;
7
+ email: string;
8
+ name: string;
9
+ createdAt: string;
10
+ updatedAt: string;
11
+ };
12
+ messages: {
13
+ emailHelper: string;
14
+ duplicate: string;
15
+ invalidEmail: string;
16
+ nameRequired: string;
17
+ emailMismatch: string;
18
+ };
19
+ };
20
+ alerts: {
21
+ name: string;
22
+ };
23
+ systemChanges: {
24
+ name: string;
25
+ };
26
+ };
27
+ }>;
28
+ export declare const LIBRARY_RESOURCE_MESSAGES_EN: Readonly<{
29
+ resources: {
30
+ admins: {
31
+ name: string;
32
+ fields: {
33
+ id: string;
34
+ email: string;
35
+ name: string;
36
+ createdAt: string;
37
+ updatedAt: string;
38
+ };
39
+ messages: {
40
+ emailHelper: string;
41
+ duplicate: string;
42
+ invalidEmail: string;
43
+ nameRequired: string;
44
+ emailMismatch: string;
45
+ };
46
+ };
47
+ alerts: {
48
+ name: string;
49
+ };
50
+ systemChanges: {
51
+ name: string;
52
+ };
53
+ };
54
+ }>;
55
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../src/integrations/react-admin/i18n/resources.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBhB,CAAC;AAE1B,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBhB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * このライブラリの画面(alerts・systemChanges・admins)のリソース名と項目名の訳(`resources.*`)。
3
+ * 既定のリソース名で登録したときに、メニュー・見出しに使われる(名前を変えたら、アプリが自分の名前で訳を足す)
4
+ */
5
+ import { ADMINS_MESSAGES_JA } from '../components/Admins/adminsView.js';
6
+ import { deepFreeze } from './merge.js';
7
+ const { emailHelper, duplicate, invalidEmail, nameRequired, emailMismatch } = ADMINS_MESSAGES_JA;
8
+ export const LIBRARY_RESOURCE_MESSAGES_JA = deepFreeze({
9
+ resources: {
10
+ admins: {
11
+ name: '管理者 |||| 管理者',
12
+ fields: {
13
+ id: 'メールアドレス',
14
+ email: 'メールアドレス',
15
+ name: '名前',
16
+ createdAt: '作成日時',
17
+ updatedAt: '更新日時',
18
+ },
19
+ // 画面の見出し以外の文言(adminsResource の messages と同じキー。既定は ADMINS_MESSAGES_JA)
20
+ messages: { emailHelper, duplicate, invalidEmail, nameRequired, emailMismatch },
21
+ },
22
+ alerts: { name: '運用通知 |||| 運用通知' },
23
+ systemChanges: { name: 'システム変更履歴 |||| システム変更履歴' },
24
+ },
25
+ });
26
+ export const LIBRARY_RESOURCE_MESSAGES_EN = deepFreeze({
27
+ resources: {
28
+ admins: {
29
+ name: 'Admin |||| Admins',
30
+ fields: {
31
+ id: 'Email',
32
+ email: 'Email',
33
+ name: 'Name',
34
+ createdAt: 'Created At',
35
+ updatedAt: 'Updated At',
36
+ },
37
+ messages: {
38
+ emailHelper: 'This address will be able to sign in to the admin console (cannot be changed later)',
39
+ duplicate: 'An admin with this email address is already registered',
40
+ invalidEmail: 'Must be a valid email',
41
+ nameRequired: 'Please enter a name',
42
+ emailMismatch: 'email (recorded value that differs from the id; not used for sign-in)',
43
+ },
44
+ },
45
+ alerts: { name: 'Alert |||| Alerts' },
46
+ systemChanges: { name: 'System change |||| System changes' },
47
+ },
48
+ });
49
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../src/integrations/react-admin/i18n/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAqB,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC;AAEjG,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;IACrD,SAAS,EAAE;QACT,MAAM,EAAE;YACN,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE;gBACN,EAAE,EAAE,SAAS;gBACb,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,MAAM;aAClB;YACD,sEAAsE;YACtE,QAAQ,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE;SAChF;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAClC,aAAa,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;KAClD;CACqB,CAAC,CAAC;AAE1B,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;IACrD,SAAS,EAAE;QACT,MAAM,EAAE;YACN,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE;gBACN,EAAE,EAAE,OAAO;gBACX,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,YAAY;aACxB;YACD,QAAQ,EAAE;gBACR,WAAW,EACT,qFAAqF;gBACvF,SAAS,EAAE,wDAAwD;gBACnE,YAAY,EAAE,uBAAuB;gBACrC,YAAY,EAAE,qBAAqB;gBACnC,aAAa,EAAE,uEAAuE;aACvF;SACF;QACD,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;QACrC,aAAa,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE;KAC7D;CACqB,CAAC,CAAC"}
@@ -29,4 +29,5 @@ export { LabeledIf } from './components/index.js';
29
29
  export type { LabeledIfProps } from './components/index.js';
30
30
  export * from './components/Alerts/index.js';
31
31
  export * from './components/SystemChanges/index.js';
32
+ export * from './components/Admins/index.js';
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/react-admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,mBAAmB,EACnB,6BAA6B,EAC7B,6BAA6B,EAC7B,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/react-admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EACV,mBAAmB,EACnB,6BAA6B,EAC7B,6BAA6B,EAC7B,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,8BAA8B,CAAC"}
@@ -26,4 +26,6 @@ export { CloudWatchLogButton, cloudWatchLogGroupUrl, cloudWatchLogUrl, consoleDo
26
26
  export { LabeledIf } from './components/index.js';
27
27
  export * from './components/Alerts/index.js';
28
28
  export * from './components/SystemChanges/index.js';
29
+ // 管理者の画面(admins の List / Create / Show / Delete。ADR 0007 §7)。日本語化は ./i18n のサブパス
30
+ export * from './components/Admins/index.js';
29
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/react-admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQvD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAO/B,yEAAyE;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/react-admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQvD,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAO/B,yEAAyE;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,gFAAgF;AAChF,cAAc,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"admins.d.ts","sourceRoot":"","sources":["../../src/notify/admins.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAC9E,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,MAAM,GAAE,SAAS,MAAM,EAAW,GACjC,MAAM,EAAE,CAQV;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAsCxF"}
1
+ {"version":3,"file":"admins.d.ts","sourceRoot":"","sources":["../../src/notify/admins.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;QAAC,GAAG,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAC9E,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,mDAAmD;AACnD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,MAAM,GAAE,SAAS,MAAM,EAAW,GACjC,MAAM,EAAE,CAQV;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAsCxF"}
@@ -4,15 +4,15 @@
4
4
  * 管理者は `admins` レコード(管理画面で増減)が正本。レコードの id が小文字のメールアドレス。
5
5
  * Records の IAM 版 Function URL 経由で全件を読み、正規化したメールアドレスを返す。
6
6
  */
7
+ import { isAdminEmail, normalizeAdminEmail } from '../admins/record.js';
7
8
  import { withCollection } from '../client/recordsClient.js';
8
- const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
9
9
  const PAGE_SIZE = 50;
10
10
  /** メールアドレスの形式なら小文字・前後空白除去で返す。そうでなければ null */
11
11
  export function normalizeEmail(value) {
12
12
  if (typeof value !== 'string')
13
13
  return null;
14
- const email = value.trim().toLowerCase();
15
- return EMAIL_PATTERN.test(email) ? email : null;
14
+ const email = normalizeAdminEmail(value);
15
+ return isAdminEmail(email) ? email : null;
16
16
  }
17
17
  /** 管理者のレコード → 宛先(小文字・重複なし・不正な形式は除く)。id がメールアドレス */
18
18
  export function emailsOf(admins, fields = ['id']) {
@@ -1 +1 @@
1
- {"version":3,"file":"admins.js","sourceRoot":"","sources":["../../src/notify/admins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admins.js","sourceRoot":"","sources":["../../src/notify/admins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 運用通知 Lambda のエントリ(`@exabugs/dynamodb-client/notify/ops`)
3
+ *
4
+ * `terraform/ops-notify` の Lambda のエントリは `export const handler = createOpsNotifyHandler();` だけでよい。
5
+ * SSM・SES の SDK を静的に import するので、`notify` 本体とはサブパスを分ける(SDK を使わない Lambda に
6
+ * 読み込ませない)。docs/NOTIFY.md の「通知 Lambda のエントリ」
7
+ */
8
+ export { OPS_NOTIFY_RECORD_BREAKER, OPS_NOTIFY_RECORD_HTTP_TIMEOUT_MS, OPS_NOTIFY_RECORD_LIMITS, createOpsNotifyHandler, readOpsNotifyConfig, } from '../ops-notify.js';
9
+ export type { OpsNotifyAdminsOptions, OpsNotifyAlertRow, OpsNotifyConfig, OpsNotifyHandlerOptions, OpsNotifyLog, OpsNotifyOverrides, OpsNotifyPassthrough, } from '../ops-notify.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notify/ops/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 運用通知 Lambda のエントリ(`@exabugs/dynamodb-client/notify/ops`)
3
+ *
4
+ * `terraform/ops-notify` の Lambda のエントリは `export const handler = createOpsNotifyHandler();` だけでよい。
5
+ * SSM・SES の SDK を静的に import するので、`notify` 本体とはサブパスを分ける(SDK を使わない Lambda に
6
+ * 読み込ませない)。docs/NOTIFY.md の「通知 Lambda のエントリ」
7
+ */
8
+ export { OPS_NOTIFY_RECORD_BREAKER, OPS_NOTIFY_RECORD_HTTP_TIMEOUT_MS, OPS_NOTIFY_RECORD_LIMITS, createOpsNotifyHandler, readOpsNotifyConfig, } from '../ops-notify.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/notify/ops/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,yBAAyB,EACzB,iCAAiC,EACjC,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { SSMClient } from '@aws-sdk/client-ssm';
2
+ import { type RecordsCollection } from '../client/recordsClient.js';
3
+ import { type AdminDirectoryOptions, type AdminRecord, type AdminsLister } from './admins.js';
4
+ import { type AlertsCollection } from './alerts.js';
5
+ import { type EmailSender } from './channels/email.js';
6
+ import { type NotifyHandlerOptions, type NotifyResult } from './handler.js';
7
+ import type { AdminDirectory, AlertIndex, Channel, NoticeStore } from './types.js';
8
+ /** 環境変数から読む設定(`readOpsNotifyConfig`) */
9
+ export interface OpsNotifyConfig {
10
+ projectName: string;
11
+ envName: string;
12
+ recordsIamUrl: string;
13
+ noticeTable: string;
14
+ slackWebhookParam?: string;
15
+ mailFrom?: string;
16
+ sesRegion: string;
17
+ dryRun: boolean;
18
+ /** あるときだけ alerts に記録する(無ければ記録しない) */
19
+ adminBaseUrl?: string;
20
+ /** 記録しないロググループ(Records のロググループ) */
21
+ skipRecordLogGroups: string[];
22
+ }
23
+ /** 環境変数(terraform/ops-notify の契約)を読む。必須が無ければ、名前を示して例外 */
24
+ export declare function readOpsNotifyConfig(env?: Record<string, string | undefined>): OpsNotifyConfig;
25
+ /** 記録の上限(`createNotifyHandler` の既定値と同じ。明示して、変えるときに見えるようにする) */
26
+ export declare const OPS_NOTIFY_RECORD_LIMITS: {
27
+ readonly timeoutMs: 3000;
28
+ readonly maxAlerts: 50;
29
+ readonly concurrency: 5;
30
+ };
31
+ /** 記録の遮断(同上) */
32
+ export declare const OPS_NOTIFY_RECORD_BREAKER: {
33
+ readonly failures: 3;
34
+ readonly cooldownMs: 60000;
35
+ };
36
+ /**
37
+ * alerts の書き込みの HTTP の時間切れ(ミリ秒)。記録の上限(3 秒)より短くする
38
+ * (打ち切った後に HTTP が残らないように)
39
+ */
40
+ export declare const OPS_NOTIFY_RECORD_HTTP_TIMEOUT_MS = 2500;
41
+ /** alerts の書き込み先が受け取る、生のコレクションの行 */
42
+ export type OpsNotifyAlertRow = {
43
+ id: string;
44
+ [key: string]: unknown;
45
+ };
46
+ /** 管理者の一覧(メールの宛先)の設定。Records への接続(url・region)は、ハンドラが渡す */
47
+ export interface OpsNotifyAdminsOptions extends Omit<AdminDirectoryOptions, 'url' | 'region' | 'source'> {
48
+ /**
49
+ * 読み取りを包む(既定は生のコレクションを、ライブラリの既定の読み方で読む)。権限チェック層(astro の
50
+ * authorizedCollection など)を通すアプリは、受け取った生のコレクションを自分の層で包んで返す。
51
+ * 呼び出しごとに接続し、終わったら閉じる(`withCollection`)
52
+ */
53
+ lister?: (raw: RecordsCollection<AdminRecord>) => AdminsLister;
54
+ }
55
+ /** `createNotifyHandler` にそのまま渡すもの(既定はライブラリの既定) */
56
+ export type OpsNotifyPassthrough = Pick<NotifyHandlerOptions, 'windows' | 'rate' | 'adminCacheSec' | 'failOnAnyChannelError' | 'now' | 'logger' | 'skipRecordEvents' | 'recordLimits' | 'recordBreaker'>;
57
+ /** テスト用の差し替え(本番は使わない。外部の AWS に触れずに、分岐を確かめる) */
58
+ export interface OpsNotifyOverrides {
59
+ store?: NoticeStore & AlertIndex;
60
+ alertsCollection?: AlertsCollection;
61
+ channels?: Channel[];
62
+ admins?: AdminDirectory;
63
+ /** Slack の Webhook の URL を読む SSM のクライアント */
64
+ ssmClient?: Pick<SSMClient, 'send'>;
65
+ /** メールの送信(既定は SES v2。SES_REGION のクライアント) */
66
+ emailSender?: EmailSender;
67
+ }
68
+ /** エントリ自身のログの出力先(今は設定の誤りの warn だけ。alerts-cleanup の log と同じ形) */
69
+ export type OpsNotifyLog = (level: 'info' | 'warn' | 'error', fields: Record<string, unknown>) => void;
70
+ export interface OpsNotifyHandlerOptions {
71
+ /** アプリ名(通知の app)。省略時は環境変数 PROJECT_NAME(必須) */
72
+ app?: string;
73
+ /** AWS のリージョン(通知ストア・SSM・Records・ログ参照)。省略時は AWS_REGION(無ければ REGION) */
74
+ region?: string;
75
+ /** 管理者の一覧(メールの宛先) */
76
+ admins?: OpsNotifyAdminsOptions;
77
+ /**
78
+ * alerts の書き込み先を作る(既定は生のコレクションをそのまま使う)。権限チェック層を通すアプリは、
79
+ * 受け取った生のコレクションを自分の層で包んで返す。生のコレクションは最初の書き込みで接続し、
80
+ * コンテナの中で使い回す(`lazyCollection`。接続に失敗したら、次の書き込みで作り直す)
81
+ */
82
+ alertsCollection?: (raw: RecordsCollection<OpsNotifyAlertRow>) => AlertsCollection;
83
+ /** alerts の書き込みの HTTP の時間切れ。既定 OPS_NOTIFY_RECORD_HTTP_TIMEOUT_MS(2500) */
84
+ recordHttpTimeoutMs?: number;
85
+ /** 設定の誤り(SKIP_RECORD_LOG_GROUPS が空)の警告の出力先。既定 logJson */
86
+ log?: OpsNotifyLog;
87
+ /** `createNotifyHandler` に渡す設定。既定: failOnAnyChannelError は true、記録の上限・遮断は上の定数 */
88
+ notify?: OpsNotifyPassthrough;
89
+ /** テスト用 */
90
+ overrides?: OpsNotifyOverrides;
91
+ }
92
+ type Handler = (event: unknown) => Promise<NotifyResult>;
93
+ /**
94
+ * 運用通知 Lambda のハンドラを作る。アプリのエントリは、これを export するだけ:
95
+ * `export const handler = createOpsNotifyHandler();`
96
+ */
97
+ export declare function createOpsNotifyHandler(options?: OpsNotifyHandlerOptions): Handler;
98
+ /** 設定からハンドラを組み立てる(`createOpsNotifyHandler` の中身。設定を自前で用意するとき・テスト用) */
99
+ export declare function buildOpsNotifyHandler(config: OpsNotifyConfig, options?: OpsNotifyHandlerOptions): Handler;
100
+ /**
101
+ * alerts の記録(ADMIN_BASE_URL があるときだけ)。集計(ID・件数)は通知ストアの行(UpdateItem だけ)、
102
+ * レコードは Records の IAM URL(管理者の一覧と同じ経路)に書く。無ければ何も足さない(記録しない)
103
+ */
104
+ export declare function opsNotifyAlertOptions(config: OpsNotifyConfig, index: AlertIndex, region: string, options?: OpsNotifyHandlerOptions): Pick<NotifyHandlerOptions, 'recorder' | 'adminBaseUrl' | 'region' | 'skipRecordLogGroups' | 'recordLimits' | 'recordBreaker'>;
105
+ export {};
106
+ //# sourceMappingURL=ops-notify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops-notify.d.ts","sourceRoot":"","sources":["../../src/notify/ops-notify.ts"],"names":[],"mappings":"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"}