@objectstack/plugin-webhooks 17.3.0 → 17.4.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 +191 -0
- package/dist/{chunk-DRHJ2M45.cjs → chunk-CWE6CIEZ.cjs} +1 -1
- package/dist/chunk-CWE6CIEZ.cjs.map +1 -0
- package/dist/{chunk-XERWWQKN.js → chunk-MEX2VC7T.js} +1 -1
- package/dist/chunk-MEX2VC7T.js.map +1 -0
- package/dist/index.cjs +188 -81
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +90 -2
- package/dist/index.d.ts +90 -2
- package/dist/index.js +130 -23
- package/dist/index.js.map +1 -1
- package/dist/schema.cjs +2 -2
- package/dist/schema.d.cts +120 -97
- package/dist/schema.d.ts +120 -97
- package/dist/schema.js +1 -1
- package/dist/schema.js.map +1 -1
- package/dist/{translations-CPXQB2NM.js → translations-MNRJO53N.js} +1 -1
- package/dist/translations-MNRJO53N.js.map +1 -0
- package/dist/{translations-YO6CI7LZ.cjs → translations-VX3ONQXN.cjs} +1 -1
- package/dist/translations-VX3ONQXN.cjs.map +1 -0
- package/package.json +7 -7
- package/dist/chunk-DRHJ2M45.cjs.map +0 -1
- package/dist/chunk-XERWWQKN.js.map +0 -1
- package/dist/translations-CPXQB2NM.js.map +0 -1
- package/dist/translations-YO6CI7LZ.cjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@objectstack/plugin-webhooks",
|
|
3
|
-
"version": "17.
|
|
3
|
+
"version": "17.4.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Persistent, cluster-aware webhook dispatcher. Durable outbox + per-partition cluster.lock for exactly-once-ish delivery across nodes. See content/docs/concepts/webhook-delivery.mdx.",
|
|
6
6
|
"type": "module",
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@objectstack/core": "17.
|
|
33
|
-
"@objectstack/platform-objects": "17.
|
|
34
|
-
"@objectstack/service-messaging": "17.
|
|
35
|
-
"@objectstack/spec": "17.
|
|
32
|
+
"@objectstack/core": "17.4.0",
|
|
33
|
+
"@objectstack/platform-objects": "17.4.0",
|
|
34
|
+
"@objectstack/service-messaging": "17.4.0",
|
|
35
|
+
"@objectstack/spec": "17.4.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^26.2.0",
|
|
39
39
|
"tsx": "^4.23.12",
|
|
40
40
|
"typescript": "^6.0.3",
|
|
41
41
|
"vitest": "^4.1.10",
|
|
42
|
-
"@objectstack/metadata-core": "17.
|
|
43
|
-
"@objectstack/objectql": "17.
|
|
42
|
+
"@objectstack/metadata-core": "17.4.0",
|
|
43
|
+
"@objectstack/objectql": "17.4.0"
|
|
44
44
|
},
|
|
45
45
|
"keywords": [
|
|
46
46
|
"objectstack",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/objectstack/objectstack/packages/plugins/plugin-webhooks/dist/chunk-DRHJ2M45.cjs","../src/sys-webhook.object.ts"],"names":[],"mappings":"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","file":"/home/runner/work/objectstack/objectstack/packages/plugins/plugin-webhooks/dist/chunk-DRHJ2M45.cjs","sourcesContent":[null,"// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport { ObjectSchema, Field } from '@objectstack/spec/data';\n\n/**\n * sys_webhook — Outbound HTTP integration configuration (runtime).\n *\n * Persists a single {@link Webhook} envelope per row so administrators\n * can author, enable/disable, and edit webhook subscriptions from the\n * Studio UI without code changes. The canonical Zod schema for the\n * `definition_json` envelope lives at `@objectstack/spec/automation/webhook`.\n *\n * ## Two authoring doors, one row\n * Rows land here two ways, distinguished by the `managed_by` provenance column:\n * - **admin** — created/edited directly through this object's CRUD UI.\n * - **package** — declared in code (`defineStack({ webhooks })` /\n * `defineWebhook()`) and materialized on boot by\n * `bootstrapDeclaredWebhooks` (#3461). Re-seeded every boot, but an admin\n * edit stamps `customized: true` and freezes the row (seed-not-clobber,\n * mirrors `sys_sharing_rule` #2909).\n *\n * One row per `name`. This plugin's {@link AutoEnqueuer} loads active rows on\n * boot + on `sys_webhook:changed` events, and turns matching `data.record.*`\n * events into deliveries on the shared `service-messaging` HTTP outbox\n * (ADR-0018 M3 — `sys_http_delivery`, drained by the messaging dispatcher).\n *\n * Ownership (ADR-0029 K2.a): this object is **owned by\n * `@objectstack/plugin-webhooks`** — the plugin that consumes these rows. It\n * used to live in the `@objectstack/platform-objects` monolith and be imported\n * here; the definition now lives with its owner so the plugin ships both data\n * and behavior as one unit.\n *\n * Platform-wide on purpose: every project (standalone, single-tenant,\n * cloud) can integrate with external systems (Slack, Stripe, internal\n * services) the same way.\n *\n * @namespace sys\n */\nexport const SysWebhook = ObjectSchema.create({\n name: 'sys_webhook',\n label: 'Webhook',\n pluralLabel: 'Webhooks',\n icon: 'webhook',\n isSystem: true,\n managedBy: 'config',\n // Authoring a webhook from the UI requires a structured form for the\n // headers / auth / retry / payload blocks — the generic JSON textarea\n // is acceptable as a v1 until a dedicated builder lands. Re-enable\n // create/edit/delete so admins can at least toggle `active` and edit\n // simple URL/method fields without round-tripping through code.\n userActions: { create: true, edit: true, delete: true, import: false },\n description: 'Outbound HTTP webhook subscription. Declared in code via defineStack({ webhooks }) / defineWebhook() (materialized into rows on boot) or authored directly in the Studio editor; dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.',\n displayNameField: 'name',\n nameField: 'name', // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)\n titleFormat: '{label}',\n highlightFields: ['name', 'object_name', 'url', 'active', 'updated_at'],\n\n listViews: {\n active: {\n type: 'grid',\n name: 'active',\n label: 'Active',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['label', 'object_name', 'url', 'method', 'active', 'updated_at'],\n filter: [{ field: 'active', operator: 'equals', value: true }],\n sort: [{ field: 'label', order: 'asc' }],\n pagination: { pageSize: 50 },\n },\n inactive: {\n type: 'grid',\n name: 'inactive',\n label: 'Inactive',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['label', 'object_name', 'url', 'method', 'active', 'updated_at'],\n filter: [{ field: 'active', operator: 'equals', value: false }],\n sort: [{ field: 'label', order: 'asc' }],\n pagination: { pageSize: 50 },\n },\n by_object: {\n type: 'grid',\n name: 'by_object',\n label: 'By Object',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['object_name', 'label', 'url', 'active', 'updated_at'],\n sort: [{ field: 'object_name', order: 'asc' }, { field: 'label', order: 'asc' }],\n grouping: { fields: [{ field: 'object_name', order: 'asc', collapsed: false }] },\n pagination: { pageSize: 100 },\n },\n all_webhooks: {\n type: 'grid',\n name: 'all_webhooks',\n label: 'All',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['label', 'object_name', 'url', 'method', 'active', 'updated_at'],\n sort: [{ field: 'label', order: 'asc' }],\n pagination: { pageSize: 50 },\n },\n },\n\n fields: {\n id: Field.text({ label: 'Webhook ID', required: true, readonly: true, group: 'System' }),\n\n name: Field.text({\n label: 'Name',\n required: true,\n maxLength: 100,\n // [#8554] \"unique per organization\", not bare \"unique\" — the bare wording\n // described the installation-wide index this card removed.\n description: 'snake_case name, unique per organization — referenced in logs and audit',\n group: 'Definition',\n }),\n\n label: Field.text({\n label: 'Display Label',\n required: false,\n maxLength: 200,\n group: 'Definition',\n }),\n\n object_name: Field.text({\n label: 'Object',\n required: false,\n maxLength: 100,\n // Object picker (same widget as sys_sharing_rule) instead of a free-text\n // machine name. Falls back to a text input when the widget is unavailable.\n widget: 'object-ref',\n description: 'Short object name whose record events (create/update/delete) fire this webhook',\n group: 'Definition',\n }),\n\n triggers: Field.select(\n ['create', 'update', 'delete', 'bulk_update', 'bulk_delete'],\n {\n label: 'Triggers',\n required: false,\n // Multi-select instead of a hand-typed comma-separated string. Stored as\n // an array; the auto-enqueuer parser also tolerates the legacy\n // comma-separated / JSON-string forms so existing rows keep working.\n multiple: true,\n // [#4639] `bulk_*` fire on predicate writes (`multi: true`), whose\n // delivery carries `matched` instead of a record — opt-in precisely\n // because that body is a different shape. Kept in step with\n // `WebhookTriggerType` (`@objectstack/spec/automation`), which is the\n // contract the auto-enqueuer validates against.\n description: 'Record events that fire this webhook (bulk_* deliver a count, not a record)',\n group: 'Definition',\n },\n ),\n\n url: Field.text({\n label: 'Target URL',\n required: true,\n maxLength: 2048,\n description: 'External endpoint that receives the POST',\n group: 'Definition',\n }),\n\n method: Field.select(\n ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],\n {\n label: 'HTTP Method',\n required: true,\n // Select instead of free text. Option values are lowercased by the\n // Field.select helper (get/post/…); the auto-enqueuer upper-cases the\n // resolved method before delivery, so existing 'POST' rows and the\n // lowercase option values both normalise correctly.\n defaultValue: 'post',\n description: 'HTTP method used for the callback request',\n group: 'Definition',\n },\n ),\n\n description: Field.textarea({ label: 'Description', required: false, group: 'Definition' }),\n\n active: Field.boolean({\n label: 'Active',\n required: true,\n defaultValue: true,\n description: 'Inactive webhooks are skipped by the dispatcher',\n group: 'Definition',\n }),\n\n definition_json: Field.textarea({\n label: 'Definition',\n required: true,\n description: 'Serialised Webhook JSON (see @objectstack/spec/automation/webhook) — timeout and the rest of the authored envelope. Credentials are NOT stored here: the signing secret lives in the encrypted `signing_secret` field and the custom headers in the encrypted `headers_secret` field.',\n group: 'Definition',\n }),\n\n /**\n * [#7986] Custom HTTP headers, in the engine's ENCRYPTED credential channel.\n *\n * The sibling passenger #7799 left on the blob it emptied. That card was\n * framed as \"the signing secret is in cleartext\" and was fixed exactly as\n * framed — but the COLUMN was the problem, and `headers` is the ordinary\n * place an `Authorization: Bearer …` goes. `definition_json` is an ordinary\n * textarea on an admin-authorable object with no restrictive\n * `enable.apiMethods` at all, so `GET /api/v1/data/sys_webhook` returned the\n * header map to every persona that can read the object, with none of the\n * retention bound that eventually ages out `sys_http_delivery`'s copies.\n *\n * The WHOLE map moves rather than the credential-looking entries, because\n * only some entries are credentials and the platform cannot tell which:\n * guessing from the header name is fail-OPEN on exactly the custom spellings\n * (`X-Acme-Token`) most likely to be one, and letting the author declare\n * which are sensitive is a change to the authoring envelope\n * (`webhook.zod.ts`) that belongs to the spec seat. See\n * `webhook-headers.ts` for the full comparison.\n *\n * Stored as the SERIALIZED map (the encrypted channel carries a string);\n * the enqueuer recovers and re-parses it server-side through\n * `engine.resolveSecretField()` when it refreshes its subscription cache,\n * on the same refresh that recovers the signing secret.\n *\n * Fail-closed by construction, the same way `signing_secret` is: with no\n * CryptoProvider the engine REFUSES the write rather than falling back to\n * cleartext, and a stored map that cannot be decrypted DROPS the\n * subscription rather than delivering it with its headers silently missing.\n */\n headers_secret: Field.secret({\n label: 'Custom Headers',\n required: false,\n description:\n 'Custom HTTP headers sent with each delivery, as a JSON object ({\"Authorization\": \"Bearer …\"}). '\n + 'Encrypted at rest into sys_secret; reads return a mask, never the headers. Leave the mask '\n + 'untouched to keep the current value.',\n group: 'Definition',\n }),\n\n /**\n * [#7799] HMAC signing key, in the engine's ENCRYPTED credential channel.\n *\n * It used to ride inside `definition_json` as cleartext, because that column\n * is where the seeder parked the whole authored envelope. `definition_json`\n * is an ordinary textarea on an admin-authorable object with no restrictive\n * `enable.apiMethods`, so `GET /api/v1/data/sys_webhook` handed the key back\n * to every persona that can read the object — and that key is the receiver's\n * ONLY proof a delivery came from us. Same exposure class as #7722's\n * per-attempt copies, minus the retention window that eventually aged those\n * out.\n *\n * `type: 'secret'` moves it onto the channel built for this: the engine\n * encrypts on write via the registered `ICryptoProvider`, stores the\n * ciphertext as a `sys_secret` row, keeps only an opaque `secret:<id>` ref\n * on this column, and returns the mask on every read path. The enqueuer\n * recovers the plaintext server-side through `engine.resolveSecretField()`\n * when it refreshes its subscription cache.\n *\n * Fail-closed by construction: with no CryptoProvider wired the engine\n * REFUSES the write rather than falling back to cleartext, so the seeder\n * skips that webhook loudly instead of re-opening the hole in a new column.\n */\n signing_secret: Field.secret({\n label: 'Signing Secret',\n required: false,\n description:\n 'HMAC-SHA256 key used to sign deliveries (X-Objectstack-Signature). Encrypted at rest into '\n + 'sys_secret; reads return a mask, never the key. Leave the mask untouched to keep the current value.',\n group: 'Definition',\n }),\n\n // ── Provenance (#3461 — record-authoritative seed-not-clobber) ──\n // Mirrors sys_sharing_rule (#2909). Both columns are `readonly`: the\n // engine strips them from non-system payloads (forge/clear-proof), while\n // bootstrapDeclaredWebhooks and the provenance stamp hook write with\n // isSystem. Deliberately NOT a write gate: webhooks are a first-class admin\n // authoring/tuning surface — admins may edit or deactivate a package row;\n // the seeder simply stops overwriting it once `customized` is stamped.\n managed_by: Field.select(\n ['platform', 'package', 'admin'],\n {\n label: 'Managed By',\n required: false,\n readonly: true,\n defaultValue: 'admin',\n description:\n 'Record provenance: platform = framework built-in / package = app/package-declared ' +\n '(boot-seeded from defineStack webhooks) / admin = created in Setup.',\n group: 'System',\n },\n ),\n\n customized: Field.boolean({\n label: 'Customized',\n required: false,\n readonly: true,\n defaultValue: false,\n description:\n 'Set when an admin edits a package-declared webhook; boot seeding will no longer ' +\n 'overwrite the row (a deactivated noisy webhook survives redeploys). Meaningless on admin rows.',\n group: 'System',\n }),\n\n created_at: Field.datetime({\n label: 'Created At',\n required: true,\n defaultValue: 'NOW()',\n readonly: true,\n group: 'System',\n }),\n\n updated_at: Field.datetime({ label: 'Updated At', required: false, group: 'System' }),\n },\n\n indexes: [\n // [#8554] Scope spelled EXPLICITLY (ADR-0120 D1). On a DECLARED index bare\n // `unique: true` is the positional spelling of `'global'` — the listed\n // columns verbatim — so this was an installation-wide key on a tenant-scoped\n // object. Measured live before the fix: org_jia 201 / org_yi 409\n // UNIQUE_VIOLATION on the same name / org_yi unused name 201 / org_yi's own\n // GET on the colliding name 0 rows. Webhooks are named by admins from the\n // UI, so two organizations both wanting `order_created_hook` is ordinary.\n { fields: ['name'], unique: 'organization' },\n { fields: ['object_name'] },\n { fields: ['active', 'object_name'] },\n ],\n\n /**\n * [#9756] The data-API exposure of this object, declared EXPLICITLY.\n *\n * ## Why the block exists\n *\n * Three cards observed that `sys_webhook` declared no `enable` block at all\n * and each named narrowing its read surface as the next step — #7799 (the\n * signing secret), #7986 (the custom headers) and #8025 option 2 (the URL) —\n * and each assumed a later one would write the line. None did. The condition\n * held not because anyone judged the full default API correct here, but\n * because the omission was never anybody's deliverable. That is the standard\n * #8025 set and #9756 quotes back: *an omission is not a decision unless\n * someone wrote it down.* This block is that decision, written down.\n *\n * ## The census the set is derived from (#9756, measured before writing)\n *\n * | consumer | reaches this object through | needs |\n * |:---|:---|:---|\n * | Setup/Studio console — `nav_webhooks` (`webhook-outbox-plugin.ts`), the four list views above, `userActions` create/edit/delete | REST `/api/v1/data/sys_webhook` — the gated data API | `get` `list` `create` `update` `delete` |\n * | Operator predicate write — \"deactivate every webhook on an object\" (#4639, for which `AutoEnqueuer.handleSelfHealEvent` carries a `data.records.*` branch built expressly for this gesture) | REST `updateMany` / `deleteMany`, both gated on the `bulk` primitive | `bulk` |\n * | `AutoEnqueuer` cache refresh, `bootstrapDeclaredWebhooks`, `stampWebhookProvenance`, `redeliver-guard`, `migrateLegacyWebhookSecrets`, the `headers_secret` write gate | `engine.find/findOne/insert/update` and lifecycle hooks — ObjectQL directly, which never consults `enable.apiMethods` | ungated: unaffected by anything declared here |\n *\n * ⇒ every primitive is required by a real, measured consumer, so the set is\n * all six. No consumer outside the admin/operator surface was found.\n *\n * ## ⛔ This narrows NOTHING — do not read it as if it did\n *\n * `resolveEffectiveApiMethods` (`@objectstack/spec/data`) seeds the\n * `unrestricted` branch with the very same `API_PRIMITIVES` set, so the six\n * primitives resolve to the operation closure the *absent* block already\n * produced. The serialized effective set (`/me/permissions`, the 405\n * `allowed` array) is byte-identical, and no route or `callData` action\n * reaches an operation whose answer differs. Only `mode` changes,\n * `unrestricted` → `restricted`.\n *\n * So the presence of this block is NOT evidence that the reachable cleartext\n * on this object was reduced. It was not, and `apiMethods` is the wrong\n * instrument for it: `url` (#8025 — won't-fix on masking, because the URL is\n * the routing key an operator must be able to see, search, sort and edit) and\n * a legacy row's un-migrated `definition_json.headers` (#7986 —\n * `readLegacyHeaders` in `auto-enqueuer.ts` still reads them and warns) are\n * both served by `get`/`list`, which is exactly what the console requires.\n * Any set that removes them removes the admin surface with them. A survey\n * that greps this file for `enable:` and stops is measuring the wrong thing;\n * #9756's report carries the census that says so.\n *\n * Contrast the sibling `sys_http_delivery` (`['get','list']`,\n * `service-messaging`), whose narrowing is real: that table is engine-owned —\n * written only by `SqlHttpOutbox` through context-less raw-engine writes,\n * never authored — so closing its write surface costs nothing. `sys_webhook`\n * is a first-class admin authoring surface. That is the whole difference, and\n * it is why the sibling's shape could not simply be copied here.\n *\n * Pinned — the census, the no-narrowing equality, and the registration-time\n * survival of every write verb — in `sys-webhook-api-exposure.test.ts`.\n */\n enable: {\n apiMethods: ['get', 'list', 'create', 'update', 'delete', 'bulk'],\n },\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sys-webhook.object.ts"],"sourcesContent":["// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\nimport { ObjectSchema, Field } from '@objectstack/spec/data';\n\n/**\n * sys_webhook — Outbound HTTP integration configuration (runtime).\n *\n * Persists a single {@link Webhook} envelope per row so administrators\n * can author, enable/disable, and edit webhook subscriptions from the\n * Studio UI without code changes. The canonical Zod schema for the\n * `definition_json` envelope lives at `@objectstack/spec/automation/webhook`.\n *\n * ## Two authoring doors, one row\n * Rows land here two ways, distinguished by the `managed_by` provenance column:\n * - **admin** — created/edited directly through this object's CRUD UI.\n * - **package** — declared in code (`defineStack({ webhooks })` /\n * `defineWebhook()`) and materialized on boot by\n * `bootstrapDeclaredWebhooks` (#3461). Re-seeded every boot, but an admin\n * edit stamps `customized: true` and freezes the row (seed-not-clobber,\n * mirrors `sys_sharing_rule` #2909).\n *\n * One row per `name`. This plugin's {@link AutoEnqueuer} loads active rows on\n * boot + on `sys_webhook:changed` events, and turns matching `data.record.*`\n * events into deliveries on the shared `service-messaging` HTTP outbox\n * (ADR-0018 M3 — `sys_http_delivery`, drained by the messaging dispatcher).\n *\n * Ownership (ADR-0029 K2.a): this object is **owned by\n * `@objectstack/plugin-webhooks`** — the plugin that consumes these rows. It\n * used to live in the `@objectstack/platform-objects` monolith and be imported\n * here; the definition now lives with its owner so the plugin ships both data\n * and behavior as one unit.\n *\n * Platform-wide on purpose: every project (standalone, single-tenant,\n * cloud) can integrate with external systems (Slack, Stripe, internal\n * services) the same way.\n *\n * @namespace sys\n */\nexport const SysWebhook = ObjectSchema.create({\n name: 'sys_webhook',\n label: 'Webhook',\n pluralLabel: 'Webhooks',\n icon: 'webhook',\n isSystem: true,\n managedBy: 'config',\n // Authoring a webhook from the UI requires a structured form for the\n // headers / auth / retry / payload blocks — the generic JSON textarea\n // is acceptable as a v1 until a dedicated builder lands. Re-enable\n // create/edit/delete so admins can at least toggle `active` and edit\n // simple URL/method fields without round-tripping through code.\n userActions: { create: true, edit: true, delete: true, import: false },\n description: 'Outbound HTTP webhook subscription. Declared in code via defineStack({ webhooks }) / defineWebhook() (materialized into rows on boot) or authored directly in the Studio editor; dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.',\n displayNameField: 'name',\n nameField: 'name', // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)\n titleFormat: '{label}',\n highlightFields: ['name', 'object_name', 'url', 'active', 'updated_at'],\n\n listViews: {\n active: {\n type: 'grid',\n name: 'active',\n label: 'Active',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['label', 'object_name', 'url', 'method', 'active', 'updated_at'],\n filter: [{ field: 'active', operator: 'equals', value: true }],\n sort: [{ field: 'label', order: 'asc' }],\n pagination: { pageSize: 50 },\n },\n inactive: {\n type: 'grid',\n name: 'inactive',\n label: 'Inactive',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['label', 'object_name', 'url', 'method', 'active', 'updated_at'],\n filter: [{ field: 'active', operator: 'equals', value: false }],\n sort: [{ field: 'label', order: 'asc' }],\n pagination: { pageSize: 50 },\n },\n by_object: {\n type: 'grid',\n name: 'by_object',\n label: 'By Object',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['object_name', 'label', 'url', 'active', 'updated_at'],\n sort: [{ field: 'object_name', order: 'asc' }, { field: 'label', order: 'asc' }],\n grouping: { fields: [{ field: 'object_name', order: 'asc', collapsed: false }] },\n pagination: { pageSize: 100 },\n },\n all_webhooks: {\n type: 'grid',\n name: 'all_webhooks',\n label: 'All',\n data: { provider: 'object', object: 'sys_webhook' },\n columns: ['label', 'object_name', 'url', 'method', 'active', 'updated_at'],\n sort: [{ field: 'label', order: 'asc' }],\n pagination: { pageSize: 50 },\n },\n },\n\n fields: {\n id: Field.text({ label: 'Webhook ID', required: true, readonly: true, group: 'System' }),\n\n name: Field.text({\n label: 'Name',\n required: true,\n maxLength: 100,\n // [#8554] \"unique per organization\", not bare \"unique\" — the bare wording\n // described the installation-wide index this card removed.\n description: 'snake_case name, unique per organization — referenced in logs and audit',\n group: 'Definition',\n }),\n\n label: Field.text({\n label: 'Display Label',\n required: false,\n maxLength: 200,\n group: 'Definition',\n }),\n\n object_name: Field.text({\n label: 'Object',\n required: false,\n maxLength: 100,\n // Object picker (same widget as sys_sharing_rule) instead of a free-text\n // machine name. Falls back to a text input when the widget is unavailable.\n widget: 'object-ref',\n description: 'Short object name whose record events (create/update/delete) fire this webhook',\n group: 'Definition',\n }),\n\n triggers: Field.select(\n ['create', 'update', 'delete', 'bulk_update', 'bulk_delete'],\n {\n label: 'Triggers',\n required: false,\n // Multi-select instead of a hand-typed comma-separated string. Stored as\n // an array; the auto-enqueuer parser also tolerates the legacy\n // comma-separated / JSON-string forms so existing rows keep working.\n multiple: true,\n // [#4639] `bulk_*` fire on predicate writes (`multi: true`), whose\n // delivery carries `matched` instead of a record — opt-in precisely\n // because that body is a different shape. Kept in step with\n // `WebhookTriggerType` (`@objectstack/spec/automation`), which is the\n // contract the auto-enqueuer validates against.\n description: 'Record events that fire this webhook (bulk_* deliver a count, not a record)',\n group: 'Definition',\n },\n ),\n\n url: Field.text({\n label: 'Target URL',\n required: true,\n maxLength: 2048,\n description: 'External endpoint that receives the POST',\n group: 'Definition',\n }),\n\n method: Field.select(\n ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],\n {\n label: 'HTTP Method',\n required: true,\n // Select instead of free text. Option values are lowercased by the\n // Field.select helper (get/post/…); the auto-enqueuer upper-cases the\n // resolved method before delivery, so existing 'POST' rows and the\n // lowercase option values both normalise correctly.\n defaultValue: 'post',\n description: 'HTTP method used for the callback request',\n group: 'Definition',\n },\n ),\n\n description: Field.textarea({ label: 'Description', required: false, group: 'Definition' }),\n\n active: Field.boolean({\n label: 'Active',\n required: true,\n defaultValue: true,\n description: 'Inactive webhooks are skipped by the dispatcher',\n group: 'Definition',\n }),\n\n definition_json: Field.textarea({\n label: 'Definition',\n required: true,\n description: 'Serialised Webhook JSON (see @objectstack/spec/automation/webhook) — timeout and the rest of the authored envelope. Credentials are NOT stored here: the signing secret lives in the encrypted `signing_secret` field and the custom headers in the encrypted `headers_secret` field.',\n group: 'Definition',\n }),\n\n /**\n * [#7986] Custom HTTP headers, in the engine's ENCRYPTED credential channel.\n *\n * The sibling passenger #7799 left on the blob it emptied. That card was\n * framed as \"the signing secret is in cleartext\" and was fixed exactly as\n * framed — but the COLUMN was the problem, and `headers` is the ordinary\n * place an `Authorization: Bearer …` goes. `definition_json` is an ordinary\n * textarea on an admin-authorable object with no restrictive\n * `enable.apiMethods` at all, so `GET /api/v1/data/sys_webhook` returned the\n * header map to every persona that can read the object, with none of the\n * retention bound that eventually ages out `sys_http_delivery`'s copies.\n *\n * The WHOLE map moves rather than the credential-looking entries, because\n * only some entries are credentials and the platform cannot tell which:\n * guessing from the header name is fail-OPEN on exactly the custom spellings\n * (`X-Acme-Token`) most likely to be one, and letting the author declare\n * which are sensitive is a change to the authoring envelope\n * (`webhook.zod.ts`) that belongs to the spec seat. See\n * `webhook-headers.ts` for the full comparison.\n *\n * Stored as the SERIALIZED map (the encrypted channel carries a string);\n * the enqueuer recovers and re-parses it server-side through\n * `engine.resolveSecretField()` when it refreshes its subscription cache,\n * on the same refresh that recovers the signing secret.\n *\n * Fail-closed by construction, the same way `signing_secret` is: with no\n * CryptoProvider the engine REFUSES the write rather than falling back to\n * cleartext, and a stored map that cannot be decrypted DROPS the\n * subscription rather than delivering it with its headers silently missing.\n */\n headers_secret: Field.secret({\n label: 'Custom Headers',\n required: false,\n description:\n 'Custom HTTP headers sent with each delivery, as a JSON object ({\"Authorization\": \"Bearer …\"}). '\n + 'Encrypted at rest into sys_secret; reads return a mask, never the headers. Leave the mask '\n + 'untouched to keep the current value.',\n group: 'Definition',\n }),\n\n /**\n * [#7799] HMAC signing key, in the engine's ENCRYPTED credential channel.\n *\n * It used to ride inside `definition_json` as cleartext, because that column\n * is where the seeder parked the whole authored envelope. `definition_json`\n * is an ordinary textarea on an admin-authorable object with no restrictive\n * `enable.apiMethods`, so `GET /api/v1/data/sys_webhook` handed the key back\n * to every persona that can read the object — and that key is the receiver's\n * ONLY proof a delivery came from us. Same exposure class as #7722's\n * per-attempt copies, minus the retention window that eventually aged those\n * out.\n *\n * `type: 'secret'` moves it onto the channel built for this: the engine\n * encrypts on write via the registered `ICryptoProvider`, stores the\n * ciphertext as a `sys_secret` row, keeps only an opaque `secret:<id>` ref\n * on this column, and returns the mask on every read path. The enqueuer\n * recovers the plaintext server-side through `engine.resolveSecretField()`\n * when it refreshes its subscription cache.\n *\n * Fail-closed by construction: with no CryptoProvider wired the engine\n * REFUSES the write rather than falling back to cleartext, so the seeder\n * skips that webhook loudly instead of re-opening the hole in a new column.\n */\n signing_secret: Field.secret({\n label: 'Signing Secret',\n required: false,\n description:\n 'HMAC-SHA256 key used to sign deliveries (X-Objectstack-Signature). Encrypted at rest into '\n + 'sys_secret; reads return a mask, never the key. Leave the mask untouched to keep the current value.',\n group: 'Definition',\n }),\n\n // ── Provenance (#3461 — record-authoritative seed-not-clobber) ──\n // Mirrors sys_sharing_rule (#2909). Both columns are `readonly`: the\n // engine strips them from non-system payloads (forge/clear-proof), while\n // bootstrapDeclaredWebhooks and the provenance stamp hook write with\n // isSystem. Deliberately NOT a write gate: webhooks are a first-class admin\n // authoring/tuning surface — admins may edit or deactivate a package row;\n // the seeder simply stops overwriting it once `customized` is stamped.\n managed_by: Field.select(\n ['platform', 'package', 'admin'],\n {\n label: 'Managed By',\n required: false,\n readonly: true,\n defaultValue: 'admin',\n description:\n 'Record provenance: platform = framework built-in / package = app/package-declared ' +\n '(boot-seeded from defineStack webhooks) / admin = created in Setup.',\n group: 'System',\n },\n ),\n\n customized: Field.boolean({\n label: 'Customized',\n required: false,\n readonly: true,\n defaultValue: false,\n description:\n 'Set when an admin edits a package-declared webhook; boot seeding will no longer ' +\n 'overwrite the row (a deactivated noisy webhook survives redeploys). Meaningless on admin rows.',\n group: 'System',\n }),\n\n created_at: Field.datetime({\n label: 'Created At',\n required: true,\n defaultValue: 'NOW()',\n readonly: true,\n group: 'System',\n }),\n\n updated_at: Field.datetime({ label: 'Updated At', required: false, group: 'System' }),\n },\n\n indexes: [\n // [#8554] Scope spelled EXPLICITLY (ADR-0120 D1). On a DECLARED index bare\n // `unique: true` is the positional spelling of `'global'` — the listed\n // columns verbatim — so this was an installation-wide key on a tenant-scoped\n // object. Measured live before the fix: org_jia 201 / org_yi 409\n // UNIQUE_VIOLATION on the same name / org_yi unused name 201 / org_yi's own\n // GET on the colliding name 0 rows. Webhooks are named by admins from the\n // UI, so two organizations both wanting `order_created_hook` is ordinary.\n { fields: ['name'], unique: 'organization' },\n { fields: ['object_name'] },\n { fields: ['active', 'object_name'] },\n ],\n\n /**\n * [#9756] The data-API exposure of this object, declared EXPLICITLY.\n *\n * ## Why the block exists\n *\n * Three cards observed that `sys_webhook` declared no `enable` block at all\n * and each named narrowing its read surface as the next step — #7799 (the\n * signing secret), #7986 (the custom headers) and #8025 option 2 (the URL) —\n * and each assumed a later one would write the line. None did. The condition\n * held not because anyone judged the full default API correct here, but\n * because the omission was never anybody's deliverable. That is the standard\n * #8025 set and #9756 quotes back: *an omission is not a decision unless\n * someone wrote it down.* This block is that decision, written down.\n *\n * ## The census the set is derived from (#9756, measured before writing)\n *\n * | consumer | reaches this object through | needs |\n * |:---|:---|:---|\n * | Setup/Studio console — `nav_webhooks` (`webhook-outbox-plugin.ts`), the four list views above, `userActions` create/edit/delete | REST `/api/v1/data/sys_webhook` — the gated data API | `get` `list` `create` `update` `delete` |\n * | Operator predicate write — \"deactivate every webhook on an object\" (#4639, for which `AutoEnqueuer.handleSelfHealEvent` carries a `data.records.*` branch built expressly for this gesture) | REST `updateMany` / `deleteMany`, both gated on the `bulk` primitive | `bulk` |\n * | `AutoEnqueuer` cache refresh, `bootstrapDeclaredWebhooks`, `stampWebhookProvenance`, `redeliver-guard`, `migrateLegacyWebhookSecrets`, the `headers_secret` write gate | `engine.find/findOne/insert/update` and lifecycle hooks — ObjectQL directly, which never consults `enable.apiMethods` | ungated: unaffected by anything declared here |\n *\n * ⇒ every primitive is required by a real, measured consumer, so the set is\n * all six. No consumer outside the admin/operator surface was found.\n *\n * ## ⛔ This narrows NOTHING — do not read it as if it did\n *\n * `resolveEffectiveApiMethods` (`@objectstack/spec/data`) seeds the\n * `unrestricted` branch with the very same `API_PRIMITIVES` set, so the six\n * primitives resolve to the operation closure the *absent* block already\n * produced. The serialized effective set (`/me/permissions`, the 405\n * `allowed` array) is byte-identical, and no route or `callData` action\n * reaches an operation whose answer differs. Only `mode` changes,\n * `unrestricted` → `restricted`.\n *\n * So the presence of this block is NOT evidence that the reachable cleartext\n * on this object was reduced. It was not, and `apiMethods` is the wrong\n * instrument for it: `url` (#8025 — won't-fix on masking, because the URL is\n * the routing key an operator must be able to see, search, sort and edit) and\n * a legacy row's un-migrated `definition_json.headers` (#7986 —\n * `readLegacyHeaders` in `auto-enqueuer.ts` still reads them and warns) are\n * both served by `get`/`list`, which is exactly what the console requires.\n * Any set that removes them removes the admin surface with them. A survey\n * that greps this file for `enable:` and stops is measuring the wrong thing;\n * #9756's report carries the census that says so.\n *\n * Contrast the sibling `sys_http_delivery` (`['get','list']`,\n * `service-messaging`), whose narrowing is real: that table is engine-owned —\n * written only by `SqlHttpOutbox` through context-less raw-engine writes,\n * never authored — so closing its write surface costs nothing. `sys_webhook`\n * is a first-class admin authoring surface. That is the whole difference, and\n * it is why the sibling's shape could not simply be copied here.\n *\n * Pinned — the census, the no-narrowing equality, and the registration-time\n * survival of every write verb — in `sys-webhook-api-exposure.test.ts`.\n */\n enable: {\n apiMethods: ['get', 'list', 'create', 'update', 'delete', 'bulk'],\n },\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/translations/index.ts","../src/translations/en.objects.generated.ts","../src/translations/zh-CN.objects.generated.ts","../src/translations/ja-JP.objects.generated.ts","../src/translations/es-ES.objects.generated.ts","../src/translations/zh-CN.source-hashes.generated.ts","../src/translations/ja-JP.source-hashes.generated.ts","../src/translations/es-ES.source-hashes.generated.ts"],"sourcesContent":["// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * WebhooksTranslations — i18n bundle owned by this plugin (ADR-0029 D8).\n *\n * Object label/field/view/action translations for the sys_* objects this\n * plugin owns. Loaded at runtime via the plugin's `kernel:ready` hook\n * (`i18n.loadTranslations`). Regenerate with `os i18n extract` against\n * `scripts/i18n-extract.config.ts`.\n */\n\nimport type { TranslationBundle, TranslationData } from '@objectstack/spec/system';\nimport { withSourceFallback } from '@objectstack/platform-objects/apps';\nimport { enObjects } from './en.objects.generated.js';\nimport { zhCNObjects } from './zh-CN.objects.generated.js';\nimport { jaJPObjects } from './ja-JP.objects.generated.js';\nimport { esESObjects } from './es-ES.objects.generated.js';\nimport { zhCNGeneratedSourceHashes } from './zh-CN.source-hashes.generated.js';\nimport { jaJPGeneratedSourceHashes } from './ja-JP.source-hashes.generated.js';\nimport { esESGeneratedSourceHashes } from './es-ES.source-hashes.generated.js';\n\n/**\n * ## The provenance companions are READ here, not merely recorded\n *\n * `os i18n extract --source-hashes` writes `<locale>.source-hashes.generated.ts`\n * beside these bundles (maintainer ruling #12069 Option A, #11671). A record\n * says: \"this locale's leaf at that path is still a byte copy of THAT source\n * revision\". Recording alone changes nothing a user sees — the substitution is\n * what {@link withSourceFallback} does, and until it was wired here this set\n * recorded the drift and went on serving the superseded draft.\n *\n * That gap was invisible by construction: a leaf revised in ONE locale is\n * reported by `findStaleFills`, and every gate stays green — `check:i18n`\n * compares key sets, `check:i18n-coverage` counts a stale leaf as translated,\n * and `check:i18n-stale-fill` needs two locales holding the same stale bytes\n * before it can testify. So the only reader-visible consequence was the wrong\n * string on the page.\n *\n * This set was the LAST of the nine to be wired, and the reason is worth\n * keeping: `withSourceFallback` lives in `@objectstack/platform-objects`, which\n * this package did not declare. It was already in this package's install\n * closure through `@objectstack/service-messaging`, so relying on it without\n * declaring it would have been a phantom dependency; the manifest now declares\n * the resolution that already resolved, and no package joined the graph.\n *\n * `recorded` (3rd argument) stays `undefined` on purpose: it judges the\n * HAND-AUTHORED sections (`apps` / `dashboards` / `pages`), which this set does\n * not have — its bundles are entirely generated. The companion goes in the 4th\n * slot, which judges the generated ones. This is the shape\n * `@objectstack/platform-objects`'s own `metadata-translations/index.ts` uses.\n *\n * ⛔ Do not drop the 4th argument to quiet a staleness report. Serving the\n * superseded draft is the bug; `check:i18n-stale-fill`'s UNSERVED PROVENANCE\n * verdict fails the build if a committed companion stops being consulted here.\n */\nconst enSource: TranslationData = { objects: enObjects };\n\nexport const WebhooksTranslations: TranslationBundle = {\n en: enSource,\n 'zh-CN': withSourceFallback({ objects: zhCNObjects }, enSource, undefined, zhCNGeneratedSourceHashes),\n 'ja-JP': withSourceFallback({ objects: jaJPObjects }, enSource, undefined, jaJPGeneratedSourceHashes),\n 'es-ES': withSourceFallback({ objects: esESObjects }, enSource, undefined, esESGeneratedSourceHashes),\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'en'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const enObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"Webhook\",\n pluralLabel: \"Webhooks\",\n description: \"Outbound HTTP webhook subscription. Declared in code via defineStack({ webhooks }) / defineWebhook() (materialized into rows on boot) or authored directly in the Studio editor; dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.\",\n fields: {\n id: {\n label: \"Webhook ID\"\n },\n name: {\n label: \"Name\",\n help: \"snake_case name, unique per organization — referenced in logs and audit\"\n },\n label: {\n label: \"Display Label\"\n },\n object_name: {\n label: \"Object\",\n help: \"Short object name whose record events (create/update/delete) fire this webhook\"\n },\n triggers: {\n label: \"Triggers\",\n help: \"Record events that fire this webhook (bulk_* deliver a count, not a record)\",\n options: {\n create: \"create\",\n update: \"update\",\n delete: \"delete\",\n bulk_update: \"bulk_update\",\n bulk_delete: \"bulk_delete\"\n }\n },\n url: {\n label: \"Target URL\",\n help: \"External endpoint that receives the POST\"\n },\n method: {\n label: \"HTTP Method\",\n help: \"HTTP method used for the callback request\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"Description\"\n },\n active: {\n label: \"Active\",\n help: \"Inactive webhooks are skipped by the dispatcher\"\n },\n definition_json: {\n label: \"Definition\",\n help: \"Serialised Webhook JSON (see @objectstack/spec/automation/webhook) — timeout and the rest of the authored envelope. Credentials are NOT stored here: the signing secret lives in the encrypted `signing_secret` field and the custom headers in the encrypted `headers_secret` field.\"\n },\n headers_secret: {\n label: \"Custom Headers\",\n help: \"Custom HTTP headers sent with each delivery, as a JSON object ({\\\"Authorization\\\": \\\"Bearer …\\\"}). Encrypted at rest into sys_secret; reads return a mask, never the headers. Leave the mask untouched to keep the current value.\"\n },\n signing_secret: {\n label: \"Signing Secret\",\n help: \"HMAC-SHA256 key used to sign deliveries (X-Objectstack-Signature). Encrypted at rest into sys_secret; reads return a mask, never the key. Leave the mask untouched to keep the current value.\"\n },\n managed_by: {\n label: \"Managed By\",\n help: \"Record provenance: platform = framework built-in / package = app/package-declared (boot-seeded from defineStack webhooks) / admin = created in Setup.\",\n options: {\n platform: \"platform\",\n package: \"package\",\n admin: \"admin\"\n }\n },\n customized: {\n label: \"Customized\",\n help: \"Set when an admin edits a package-declared webhook; boot seeding will no longer overwrite the row (a deactivated noisy webhook survives redeploys). Meaningless on admin rows.\"\n },\n created_at: {\n label: \"Created At\"\n },\n updated_at: {\n label: \"Updated At\"\n }\n },\n _views: {\n active: {\n label: \"Active\"\n },\n inactive: {\n label: \"Inactive\"\n },\n by_object: {\n label: \"By Object\"\n },\n all_webhooks: {\n label: \"All\"\n }\n }\n }\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'zh-CN'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const zhCNObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"Webhook\",\n pluralLabel: \"Webhook\",\n description: \"外发 HTTP Webhook 订阅。可在代码中通过 defineWebhook() 编写,或在 Studio 编辑器中维护;由 HTTP 连接器插件执行。\",\n fields: {\n id: {\n label: \"Webhook ID\"\n },\n name: {\n label: \"名称\",\n help: \"snake_case 名称,在每个组织内唯一——用于日志和审计引用\"\n },\n label: {\n label: \"显示标签\"\n },\n object_name: {\n label: \"对象\",\n help: \"触发该 Webhook 的记录事件(create/update/delete)的短对象名\"\n },\n triggers: {\n label: \"触发器\",\n help: \"触发该 Webhook 的记录事件。bulk_update / bulk_delete 由谓词写(批量)触发,投递的是受影响条数而非记录。\",\n options: {\n create: \"创建\",\n update: \"更新\",\n delete: \"删除\",\n bulk_update: \"批量更新\",\n bulk_delete: \"批量删除\"\n }\n },\n url: {\n label: \"目标 URL\",\n help: \"接收 POST 请求的外部端点\"\n },\n method: {\n label: \"HTTP 方法\",\n help: \"回调请求使用的 HTTP 方法\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"描述\"\n },\n active: {\n label: \"启用\",\n help: \"停用的 Webhook 会被调度器跳过\"\n },\n definition_json: {\n label: \"定义\",\n help: \"序列化的 Webhook JSON(参见 @objectstack/spec/automation/webhook)——包含完整的 headers/auth/retry/payload 配置\"\n },\n headers_secret: {\n label: \"自定义请求头\",\n help: \"随每次投递发送的自定义 HTTP 请求头,采用 JSON 对象格式({\\\"Authorization\\\": \\\"Bearer …\\\"})。静态存储时加密写入 sys_secret;读取只返回掩码,绝不返回请求头内容。保持掩码不变即保留当前值。\"\n },\n signing_secret: {\n label: \"签名密钥\",\n help: \"用于对投递请求签名的 HMAC-SHA256 密钥(X-Objectstack-Signature)。静态存储时加密写入 sys_secret;读取只返回掩码,绝不返回密钥。保持掩码不变即保留当前值。\"\n },\n managed_by: {\n label: \"管理来源\",\n help: \"记录来源:platform = 框架内置 / package = 应用包声明(由 defineStack 的 webhooks 在启动时种入)/ admin = 在 Setup 中创建。\",\n options: {\n platform: \"平台\",\n package: \"包\",\n admin: \"管理员\"\n }\n },\n customized: {\n label: \"已定制\",\n help: \"当管理员编辑应用包声明的 webhook 时置位;此后启动种入不再覆盖该行(被停用的嘈杂 webhook 可跨重新部署保留)。对 admin 来源的记录无意义。\"\n },\n created_at: {\n label: \"创建时间\"\n },\n updated_at: {\n label: \"更新时间\"\n }\n },\n _views: {\n active: {\n label: \"启用\"\n },\n inactive: {\n label: \"停用\"\n },\n by_object: {\n label: \"按对象\"\n },\n all_webhooks: {\n label: \"全部\"\n }\n }\n }\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'ja-JP'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const jaJPObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"ウェブフック\",\n pluralLabel: \"ウェブフック\",\n description: \"送信 HTTP Webhook サブスクリプション。defineWebhook() またはスタジオエディタで作成し、HTTP コネクタプラグインが実行します。\",\n fields: {\n id: {\n label: \"Webhook ID\"\n },\n name: {\n label: \"名前\",\n help: \"snake_case 名(組織ごとに一意)— ログおよび監査で参照\"\n },\n label: {\n label: \"表示名\"\n },\n object_name: {\n label: \"オブジェクト\",\n help: \"このウェブフックを発火するレコードイベント(create/update/delete)のオブジェクト短縮名\"\n },\n triggers: {\n label: \"トリガー\",\n help: \"このウェブフックを発火するレコードイベント。bulk_update / bulk_delete は述語による一括書き込みで発火し、レコードではなく件数を配信します。\",\n options: {\n create: \"作成\",\n update: \"更新\",\n delete: \"削除\",\n bulk_update: \"一括更新\",\n bulk_delete: \"一括削除\"\n }\n },\n url: {\n label: \"ターゲット URL\",\n help: \"POST を受信する外部エンドポイント\"\n },\n method: {\n label: \"HTTP メソッド\",\n help: \"コールバックリクエストで使用する HTTP メソッド\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"説明\"\n },\n active: {\n label: \"有効\",\n help: \"無効にするとディスパッチャにスキップされます\"\n },\n definition_json: {\n label: \"定義\",\n help: \"シリアライズされた Webhook JSON(@objectstack/spec/automation/webhook 参照)— ヘッダー/認証/リトライ/ペイロード設定を含む\"\n },\n headers_secret: {\n label: \"カスタムヘッダー\",\n help: \"各配信で送信するカスタム HTTP ヘッダー。JSON オブジェクト形式({\\\"Authorization\\\": \\\"Bearer …\\\"})。保存時は sys_secret に暗号化され、読み取りではマスクのみが返りヘッダーは返りません。マスクをそのままにすると現在の値が維持されます。\"\n },\n signing_secret: {\n label: \"署名シークレット\",\n help: \"配信の署名に使う HMAC-SHA256 キー(X-Objectstack-Signature)。保存時は sys_secret に暗号化され、読み取りではマスクのみが返りキーは返りません。マスクをそのままにすると現在の値が維持されます。\"\n },\n managed_by: {\n label: \"管理元\",\n help: \"レコードの出所: platform = フレームワーク組み込み / package = アプリ・パッケージ宣言(defineStack の webhooks から起動時シード)/ admin = Setup で作成。\",\n options: {\n platform: \"プラットフォーム\",\n package: \"パッケージ\",\n admin: \"管理者\"\n }\n },\n customized: {\n label: \"カスタマイズ済み\",\n help: \"管理者がパッケージ宣言の webhook を編集すると設定されます。以後、起動時シードはこの行を上書きしません(無効化したノイジーな webhook は再デプロイ後も保持)。admin 行では意味を持ちません。\"\n },\n created_at: {\n label: \"作成日時\"\n },\n updated_at: {\n label: \"更新日時\"\n }\n },\n _views: {\n active: {\n label: \"有効\"\n },\n inactive: {\n label: \"無効\"\n },\n by_object: {\n label: \"オブジェクト別\"\n },\n all_webhooks: {\n label: \"すべて\"\n }\n }\n }\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'es-ES'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const esESObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"Webhook\",\n pluralLabel: \"Webhooks\",\n description: \"Suscripción saliente de Webhook HTTP. Se crea mediante defineWebhook() en código o con el editor de Studio; la ejecuta el plugin del conector HTTP.\",\n fields: {\n id: {\n label: \"ID de webhook\"\n },\n name: {\n label: \"Nombre\",\n help: \"Nombre snake_case, único por organización; se usa en los registros y en la auditoría.\"\n },\n label: {\n label: \"Nombre visible\"\n },\n object_name: {\n label: \"Objeto\",\n help: \"Nombre corto del objeto cuyos eventos de registro (create/update/delete) activan este Webhook.\"\n },\n triggers: {\n label: \"Desencadenantes\",\n help: \"Eventos de registro que activan este Webhook. bulk_update / bulk_delete se activan en escrituras por predicado y entregan un recuento, no un registro.\",\n options: {\n create: \"Crear\",\n update: \"Actualizar\",\n delete: \"Eliminar\",\n bulk_update: \"Actualización masiva\",\n bulk_delete: \"Eliminación masiva\"\n }\n },\n url: {\n label: \"URL de destino\",\n help: \"Endpoint externo que recibe el POST.\"\n },\n method: {\n label: \"Método HTTP\",\n help: \"Método HTTP utilizado en la solicitud de callback.\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"Descripción\"\n },\n active: {\n label: \"Activo\",\n help: \"Los Webhooks inactivos se omiten en el despachador.\"\n },\n definition_json: {\n label: \"Definición\",\n help: \"JSON serializado de Webhook (consulte @objectstack/spec/automation/webhook): configuración completa de cabeceras/auth/reintentos/payload.\"\n },\n headers_secret: {\n label: \"Cabeceras personalizadas\",\n help: \"Cabeceras HTTP personalizadas enviadas con cada entrega, como un objeto JSON ({\\\"Authorization\\\": \\\"Bearer …\\\"}). Se cifran en reposo en sys_secret; las lecturas devuelven una máscara, nunca las cabeceras. Deje la máscara sin tocar para conservar el valor actual.\"\n },\n signing_secret: {\n label: \"Secreto de firma\",\n help: \"Clave HMAC-SHA256 usada para firmar las entregas (X-Objectstack-Signature). Se cifra en reposo en sys_secret; las lecturas devuelven una máscara, nunca la clave. Deje la máscara sin tocar para conservar el valor actual.\"\n },\n managed_by: {\n label: \"Gestionado por\",\n help: \"Procedencia del registro: platform = integrado en el framework / package = declarado por app o paquete (sembrado al arrancar desde los webhooks de defineStack) / admin = creado en Setup.\",\n options: {\n platform: \"Plataforma\",\n package: \"Paquete\",\n admin: \"Administrador\"\n }\n },\n customized: {\n label: \"Personalizado\",\n help: \"Se establece cuando un administrador edita un webhook declarado por un paquete; a partir de entonces el sembrado de arranque deja de sobrescribir la fila (un webhook ruidoso desactivado sobrevive a los redespliegues). Sin sentido en filas admin.\"\n },\n created_at: {\n label: \"Creado el\"\n },\n updated_at: {\n label: \"Actualizado el\"\n }\n },\n _views: {\n active: {\n label: \"Activo\"\n },\n inactive: {\n label: \"Inactivo\"\n },\n by_object: {\n label: \"Por objeto\"\n },\n all_webhooks: {\n label: \"Todos\"\n }\n }\n }\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'zh-CN'. Do not hand-edit.\n *\n * Each entry is the digest of the SOURCE REVISION that this locale's leaf at\n * that path is still a byte copy of — provenance for the generated half of the\n * bundles (#11671, maintainer ruling #12069 Option A, extending #8765 Option B).\n *\n * An entry exists only while the leaf IS such a copy. Re-translate the leaf in\n * `<locale>.objects.generated.ts` and the next extract drops its entry by\n * itself — the table makes no claim about text a translator wrote. A path with\n * no entry is LEGACY-TRUSTED and never reported stale.\n *\n * ⚠️ Do not \"fix\" a staleness report by editing this file. Refreshing a digest\n * records that the current text was copied from the current source, which is\n * the false claim the mechanism exists to detect. Fix the TRANSLATION.\n */\n\nexport const zhCNGeneratedSourceHashes: Readonly<Record<string, string>> = {\n \"objects.sys_webhook.fields.id.label\": \"9a4c8ec2a2567b95\",\n \"objects.sys_webhook.fields.method.options.delete\": \"f59e059ed51f9bfc\",\n \"objects.sys_webhook.fields.method.options.get\": \"470848255971c548\",\n \"objects.sys_webhook.fields.method.options.patch\": \"7de3603749decb30\",\n \"objects.sys_webhook.fields.method.options.post\": \"004b24eab36d26a4\",\n \"objects.sys_webhook.fields.method.options.put\": \"04d929ecae7aa435\",\n \"objects.sys_webhook.label\": \"b608f1636b7e8184\",\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'ja-JP'. Do not hand-edit.\n *\n * Each entry is the digest of the SOURCE REVISION that this locale's leaf at\n * that path is still a byte copy of — provenance for the generated half of the\n * bundles (#11671, maintainer ruling #12069 Option A, extending #8765 Option B).\n *\n * An entry exists only while the leaf IS such a copy. Re-translate the leaf in\n * `<locale>.objects.generated.ts` and the next extract drops its entry by\n * itself — the table makes no claim about text a translator wrote. A path with\n * no entry is LEGACY-TRUSTED and never reported stale.\n *\n * ⚠️ Do not \"fix\" a staleness report by editing this file. Refreshing a digest\n * records that the current text was copied from the current source, which is\n * the false claim the mechanism exists to detect. Fix the TRANSLATION.\n */\n\nexport const jaJPGeneratedSourceHashes: Readonly<Record<string, string>> = {\n \"objects.sys_webhook.fields.id.label\": \"9a4c8ec2a2567b95\",\n \"objects.sys_webhook.fields.method.options.delete\": \"f59e059ed51f9bfc\",\n \"objects.sys_webhook.fields.method.options.get\": \"470848255971c548\",\n \"objects.sys_webhook.fields.method.options.patch\": \"7de3603749decb30\",\n \"objects.sys_webhook.fields.method.options.post\": \"004b24eab36d26a4\",\n \"objects.sys_webhook.fields.method.options.put\": \"04d929ecae7aa435\",\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'es-ES'. Do not hand-edit.\n *\n * Each entry is the digest of the SOURCE REVISION that this locale's leaf at\n * that path is still a byte copy of — provenance for the generated half of the\n * bundles (#11671, maintainer ruling #12069 Option A, extending #8765 Option B).\n *\n * An entry exists only while the leaf IS such a copy. Re-translate the leaf in\n * `<locale>.objects.generated.ts` and the next extract drops its entry by\n * itself — the table makes no claim about text a translator wrote. A path with\n * no entry is LEGACY-TRUSTED and never reported stale.\n *\n * ⚠️ Do not \"fix\" a staleness report by editing this file. Refreshing a digest\n * records that the current text was copied from the current source, which is\n * the false claim the mechanism exists to detect. Fix the TRANSLATION.\n */\n\nexport const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {\n \"objects.sys_webhook.fields.method.options.delete\": \"f59e059ed51f9bfc\",\n \"objects.sys_webhook.fields.method.options.get\": \"470848255971c548\",\n \"objects.sys_webhook.fields.method.options.patch\": \"7de3603749decb30\",\n \"objects.sys_webhook.fields.method.options.post\": \"004b24eab36d26a4\",\n \"objects.sys_webhook.fields.method.options.put\": \"04d929ecae7aa435\",\n \"objects.sys_webhook.label\": \"b608f1636b7e8184\",\n \"objects.sys_webhook.pluralLabel\": \"8fdd81bc76459a6a\",\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/objectstack/objectstack/packages/plugins/plugin-webhooks/dist/translations-YO6CI7LZ.cjs","../src/translations/index.ts","../src/translations/en.objects.generated.ts","../src/translations/zh-CN.objects.generated.ts","../src/translations/ja-JP.objects.generated.ts","../src/translations/es-ES.objects.generated.ts","../src/translations/zh-CN.source-hashes.generated.ts","../src/translations/ja-JP.source-hashes.generated.ts","../src/translations/es-ES.source-hashes.generated.ts"],"names":[],"mappings":"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","file":"/home/runner/work/objectstack/objectstack/packages/plugins/plugin-webhooks/dist/translations-YO6CI7LZ.cjs","sourcesContent":[null,"// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * WebhooksTranslations — i18n bundle owned by this plugin (ADR-0029 D8).\n *\n * Object label/field/view/action translations for the sys_* objects this\n * plugin owns. Loaded at runtime via the plugin's `kernel:ready` hook\n * (`i18n.loadTranslations`). Regenerate with `os i18n extract` against\n * `scripts/i18n-extract.config.ts`.\n */\n\nimport type { TranslationBundle, TranslationData } from '@objectstack/spec/system';\nimport { withSourceFallback } from '@objectstack/platform-objects/apps';\nimport { enObjects } from './en.objects.generated.js';\nimport { zhCNObjects } from './zh-CN.objects.generated.js';\nimport { jaJPObjects } from './ja-JP.objects.generated.js';\nimport { esESObjects } from './es-ES.objects.generated.js';\nimport { zhCNGeneratedSourceHashes } from './zh-CN.source-hashes.generated.js';\nimport { jaJPGeneratedSourceHashes } from './ja-JP.source-hashes.generated.js';\nimport { esESGeneratedSourceHashes } from './es-ES.source-hashes.generated.js';\n\n/**\n * ## The provenance companions are READ here, not merely recorded\n *\n * `os i18n extract --source-hashes` writes `<locale>.source-hashes.generated.ts`\n * beside these bundles (maintainer ruling #12069 Option A, #11671). A record\n * says: \"this locale's leaf at that path is still a byte copy of THAT source\n * revision\". Recording alone changes nothing a user sees — the substitution is\n * what {@link withSourceFallback} does, and until it was wired here this set\n * recorded the drift and went on serving the superseded draft.\n *\n * That gap was invisible by construction: a leaf revised in ONE locale is\n * reported by `findStaleFills`, and every gate stays green — `check:i18n`\n * compares key sets, `check:i18n-coverage` counts a stale leaf as translated,\n * and `check:i18n-stale-fill` needs two locales holding the same stale bytes\n * before it can testify. So the only reader-visible consequence was the wrong\n * string on the page.\n *\n * This set was the LAST of the nine to be wired, and the reason is worth\n * keeping: `withSourceFallback` lives in `@objectstack/platform-objects`, which\n * this package did not declare. It was already in this package's install\n * closure through `@objectstack/service-messaging`, so relying on it without\n * declaring it would have been a phantom dependency; the manifest now declares\n * the resolution that already resolved, and no package joined the graph.\n *\n * `recorded` (3rd argument) stays `undefined` on purpose: it judges the\n * HAND-AUTHORED sections (`apps` / `dashboards` / `pages`), which this set does\n * not have — its bundles are entirely generated. The companion goes in the 4th\n * slot, which judges the generated ones. This is the shape\n * `@objectstack/platform-objects`'s own `metadata-translations/index.ts` uses.\n *\n * ⛔ Do not drop the 4th argument to quiet a staleness report. Serving the\n * superseded draft is the bug; `check:i18n-stale-fill`'s UNSERVED PROVENANCE\n * verdict fails the build if a committed companion stops being consulted here.\n */\nconst enSource: TranslationData = { objects: enObjects };\n\nexport const WebhooksTranslations: TranslationBundle = {\n en: enSource,\n 'zh-CN': withSourceFallback({ objects: zhCNObjects }, enSource, undefined, zhCNGeneratedSourceHashes),\n 'ja-JP': withSourceFallback({ objects: jaJPObjects }, enSource, undefined, jaJPGeneratedSourceHashes),\n 'es-ES': withSourceFallback({ objects: esESObjects }, enSource, undefined, esESGeneratedSourceHashes),\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'en'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const enObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"Webhook\",\n pluralLabel: \"Webhooks\",\n description: \"Outbound HTTP webhook subscription. Declared in code via defineStack({ webhooks }) / defineWebhook() (materialized into rows on boot) or authored directly in the Studio editor; dispatched by the webhook auto-enqueuer onto the shared HTTP outbox.\",\n fields: {\n id: {\n label: \"Webhook ID\"\n },\n name: {\n label: \"Name\",\n help: \"snake_case name, unique per organization — referenced in logs and audit\"\n },\n label: {\n label: \"Display Label\"\n },\n object_name: {\n label: \"Object\",\n help: \"Short object name whose record events (create/update/delete) fire this webhook\"\n },\n triggers: {\n label: \"Triggers\",\n help: \"Record events that fire this webhook (bulk_* deliver a count, not a record)\",\n options: {\n create: \"create\",\n update: \"update\",\n delete: \"delete\",\n bulk_update: \"bulk_update\",\n bulk_delete: \"bulk_delete\"\n }\n },\n url: {\n label: \"Target URL\",\n help: \"External endpoint that receives the POST\"\n },\n method: {\n label: \"HTTP Method\",\n help: \"HTTP method used for the callback request\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"Description\"\n },\n active: {\n label: \"Active\",\n help: \"Inactive webhooks are skipped by the dispatcher\"\n },\n definition_json: {\n label: \"Definition\",\n help: \"Serialised Webhook JSON (see @objectstack/spec/automation/webhook) — timeout and the rest of the authored envelope. Credentials are NOT stored here: the signing secret lives in the encrypted `signing_secret` field and the custom headers in the encrypted `headers_secret` field.\"\n },\n headers_secret: {\n label: \"Custom Headers\",\n help: \"Custom HTTP headers sent with each delivery, as a JSON object ({\\\"Authorization\\\": \\\"Bearer …\\\"}). Encrypted at rest into sys_secret; reads return a mask, never the headers. Leave the mask untouched to keep the current value.\"\n },\n signing_secret: {\n label: \"Signing Secret\",\n help: \"HMAC-SHA256 key used to sign deliveries (X-Objectstack-Signature). Encrypted at rest into sys_secret; reads return a mask, never the key. Leave the mask untouched to keep the current value.\"\n },\n managed_by: {\n label: \"Managed By\",\n help: \"Record provenance: platform = framework built-in / package = app/package-declared (boot-seeded from defineStack webhooks) / admin = created in Setup.\",\n options: {\n platform: \"platform\",\n package: \"package\",\n admin: \"admin\"\n }\n },\n customized: {\n label: \"Customized\",\n help: \"Set when an admin edits a package-declared webhook; boot seeding will no longer overwrite the row (a deactivated noisy webhook survives redeploys). Meaningless on admin rows.\"\n },\n created_at: {\n label: \"Created At\"\n },\n updated_at: {\n label: \"Updated At\"\n }\n },\n _views: {\n active: {\n label: \"Active\"\n },\n inactive: {\n label: \"Inactive\"\n },\n by_object: {\n label: \"By Object\"\n },\n all_webhooks: {\n label: \"All\"\n }\n }\n }\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'zh-CN'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const zhCNObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"Webhook\",\n pluralLabel: \"Webhook\",\n description: \"外发 HTTP Webhook 订阅。可在代码中通过 defineWebhook() 编写,或在 Studio 编辑器中维护;由 HTTP 连接器插件执行。\",\n fields: {\n id: {\n label: \"Webhook ID\"\n },\n name: {\n label: \"名称\",\n help: \"snake_case 名称,在每个组织内唯一——用于日志和审计引用\"\n },\n label: {\n label: \"显示标签\"\n },\n object_name: {\n label: \"对象\",\n help: \"触发该 Webhook 的记录事件(create/update/delete)的短对象名\"\n },\n triggers: {\n label: \"触发器\",\n help: \"触发该 Webhook 的记录事件。bulk_update / bulk_delete 由谓词写(批量)触发,投递的是受影响条数而非记录。\",\n options: {\n create: \"创建\",\n update: \"更新\",\n delete: \"删除\",\n bulk_update: \"批量更新\",\n bulk_delete: \"批量删除\"\n }\n },\n url: {\n label: \"目标 URL\",\n help: \"接收 POST 请求的外部端点\"\n },\n method: {\n label: \"HTTP 方法\",\n help: \"回调请求使用的 HTTP 方法\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"描述\"\n },\n active: {\n label: \"启用\",\n help: \"停用的 Webhook 会被调度器跳过\"\n },\n definition_json: {\n label: \"定义\",\n help: \"序列化的 Webhook JSON(参见 @objectstack/spec/automation/webhook)——包含完整的 headers/auth/retry/payload 配置\"\n },\n headers_secret: {\n label: \"自定义请求头\",\n help: \"随每次投递发送的自定义 HTTP 请求头,采用 JSON 对象格式({\\\"Authorization\\\": \\\"Bearer …\\\"})。静态存储时加密写入 sys_secret;读取只返回掩码,绝不返回请求头内容。保持掩码不变即保留当前值。\"\n },\n signing_secret: {\n label: \"签名密钥\",\n help: \"用于对投递请求签名的 HMAC-SHA256 密钥(X-Objectstack-Signature)。静态存储时加密写入 sys_secret;读取只返回掩码,绝不返回密钥。保持掩码不变即保留当前值。\"\n },\n managed_by: {\n label: \"管理来源\",\n help: \"记录来源:platform = 框架内置 / package = 应用包声明(由 defineStack 的 webhooks 在启动时种入)/ admin = 在 Setup 中创建。\",\n options: {\n platform: \"平台\",\n package: \"包\",\n admin: \"管理员\"\n }\n },\n customized: {\n label: \"已定制\",\n help: \"当管理员编辑应用包声明的 webhook 时置位;此后启动种入不再覆盖该行(被停用的嘈杂 webhook 可跨重新部署保留)。对 admin 来源的记录无意义。\"\n },\n created_at: {\n label: \"创建时间\"\n },\n updated_at: {\n label: \"更新时间\"\n }\n },\n _views: {\n active: {\n label: \"启用\"\n },\n inactive: {\n label: \"停用\"\n },\n by_object: {\n label: \"按对象\"\n },\n all_webhooks: {\n label: \"全部\"\n }\n }\n }\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'ja-JP'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const jaJPObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"ウェブフック\",\n pluralLabel: \"ウェブフック\",\n description: \"送信 HTTP Webhook サブスクリプション。defineWebhook() またはスタジオエディタで作成し、HTTP コネクタプラグインが実行します。\",\n fields: {\n id: {\n label: \"Webhook ID\"\n },\n name: {\n label: \"名前\",\n help: \"snake_case 名(組織ごとに一意)— ログおよび監査で参照\"\n },\n label: {\n label: \"表示名\"\n },\n object_name: {\n label: \"オブジェクト\",\n help: \"このウェブフックを発火するレコードイベント(create/update/delete)のオブジェクト短縮名\"\n },\n triggers: {\n label: \"トリガー\",\n help: \"このウェブフックを発火するレコードイベント。bulk_update / bulk_delete は述語による一括書き込みで発火し、レコードではなく件数を配信します。\",\n options: {\n create: \"作成\",\n update: \"更新\",\n delete: \"削除\",\n bulk_update: \"一括更新\",\n bulk_delete: \"一括削除\"\n }\n },\n url: {\n label: \"ターゲット URL\",\n help: \"POST を受信する外部エンドポイント\"\n },\n method: {\n label: \"HTTP メソッド\",\n help: \"コールバックリクエストで使用する HTTP メソッド\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"説明\"\n },\n active: {\n label: \"有効\",\n help: \"無効にするとディスパッチャにスキップされます\"\n },\n definition_json: {\n label: \"定義\",\n help: \"シリアライズされた Webhook JSON(@objectstack/spec/automation/webhook 参照)— ヘッダー/認証/リトライ/ペイロード設定を含む\"\n },\n headers_secret: {\n label: \"カスタムヘッダー\",\n help: \"各配信で送信するカスタム HTTP ヘッダー。JSON オブジェクト形式({\\\"Authorization\\\": \\\"Bearer …\\\"})。保存時は sys_secret に暗号化され、読み取りではマスクのみが返りヘッダーは返りません。マスクをそのままにすると現在の値が維持されます。\"\n },\n signing_secret: {\n label: \"署名シークレット\",\n help: \"配信の署名に使う HMAC-SHA256 キー(X-Objectstack-Signature)。保存時は sys_secret に暗号化され、読み取りではマスクのみが返りキーは返りません。マスクをそのままにすると現在の値が維持されます。\"\n },\n managed_by: {\n label: \"管理元\",\n help: \"レコードの出所: platform = フレームワーク組み込み / package = アプリ・パッケージ宣言(defineStack の webhooks から起動時シード)/ admin = Setup で作成。\",\n options: {\n platform: \"プラットフォーム\",\n package: \"パッケージ\",\n admin: \"管理者\"\n }\n },\n customized: {\n label: \"カスタマイズ済み\",\n help: \"管理者がパッケージ宣言の webhook を編集すると設定されます。以後、起動時シードはこの行を上書きしません(無効化したノイジーな webhook は再デプロイ後も保持)。admin 行では意味を持ちません。\"\n },\n created_at: {\n label: \"作成日時\"\n },\n updated_at: {\n label: \"更新日時\"\n }\n },\n _views: {\n active: {\n label: \"有効\"\n },\n inactive: {\n label: \"無効\"\n },\n by_object: {\n label: \"オブジェクト別\"\n },\n all_webhooks: {\n label: \"すべて\"\n }\n }\n }\n};\n","// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'es-ES'.\n * Edit translations in place; re-run extract (with --merge) to fill new gaps.\n * Do not hand-edit the structure — only the leaf string values.\n * Merge only fills gaps: correcting a source label/description does not\n * push the correction into a leaf here that already holds a translation —\n * a present-but-stale string is not a gap, so it is left as-is. Re-translate\n * it by hand when its source changes; nothing here or in `os i18n check`\n * tells a leaf a translator updated on purpose from one nobody has looked\n * at since the source moved.\n */\n\nimport type { TranslationData } from '@objectstack/spec/system';\n\nexport const esESObjects: NonNullable<TranslationData['objects']> = {\n sys_webhook: {\n label: \"Webhook\",\n pluralLabel: \"Webhooks\",\n description: \"Suscripción saliente de Webhook HTTP. Se crea mediante defineWebhook() en código o con el editor de Studio; la ejecuta el plugin del conector HTTP.\",\n fields: {\n id: {\n label: \"ID de webhook\"\n },\n name: {\n label: \"Nombre\",\n help: \"Nombre snake_case, único por organización; se usa en los registros y en la auditoría.\"\n },\n label: {\n label: \"Nombre visible\"\n },\n object_name: {\n label: \"Objeto\",\n help: \"Nombre corto del objeto cuyos eventos de registro (create/update/delete) activan este Webhook.\"\n },\n triggers: {\n label: \"Desencadenantes\",\n help: \"Eventos de registro que activan este Webhook. bulk_update / bulk_delete se activan en escrituras por predicado y entregan un recuento, no un registro.\",\n options: {\n create: \"Crear\",\n update: \"Actualizar\",\n delete: \"Eliminar\",\n bulk_update: \"Actualización masiva\",\n bulk_delete: \"Eliminación masiva\"\n }\n },\n url: {\n label: \"URL de destino\",\n help: \"Endpoint externo que recibe el POST.\"\n },\n method: {\n label: \"Método HTTP\",\n help: \"Método HTTP utilizado en la solicitud de callback.\",\n options: {\n get: \"GET\",\n post: \"POST\",\n put: \"PUT\",\n patch: \"PATCH\",\n delete: \"DELETE\"\n }\n },\n description: {\n label: \"Descripción\"\n },\n active: {\n label: \"Activo\",\n help: \"Los Webhooks inactivos se omiten en el despachador.\"\n },\n definition_json: {\n label: \"Definición\",\n help: \"JSON serializado de Webhook (consulte @objectstack/spec/automation/webhook): configuración completa de cabeceras/auth/reintentos/payload.\"\n },\n headers_secret: {\n label: \"Cabeceras personalizadas\",\n help: \"Cabeceras HTTP personalizadas enviadas con cada entrega, como un objeto JSON ({\\\"Authorization\\\": \\\"Bearer …\\\"}). Se cifran en reposo en sys_secret; las lecturas devuelven una máscara, nunca las cabeceras. Deje la máscara sin tocar para conservar el valor actual.\"\n },\n signing_secret: {\n label: \"Secreto de firma\",\n help: \"Clave HMAC-SHA256 usada para firmar las entregas (X-Objectstack-Signature). Se cifra en reposo en sys_secret; las lecturas devuelven una máscara, nunca la clave. Deje la máscara sin tocar para conservar el valor actual.\"\n },\n managed_by: {\n label: \"Gestionado por\",\n help: \"Procedencia del registro: platform = integrado en el framework / package = declarado por app o paquete (sembrado al arrancar desde los webhooks de defineStack) / admin = creado en Setup.\",\n options: {\n platform: \"Plataforma\",\n package: \"Paquete\",\n admin: \"Administrador\"\n }\n },\n customized: {\n label: \"Personalizado\",\n help: \"Se establece cuando un administrador edita un webhook declarado por un paquete; a partir de entonces el sembrado de arranque deja de sobrescribir la fila (un webhook ruidoso desactivado sobrevive a los redespliegues). Sin sentido en filas admin.\"\n },\n created_at: {\n label: \"Creado el\"\n },\n updated_at: {\n label: \"Actualizado el\"\n }\n },\n _views: {\n active: {\n label: \"Activo\"\n },\n inactive: {\n label: \"Inactivo\"\n },\n by_object: {\n label: \"Por objeto\"\n },\n all_webhooks: {\n label: \"Todos\"\n }\n }\n }\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'zh-CN'. Do not hand-edit.\n *\n * Each entry is the digest of the SOURCE REVISION that this locale's leaf at\n * that path is still a byte copy of — provenance for the generated half of the\n * bundles (#11671, maintainer ruling #12069 Option A, extending #8765 Option B).\n *\n * An entry exists only while the leaf IS such a copy. Re-translate the leaf in\n * `<locale>.objects.generated.ts` and the next extract drops its entry by\n * itself — the table makes no claim about text a translator wrote. A path with\n * no entry is LEGACY-TRUSTED and never reported stale.\n *\n * ⚠️ Do not \"fix\" a staleness report by editing this file. Refreshing a digest\n * records that the current text was copied from the current source, which is\n * the false claim the mechanism exists to detect. Fix the TRANSLATION.\n */\n\nexport const zhCNGeneratedSourceHashes: Readonly<Record<string, string>> = {\n \"objects.sys_webhook.fields.id.label\": \"9a4c8ec2a2567b95\",\n \"objects.sys_webhook.fields.method.options.delete\": \"f59e059ed51f9bfc\",\n \"objects.sys_webhook.fields.method.options.get\": \"470848255971c548\",\n \"objects.sys_webhook.fields.method.options.patch\": \"7de3603749decb30\",\n \"objects.sys_webhook.fields.method.options.post\": \"004b24eab36d26a4\",\n \"objects.sys_webhook.fields.method.options.put\": \"04d929ecae7aa435\",\n \"objects.sys_webhook.label\": \"b608f1636b7e8184\",\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'ja-JP'. Do not hand-edit.\n *\n * Each entry is the digest of the SOURCE REVISION that this locale's leaf at\n * that path is still a byte copy of — provenance for the generated half of the\n * bundles (#11671, maintainer ruling #12069 Option A, extending #8765 Option B).\n *\n * An entry exists only while the leaf IS such a copy. Re-translate the leaf in\n * `<locale>.objects.generated.ts` and the next extract drops its entry by\n * itself — the table makes no claim about text a translator wrote. A path with\n * no entry is LEGACY-TRUSTED and never reported stale.\n *\n * ⚠️ Do not \"fix\" a staleness report by editing this file. Refreshing a digest\n * records that the current text was copied from the current source, which is\n * the false claim the mechanism exists to detect. Fix the TRANSLATION.\n */\n\nexport const jaJPGeneratedSourceHashes: Readonly<Record<string, string>> = {\n \"objects.sys_webhook.fields.id.label\": \"9a4c8ec2a2567b95\",\n \"objects.sys_webhook.fields.method.options.delete\": \"f59e059ed51f9bfc\",\n \"objects.sys_webhook.fields.method.options.get\": \"470848255971c548\",\n \"objects.sys_webhook.fields.method.options.patch\": \"7de3603749decb30\",\n \"objects.sys_webhook.fields.method.options.post\": \"004b24eab36d26a4\",\n \"objects.sys_webhook.fields.method.options.put\": \"04d929ecae7aa435\",\n};\n","// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.\n\n/**\n * Auto-generated by 'os i18n extract' for locale 'es-ES'. Do not hand-edit.\n *\n * Each entry is the digest of the SOURCE REVISION that this locale's leaf at\n * that path is still a byte copy of — provenance for the generated half of the\n * bundles (#11671, maintainer ruling #12069 Option A, extending #8765 Option B).\n *\n * An entry exists only while the leaf IS such a copy. Re-translate the leaf in\n * `<locale>.objects.generated.ts` and the next extract drops its entry by\n * itself — the table makes no claim about text a translator wrote. A path with\n * no entry is LEGACY-TRUSTED and never reported stale.\n *\n * ⚠️ Do not \"fix\" a staleness report by editing this file. Refreshing a digest\n * records that the current text was copied from the current source, which is\n * the false claim the mechanism exists to detect. Fix the TRANSLATION.\n */\n\nexport const esESGeneratedSourceHashes: Readonly<Record<string, string>> = {\n \"objects.sys_webhook.fields.method.options.delete\": \"f59e059ed51f9bfc\",\n \"objects.sys_webhook.fields.method.options.get\": \"470848255971c548\",\n \"objects.sys_webhook.fields.method.options.patch\": \"7de3603749decb30\",\n \"objects.sys_webhook.fields.method.options.post\": \"004b24eab36d26a4\",\n \"objects.sys_webhook.fields.method.options.put\": \"04d929ecae7aa435\",\n \"objects.sys_webhook.label\": \"b608f1636b7e8184\",\n \"objects.sys_webhook.pluralLabel\": \"8fdd81bc76459a6a\",\n};\n"]}
|