Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changeset/webhooks-drop-dead-delivery-i18n.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
"@objectstack/plugin-webhooks": patch
---

chore(plugin-webhooks): drop the dead sys_webhook_delivery i18n blocks

`sys_webhook_delivery` was removed from `@objectstack/plugin-webhooks` when
outbound delivery moved to `@objectstack/service-messaging` (`sys_http_delivery`,
ADR-0018 M3), but its translation blocks lingered in all four generated locale
bundles (en / zh-CN / ja-JP / es-ES) — loaded at runtime yet referenced by
nothing, since the object no longer exists in this plugin.

- Removed the `sys_webhook_delivery` node from each `*.objects.generated.ts`
bundle; `WebhooksTranslations` now carries only `sys_webhook`.
- Corrected the stale ownership comment on `SysWebhook` that still named
`sys_webhook_delivery` as a live sibling.

(The dangling `SysWebhookDelivery` import in `scripts/i18n-extract.config.ts`
was fixed independently on `main` by #3489, so it is not part of this change.)
9 changes: 4 additions & 5 deletions packages/plugins/plugin-webhooks/src/sys-webhook.object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@ import { ObjectSchema, Field } from '@objectstack/spec/data';
* (ADR-0018 M3 — `sys_http_delivery`, drained by the messaging dispatcher).
*
* Ownership (ADR-0029 K2.a): this object is **owned by
* `@objectstack/plugin-webhooks`** — the plugin that consumes these rows —
* alongside its sibling `sys_webhook_delivery`. It used to live in the
* `@objectstack/platform-objects` monolith and be imported here; the
* definition now lives with its owner so the plugin ships both data and
* behavior as one unit.
* `@objectstack/plugin-webhooks`** — the plugin that consumes these rows. It
* used to live in the `@objectstack/platform-objects` monolith and be imported
* here; the definition now lives with its owner so the plugin ships both data
* and behavior as one unit.
*
* Platform-wide on purpose: every project (standalone, single-tenant,
* cloud) can integrate with external systems (Slack, Stripe, internal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,116 +72,5 @@ export const enObjects: NonNullable<TranslationData['objects']> = {
label: "All"
}
}
},
sys_webhook_delivery: {
label: "Webhook Delivery",
pluralLabel: "Webhook Deliveries",
description: "Durable outbox row for one webhook attempt. Managed by @objectstack/plugin-webhooks; do not write directly.",
fields: {
id: {
label: "Delivery ID",
help: "UUID — also doubles as the receiver-side idempotency key"
},
webhook_id: {
label: "Webhook ID",
help: "FK to sys_webhook.id (loosely coupled — denormalised URL/secret on row)"
},
event_id: {
label: "Event ID",
help: "Source event id; UNIQUE(event_id, webhook_id) for dedup"
},
event_type: {
label: "Event Type",
help: "e.g. data.record.created"
},
url: {
label: "Target URL",
help: "Snapshotted at enqueue so config edits do not rewrite live rows"
},
method: {
label: "Method"
},
headers_json: {
label: "Headers JSON"
},
secret: {
label: "HMAC Secret"
},
timeout_ms: {
label: "Timeout (ms)"
},
payload_json: {
label: "Payload JSON"
},
partition_key: {
label: "Partition",
help: "hash(webhook_id) mod partitionCount — precomputed for cheap WHERE"
},
status: {
label: "Status",
help: "pending | in_flight | success | failed | dead"
},
attempts: {
label: "Attempts",
help: "Number of POST attempts made so far"
},
claimed_by: {
label: "Claimed By"
},
claimed_at: {
label: "Claimed At (ms)"
},
next_retry_at: {
label: "Next Retry At (ms)"
},
last_attempted_at: {
label: "Last Attempted At (ms)"
},
response_code: {
label: "HTTP Status"
},
response_body: {
label: "Response Body (capped)"
},
error: {
label: "Error"
},
created_at: {
label: "Created At (ms)"
},
updated_at: {
label: "Updated At (ms)"
}
},
_views: {
recent: {
label: "Recent"
},
failures: {
label: "Failures"
},
in_flight: {
label: "In Flight"
},
pending: {
label: "Pending"
},
by_status: {
label: "By Status"
},
by_webhook: {
label: "By Webhook"
},
all_deliveries: {
label: "All"
}
},
_actions: {
redeliver: {
label: "Redeliver",
confirmText: "Replay this delivery? The receiver will get the original payload again — they must be idempotent on the X-Objectstack-Delivery header.",
successMessage: "Queued for redelivery"
}
}
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -72,116 +72,5 @@ export const esESObjects: NonNullable<TranslationData['objects']> = {
label: "Todos"
}
}
},
sys_webhook_delivery: {
label: "Webhook Delivery",
pluralLabel: "Webhook Deliveries",
description: "Durable outbox row for one webhook attempt. Managed by @objectstack/plugin-webhooks; do not write directly.",
fields: {
id: {
label: "Delivery ID",
help: "UUID — also doubles as the receiver-side idempotency key"
},
webhook_id: {
label: "Webhook ID",
help: "FK to sys_webhook.id (loosely coupled — denormalised URL/secret on row)"
},
event_id: {
label: "Event ID",
help: "Source event id; UNIQUE(event_id, webhook_id) for dedup"
},
event_type: {
label: "Event Type",
help: "e.g. data.record.created"
},
url: {
label: "Target URL",
help: "Snapshotted at enqueue so config edits do not rewrite live rows"
},
method: {
label: "Method"
},
headers_json: {
label: "Headers JSON"
},
secret: {
label: "HMAC Secret"
},
timeout_ms: {
label: "Timeout (ms)"
},
payload_json: {
label: "Payload JSON"
},
partition_key: {
label: "Partition",
help: "hash(webhook_id) mod partitionCount — precomputed for cheap WHERE"
},
status: {
label: "Status",
help: "pending | in_flight | success | failed | dead"
},
attempts: {
label: "Attempts",
help: "Number of POST attempts made so far"
},
claimed_by: {
label: "Claimed By"
},
claimed_at: {
label: "Claimed At (ms)"
},
next_retry_at: {
label: "Next Retry At (ms)"
},
last_attempted_at: {
label: "Last Attempted At (ms)"
},
response_code: {
label: "HTTP Status"
},
response_body: {
label: "Response Body (capped)"
},
error: {
label: "Error"
},
created_at: {
label: "Created At (ms)"
},
updated_at: {
label: "Updated At (ms)"
}
},
_views: {
recent: {
label: "Recent"
},
failures: {
label: "Failures"
},
in_flight: {
label: "In Flight"
},
pending: {
label: "Pending"
},
by_status: {
label: "By Status"
},
by_webhook: {
label: "By Webhook"
},
all_deliveries: {
label: "All"
}
},
_actions: {
redeliver: {
label: "Redeliver",
confirmText: "Replay this delivery? The receiver will get the original payload again — they must be idempotent on the X-Objectstack-Delivery header.",
successMessage: "Queued for redelivery"
}
}
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -72,116 +72,5 @@ export const jaJPObjects: NonNullable<TranslationData['objects']> = {
label: "すべて"
}
}
},
sys_webhook_delivery: {
label: "Webhook Delivery",
pluralLabel: "Webhook Deliveries",
description: "Durable outbox row for one webhook attempt. Managed by @objectstack/plugin-webhooks; do not write directly.",
fields: {
id: {
label: "Delivery ID",
help: "UUID — also doubles as the receiver-side idempotency key"
},
webhook_id: {
label: "Webhook ID",
help: "FK to sys_webhook.id (loosely coupled — denormalised URL/secret on row)"
},
event_id: {
label: "Event ID",
help: "Source event id; UNIQUE(event_id, webhook_id) for dedup"
},
event_type: {
label: "Event Type",
help: "e.g. data.record.created"
},
url: {
label: "Target URL",
help: "Snapshotted at enqueue so config edits do not rewrite live rows"
},
method: {
label: "Method"
},
headers_json: {
label: "Headers JSON"
},
secret: {
label: "HMAC Secret"
},
timeout_ms: {
label: "Timeout (ms)"
},
payload_json: {
label: "Payload JSON"
},
partition_key: {
label: "Partition",
help: "hash(webhook_id) mod partitionCount — precomputed for cheap WHERE"
},
status: {
label: "Status",
help: "pending | in_flight | success | failed | dead"
},
attempts: {
label: "Attempts",
help: "Number of POST attempts made so far"
},
claimed_by: {
label: "Claimed By"
},
claimed_at: {
label: "Claimed At (ms)"
},
next_retry_at: {
label: "Next Retry At (ms)"
},
last_attempted_at: {
label: "Last Attempted At (ms)"
},
response_code: {
label: "HTTP Status"
},
response_body: {
label: "Response Body (capped)"
},
error: {
label: "Error"
},
created_at: {
label: "Created At (ms)"
},
updated_at: {
label: "Updated At (ms)"
}
},
_views: {
recent: {
label: "Recent"
},
failures: {
label: "Failures"
},
in_flight: {
label: "In Flight"
},
pending: {
label: "Pending"
},
by_status: {
label: "By Status"
},
by_webhook: {
label: "By Webhook"
},
all_deliveries: {
label: "All"
}
},
_actions: {
redeliver: {
label: "Redeliver",
confirmText: "Replay this delivery? The receiver will get the original payload again — they must be idempotent on the X-Objectstack-Delivery header.",
successMessage: "Queued for redelivery"
}
}
}
};
Loading