@ai-matrx/records 0.36.0 → 0.39.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 +97 -0
- package/dist/core/index.cjs +57 -2
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +53 -5
- package/dist/core/index.d.ts +53 -5
- package/dist/core/index.js +57 -2
- package/dist/core/index.js.map +1 -1
- package/dist/{field-CWBdZfFv.d.cts → field-C5vJ0Kqv.d.cts} +29 -5
- package/dist/{field-CWBdZfFv.d.ts → field-C5vJ0Kqv.d.ts} +29 -5
- package/dist/index.cjs +6 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +75 -3
- package/dist/index.d.ts +75 -3
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/react/index.cjs +111 -10
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +152 -6
- package/dist/react/index.d.ts +152 -6
- package/dist/react/index.js +112 -11
- package/dist/react/index.js.map +1 -1
- package/dist/use-cases/index.cjs.map +1 -1
- package/dist/use-cases/index.d.cts +6 -4
- package/dist/use-cases/index.d.ts +6 -4
- package/dist/use-cases/index.js.map +1 -1
- package/package.json +1 -1
package/dist/react/index.cjs
CHANGED
|
@@ -85,6 +85,7 @@ __export(react_exports, {
|
|
|
85
85
|
portalPath: () => portalPath,
|
|
86
86
|
publicFormPath: () => publicFormPath,
|
|
87
87
|
scopeChip: () => scopeChip,
|
|
88
|
+
tableShapeChanged: () => tableShapeChanged,
|
|
88
89
|
useEntityFieldMutation: () => useEntityFieldMutation,
|
|
89
90
|
useEntityFieldRights: () => useEntityFieldRights,
|
|
90
91
|
useEntityFields: () => useEntityFields,
|
|
@@ -252,6 +253,7 @@ var STORE_DOORS = [
|
|
|
252
253
|
{ name: "assert_client_may_change", args: "p_organization_id uuid, p_subject_id uuid, p_door text, p_required permission_level DEFAULT 'editor'::permission_level, p_subject_word text DEFAULT 'record'::text", returns: "void", security: "invoker" },
|
|
253
254
|
{ name: "assert_client_may_open", args: "p_organization_id uuid, p_subject_id uuid, p_door text, p_required permission_level DEFAULT 'viewer'::permission_level, p_subject_word text DEFAULT 'record'::text", returns: "void", security: "invoker" },
|
|
254
255
|
{ name: "assert_client_may_reach", args: "p_organization_id uuid, p_door text", returns: "void", security: "invoker" },
|
|
256
|
+
{ name: "assert_columns_are_defined", args: "p_organization_id uuid, p_record_id uuid, p_patch jsonb", returns: "void", security: "definer" },
|
|
255
257
|
{ name: "assert_entity_door", args: "p_organization_id uuid, p_door text", returns: "void", security: "definer" },
|
|
256
258
|
{ name: "assert_entity_is_organization_scoped", args: "p_token text, p_label text, p_scoped boolean", returns: "void", security: "invoker" },
|
|
257
259
|
{ name: "assert_may_know_table", args: "p_organization_id uuid, p_table_id uuid, p_door text", returns: "void", security: "invoker" },
|
|
@@ -306,6 +308,7 @@ var STORE_DOORS = [
|
|
|
306
308
|
{ name: "comment_mention_deliver", args: "p_organization_id uuid, p_record_id uuid, p_table_id uuid, p_comment_id uuid, p_recipient uuid, p_author_name text, p_record_title text, p_body text", returns: "uuid", security: "definer" },
|
|
307
309
|
{ name: "comment_thread", args: "p_organization_id uuid, p_record_id uuid, p_include_resolved boolean DEFAULT false", returns: "jsonb", security: "definer" },
|
|
308
310
|
{ name: "comment_write", args: "p_organization_id uuid, p_record_id uuid, p_body text, p_anchor jsonb DEFAULT '{}'::jsonb, p_parent_comment_id uuid DEFAULT NULL::uuid, p_mentions uuid[] DEFAULT NULL::uuid[]", returns: "jsonb", security: "definer" },
|
|
311
|
+
{ name: "computed_block", args: "p_block jsonb", returns: "jsonb", security: "invoker" },
|
|
309
312
|
{ name: "computed_provenance", args: "p_organization_id uuid, p_record_id uuid", returns: "TABLE(field_key text, field_id uuid, value jsonb, rule_id uuid, rule_version integer, computed_at timestamp with time zone)", security: "invoker" },
|
|
310
313
|
{ name: "containment_chain", args: "p_organization_id uuid, p_record_id uuid", returns: "TABLE(ancestor_id uuid, depth integer)", security: "invoker" },
|
|
311
314
|
{ name: "containment_depth_ceiling", args: "p_organization_id uuid DEFAULT NULL::uuid", returns: "integer", security: "invoker" },
|
|
@@ -337,6 +340,7 @@ var STORE_DOORS = [
|
|
|
337
340
|
{ name: "derive_visibility", args: "p_container_type text, p_container_id uuid", returns: "TABLE(item_type text, item_id uuid, depth integer, max_level permission_level)", security: "definer" },
|
|
338
341
|
{ name: "derived_value", args: "p_organization_id uuid, p_record_id uuid, p_field_data jsonb, p_values jsonb DEFAULT NULL::jsonb", returns: "jsonb", security: "invoker" },
|
|
339
342
|
{ name: "derived_values", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
|
|
343
|
+
{ name: "derived_values_of", args: "v_rec custom.record", returns: "jsonb", security: "invoker" },
|
|
340
344
|
{ name: "doc_content_hash", args: "p_body text", returns: "text", security: "invoker" },
|
|
341
345
|
{ name: "doc_format_value", args: "p_field_data jsonb, p_value jsonb", returns: "text", security: "invoker" },
|
|
342
346
|
{ name: "doc_letterhead", args: "p_organization_id uuid", returns: "jsonb", security: "definer" },
|
|
@@ -602,6 +606,7 @@ var STORE_DOORS = [
|
|
|
602
606
|
{ name: "record_table", args: "p_organization_id uuid, p_record_id uuid", returns: "uuid", security: "definer" },
|
|
603
607
|
{ name: "record_update", args: "p_organization_id uuid, p_record_id uuid, p_patch jsonb, p_expected_version integer DEFAULT NULL::integer", returns: "integer", security: "definer" },
|
|
604
608
|
{ name: "record_values", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
|
|
609
|
+
{ name: "record_values_of", args: "p_row custom.record", returns: "jsonb", security: "invoker" },
|
|
605
610
|
{ name: "record_values_versioned", args: "p_organization_id uuid, p_record_id uuid", returns: "TABLE(field_key text, field_id uuid, value jsonb, value_version integer, source jsonb, absent_reason text, actor text, on_behalf_of text, written_at timestamp with time zone, alternates jsonb)", security: "definer" },
|
|
606
611
|
{ name: "record_write", args: "p_organization_id uuid, p_table_id uuid, p_data jsonb", returns: "uuid", security: "definer" },
|
|
607
612
|
{ name: "record_write_many", args: "p_organization_id uuid, p_table_id uuid, p_rows jsonb[], p_ids uuid[] DEFAULT NULL::uuid[]", returns: "uuid[]", security: "definer" },
|
|
@@ -805,7 +810,7 @@ var STORE_REFUSAL_CODES = [
|
|
|
805
810
|
{ code: "22023", raised_by: "_booking_availability,_entity_custom_fields_guard,_value_envelope,_work_shape_guard,actor_word,agg_assert_key,agg_sql,anon_token_issue,booking_declare,containment_parent,dashboard_block_normalize,dashboard_window_sql,doc_render_body,doc_render_write,doc_signature_write,enrich_declare,enrich_land,enrich_normalize,enrich_pin,entity_value_write,external_history_event,external_source_declare,external_stub_upsert,external_write_through,field_history,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,portal_declare,provenance_write,query_by_coordinates,query_rollup,record_update,record_write_many,relation_carry,rule_eval,rule_members,share_grant,share_lane_set,sign_request_create,sign_request_sign,subscription_declare,table_rules,visibility_as_of,work_approval_request,work_list,work_slot_hold" },
|
|
806
811
|
{ code: "23503", raised_by: "_booking_availability,_checklist_instantiate,_containment_guard,_field_document_for,_pipeline_stage_key,_record_rule_uses,agg_digest_assemble,anon_publish,anon_rate_take,anon_token_issue,anon_write,assert_organization_wall,booking_cancel,booking_confirm,booking_declare,booking_hold,booking_reschedule,capture_publish,checklist_declare,checklist_steps_table,comment_write,dashboard_declare,delete_rule,doc_sign,doc_template_save,enrich_declare,enrich_due,enrich_land,form_declare,form_submit,home_add,inbound_declare,inbound_mail_land,inbound_set,io_comment_write,io_import_begin,io_import_finish,io_import_report,io_import_rows,io_proposal_accept,migrate_demote,migrate_promote,pipeline_board,pipeline_declare,pipeline_move,pipeline_read,pipeline_transition_refusal,promote_field,promote_table,record_applicability,record_reparent,relation_carry,relation_own,resolve_first_match,rule_applies,rule_declare,rule_eval,rule_members,rule_run,sign_request_create,subscription_mute,subscription_preview,view_declare,work_set_state,work_take_assignment,work_template_instantiate" },
|
|
807
812
|
{ code: "23505", raised_by: "_unique_rule_holds,doc_sign,doc_signature_write,entity_field_declare,field_declare,home_add,inbound_declare,io_proposal_accept,relation_carry,relation_own,share_grant,sign_request_cancel,sign_request_create,work_approval_decide,work_slot_hold" },
|
|
808
|
-
{ code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,
|
|
813
|
+
{ code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_entity_custom_fields_guard,_field_class_guard,_field_document_for,_field_shape_guard,_field_type_parity_guard,_merge_field_shape_guard,_merge_field_temporal_guard,_promoted_field_cap_guard,_record_rule_uses,_resolve_choice_words,_rule_shape_guard,_rule_topology_guard,_store_relation_edge_names_its_field,_table_columns_word_guard,_table_shape_guard,_undeclared_key_guard,_value_envelope,_work_shape_guard,_workdoors_approval_guard,assert_columns_are_defined,assert_entity_is_organization_scoped,capture_publish,capture_sheet_declare,checklist_declare,checklist_step_complete,doc_sign,doc_signature_write,doc_template_save,entity_field_declare,entity_field_retire,entity_field_update,entity_records_find,entity_table,field_declare,field_retire,field_update,home_add,io_import_rows,migrate_merge,relation_carry,relation_own,sign_request_create,sign_request_sign,table_declare,validate_value_envelope,validate_values,work_set_state,work_slots_declare,work_take_assignment,work_template_instantiate" },
|
|
809
814
|
{ code: "40001", raised_by: "has_visibility_at" },
|
|
810
815
|
{ code: "42501", raised_by: "_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_rule_definition_write,_store_door,anon_capture,anon_inbound_land,anon_publish,anon_token_issue,anon_token_verify,anon_write,assert_client_may_change,assert_client_may_open,assert_client_may_reach,assert_may_know_table,assert_organization_admin,assert_store_door,booking_confirm,booking_declare,booking_hold,capture_submit,checklist_run,comment_write,conversation_scope_bind,conversation_scope_unbind,enrich_declare,enrich_due,enrich_land,enrich_normalize,entity_field_declare,entity_field_retire,entity_field_update,entity_value_write,external_write_through,form_declare,form_submit,inbound_mail_land,io_comment_resolve,io_comment_write,io_import_begin,io_import_finish,io_restore,migrate_purge,migrate_reclass,my_levels,organization_clear,portal_declare,portal_invitation,portal_invite,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,record_table,share_grant,subscription_mute,subscription_preview,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_person" },
|
|
811
816
|
{ code: "42703", raised_by: "entity_table,portal_declare" },
|
|
@@ -1377,6 +1382,7 @@ var ENTITY_TOKENS = [
|
|
|
1377
1382
|
"mandate_advance_batch_row",
|
|
1378
1383
|
"mandate_binding",
|
|
1379
1384
|
"mandate_binding_legacy",
|
|
1385
|
+
"mandate_goal_clauses",
|
|
1380
1386
|
"mandate_legacy",
|
|
1381
1387
|
"mandate_observation",
|
|
1382
1388
|
"mandate_reference",
|
|
@@ -2007,6 +2013,10 @@ var DOORS = {
|
|
|
2007
2013
|
// VISITOR's three (`booking_public`, `booking_hold`, `booking_confirm`) are
|
|
2008
2014
|
// deliberately absent: they are server-lane and a browser never calls them.
|
|
2009
2015
|
bookings: "bookings",
|
|
2016
|
+
// The OWNER's side of a booking page, and the door that had no client method at
|
|
2017
|
+
// all until 2026-09-21: without it the only way to get a booking page was to ask
|
|
2018
|
+
// an agent, which made the agent the ONLY path rather than the faster one.
|
|
2019
|
+
bookingDeclare: "booking_declare",
|
|
2010
2020
|
// PRODUCTS row 9 — "pull my spreadsheet in". W4-IO built `io_import_open` and
|
|
2011
2021
|
// `io_import_rows`; lane IMPORT gave a run an IDENTITY (the file's sha-256, so
|
|
2012
2022
|
// a re-import doubles nothing), a duplicate key, a policy, per-row outcomes
|
|
@@ -2139,6 +2149,13 @@ var DOORS = {
|
|
|
2139
2149
|
// the summary it would send right now without sending it.
|
|
2140
2150
|
subscriptionDeclare: "subscription_declare",
|
|
2141
2151
|
subscriptionPreview: "subscription_preview",
|
|
2152
|
+
// A SUBSCRIPTION IS OVER A SAVED VIEW, so a person who has never saved one has
|
|
2153
|
+
// nothing to subscribe to. These two are the saved-view pair (lane DIGESTS'
|
|
2154
|
+
// `digests_a_saved_view_has_a_door.sql`), unreachable from this client until
|
|
2155
|
+
// 2026-09-21: `views` lists this Table's, `viewDeclare` writes one. A LIST IS A
|
|
2156
|
+
// DOOR, never a grant on `platform.saved_view` behind it.
|
|
2157
|
+
views: "views",
|
|
2158
|
+
viewDeclare: "view_declare",
|
|
2142
2159
|
// The cadence CATALOGUE a person's screen may ask for. `agg_subscription_cadences`
|
|
2143
2160
|
// above is the notifier's own and holds no client grant; this door delegates to
|
|
2144
2161
|
// it, so a picker and the digest runner can never offer different words.
|
|
@@ -2521,7 +2538,8 @@ function createRecordsClient(config) {
|
|
|
2521
2538
|
const { document, hidden } = unfold(row.document);
|
|
2522
2539
|
return { id: row.id, document, level: row.level, hidden };
|
|
2523
2540
|
});
|
|
2524
|
-
|
|
2541
|
+
const total = rows.length < limit ? offset + rows.length : null;
|
|
2542
|
+
return ok({ rows, total });
|
|
2525
2543
|
},
|
|
2526
2544
|
async query(input) {
|
|
2527
2545
|
const plan = planQuery(input);
|
|
@@ -2905,6 +2923,30 @@ function createRecordsClient(config) {
|
|
|
2905
2923
|
"bookings"
|
|
2906
2924
|
);
|
|
2907
2925
|
},
|
|
2926
|
+
async bookingDeclare(args) {
|
|
2927
|
+
return callDoor(
|
|
2928
|
+
DOORS.bookingDeclare,
|
|
2929
|
+
{
|
|
2930
|
+
p_organization_id: org,
|
|
2931
|
+
p_table_id: args.table_id,
|
|
2932
|
+
p_title: args.title,
|
|
2933
|
+
p_questions: args.questions,
|
|
2934
|
+
// AN EMPTY OBJECT IS NOT A MISTAKE. The store owns every default, so a
|
|
2935
|
+
// page declared with no availability comes back Monday-to-Friday,
|
|
2936
|
+
// nine-to-five, in the organization's own zone — and the screen draws
|
|
2937
|
+
// what came BACK rather than what it sent.
|
|
2938
|
+
p_availability: args.availability ?? {},
|
|
2939
|
+
p_presentation: args.presentation ?? {},
|
|
2940
|
+
p_submission_cap: args.submission_cap ?? null,
|
|
2941
|
+
p_quarantine_rule_id: args.quarantine_rule_id ?? null,
|
|
2942
|
+
p_notify_rule_id: args.notify_rule_id ?? null,
|
|
2943
|
+
p_form_id: args.form_id ?? null,
|
|
2944
|
+
p_slug: args.slug ?? null,
|
|
2945
|
+
p_home_id: args.home_id ?? null
|
|
2946
|
+
},
|
|
2947
|
+
"bookingDeclare"
|
|
2948
|
+
);
|
|
2949
|
+
},
|
|
2908
2950
|
async formDeclare(args) {
|
|
2909
2951
|
return callDoor(
|
|
2910
2952
|
DOORS.formDeclare,
|
|
@@ -3329,6 +3371,20 @@ function createRecordsClient(config) {
|
|
|
3329
3371
|
"subscriptionPreview"
|
|
3330
3372
|
);
|
|
3331
3373
|
},
|
|
3374
|
+
async views(args) {
|
|
3375
|
+
return callDoor(
|
|
3376
|
+
DOORS.views,
|
|
3377
|
+
{ p_organization_id: org, p_table_id: args?.table_id ?? null },
|
|
3378
|
+
"views"
|
|
3379
|
+
);
|
|
3380
|
+
},
|
|
3381
|
+
async viewDeclare({ table_id, spec }) {
|
|
3382
|
+
return callDoor(
|
|
3383
|
+
DOORS.viewDeclare,
|
|
3384
|
+
{ p_organization_id: org, p_table_id: table_id, p_spec: spec },
|
|
3385
|
+
"viewDeclare"
|
|
3386
|
+
);
|
|
3387
|
+
},
|
|
3332
3388
|
async subscriptionMute({ rule_id, muted }) {
|
|
3333
3389
|
return callDoor(
|
|
3334
3390
|
DOORS.subscriptionMute,
|
|
@@ -4225,13 +4281,36 @@ function useMyLevel(id) {
|
|
|
4225
4281
|
[id]
|
|
4226
4282
|
);
|
|
4227
4283
|
}
|
|
4284
|
+
var shapeRevisions = /* @__PURE__ */ new Map();
|
|
4285
|
+
var shapeListeners = /* @__PURE__ */ new Set();
|
|
4286
|
+
function tableShapeChanged(tableId) {
|
|
4287
|
+
shapeRevisions.set(tableId, (shapeRevisions.get(tableId) ?? 0) + 1);
|
|
4288
|
+
for (const listener of shapeListeners) listener();
|
|
4289
|
+
}
|
|
4290
|
+
function registerShapeInterest(tableId) {
|
|
4291
|
+
if (!shapeRevisions.has(tableId)) shapeRevisions.set(tableId, 0);
|
|
4292
|
+
}
|
|
4293
|
+
function subscribeToShape(listener) {
|
|
4294
|
+
shapeListeners.add(listener);
|
|
4295
|
+
return () => {
|
|
4296
|
+
shapeListeners.delete(listener);
|
|
4297
|
+
};
|
|
4298
|
+
}
|
|
4299
|
+
function useShapeRevision(tableId) {
|
|
4300
|
+
const read = (0, import_react2.useCallback)(() => tableId ? shapeRevisions.get(tableId) ?? 0 : 0, [tableId]);
|
|
4301
|
+
return (0, import_react2.useSyncExternalStore)(subscribeToShape, read, () => 0);
|
|
4302
|
+
}
|
|
4228
4303
|
function useFields(tableId, recordType) {
|
|
4304
|
+
const revision = useShapeRevision(tableId);
|
|
4305
|
+
(0, import_react2.useEffect)(() => {
|
|
4306
|
+
if (tableId) registerShapeInterest(tableId);
|
|
4307
|
+
}, [tableId]);
|
|
4229
4308
|
return useAsync(
|
|
4230
4309
|
async (client) => {
|
|
4231
4310
|
if (!tableId) return { ok: true, data: [] };
|
|
4232
4311
|
return client.fields({ table_id: tableId, ...recordType === void 0 ? {} : { recordType } });
|
|
4233
4312
|
},
|
|
4234
|
-
[tableId, recordType]
|
|
4313
|
+
[tableId, recordType, revision]
|
|
4235
4314
|
);
|
|
4236
4315
|
}
|
|
4237
4316
|
function useRecords(tableId, options = {}) {
|
|
@@ -4404,19 +4483,41 @@ function useFieldMutation() {
|
|
|
4404
4483
|
},
|
|
4405
4484
|
[]
|
|
4406
4485
|
);
|
|
4486
|
+
const announce = (0, import_react2.useCallback)((tableId) => {
|
|
4487
|
+
if (tableId) {
|
|
4488
|
+
tableShapeChanged(tableId);
|
|
4489
|
+
return;
|
|
4490
|
+
}
|
|
4491
|
+
for (const id of [...shapeRevisions.keys()]) tableShapeChanged(id);
|
|
4492
|
+
}, []);
|
|
4407
4493
|
return (0, import_react2.useMemo)(
|
|
4408
4494
|
() => ({
|
|
4409
|
-
declare: (args) =>
|
|
4410
|
-
|
|
4411
|
-
|
|
4412
|
-
|
|
4413
|
-
|
|
4414
|
-
|
|
4495
|
+
declare: async (args) => {
|
|
4496
|
+
const made = await run(
|
|
4497
|
+
() => client.fieldDeclare({ table_id: args.table_id, spec: args.spec }),
|
|
4498
|
+
null
|
|
4499
|
+
);
|
|
4500
|
+
if (made !== null) announce(args.table_id);
|
|
4501
|
+
return made;
|
|
4502
|
+
},
|
|
4503
|
+
update: async (args) => {
|
|
4504
|
+
const changed = await run(
|
|
4505
|
+
() => client.fieldUpdate({ field_id: args.field_id, patch: args.patch }),
|
|
4506
|
+
null
|
|
4507
|
+
);
|
|
4508
|
+
if (changed !== null) announce(null);
|
|
4509
|
+
return changed;
|
|
4510
|
+
},
|
|
4511
|
+
retire: async (args) => {
|
|
4512
|
+
const gone = await run(() => client.fieldRetire({ field_id: args.field_id }), false);
|
|
4513
|
+
if (gone) announce(null);
|
|
4514
|
+
return gone;
|
|
4515
|
+
},
|
|
4415
4516
|
saving,
|
|
4416
4517
|
error,
|
|
4417
4518
|
clearError: () => setError(null)
|
|
4418
4519
|
}),
|
|
4419
|
-
[client, run, saving, error]
|
|
4520
|
+
[client, run, announce, saving, error]
|
|
4420
4521
|
);
|
|
4421
4522
|
}
|
|
4422
4523
|
function useMergeField(key, state) {
|