@objectstack/plugin-webhooks 11.0.0 → 11.2.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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @objectstack/plugin-webhooks@11.0.0 build /home/runner/work/framework/framework/packages/plugins/plugin-webhooks
2
+ > @objectstack/plugin-webhooks@11.2.0 build /home/runner/work/framework/framework/packages/plugins/plugin-webhooks
3
3
  > tsup
4
4
 
5
5
  CLI Building entry: src/index.ts, src/schema.ts
@@ -12,25 +12,25 @@
12
12
  CJS Build start
13
13
  ESM dist/index.js 12.73 KB
14
14
  ESM dist/schema.js 111.00 B
15
- ESM dist/chunk-HWFTXTTI.js 4.71 KB
15
+ ESM dist/chunk-2V7E3ABN.js 4.82 KB
16
16
  ESM dist/translations-AV47AVPV.js 19.41 KB
17
17
  ESM dist/index.js.map 32.44 KB
18
18
  ESM dist/schema.js.map 71.00 B
19
- ESM dist/chunk-HWFTXTTI.js.map 9.15 KB
19
+ ESM dist/chunk-2V7E3ABN.js.map 9.27 KB
20
20
  ESM dist/translations-AV47AVPV.js.map 30.54 KB
21
- ESM ⚡️ Build success in 947ms
21
+ ESM ⚡️ Build success in 780ms
22
22
  CJS dist/index.cjs 16.40 KB
23
23
  CJS dist/schema.cjs 220.00 B
24
- CJS dist/chunk-KPKLAXNA.cjs 4.86 KB
24
+ CJS dist/chunk-EHLUIU42.cjs 4.96 KB
25
25
  CJS dist/translations-OAKKANSP.cjs 19.50 KB
26
26
  CJS dist/index.cjs.map 30.14 KB
27
27
  CJS dist/schema.cjs.map 278.00 B
28
- CJS dist/chunk-KPKLAXNA.cjs.map 10.96 KB
28
+ CJS dist/chunk-EHLUIU42.cjs.map 11.10 KB
29
29
  CJS dist/translations-OAKKANSP.cjs.map 34.65 KB
30
- CJS ⚡️ Build success in 958ms
30
+ CJS ⚡️ Build success in 782ms
31
31
  DTS Build start
32
- DTS ⚡️ Build success in 20455ms
32
+ DTS ⚡️ Build success in 26841ms
33
33
  DTS dist/index.d.ts 6.97 KB
34
- DTS dist/schema.d.ts 130.14 KB
34
+ DTS dist/schema.d.ts 128.66 KB
35
35
  DTS dist/index.d.cts 6.97 KB
36
- DTS dist/schema.d.cts 130.14 KB
36
+ DTS dist/schema.d.cts 128.66 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @objectstack/plugin-webhooks
2
2
 
3
+ ## 11.2.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [d0f4b13]
8
+ - Updated dependencies [302bdab]
9
+ - @objectstack/spec@11.2.0
10
+ - @objectstack/core@11.2.0
11
+ - @objectstack/service-messaging@11.2.0
12
+
13
+ ## 11.1.0
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [ce0b4f6]
18
+ - Updated dependencies [9ccfcd6]
19
+ - Updated dependencies [ecf193f]
20
+ - Updated dependencies [51bec81]
21
+ - Updated dependencies [3e593a7]
22
+ - Updated dependencies [63d5403]
23
+ - @objectstack/core@11.1.0
24
+ - @objectstack/spec@11.1.0
25
+ - @objectstack/service-messaging@11.1.0
26
+
3
27
  ## 11.0.0
4
28
 
5
29
  ### Patch Changes
