@exabugs/dynamodb-client 1.17.0 → 1.19.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.
- package/CHANGELOG.md +26 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.d.ts +18 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.js +34 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.d.ts +10 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.js +24 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.d.ts +18 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.js +19 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.d.ts +51 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.js +35 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/index.d.ts +8 -0
- package/dist/integrations/react-admin/components/Alerts/index.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/index.js +5 -0
- package/dist/integrations/react-admin/components/Alerts/index.js.map +1 -0
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.d.ts +16 -0
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.js +27 -3
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.js.map +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/index.d.ts +2 -2
- package/dist/integrations/react-admin/components/CloudWatchLog/index.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/index.js +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/index.js.map +1 -1
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.d.ts +29 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.js +38 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.d.ts +9 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.js +50 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.d.ts +8 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.js +5 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.d.ts +19 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.js +20 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.d.ts +96 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.js +99 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.js.map +1 -0
- package/dist/integrations/react-admin/components/index.d.ts +7 -3
- package/dist/integrations/react-admin/components/index.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/index.js +5 -2
- package/dist/integrations/react-admin/components/index.js.map +1 -1
- package/dist/integrations/react-admin/components/shared/LabeledIf.d.ts +23 -0
- package/dist/integrations/react-admin/components/shared/LabeledIf.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/shared/LabeledIf.js +13 -0
- package/dist/integrations/react-admin/components/shared/LabeledIf.js.map +1 -0
- package/dist/integrations/react-admin/components/shared/messages.d.ts +9 -0
- package/dist/integrations/react-admin/components/shared/messages.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/shared/messages.js +9 -0
- package/dist/integrations/react-admin/components/shared/messages.js.map +1 -0
- package/dist/integrations/react-admin/index.d.ts +6 -2
- package/dist/integrations/react-admin/index.d.ts.map +1 -1
- package/dist/integrations/react-admin/index.js +5 -1
- package/dist/integrations/react-admin/index.js.map +1 -1
- package/dist/notify/alerts-cleanup.d.ts +63 -0
- package/dist/notify/alerts-cleanup.d.ts.map +1 -0
- package/dist/notify/alerts-cleanup.js +75 -0
- package/dist/notify/alerts-cleanup.js.map +1 -0
- package/dist/notify/index.d.ts +2 -0
- package/dist/notify/index.d.ts.map +1 -1
- package/dist/notify/index.js +1 -0
- package/dist/notify/index.js.map +1 -1
- package/dist/server/handler.cjs +3 -3
- package/dist/server/media-handler.cjs +2 -2
- package/dist/server/media-process-handler-dlq.cjs +2 -2
- package/dist/server/media-process-handler.cjs +2 -2
- package/dist/system-changes/index.d.ts +2 -0
- package/dist/system-changes/index.d.ts.map +1 -1
- package/dist/system-changes/index.js +1 -0
- package/dist/system-changes/index.js.map +1 -1
- package/dist/system-changes/labels.d.ts +23 -0
- package/dist/system-changes/labels.d.ts.map +1 -0
- package/dist/system-changes/labels.js +32 -0
- package/dist/system-changes/labels.js.map +1 -0
- package/dist/system-changes/record.d.ts +1 -1
- package/dist/system-changes/record.d.ts.map +1 -1
- package/dist/system-changes/record.js +1 -1
- package/dist/system-changes/record.js.map +1 -1
- package/dist/system-changes/slack.d.ts.map +1 -1
- package/dist/system-changes/slack.js +6 -27
- package/dist/system-changes/slack.js.map +1 -1
- package/docs/NOTIFY.md +25 -16
- package/docs/RECORDS_CLIENT.md +1 -1
- package/docs/SYSTEM_CHANGES.md +2 -0
- package/package.json +9 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* alerts の定時削除 Lambda のハンドラのファクトリ(ADR 0006 の (e)。ADR 0003 の保存期間)。
|
|
3
|
+
*
|
|
4
|
+
* 運用通知の記録(alerts)のうち、最後の発生から保存期間(既定 28 日)を過ぎたものを消す
|
|
5
|
+
* (ネイティブ TTL は効かない)。削除そのものは `cleanupAlerts`(変えない)。ここは、その周りの定型
|
|
6
|
+
* (1 回の上限、結果の構造化ログ、環境変数の確認、Records への接続と close)を持つ。docs/NOTIFY.md
|
|
7
|
+
*
|
|
8
|
+
* 設定は、オプションが環境変数より優先される(どちらも呼び出しのたびに読む):
|
|
9
|
+
* - `app`: PROJECT_NAME(必須)
|
|
10
|
+
* - `records.url` / `records.region`: RECORDS_IAM_URL(必須)/ AWS_REGION
|
|
11
|
+
*
|
|
12
|
+
* 失敗の扱い: 削除の失敗は握りつぶさず、構造化ログ(error。target は alerts)に出す。例外にはしない
|
|
13
|
+
* (このロググループは通知 Lambda が購読するので管理者に届く。Lambda の失敗としても通知すると 2 通になる。
|
|
14
|
+
* target が alerts なので alerts には記録されず、ループしない)。接続などの想定外の例外は、そのまま Lambda の
|
|
15
|
+
* 失敗になる。
|
|
16
|
+
*/
|
|
17
|
+
import { withCollection, } from '../client/recordsClient.js';
|
|
18
|
+
import { ALERTS_RESOURCE, ALERT_RETENTION_DAYS, cleanupAlerts, } from './alerts.js';
|
|
19
|
+
import { logJson } from './logger.js';
|
|
20
|
+
/**
|
|
21
|
+
* 1 回の実行で消す上限の既定。1 日 1 回の実行で、1 日に増える数より十分大きくする
|
|
22
|
+
* (指紋ごとに 1 件なので、通常は数件〜数十件。50 件 × 10 ページ = 読み・削除が 20 回で、時間切れにならない)
|
|
23
|
+
*/
|
|
24
|
+
export const ALERTS_CLEANUP_MAX_PER_RUN = 500;
|
|
25
|
+
/** 削除を 1 回行い、結果を構造化ログに出す(失敗は error、上限で止めたら warn、それ以外は info) */
|
|
26
|
+
export async function runAlertsCleanup(collection, options) {
|
|
27
|
+
const maxPerRun = options.maxPerRun ?? ALERTS_CLEANUP_MAX_PER_RUN;
|
|
28
|
+
const log = options.log ??
|
|
29
|
+
((level, fields) => logJson(level, { app: options.app, target: ALERTS_RESOURCE, ...fields }));
|
|
30
|
+
const r = await cleanupAlerts({
|
|
31
|
+
collection,
|
|
32
|
+
olderThanDays: options.olderThanDays ?? ALERT_RETENTION_DAYS,
|
|
33
|
+
maxPerRun,
|
|
34
|
+
now: options.now,
|
|
35
|
+
});
|
|
36
|
+
const summary = { deleted: r.deleted, failed: r.failed, more: r.more };
|
|
37
|
+
if (r.errors.length > 0) {
|
|
38
|
+
log('error', {
|
|
39
|
+
event: 'ALERTS_CLEANUP_FAILED',
|
|
40
|
+
message: `alerts の削除に失敗しました: ${r.errors.join(' / ')}`.slice(0, 1000),
|
|
41
|
+
action: '翌日の定時実行で再試行されます。続く場合は Records Lambda のログを確認してください',
|
|
42
|
+
...summary,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
else if (r.more) {
|
|
46
|
+
log('warn', {
|
|
47
|
+
event: 'ALERTS_CLEANUP_BACKLOG',
|
|
48
|
+
message: `1 回の上限(${maxPerRun} 件)まで消しました。残りは翌日に消します`,
|
|
49
|
+
action: '毎日続く場合は、通知の発生源(同じ指紋で増え続けていないか)を確認してください',
|
|
50
|
+
...summary,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
log('info', { message: 'alerts cleanup completed', ...summary });
|
|
55
|
+
}
|
|
56
|
+
return r;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 削除の定時 Lambda のハンドラを作る。アプリのエントリは、これを export するだけ:
|
|
60
|
+
* `export const handler = createAlertsCleanupHandler();`
|
|
61
|
+
* 呼び出しごとに Records(IAM 版 Function URL)に接続し、終わったら閉じる(`withCollection`)。
|
|
62
|
+
*/
|
|
63
|
+
export function createAlertsCleanupHandler(options = {}) {
|
|
64
|
+
const { app: appOption, records, collection: wrap, ...run } = options;
|
|
65
|
+
return async () => {
|
|
66
|
+
const app = appOption ?? (process.env.PROJECT_NAME || undefined);
|
|
67
|
+
if (!app)
|
|
68
|
+
throw new Error('PROJECT_NAME environment variable is required');
|
|
69
|
+
const url = records?.url ?? (process.env.RECORDS_IAM_URL || undefined);
|
|
70
|
+
if (!url)
|
|
71
|
+
throw new Error('RECORDS_IAM_URL environment variable is required');
|
|
72
|
+
return withCollection(ALERTS_RESOURCE, (raw) => runAlertsCleanup(wrap ? wrap(raw) : raw, { ...run, app }), { ...records, url });
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=alerts-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts-cleanup.js","sourceRoot":"","sources":["../../src/notify/alerts-cleanup.ts"],"names":[],"mappings":"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"}
|
package/dist/notify/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
export { createAdminDirectory, emailsOf, normalizeEmail } from './admins.js';
|
|
8
8
|
export type { AdminDirectoryOptions, AdminRecord, AdminsLister } from './admins.js';
|
|
9
9
|
export { ALERTS_RESOURCE, ALERT_RETENTION_DAYS, alertKeyOf, cleanupAlerts, createAlertRecorder, } from './alerts.js';
|
|
10
|
+
export { ALERTS_CLEANUP_MAX_PER_RUN, createAlertsCleanupHandler, runAlertsCleanup, } from './alerts-cleanup.js';
|
|
11
|
+
export type { AlertsCleanupHandlerOptions, AlertsCleanupLog, AlertsCleanupRow, RunAlertsCleanupOptions, } from './alerts-cleanup.js';
|
|
10
12
|
export type { AlertInput, AlertOccurrence, AlertRecord, AlertRecorder, AlertRecorderOptions, AlertsCleanupCollection, AlertsCollection, CleanupAlertsOptions, CleanupAlertsResult, } from './alerts.js';
|
|
11
13
|
export { createEmailChannel, sesSender } from './channels/email.js';
|
|
12
14
|
export type { EmailMessage, EmailOptions, EmailSender, SesSendInput } from './channels/email.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACpE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,WAAW,EACX,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACpE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjF,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,WAAW,EACX,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/notify/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { createAdminDirectory, emailsOf, normalizeEmail } from './admins.js';
|
|
8
8
|
export { ALERTS_RESOURCE, ALERT_RETENTION_DAYS, alertKeyOf, cleanupAlerts, createAlertRecorder, } from './alerts.js';
|
|
9
|
+
export { ALERTS_CLEANUP_MAX_PER_RUN, createAlertsCleanupHandler, runAlertsCleanup, } from './alerts-cleanup.js';
|
|
9
10
|
export { createEmailChannel, sesSender } from './channels/email.js';
|
|
10
11
|
export { createSlackChannel } from './channels/slack.js';
|
|
11
12
|
export { createNotifyHandler } from './handler.js';
|
package/dist/notify/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notify/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAkB7B,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,OAAO,GACR,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/server/handler.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// @exabugs/dynamodb-client v1.
|
|
2
|
-
// Built: 2026-10-
|
|
1
|
+
// @exabugs/dynamodb-client v1.19.0
|
|
2
|
+
// Built: 2026-10-24T07:44:43.731Z
|
|
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.
|
|
38983
|
+
const version = "1.19.0";
|
|
38984
38984
|
return createSuccessResponse({ version, timestamp: (/* @__PURE__ */ new Date()).toISOString() }, requestId);
|
|
38985
38985
|
}
|
|
38986
38986
|
if (event.requestContext.http.method !== "POST") {
|
|
@@ -11,5 +11,7 @@ export { CHANGE_ID_PATTERN, LIMITS, SYSTEM_CHANGES_RESOURCE, SYSTEM_CHANGE_KINDS
|
|
|
11
11
|
export type { RunDecision, StoredSystemChange, SystemChangeInput, SystemChangeKind, SystemChangeRecord, SystemChangeResult, } from './record.js';
|
|
12
12
|
export { RECORD_HTTP_TIMEOUT_MS, SLACK_HTTP_TIMEOUT_MS, recordAndNotify, recordSystemChange, systemChangesCollectionOf, } from './recorder.js';
|
|
13
13
|
export type { RecordAndNotifyOptions, RecordOutcome, RecordSystemChangeOptions, SystemChangeLog, SystemChangeLogLevel, SystemChangeResponse, SystemChangeSlackOptions, SystemChangesCollection, } from './recorder.js';
|
|
14
|
+
export { SYSTEM_CHANGE_KIND_LABELS, SYSTEM_CHANGE_RESULT_LABELS, parseLambdaReleases, } from './labels.js';
|
|
15
|
+
export type { LambdaRelease } from './labels.js';
|
|
14
16
|
export { formatDuration, formatSystemChangeMessage, lambdaReleaseNames, shouldNotify, } from './slack.js';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/system-changes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/system-changes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,yBAAyB,EACzB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -8,5 +8,6 @@
|
|
|
8
8
|
export { createSystemChangeHandler } from './handler.js';
|
|
9
9
|
export { CHANGE_ID_PATTERN, LIMITS, SYSTEM_CHANGES_RESOURCE, SYSTEM_CHANGE_KINDS, SYSTEM_CHANGE_RESULTS, SystemChangeInputError, decideRunWrite, isFinished, parseSystemChangeInput, toSystemChangeRecord, } from './record.js';
|
|
10
10
|
export { RECORD_HTTP_TIMEOUT_MS, SLACK_HTTP_TIMEOUT_MS, recordAndNotify, recordSystemChange, systemChangesCollectionOf, } from './recorder.js';
|
|
11
|
+
export { SYSTEM_CHANGE_KIND_LABELS, SYSTEM_CHANGE_RESULT_LABELS, parseLambdaReleases, } from './labels.js';
|
|
11
12
|
export { formatDuration, formatSystemChangeMessage, lambdaReleaseNames, shouldNotify, } from './slack.js';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system-changes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAWvB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system-changes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAWvB,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* システム変更履歴の表示の部品(種別・結果の日本語のラベルと、details.lambdaReleases の取り出し。純粋な関数だけ)。
|
|
3
|
+
*
|
|
4
|
+
* Slack の文言(slack.ts)と、管理画面(integrations/react-admin の SystemChangesList / SystemChangesShow)が使う。
|
|
5
|
+
* 同じ表と取り出しを 2 か所に持たない(ADR 0006 の段階 4)。依存は型だけ(ブラウザのバンドルに Lambda の部品を入れない)。
|
|
6
|
+
*/
|
|
7
|
+
import type { SystemChangeKind, SystemChangeResult } from './record.js';
|
|
8
|
+
/** 種別の日本語のラベル(キーの順は SYSTEM_CHANGE_KINDS と同じ。管理画面のフィルタの選択肢の順にもなる) */
|
|
9
|
+
export declare const SYSTEM_CHANGE_KIND_LABELS: Readonly<Record<SystemChangeKind, string>>;
|
|
10
|
+
/** 結果の日本語のラベル(キーの順は SYSTEM_CHANGE_RESULTS と同じ) */
|
|
11
|
+
export declare const SYSTEM_CHANGE_RESULT_LABELS: Readonly<Record<SystemChangeResult, string>>;
|
|
12
|
+
/** details.lambdaReleases の 1 件(ラッパーが infra の終了に埋め込む。change は create / replace / code など) */
|
|
13
|
+
export interface LambdaRelease {
|
|
14
|
+
target: string;
|
|
15
|
+
result: 'succeeded' | 'failed';
|
|
16
|
+
change?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* details.lambdaReleases の値から、形の合う要素だけを取り出す(関数名が空でない文字列、結果が成功・失敗)。
|
|
20
|
+
* 配列でなければ空。change は文字列のときだけ残す
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseLambdaReleases(value: unknown): LambdaRelease[];
|
|
23
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/system-changes/labels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAK/E,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAKjF,CAAC;AAEL,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,EAAE,CASnE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** 種別の日本語のラベル(キーの順は SYSTEM_CHANGE_KINDS と同じ。管理画面のフィルタの選択肢の順にもなる) */
|
|
2
|
+
export const SYSTEM_CHANGE_KIND_LABELS = Object.freeze({
|
|
3
|
+
'app-release': 'アプリのリリース',
|
|
4
|
+
ota: 'OTA の配信',
|
|
5
|
+
infra: 'インフラの変更',
|
|
6
|
+
'lambda-release': 'Lambda のリリース',
|
|
7
|
+
});
|
|
8
|
+
/** 結果の日本語のラベル(キーの順は SYSTEM_CHANGE_RESULTS と同じ) */
|
|
9
|
+
export const SYSTEM_CHANGE_RESULT_LABELS = Object.freeze({
|
|
10
|
+
started: '開始',
|
|
11
|
+
succeeded: '成功',
|
|
12
|
+
failed: '失敗',
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* details.lambdaReleases の値から、形の合う要素だけを取り出す(関数名が空でない文字列、結果が成功・失敗)。
|
|
16
|
+
* 配列でなければ空。change は文字列のときだけ残す
|
|
17
|
+
*/
|
|
18
|
+
export function parseLambdaReleases(value) {
|
|
19
|
+
if (!Array.isArray(value))
|
|
20
|
+
return [];
|
|
21
|
+
return value.flatMap((v) => {
|
|
22
|
+
if (typeof v !== 'object' || v === null)
|
|
23
|
+
return [];
|
|
24
|
+
const { target, result, change } = v;
|
|
25
|
+
if (typeof target !== 'string' || target === '')
|
|
26
|
+
return [];
|
|
27
|
+
if (result !== 'succeeded' && result !== 'failed')
|
|
28
|
+
return [];
|
|
29
|
+
return [{ target, result, ...(typeof change === 'string' ? { change } : {}) }];
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/system-changes/labels.ts"],"names":[],"mappings":"AAQA,oEAAoE;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAA+C,MAAM,CAAC,MAAM,CAAC;IACjG,aAAa,EAAE,UAAU;IACzB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,gBAAgB,EAAE,cAAc;CACjC,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,2BAA2B,GACtC,MAAM,CAAC,MAAM,CAAC;IACZ,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AASL;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAU,EAAmB,EAAE;QACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAA4B,CAAC;QAChE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3D,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** リソース名(Records のコレクション名。管理画面の URL〔/systemChanges/{id}/show〕にも使う) */
|
|
2
2
|
export declare const SYSTEM_CHANGES_RESOURCE = "systemChanges";
|
|
3
|
-
/**
|
|
3
|
+
/** 種別(許可リスト)。日本語のラベル(管理画面・Slack の文言)は labels.ts の SYSTEM_CHANGE_KIND_LABELS */
|
|
4
4
|
export declare const SYSTEM_CHANGE_KINDS: readonly ["app-release", "ota", "infra", "lambda-release"];
|
|
5
5
|
/** 結果(許可リスト) */
|
|
6
6
|
export declare const SYSTEM_CHANGE_RESULTS: readonly ["started", "succeeded", "failed"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"AAQA,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"AAQA,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,4DAA6D,CAAC;AAC9F,gBAAgB;AAChB,eAAO,MAAM,qBAAqB,6CAA8C,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,oCAAoC;AACpC,eAAO,MAAM,MAAM;;;;;IAKjB,wDAAwD;;CAEhD,CAAC;AAgBX,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0CAA0C;AAC1C,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/F,iCAAiC;AACjC,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAKD,eAAO,MAAM,aAAa,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAIvB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,GAAG,GAAE,MAAM,IAAuB,GACjC,kBAAkB,CAEpB;AAED,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,GAAG,GAAE,MAAM,IAAuB,GACjC;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAuFnD;AAED,iCAAiC;AACjC,eAAO,MAAM,UAAU,GAAI,GAAG,kBAAkB,KAAG,OAA0B,CAAC;AAE9E;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAClF;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,aAAa,GAAG,kBAAkB,GAAG,UAAU,GAAG,iBAAiB,CAAC;CAC7E,CAAC;AAEN,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,EACnC,MAAM,EAAE,kBAAkB,GACzB,WAAW,CA8Cb"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { cleanLine } from '../notify/policy.js';
|
|
8
8
|
/** リソース名(Records のコレクション名。管理画面の URL〔/systemChanges/{id}/show〕にも使う) */
|
|
9
9
|
export const SYSTEM_CHANGES_RESOURCE = 'systemChanges';
|
|
10
|
-
/**
|
|
10
|
+
/** 種別(許可リスト)。日本語のラベル(管理画面・Slack の文言)は labels.ts の SYSTEM_CHANGE_KIND_LABELS */
|
|
11
11
|
export const SYSTEM_CHANGE_KINDS = ['app-release', 'ota', 'infra', 'lambda-release'];
|
|
12
12
|
/** 結果(許可リスト) */
|
|
13
13
|
export const SYSTEM_CHANGE_RESULTS = ['started', 'succeeded', 'failed'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAY1E;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAM5F;AA8BD,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASjD;AAED,8DAA8D;AAC9D,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,EACV,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAiBR;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACrD,OAAO,CAIT"}
|
|
@@ -9,18 +9,8 @@
|
|
|
9
9
|
* 所要時間(durationMs)があれば「所要 52 秒」の形で足す。
|
|
10
10
|
* 文言は asanowa(ADR-0044)の版に揃えた(ADR 0006 の決定。astro の「記録を省いた Lambda」は使わない)。
|
|
11
11
|
*/
|
|
12
|
+
import { SYSTEM_CHANGE_KIND_LABELS as KIND_LABEL, SYSTEM_CHANGE_RESULT_LABELS as RESULT_LABEL, parseLambdaReleases, } from './labels.js';
|
|
12
13
|
import { SYSTEM_CHANGES_RESOURCE } from './record.js';
|
|
13
|
-
const KIND_LABEL = {
|
|
14
|
-
'app-release': 'アプリのリリース',
|
|
15
|
-
ota: 'OTA の配信',
|
|
16
|
-
infra: 'インフラの変更',
|
|
17
|
-
'lambda-release': 'Lambda のリリース',
|
|
18
|
-
};
|
|
19
|
-
const RESULT_LABEL = {
|
|
20
|
-
started: '開始',
|
|
21
|
-
succeeded: '成功',
|
|
22
|
-
failed: '失敗',
|
|
23
|
-
};
|
|
24
14
|
const RESULT_MARK = {
|
|
25
15
|
started: '▶️',
|
|
26
16
|
succeeded: '✅',
|
|
@@ -33,22 +23,11 @@ const esc = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g,
|
|
|
33
23
|
* 形の合わない要素は飛ばす
|
|
34
24
|
*/
|
|
35
25
|
export function lambdaReleaseNames(value) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (typeof v !== 'object' || v === null)
|
|
42
|
-
continue;
|
|
43
|
-
const { target, result } = v;
|
|
44
|
-
if (typeof target !== 'string' || target === '')
|
|
45
|
-
continue;
|
|
46
|
-
if (result === 'succeeded')
|
|
47
|
-
succeeded.push(target);
|
|
48
|
-
else if (result === 'failed')
|
|
49
|
-
failed.push(target);
|
|
50
|
-
}
|
|
51
|
-
return { succeeded, failed };
|
|
26
|
+
const releases = parseLambdaReleases(value);
|
|
27
|
+
return {
|
|
28
|
+
succeeded: releases.filter((r) => r.result === 'succeeded').map((r) => r.target),
|
|
29
|
+
failed: releases.filter((r) => r.result === 'failed').map((r) => r.target),
|
|
30
|
+
};
|
|
52
31
|
}
|
|
53
32
|
/** details のうち、Slack に出す項目(件数と、リリースされた Lambda の名前)。上限を設けて、長くしない */
|
|
54
33
|
function detailLines(details) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"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"}
|
package/docs/NOTIFY.md
CHANGED
|
@@ -181,31 +181,40 @@ export const handler = createNotifyHandler({
|
|
|
181
181
|
|
|
182
182
|
### 削除(定時 Lambda)
|
|
183
183
|
|
|
184
|
-
ネイティブ TTL は効かない(`ttl` が最上位の属性にならない)。アプリの定時 Lambda(1 日 1
|
|
184
|
+
ネイティブ TTL は効かない(`ttl` が最上位の属性にならない)。アプリの定時 Lambda(EventBridge で 1 日 1 回など)のエントリは、ハンドラのファクトリを export するだけ(1.18.0。ADR 0006 の (e)):
|
|
185
185
|
|
|
186
186
|
```ts
|
|
187
|
-
import {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
export const handler =
|
|
191
|
-
const client = new DynamoClient(process.env.RECORDS_IAM_URL!, { auth: { region } });
|
|
192
|
-
await client.connect();
|
|
193
|
-
try {
|
|
194
|
-
const r = await cleanupAlerts({ collection: client.db().collection('alerts'), maxPerRun: 500 });
|
|
195
|
-
if (r.errors.length > 0) throw new Error(`alerts の削除に失敗: ${r.errors.join(' / ')}`);
|
|
196
|
-
return r; // more: true なら、次回に残りを消す
|
|
197
|
-
} finally {
|
|
198
|
-
await client.close();
|
|
199
|
-
}
|
|
200
|
-
};
|
|
187
|
+
import { createAlertsCleanupHandler } from '@exabugs/dynamodb-client/notify';
|
|
188
|
+
|
|
189
|
+
// 環境変数: PROJECT_NAME(ログの app)/ RECORDS_IAM_URL(必須)/ AWS_REGION
|
|
190
|
+
export const handler = createAlertsCleanupHandler();
|
|
201
191
|
```
|
|
202
192
|
|
|
193
|
+
- 呼び出しごとに `withCollection('alerts', …)` で Records に接続し、終わったら閉じる。`runAlertsCleanup` → `cleanupAlerts` を 1 回行う
|
|
194
|
+
- 結果は構造化ログ(`logJson`。`app` と `target: 'alerts'` が付く)に出す: 失敗は error(`ALERTS_CLEANUP_FAILED`)、上限で止めたら warn(`ALERTS_CLEANUP_BACKLOG`)、それ以外は info(`alerts cleanup completed`)。**削除の失敗は例外にしない**(このロググループを通知 Lambda が購読していれば管理者に届く。Lambda の失敗としても通知すると 2 通になる。target が alerts なので alerts には記録されず、ループしない)。接続などの想定外の例外は、そのまま Lambda の失敗になる
|
|
195
|
+
- オプション(どれも任意。環境変数より優先):
|
|
196
|
+
|
|
197
|
+
| オプション | 既定 | 内容 |
|
|
198
|
+
| --------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
199
|
+
| `app` | `PROJECT_NAME` | ログの `app` |
|
|
200
|
+
| `records` | `RECORDS_IAM_URL` / `AWS_REGION` | Records のクライアント(`url` / `region` / `timeout`。timeout は `DynamoClient` の既定) |
|
|
201
|
+
| `collection` | 生のコレクション | `(raw) => AlertsCleanupCollection`。読み取りを権限チェック層(astro の `authorizedCollection` など)に通すアプリは、受け取った生のコレクションを包んで返す |
|
|
202
|
+
| `olderThanDays` | `ALERT_RETENTION_DAYS`(28) | 保存期間(日)。`createAlertRecorder` の `retentionDays` と揃える |
|
|
203
|
+
| `maxPerRun` | `ALERTS_CLEANUP_MAX_PER_RUN`(500) | 1 回の実行で消す上限(残りは次回) |
|
|
204
|
+
| `log` | `logJson`(`app`・`target` 付き) | `(level, fields) => void` |
|
|
205
|
+
| `now` | 現在時刻 | テスト用 |
|
|
206
|
+
|
|
207
|
+
- 削除とログだけを使うとき(自前で接続する・別の入口から呼ぶ)は `runAlertsCleanup(collection, { app, olderThanDays?, maxPerRun?, log?, now? })`。削除だけなら `cleanupAlerts({ collection, olderThanDays?, maxPerRun?, now? })`(結果を返すだけで、ログは出さない)
|
|
208
|
+
- IAM: Records の IAM URL の呼び出し(`lambda:InvokeFunctionUrl` と `lambda:InvokeFunction`)だけ。DynamoDB の権限は要らない
|
|
209
|
+
|
|
210
|
+
`cleanupAlerts` の動き:
|
|
211
|
+
|
|
203
212
|
- `lastSeenAt` の昇順に条件なしで読み、期限内のものが出たら止める(`lastSeenAt: { $lt }` の範囲検索は、本体の不具合で `ValidationException` になるため。TODO.md)
|
|
204
213
|
- 読んだ ID は直ちに `deleteMany({ id: { $in } })` で消す(本体とシャドーを一緒に消す)。存在しない ID の削除は Records が warn を出す(それも通知に戻る)
|
|
205
214
|
- 失敗は `errors` / `failed` で返す(握りつぶさない)
|
|
206
215
|
|
|
207
216
|
### 管理画面(各アプリ)
|
|
208
217
|
|
|
209
|
-
-
|
|
218
|
+
- 一覧・詳細は、本ライブラリの `AlertsList` / `AlertsShow`(`@exabugs/dynamodb-client/integrations/react-admin`。1.19.0。使い方は [react-admin-integration.md](react-admin-integration.md#運用の画面alertssystemchanges))を使う。読み取り専用(作成・編集・一括操作・書き出しなし)。ただし読み取り専用は UI だけの担保(Records 本体はリソースごとの認可を持たない)。管理者以外から `alerts` を読めないことは、各アプリの権限で確認する
|
|
210
219
|
- URL は `<adminBaseUrl>/alerts/<id>/show`(BrowserRouter)。未ログインで開くと、ログイン後にダッシュボードへ飛んで遷移先が消えるので、各アプリで元の URL に戻す処理が要る
|
|
211
220
|
- 詳細に `CloudWatchLogButton`(`@exabugs/dynamodb-client/integrations/react-admin`)を置ける。AWS を操作できる人向けの補助で、ログ参照(既定 `lastLog`、`source="firstLog"` も可)が無ければ何も描画しない。リージョン・ドメイン・時間幅(前後 5 分)は部品が決める。商用・中国(`cn-*`)・GovCloud(`us-gov-*`)以外のリージョン(ISO など)や形の不正なリージョンでは、何も描画しない。URL の形式は、ap-northeast-1 の実機のコンソールで確認済み。`aws-cn` / `aws-us-gov` のドメインは未確認(ADR 0003)
|
package/docs/RECORDS_CLIENT.md
CHANGED
|
@@ -9,7 +9,7 @@ Lambda などのサーバー側から Records(IAM 版 Function URL)を呼ぶ
|
|
|
9
9
|
| `lazyCollection(name, options?)` | 最初の使用時に 1 回だけ接続し、コンテナ内で再利用。失敗はキャッシュしない。`.reset()` で破棄 |
|
|
10
10
|
| `createAdminDirectory(options?)` | `@exabugs/dynamodb-client/notify`。`admins` の全件から通知の宛先(メール)を返す |
|
|
11
11
|
|
|
12
|
-
システム変更履歴の記録 Lambda(`createSystemChangeHandler
|
|
12
|
+
システム変更履歴の記録 Lambda(`createSystemChangeHandler`。[SYSTEM_CHANGES.md](SYSTEM_CHANGES.md))と alerts の定時削除 Lambda(`createAlertsCleanupHandler`。[NOTIFY.md](NOTIFY.md))も、内部で `withCollection` を使う。
|
|
13
13
|
|
|
14
14
|
`options`: `url`(省略時は環境変数 `RECORDS_IAM_URL`)、`region`(省略時は `AWS_REGION`、無ければ `REGION`)、`timeout`(ms。Records の Lambda の timeout より短くする)。
|
|
15
15
|
|
package/docs/SYSTEM_CHANGES.md
CHANGED
|
@@ -100,6 +100,8 @@ export const handler = createSystemChangeHandler({
|
|
|
100
100
|
- `systemChangesCollectionOf(raw)`: Records のコレクションを書き込み先にする
|
|
101
101
|
- `parseSystemChangeInput` / `toSystemChangeRecord` / `decideRunWrite`: 純粋な関数
|
|
102
102
|
- `formatSystemChangeMessage(app, env, record, id, adminBaseUrl?)` / `formatDuration` / `lambdaReleaseNames` / `shouldNotify`
|
|
103
|
+
- 表示の部品(`labels.ts`。Slack の文言と管理画面が使う): `SYSTEM_CHANGE_KIND_LABELS` / `SYSTEM_CHANGE_RESULT_LABELS`(日本語のラベル)、`parseLambdaReleases(value)`(`details.lambdaReleases` の形の合う要素だけ。`lambdaReleaseNames` もこれを使う)
|
|
104
|
+
- 管理画面の一覧・詳細は `SystemChangesList` / `SystemChangesShow`(`@exabugs/dynamodb-client/integrations/react-admin`。1.19.0。[react-admin-integration.md](react-admin-integration.md#運用の画面alertssystemchanges))
|
|
103
105
|
- 投稿は notify の `postSlackText`(`createSlackChannel` と同じ送信。URL の接頭辞の確認、URL を出さないエラー)
|
|
104
106
|
|
|
105
107
|
## テスト
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exabugs/dynamodb-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.0",
|
|
4
4
|
"description": "DynamoDB Single-Table Client SDK with MongoDB-like API, Shadow Records, and Lambda implementation for serverless applications",
|
|
5
5
|
"author": "exabugs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -132,9 +132,13 @@
|
|
|
132
132
|
}
|
|
133
133
|
},
|
|
134
134
|
"peerDependencies": {
|
|
135
|
+
"@mui/material": "^5.16.12 || ^6.0.0 || ^7.0.0",
|
|
135
136
|
"react-admin": "^5.0.0"
|
|
136
137
|
},
|
|
137
138
|
"peerDependenciesMeta": {
|
|
139
|
+
"@mui/material": {
|
|
140
|
+
"optional": true
|
|
141
|
+
},
|
|
138
142
|
"react-admin": {
|
|
139
143
|
"optional": true
|
|
140
144
|
}
|
|
@@ -180,6 +184,9 @@
|
|
|
180
184
|
"@eslint/js": "^9.0.0",
|
|
181
185
|
"@faker-js/faker": "^10.2.0",
|
|
182
186
|
"@redocly/cli": "^2.16.0",
|
|
187
|
+
"@testing-library/dom": "^10.4.2",
|
|
188
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
189
|
+
"@testing-library/react": "^16.3.3",
|
|
183
190
|
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
184
191
|
"@types/aws-lambda": "^8.10.0",
|
|
185
192
|
"@types/ngeohash": "^0.6.8",
|
|
@@ -190,6 +197,7 @@
|
|
|
190
197
|
"esbuild": "^0.27.1",
|
|
191
198
|
"eslint": "^9.0.0",
|
|
192
199
|
"globals": "^15.0.0",
|
|
200
|
+
"jsdom": "^26.1.0",
|
|
193
201
|
"orval": "^8.2.0",
|
|
194
202
|
"prettier": "^3.0.0",
|
|
195
203
|
"react-admin": "^5.0.0",
|