@@ -15,6 +15,8 @@ var SysWebhook = ObjectSchema.create({
15
15
  userActions: { create: true, edit: true, delete: true, import: false },
16
16
  description: "Outbound HTTP webhook subscription. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.",
17
17
  displayNameField: "name",
18
+ nameField: "name",
19
+ // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
18
20
  titleFormat: "{label}",
19
21
  compactLayout: ["name", "object_name", "url", "active", "updated_at"],
20
22
  listViews: {
@@ -135,4 +137,4 @@ var SysWebhook = ObjectSchema.create({
135
137
  export {
136
138
  SysWebhook
137
139
  };
138
- //# sourceMappingURL=chunk-HWFTXTTI.js.map
140
+ //# sourceMappingURL=chunk-2V7E3ABN.js.map
@@ -0,0 +1 @@
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 * One row per `name`. The automation runtime\n * (`@objectstack/service-automation`, built-in `http_request` node) loads\n * active rows on boot + on `sys_webhook:changed` events, registers\n * `afterInsert` / `afterUpdate` / `afterDelete` listeners for the\n * targeted object, and dispatches outbound HTTP calls when matching\n * record events fire.\n *\n * Ownership (ADR-0029 K2.a): this object is **owned by\n * `@objectstack/plugin-webhooks`** — the plugin that consumes these rows —\n * alongside its sibling `sys_webhook_delivery`. It used to live in the\n * `@objectstack/platform-objects` monolith and be imported here; the\n * definition now lives with its owner so the plugin ships both data and\n * 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. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.',\n displayNameField: 'name',\n nameField: 'name', // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)\n titleFormat: '{label}',\n compactLayout: ['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 description: 'Unique snake_case name — 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 description: 'Short object name whose events fire this webhook (blank = manual / API-triggered)',\n group: 'Definition',\n }),\n\n triggers: Field.text({\n label: 'Triggers',\n required: false,\n maxLength: 200,\n description: 'Comma-separated event list: create,update,delete,undelete,api',\n group: 'Definition',\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.text({\n label: 'HTTP Method',\n required: true,\n defaultValue: 'POST',\n maxLength: 10,\n description: 'GET / POST / PUT / PATCH / DELETE',\n group: 'Definition',\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) — full headers/auth/retry/payload config',\n group: 'Definition',\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 { fields: ['name'], unique: true },\n { fields: ['object_name'] },\n { fields: ['active', 'object_name'] },\n ],\n});\n"],"mappings":"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","names":[]}
@@ -15,6 +15,8 @@ var SysWebhook = _data.ObjectSchema.create({
15
15
  userActions: { create: true, edit: true, delete: true, import: false },
16
16
  description: "Outbound HTTP webhook subscription. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.",
17
17
  displayNameField: "name",
18
+ nameField: "name",
19
+ // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
18
20
  titleFormat: "{label}",
19
21
  compactLayout: ["name", "object_name", "url", "active", "updated_at"],
20
22
  listViews: {
@@ -135,4 +137,4 @@ var SysWebhook = _data.ObjectSchema.create({
135
137
 
136
138
 
137
139
  exports.SysWebhook = SysWebhook;
138
- //# sourceMappingURL=chunk-KPKLAXNA.cjs.map
140
+ //# sourceMappingURL=chunk-EHLUIU42.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/framework/framework/packages/plugins/plugin-webhooks/dist/chunk-EHLUIU42.cjs","../src/sys-webhook.object.ts"],"names":[],"mappings":"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","file":"/home/runner/work/framework/framework/packages/plugins/plugin-webhooks/dist/chunk-EHLUIU42.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 * One row per `name`. The automation runtime\n * (`@objectstack/service-automation`, built-in `http_request` node) loads\n * active rows on boot + on `sys_webhook:changed` events, registers\n * `afterInsert` / `afterUpdate` / `afterDelete` listeners for the\n * targeted object, and dispatches outbound HTTP calls when matching\n * record events fire.\n *\n * Ownership (ADR-0029 K2.a): this object is **owned by\n * `@objectstack/plugin-webhooks`** — the plugin that consumes these rows —\n * alongside its sibling `sys_webhook_delivery`. It used to live in the\n * `@objectstack/platform-objects` monolith and be imported here; the\n * definition now lives with its owner so the plugin ships both data and\n * 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. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.',\n displayNameField: 'name',\n nameField: 'name', // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)\n titleFormat: '{label}',\n compactLayout: ['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 description: 'Unique snake_case name — 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 description: 'Short object name whose events fire this webhook (blank = manual / API-triggered)',\n group: 'Definition',\n }),\n\n triggers: Field.text({\n label: 'Triggers',\n required: false,\n maxLength: 200,\n description: 'Comma-separated event list: create,update,delete,undelete,api',\n group: 'Definition',\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.text({\n label: 'HTTP Method',\n required: true,\n defaultValue: 'POST',\n maxLength: 10,\n description: 'GET / POST / PUT / PATCH / DELETE',\n group: 'Definition',\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) — full headers/auth/retry/payload config',\n group: 'Definition',\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 { fields: ['name'], unique: true },\n { fields: ['object_name'] },\n { fields: ['active', 'object_name'] },\n ],\n});\n"]}
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkKPKLAXNAcjs = require('./chunk-KPKLAXNA.cjs');
3
+ var _chunkEHLUIU42cjs = require('./chunk-EHLUIU42.cjs');
4
4
 
5
5
  // src/auto-enqueuer.ts
6
6
  var AutoEnqueuer = class {
@@ -215,7 +215,7 @@ var WebhookOutboxPlugin = class {
215
215
  scope: "system",
216
216
  name: "Webhook Schemas",
217
217
  description: "Registers sys_webhook (configuration). Deliveries use messaging's sys_http_delivery outbox.",
218
- objects: [_chunkKPKLAXNAcjs.SysWebhook],
218
+ objects: [_chunkEHLUIU42cjs.SysWebhook],
219
219
  navigationContributions: [
220
220
  {
221
221
  app: "setup",
@@ -380,5 +380,5 @@ var WebhookOutboxPlugin = class {
380
380
 
381
381
 
382
382
 
383
- exports.AutoEnqueuer = AutoEnqueuer; exports.SysWebhook = _chunkKPKLAXNAcjs.SysWebhook; exports.WebhookOutboxPlugin = WebhookOutboxPlugin;
383
+ exports.AutoEnqueuer = AutoEnqueuer; exports.SysWebhook = _chunkEHLUIU42cjs.SysWebhook; exports.WebhookOutboxPlugin = WebhookOutboxPlugin;
384
384
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SysWebhook
3
- } from "./chunk-HWFTXTTI.js";
3
+ } from "./chunk-2V7E3ABN.js";
4
4
 
5
5
  // src/auto-enqueuer.ts
6
6
  var AutoEnqueuer = class {
package/dist/schema.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkKPKLAXNAcjs = require('./chunk-KPKLAXNA.cjs');
3
+ var _chunkEHLUIU42cjs = require('./chunk-EHLUIU42.cjs');
4
4
 
5
5
 
6
- exports.SysWebhook = _chunkKPKLAXNAcjs.SysWebhook;
6
+ exports.SysWebhook = _chunkEHLUIU42cjs.SysWebhook;
7
7
  //# sourceMappingURL=schema.cjs.map
package/dist/schema.d.cts CHANGED
@@ -117,7 +117,6 @@ declare const SysWebhook: Omit<{
117
117
  relationshipField?: string | undefined;
118
118
  } | undefined;
119
119
  language?: string | undefined;
120
- maxRating?: number | undefined;
121
120
  step?: number | undefined;
122
121
  currencyConfig?: {
123
122
  precision: number;
@@ -247,7 +246,6 @@ declare const SysWebhook: Omit<{
247
246
  requiredPermissions?: string[] | undefined;
248
247
  system?: boolean | undefined;
249
248
  inlineHelpText?: string | undefined;
250
- caseSensitive?: boolean | undefined;
251
249
  autonumberFormat?: string | undefined;
252
250
  }>;
253
251
  _lock?: "full" | "none" | "no-overlay" | "no-delete" | undefined;
@@ -335,12 +333,6 @@ declare const SysWebhook: Omit<{
335
333
  versionField: string;
336
334
  retentionDays?: number | undefined;
337
335
  } | undefined;
338
- partitioning?: {
339
- enabled: boolean;
340
- strategy: "hash" | "list" | "range";
341
- key: string;
342
- interval?: string | undefined;
343
- } | undefined;
344
336
  validations?: _objectstack_spec_data.BaseValidationRuleShape[] | undefined;
345
337
  activityMilestones?: {
346
338
  field: string;
@@ -348,6 +340,7 @@ declare const SysWebhook: Omit<{
348
340
  summary: string;
349
341
  type?: string | undefined;
350
342
  }[] | undefined;
343
+ nameField?: string | undefined;
351
344
  displayNameField?: string | undefined;
352
345
  recordName?: {
353
346
  type: "text" | "autonumber";
@@ -671,7 +664,6 @@ declare const SysWebhook: Omit<{
671
664
  debounceMs?: number | undefined;
672
665
  } | undefined;
673
666
  }> | undefined;
674
- defaultDetailForm?: string | undefined;
675
667
  searchableFields?: string[] | undefined;
676
668
  search?: {
677
669
  fields: string[];
@@ -688,7 +680,7 @@ declare const SysWebhook: Omit<{
688
680
  trash: boolean;
689
681
  mru: boolean;
690
682
  clone: boolean;
691
- apiMethods?: ("create" | "update" | "delete" | "search" | "import" | "list" | "get" | "upsert" | "bulk" | "aggregate" | "history" | "restore" | "purge" | "export")[] | undefined;
683
+ apiMethods?: ("create" | "update" | "delete" | "search" | "import" | "get" | "upsert" | "list" | "bulk" | "aggregate" | "history" | "restore" | "purge" | "export")[] | undefined;
692
684
  } | undefined;
693
685
  sharingModel?: "full" | "private" | "read" | "public_read" | "public_read_write" | "controlled_by_parent" | "read_write" | undefined;
694
686
  publicSharing?: {
@@ -716,6 +708,7 @@ declare const SysWebhook: Omit<{
716
708
  locations?: ("list_toolbar" | "list_item" | "record_header" | "record_more" | "record_related" | "record_section" | "global_nav")[] | undefined;
717
709
  component?: "action:button" | "action:icon" | "action:menu" | "action:group" | undefined;
718
710
  target?: string | undefined;
711
+ openIn?: "self" | "new-tab" | undefined;
719
712
  body?: {
720
713
  language: "expression";
721
714
  source: string;
@@ -829,6 +822,7 @@ declare const SysWebhook: Omit<{
829
822
  };
830
823
  readonly description: "Outbound HTTP webhook subscription. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.";
831
824
  readonly displayNameField: "name";
825
+ readonly nameField: "name";
832
826
  readonly titleFormat: "{label}";
833
827
  readonly compactLayout: ["name", "object_name", "url", "active", "updated_at"];
834
828
  readonly listViews: {
@@ -999,7 +993,6 @@ declare const SysWebhook: Omit<{
999
993
  relationshipField?: string | undefined;
1000
994
  } | undefined;
1001
995
  readonly language?: string | undefined;
1002
- readonly maxRating?: number | undefined;
1003
996
  readonly step?: number | undefined;
1004
997
  readonly currencyConfig?: {
1005
998
  precision: number;
@@ -1093,7 +1086,6 @@ declare const SysWebhook: Omit<{
1093
1086
  } | undefined;
1094
1087
  readonly sortable?: boolean | undefined;
1095
1088
  readonly inlineHelpText?: string | undefined;
1096
- readonly caseSensitive?: boolean | undefined;
1097
1089
  readonly autonumberFormat?: string | undefined;
1098
1090
  readonly index?: boolean | undefined;
1099
1091
  readonly type: "text";
@@ -1175,7 +1167,6 @@ declare const SysWebhook: Omit<{
1175
1167
  relationshipField?: string | undefined;
1176
1168
  } | undefined;
1177
1169
  readonly language?: string | undefined;
1178
- readonly maxRating?: number | undefined;
1179
1170
  readonly step?: number | undefined;
1180
1171
  readonly currencyConfig?: {
1181
1172
  precision: number;
@@ -1269,7 +1260,6 @@ declare const SysWebhook: Omit<{
1269
1260
  } | undefined;
1270
1261
  readonly sortable?: boolean | undefined;
1271
1262
  readonly inlineHelpText?: string | undefined;
1272
- readonly caseSensitive?: boolean | undefined;
1273
1263
  readonly autonumberFormat?: string | undefined;
1274
1264
  readonly index?: boolean | undefined;
1275
1265
  readonly type: "text";
@@ -1351,7 +1341,6 @@ declare const SysWebhook: Omit<{
1351
1341
  relationshipField?: string | undefined;
1352
1342
  } | undefined;
1353
1343
  readonly language?: string | undefined;
1354
- readonly maxRating?: number | undefined;
1355
1344
  readonly step?: number | undefined;
1356
1345
  readonly currencyConfig?: {
1357
1346
  precision: number;
@@ -1445,7 +1434,6 @@ declare const SysWebhook: Omit<{
1445
1434
  } | undefined;
1446
1435
  readonly sortable?: boolean | undefined;
1447
1436
  readonly inlineHelpText?: string | undefined;
1448
- readonly caseSensitive?: boolean | undefined;
1449
1437
  readonly autonumberFormat?: string | undefined;
1450
1438
  readonly index?: boolean | undefined;
1451
1439
  readonly type: "text";
@@ -1527,7 +1515,6 @@ declare const SysWebhook: Omit<{
1527
1515
  relationshipField?: string | undefined;
1528
1516
  } | undefined;
1529
1517
  readonly language?: string | undefined;
1530
- readonly maxRating?: number | undefined;
1531
1518
  readonly step?: number | undefined;
1532
1519
  readonly currencyConfig?: {
1533
1520
  precision: number;
@@ -1621,7 +1608,6 @@ declare const SysWebhook: Omit<{
1621
1608
  } | undefined;
1622
1609
  readonly sortable?: boolean | undefined;
1623
1610
  readonly inlineHelpText?: string | undefined;
1624
- readonly caseSensitive?: boolean | undefined;
1625
1611
  readonly autonumberFormat?: string | undefined;
1626
1612
  readonly index?: boolean | undefined;
1627
1613
  readonly type: "text";
@@ -1703,7 +1689,6 @@ declare const SysWebhook: Omit<{
1703
1689
  relationshipField?: string | undefined;
1704
1690
  } | undefined;
1705
1691
  readonly language?: string | undefined;
1706
- readonly maxRating?: number | undefined;
1707
1692
  readonly step?: number | undefined;
1708
1693
  readonly currencyConfig?: {
1709
1694
  precision: number;
@@ -1797,7 +1782,6 @@ declare const SysWebhook: Omit<{
1797
1782
  } | undefined;
1798
1783
  readonly sortable?: boolean | undefined;
1799
1784
  readonly inlineHelpText?: string | undefined;
1800
- readonly caseSensitive?: boolean | undefined;
1801
1785
  readonly autonumberFormat?: string | undefined;
1802
1786
  readonly index?: boolean | undefined;
1803
1787
  readonly type: "text";
@@ -1879,7 +1863,6 @@ declare const SysWebhook: Omit<{
1879
1863
  relationshipField?: string | undefined;
1880
1864
  } | undefined;
1881
1865
  readonly language?: string | undefined;
1882
- readonly maxRating?: number | undefined;
1883
1866
  readonly step?: number | undefined;
1884
1867
  readonly currencyConfig?: {
1885
1868
  precision: number;
@@ -1973,7 +1956,6 @@ declare const SysWebhook: Omit<{
1973
1956
  } | undefined;
1974
1957
  readonly sortable?: boolean | undefined;
1975
1958
  readonly inlineHelpText?: string | undefined;
1976
- readonly caseSensitive?: boolean | undefined;
1977
1959
  readonly autonumberFormat?: string | undefined;
1978
1960
  readonly index?: boolean | undefined;
1979
1961
  readonly type: "text";
@@ -2055,7 +2037,6 @@ declare const SysWebhook: Omit<{
2055
2037
  relationshipField?: string | undefined;
2056
2038
  } | undefined;
2057
2039
  readonly language?: string | undefined;
2058
- readonly maxRating?: number | undefined;
2059
2040
  readonly step?: number | undefined;
2060
2041
  readonly currencyConfig?: {
2061
2042
  precision: number;
@@ -2149,7 +2130,6 @@ declare const SysWebhook: Omit<{
2149
2130
  } | undefined;
2150
2131
  readonly sortable?: boolean | undefined;
2151
2132
  readonly inlineHelpText?: string | undefined;
2152
- readonly caseSensitive?: boolean | undefined;
2153
2133
  readonly autonumberFormat?: string | undefined;
2154
2134
  readonly index?: boolean | undefined;
2155
2135
  readonly type: "text";
@@ -2231,7 +2211,6 @@ declare const SysWebhook: Omit<{
2231
2211
  relationshipField?: string | undefined;
2232
2212
  } | undefined;
2233
2213
  readonly language?: string | undefined;
2234
- readonly maxRating?: number | undefined;
2235
2214
  readonly step?: number | undefined;
2236
2215
  readonly currencyConfig?: {
2237
2216
  precision: number;
@@ -2325,7 +2304,6 @@ declare const SysWebhook: Omit<{
2325
2304
  } | undefined;
2326
2305
  readonly sortable?: boolean | undefined;
2327
2306
  readonly inlineHelpText?: string | undefined;
2328
- readonly caseSensitive?: boolean | undefined;
2329
2307
  readonly autonumberFormat?: string | undefined;
2330
2308
  readonly index?: boolean | undefined;
2331
2309
  readonly type: "textarea";
@@ -2407,7 +2385,6 @@ declare const SysWebhook: Omit<{
2407
2385
  relationshipField?: string | undefined;
2408
2386
  } | undefined;
2409
2387
  readonly language?: string | undefined;
2410
- readonly maxRating?: number | undefined;
2411
2388
  readonly step?: number | undefined;
2412
2389
  readonly currencyConfig?: {
2413
2390
  precision: number;
@@ -2501,7 +2478,6 @@ declare const SysWebhook: Omit<{
2501
2478
  } | undefined;
2502
2479
  readonly sortable?: boolean | undefined;
2503
2480
  readonly inlineHelpText?: string | undefined;
2504
- readonly caseSensitive?: boolean | undefined;
2505
2481
  readonly autonumberFormat?: string | undefined;
2506
2482
  readonly index?: boolean | undefined;
2507
2483
  readonly type: "boolean";
@@ -2583,7 +2559,6 @@ declare const SysWebhook: Omit<{
2583
2559
  relationshipField?: string | undefined;
2584
2560
  } | undefined;
2585
2561
  readonly language?: string | undefined;
2586
- readonly maxRating?: number | undefined;
2587
2562
  readonly step?: number | undefined;
2588
2563
  readonly currencyConfig?: {
2589
2564
  precision: number;
@@ -2677,7 +2652,6 @@ declare const SysWebhook: Omit<{
2677
2652
  } | undefined;
2678
2653
  readonly sortable?: boolean | undefined;
2679
2654
  readonly inlineHelpText?: string | undefined;
2680
- readonly caseSensitive?: boolean | undefined;
2681
2655
  readonly autonumberFormat?: string | undefined;
2682
2656
  readonly index?: boolean | undefined;
2683
2657
  readonly type: "textarea";
@@ -2759,7 +2733,6 @@ declare const SysWebhook: Omit<{
2759
2733
  relationshipField?: string | undefined;
2760
2734
  } | undefined;
2761
2735
  readonly language?: string | undefined;
2762
- readonly maxRating?: number | undefined;
2763
2736
  readonly step?: number | undefined;
2764
2737
  readonly currencyConfig?: {
2765
2738
  precision: number;
@@ -2853,7 +2826,6 @@ declare const SysWebhook: Omit<{
2853
2826
  } | undefined;
2854
2827
  readonly sortable?: boolean | undefined;
2855
2828
  readonly inlineHelpText?: string | undefined;
2856
- readonly caseSensitive?: boolean | undefined;
2857
2829
  readonly autonumberFormat?: string | undefined;
2858
2830
  readonly index?: boolean | undefined;
2859
2831
  readonly type: "datetime";
@@ -2935,7 +2907,6 @@ declare const SysWebhook: Omit<{
2935
2907
  relationshipField?: string | undefined;
2936
2908
  } | undefined;
2937
2909
  readonly language?: string | undefined;
2938
- readonly maxRating?: number | undefined;
2939
2910
  readonly step?: number | undefined;
2940
2911
  readonly currencyConfig?: {
2941
2912
  precision: number;
@@ -3029,7 +3000,6 @@ declare const SysWebhook: Omit<{
3029
3000
  } | undefined;
3030
3001
  readonly sortable?: boolean | undefined;
3031
3002
  readonly inlineHelpText?: string | undefined;
3032
- readonly caseSensitive?: boolean | undefined;
3033
3003
  readonly autonumberFormat?: string | undefined;
3034
3004
  readonly index?: boolean | undefined;
3035
3005
  readonly type: "datetime";
package/dist/schema.d.ts CHANGED
@@ -117,7 +117,6 @@ declare const SysWebhook: Omit<{
117
117
  relationshipField?: string | undefined;
118
118
  } | undefined;
119
119
  language?: string | undefined;
120
- maxRating?: number | undefined;
121
120
  step?: number | undefined;
122
121
  currencyConfig?: {
123
122
  precision: number;
@@ -247,7 +246,6 @@ declare const SysWebhook: Omit<{
247
246
  requiredPermissions?: string[] | undefined;
248
247
  system?: boolean | undefined;
249
248
  inlineHelpText?: string | undefined;
250
- caseSensitive?: boolean | undefined;
251
249
  autonumberFormat?: string | undefined;
252
250
  }>;
253
251
  _lock?: "full" | "none" | "no-overlay" | "no-delete" | undefined;
@@ -335,12 +333,6 @@ declare const SysWebhook: Omit<{
335
333
  versionField: string;
336
334
  retentionDays?: number | undefined;
337
335
  } | undefined;
338
- partitioning?: {
339
- enabled: boolean;
340
- strategy: "hash" | "list" | "range";
341
- key: string;
342
- interval?: string | undefined;
343
- } | undefined;
344
336
  validations?: _objectstack_spec_data.BaseValidationRuleShape[] | undefined;
345
337
  activityMilestones?: {
346
338
  field: string;
@@ -348,6 +340,7 @@ declare const SysWebhook: Omit<{
348
340
  summary: string;
349
341
  type?: string | undefined;
350
342
  }[] | undefined;
343
+ nameField?: string | undefined;
351
344
  displayNameField?: string | undefined;
352
345
  recordName?: {
353
346
  type: "text" | "autonumber";
@@ -671,7 +664,6 @@ declare const SysWebhook: Omit<{
671
664
  debounceMs?: number | undefined;
672
665
  } | undefined;
673
666
  }> | undefined;
674
- defaultDetailForm?: string | undefined;
675
667
  searchableFields?: string[] | undefined;
676
668
  search?: {
677
669
  fields: string[];
@@ -688,7 +680,7 @@ declare const SysWebhook: Omit<{
688
680
  trash: boolean;
689
681
  mru: boolean;
690
682
  clone: boolean;
691
- apiMethods?: ("create" | "update" | "delete" | "search" | "import" | "list" | "get" | "upsert" | "bulk" | "aggregate" | "history" | "restore" | "purge" | "export")[] | undefined;
683
+ apiMethods?: ("create" | "update" | "delete" | "search" | "import" | "get" | "upsert" | "list" | "bulk" | "aggregate" | "history" | "restore" | "purge" | "export")[] | undefined;
692
684
  } | undefined;
693
685
  sharingModel?: "full" | "private" | "read" | "public_read" | "public_read_write" | "controlled_by_parent" | "read_write" | undefined;
694
686
  publicSharing?: {
@@ -716,6 +708,7 @@ declare const SysWebhook: Omit<{
716
708
  locations?: ("list_toolbar" | "list_item" | "record_header" | "record_more" | "record_related" | "record_section" | "global_nav")[] | undefined;
717
709
  component?: "action:button" | "action:icon" | "action:menu" | "action:group" | undefined;
718
710
  target?: string | undefined;
711
+ openIn?: "self" | "new-tab" | undefined;
719
712
  body?: {
720
713
  language: "expression";
721
714
  source: string;
@@ -829,6 +822,7 @@ declare const SysWebhook: Omit<{
829
822
  };
830
823
  readonly description: "Outbound HTTP webhook subscription. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.";
831
824
  readonly displayNameField: "name";
825
+ readonly nameField: "name";
832
826
  readonly titleFormat: "{label}";
833
827
  readonly compactLayout: ["name", "object_name", "url", "active", "updated_at"];
834
828
  readonly listViews: {
@@ -999,7 +993,6 @@ declare const SysWebhook: Omit<{
999
993
  relationshipField?: string | undefined;
1000
994
  } | undefined;
1001
995
  readonly language?: string | undefined;
1002
- readonly maxRating?: number | undefined;
1003
996
  readonly step?: number | undefined;
1004
997
  readonly currencyConfig?: {
1005
998
  precision: number;
@@ -1093,7 +1086,6 @@ declare const SysWebhook: Omit<{
1093
1086
  } | undefined;
1094
1087
  readonly sortable?: boolean | undefined;
1095
1088
  readonly inlineHelpText?: string | undefined;
1096
- readonly caseSensitive?: boolean | undefined;
1097
1089
  readonly autonumberFormat?: string | undefined;
1098
1090
  readonly index?: boolean | undefined;
1099
1091
  readonly type: "text";
@@ -1175,7 +1167,6 @@ declare const SysWebhook: Omit<{
1175
1167
  relationshipField?: string | undefined;
1176
1168
  } | undefined;
1177
1169
  readonly language?: string | undefined;
1178
- readonly maxRating?: number | undefined;
1179
1170
  readonly step?: number | undefined;
1180
1171
  readonly currencyConfig?: {
1181
1172
  precision: number;
@@ -1269,7 +1260,6 @@ declare const SysWebhook: Omit<{
1269
1260
  } | undefined;
1270
1261
  readonly sortable?: boolean | undefined;
1271
1262
  readonly inlineHelpText?: string | undefined;
1272
- readonly caseSensitive?: boolean | undefined;
1273
1263
  readonly autonumberFormat?: string | undefined;
1274
1264
  readonly index?: boolean | undefined;
1275
1265
  readonly type: "text";
@@ -1351,7 +1341,6 @@ declare const SysWebhook: Omit<{
1351
1341
  relationshipField?: string | undefined;
1352
1342
  } | undefined;
1353
1343
  readonly language?: string | undefined;
1354
- readonly maxRating?: number | undefined;
1355
1344
  readonly step?: number | undefined;
1356
1345
  readonly currencyConfig?: {
1357
1346
  precision: number;
@@ -1445,7 +1434,6 @@ declare const SysWebhook: Omit<{
1445
1434
  } | undefined;
1446
1435
  readonly sortable?: boolean | undefined;
1447
1436
  readonly inlineHelpText?: string | undefined;
1448
- readonly caseSensitive?: boolean | undefined;
1449
1437
  readonly autonumberFormat?: string | undefined;
1450
1438
  readonly index?: boolean | undefined;
1451
1439
  readonly type: "text";
@@ -1527,7 +1515,6 @@ declare const SysWebhook: Omit<{
1527
1515
  relationshipField?: string | undefined;
1528
1516
  } | undefined;
1529
1517
  readonly language?: string | undefined;
1530
- readonly maxRating?: number | undefined;
1531
1518
  readonly step?: number | undefined;
1532
1519
  readonly currencyConfig?: {
1533
1520
  precision: number;
@@ -1621,7 +1608,6 @@ declare const SysWebhook: Omit<{
1621
1608
  } | undefined;
1622
1609
  readonly sortable?: boolean | undefined;
1623
1610
  readonly inlineHelpText?: string | undefined;
1624
- readonly caseSensitive?: boolean | undefined;
1625
1611
  readonly autonumberFormat?: string | undefined;
1626
1612
  readonly index?: boolean | undefined;
1627
1613
  readonly type: "text";
@@ -1703,7 +1689,6 @@ declare const SysWebhook: Omit<{
1703
1689
  relationshipField?: string | undefined;
1704
1690
  } | undefined;
1705
1691
  readonly language?: string | undefined;
1706
- readonly maxRating?: number | undefined;
1707
1692
  readonly step?: number | undefined;
1708
1693
  readonly currencyConfig?: {
1709
1694
  precision: number;
@@ -1797,7 +1782,6 @@ declare const SysWebhook: Omit<{
1797
1782
  } | undefined;
1798
1783
  readonly sortable?: boolean | undefined;
1799
1784
  readonly inlineHelpText?: string | undefined;
1800
- readonly caseSensitive?: boolean | undefined;
1801
1785
  readonly autonumberFormat?: string | undefined;
1802
1786
  readonly index?: boolean | undefined;
1803
1787
  readonly type: "text";
@@ -1879,7 +1863,6 @@ declare const SysWebhook: Omit<{
1879
1863
  relationshipField?: string | undefined;
1880
1864
  } | undefined;
1881
1865
  readonly language?: string | undefined;
1882
- readonly maxRating?: number | undefined;
1883
1866
  readonly step?: number | undefined;
1884
1867
  readonly currencyConfig?: {
1885
1868
  precision: number;
@@ -1973,7 +1956,6 @@ declare const SysWebhook: Omit<{
1973
1956
  } | undefined;
1974
1957
  readonly sortable?: boolean | undefined;
1975
1958
  readonly inlineHelpText?: string | undefined;
1976
- readonly caseSensitive?: boolean | undefined;
1977
1959
  readonly autonumberFormat?: string | undefined;
1978
1960
  readonly index?: boolean | undefined;
1979
1961
  readonly type: "text";
@@ -2055,7 +2037,6 @@ declare const SysWebhook: Omit<{
2055
2037
  relationshipField?: string | undefined;
2056
2038
  } | undefined;
2057
2039
  readonly language?: string | undefined;
2058
- readonly maxRating?: number | undefined;
2059
2040
  readonly step?: number | undefined;
2060
2041
  readonly currencyConfig?: {
2061
2042
  precision: number;
@@ -2149,7 +2130,6 @@ declare const SysWebhook: Omit<{
2149
2130
  } | undefined;
2150
2131
  readonly sortable?: boolean | undefined;
2151
2132
  readonly inlineHelpText?: string | undefined;
2152
- readonly caseSensitive?: boolean | undefined;
2153
2133
  readonly autonumberFormat?: string | undefined;
2154
2134
  readonly index?: boolean | undefined;
2155
2135
  readonly type: "text";
@@ -2231,7 +2211,6 @@ declare const SysWebhook: Omit<{
2231
2211
  relationshipField?: string | undefined;
2232
2212
  } | undefined;
2233
2213
  readonly language?: string | undefined;
2234
- readonly maxRating?: number | undefined;
2235
2214
  readonly step?: number | undefined;
2236
2215
  readonly currencyConfig?: {
2237
2216
  precision: number;
@@ -2325,7 +2304,6 @@ declare const SysWebhook: Omit<{
2325
2304
  } | undefined;
2326
2305
  readonly sortable?: boolean | undefined;
2327
2306
  readonly inlineHelpText?: string | undefined;
2328
- readonly caseSensitive?: boolean | undefined;
2329
2307
  readonly autonumberFormat?: string | undefined;
2330
2308
  readonly index?: boolean | undefined;
2331
2309
  readonly type: "textarea";
@@ -2407,7 +2385,6 @@ declare const SysWebhook: Omit<{
2407
2385
  relationshipField?: string | undefined;
2408
2386
  } | undefined;
2409
2387
  readonly language?: string | undefined;
2410
- readonly maxRating?: number | undefined;
2411
2388
  readonly step?: number | undefined;
2412
2389
  readonly currencyConfig?: {
2413
2390
  precision: number;
@@ -2501,7 +2478,6 @@ declare const SysWebhook: Omit<{
2501
2478
  } | undefined;
2502
2479
  readonly sortable?: boolean | undefined;
2503
2480
  readonly inlineHelpText?: string | undefined;
2504
- readonly caseSensitive?: boolean | undefined;
2505
2481
  readonly autonumberFormat?: string | undefined;
2506
2482
  readonly index?: boolean | undefined;
2507
2483
  readonly type: "boolean";
@@ -2583,7 +2559,6 @@ declare const SysWebhook: Omit<{
2583
2559
  relationshipField?: string | undefined;
2584
2560
  } | undefined;
2585
2561
  readonly language?: string | undefined;
2586
- readonly maxRating?: number | undefined;
2587
2562
  readonly step?: number | undefined;
2588
2563
  readonly currencyConfig?: {
2589
2564
  precision: number;
@@ -2677,7 +2652,6 @@ declare const SysWebhook: Omit<{
2677
2652
  } | undefined;
2678
2653
  readonly sortable?: boolean | undefined;
2679
2654
  readonly inlineHelpText?: string | undefined;
2680
- readonly caseSensitive?: boolean | undefined;
2681
2655
  readonly autonumberFormat?: string | undefined;
2682
2656
  readonly index?: boolean | undefined;
2683
2657
  readonly type: "textarea";
@@ -2759,7 +2733,6 @@ declare const SysWebhook: Omit<{
2759
2733
  relationshipField?: string | undefined;
2760
2734
  } | undefined;
2761
2735
  readonly language?: string | undefined;
2762
- readonly maxRating?: number | undefined;
2763
2736
  readonly step?: number | undefined;
2764
2737
  readonly currencyConfig?: {
2765
2738
  precision: number;
@@ -2853,7 +2826,6 @@ declare const SysWebhook: Omit<{
2853
2826
  } | undefined;
2854
2827
  readonly sortable?: boolean | undefined;
2855
2828
  readonly inlineHelpText?: string | undefined;
2856
- readonly caseSensitive?: boolean | undefined;
2857
2829
  readonly autonumberFormat?: string | undefined;
2858
2830
  readonly index?: boolean | undefined;
2859
2831
  readonly type: "datetime";
@@ -2935,7 +2907,6 @@ declare const SysWebhook: Omit<{
2935
2907
  relationshipField?: string | undefined;
2936
2908
  } | undefined;
2937
2909
  readonly language?: string | undefined;
2938
- readonly maxRating?: number | undefined;
2939
2910
  readonly step?: number | undefined;
2940
2911
  readonly currencyConfig?: {
2941
2912
  precision: number;
@@ -3029,7 +3000,6 @@ declare const SysWebhook: Omit<{
3029
3000
  } | undefined;
3030
3001
  readonly sortable?: boolean | undefined;
3031
3002
  readonly inlineHelpText?: string | undefined;
3032
- readonly caseSensitive?: boolean | undefined;
3033
3003
  readonly autonumberFormat?: string | undefined;
3034
3004
  readonly index?: boolean | undefined;
3035
3005
  readonly type: "datetime";
package/dist/schema.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SysWebhook
3
- } from "./chunk-HWFTXTTI.js";
3
+ } from "./chunk-2V7E3ABN.js";
4
4
  export {
5
5
  SysWebhook
6
6
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/plugin-webhooks",
3
- "version": "11.0.0",
3
+ "version": "11.2.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",
@@ -19,9 +19,9 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@objectstack/core": "11.0.0",
23
- "@objectstack/service-messaging": "11.0.0",
24
- "@objectstack/spec": "11.0.0"
22
+ "@objectstack/core": "11.2.0",
23
+ "@objectstack/service-messaging": "11.2.0",
24
+ "@objectstack/spec": "11.2.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^26.0.0",
@@ -45,6 +45,7 @@ export const SysWebhook = ObjectSchema.create({
45
45
  userActions: { create: true, edit: true, delete: true, import: false },
46
46
  description: 'Outbound HTTP webhook subscription. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.',
47
47
  displayNameField: 'name',
48
+ nameField: 'name', // [ADR-0079] canonical primary-title pointer (mirrors deprecated displayNameField)
48
49
  titleFormat: '{label}',
49
50
  compactLayout: ['name', 'object_name', 'url', 'active', 'updated_at'],
50
51
 
@@ -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 * One row per `name`. The automation runtime\n * (`@objectstack/service-automation`, built-in `http_request` node) loads\n * active rows on boot + on `sys_webhook:changed` events, registers\n * `afterInsert` / `afterUpdate` / `afterDelete` listeners for the\n * targeted object, and dispatches outbound HTTP calls when matching\n * record events fire.\n *\n * Ownership (ADR-0029 K2.a): this object is **owned by\n * `@objectstack/plugin-webhooks`** — the plugin that consumes these rows —\n * alongside its sibling `sys_webhook_delivery`. It used to live in the\n * `@objectstack/platform-objects` monolith and be imported here; the\n * definition now lives with its owner so the plugin ships both data and\n * 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. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.',\n displayNameField: 'name',\n titleFormat: '{label}',\n compactLayout: ['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 description: 'Unique snake_case name — 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 description: 'Short object name whose events fire this webhook (blank = manual / API-triggered)',\n group: 'Definition',\n }),\n\n triggers: Field.text({\n label: 'Triggers',\n required: false,\n maxLength: 200,\n description: 'Comma-separated event list: create,update,delete,undelete,api',\n group: 'Definition',\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.text({\n label: 'HTTP Method',\n required: true,\n defaultValue: 'POST',\n maxLength: 10,\n description: 'GET / POST / PUT / PATCH / DELETE',\n group: 'Definition',\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) — full headers/auth/retry/payload config',\n group: 'Definition',\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 { fields: ['name'], unique: true },\n { fields: ['object_name'] },\n { fields: ['active', 'object_name'] },\n ],\n});\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/framework/framework/packages/plugins/plugin-webhooks/dist/chunk-KPKLAXNA.cjs","../src/sys-webhook.object.ts"],"names":[],"mappings":"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","file":"/home/runner/work/framework/framework/packages/plugins/plugin-webhooks/dist/chunk-KPKLAXNA.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 * One row per `name`. The automation runtime\n * (`@objectstack/service-automation`, built-in `http_request` node) loads\n * active rows on boot + on `sys_webhook:changed` events, registers\n * `afterInsert` / `afterUpdate` / `afterDelete` listeners for the\n * targeted object, and dispatches outbound HTTP calls when matching\n * record events fire.\n *\n * Ownership (ADR-0029 K2.a): this object is **owned by\n * `@objectstack/plugin-webhooks`** — the plugin that consumes these rows —\n * alongside its sibling `sys_webhook_delivery`. It used to live in the\n * `@objectstack/platform-objects` monolith and be imported here; the\n * definition now lives with its owner so the plugin ships both data and\n * 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. Authored via defineWebhook() in code or the Studio editor; executed by the HTTP connector plugin.',\n displayNameField: 'name',\n titleFormat: '{label}',\n compactLayout: ['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 description: 'Unique snake_case name — 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 description: 'Short object name whose events fire this webhook (blank = manual / API-triggered)',\n group: 'Definition',\n }),\n\n triggers: Field.text({\n label: 'Triggers',\n required: false,\n maxLength: 200,\n description: 'Comma-separated event list: create,update,delete,undelete,api',\n group: 'Definition',\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.text({\n label: 'HTTP Method',\n required: true,\n defaultValue: 'POST',\n maxLength: 10,\n description: 'GET / POST / PUT / PATCH / DELETE',\n group: 'Definition',\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) — full headers/auth/retry/payload config',\n group: 'Definition',\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 { fields: ['name'], unique: true },\n { fields: ['object_name'] },\n { fields: ['active', 'object_name'] },\n ],\n});\n"]}