@ai-matrx/records 0.37.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.
@@ -152,6 +152,7 @@ var STORE_DOORS = [
152
152
  { 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" },
153
153
  { 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" },
154
154
  { name: "assert_client_may_reach", args: "p_organization_id uuid, p_door text", returns: "void", security: "invoker" },
155
+ { name: "assert_columns_are_defined", args: "p_organization_id uuid, p_record_id uuid, p_patch jsonb", returns: "void", security: "definer" },
155
156
  { name: "assert_entity_door", args: "p_organization_id uuid, p_door text", returns: "void", security: "definer" },
156
157
  { name: "assert_entity_is_organization_scoped", args: "p_token text, p_label text, p_scoped boolean", returns: "void", security: "invoker" },
157
158
  { name: "assert_may_know_table", args: "p_organization_id uuid, p_table_id uuid, p_door text", returns: "void", security: "invoker" },
@@ -206,6 +207,7 @@ var STORE_DOORS = [
206
207
  { 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" },
207
208
  { name: "comment_thread", args: "p_organization_id uuid, p_record_id uuid, p_include_resolved boolean DEFAULT false", returns: "jsonb", security: "definer" },
208
209
  { 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" },
210
+ { name: "computed_block", args: "p_block jsonb", returns: "jsonb", security: "invoker" },
209
211
  { 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" },
210
212
  { name: "containment_chain", args: "p_organization_id uuid, p_record_id uuid", returns: "TABLE(ancestor_id uuid, depth integer)", security: "invoker" },
211
213
  { name: "containment_depth_ceiling", args: "p_organization_id uuid DEFAULT NULL::uuid", returns: "integer", security: "invoker" },
@@ -237,6 +239,7 @@ var STORE_DOORS = [
237
239
  { 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" },
238
240
  { 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" },
239
241
  { name: "derived_values", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
242
+ { name: "derived_values_of", args: "v_rec custom.record", returns: "jsonb", security: "invoker" },
240
243
  { name: "doc_content_hash", args: "p_body text", returns: "text", security: "invoker" },
241
244
  { name: "doc_format_value", args: "p_field_data jsonb, p_value jsonb", returns: "text", security: "invoker" },
242
245
  { name: "doc_letterhead", args: "p_organization_id uuid", returns: "jsonb", security: "definer" },
@@ -502,6 +505,7 @@ var STORE_DOORS = [
502
505
  { name: "record_table", args: "p_organization_id uuid, p_record_id uuid", returns: "uuid", security: "definer" },
503
506
  { 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" },
504
507
  { name: "record_values", args: "p_organization_id uuid, p_record_id uuid", returns: "jsonb", security: "invoker" },
508
+ { name: "record_values_of", args: "p_row custom.record", returns: "jsonb", security: "invoker" },
505
509
  { 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" },
506
510
  { name: "record_write", args: "p_organization_id uuid, p_table_id uuid, p_data jsonb", returns: "uuid", security: "definer" },
507
511
  { 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" },
@@ -705,7 +709,7 @@ var STORE_REFUSAL_CODES = [
705
709
  { 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" },
706
710
  { 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" },
707
711
  { 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" },
708
- { code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_claimed_column_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_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" },
712
+ { 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" },
709
713
  { code: "40001", raised_by: "has_visibility_at" },
710
714
  { 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" },
711
715
  { code: "42703", raised_by: "entity_table,portal_declare" },
@@ -1277,6 +1281,7 @@ var ENTITY_TOKENS = [
1277
1281
  "mandate_advance_batch_row",
1278
1282
  "mandate_binding",
1279
1283
  "mandate_binding_legacy",
1284
+ "mandate_goal_clauses",
1280
1285
  "mandate_legacy",
1281
1286
  "mandate_observation",
1282
1287
  "mandate_reference",
@@ -2432,7 +2437,8 @@ function createRecordsClient(config) {
2432
2437
  const { document, hidden } = unfold(row.document);
2433
2438
  return { id: row.id, document, level: row.level, hidden };
2434
2439
  });
2435
- return ok({ rows, total: null });
2440
+ const total = rows.length < limit ? offset + rows.length : null;
2441
+ return ok({ rows, total });
2436
2442
  },
2437
2443
  async query(input) {
2438
2444
  const plan = planQuery(input);
@@ -4105,7 +4111,7 @@ function useRecordsActor() {
4105
4111
  }
4106
4112
 
4107
4113
  // src/react/hooks.ts
4108
- import { useCallback, useEffect, useMemo as useMemo2, useRef, useState } from "react";
4114
+ import { useCallback, useEffect, useMemo as useMemo2, useRef, useState, useSyncExternalStore } from "react";
4109
4115
  function useAsync(run, deps) {
4110
4116
  const client = useRecordsClient();
4111
4117
  const [state, setState] = useState(
@@ -4174,13 +4180,36 @@ function useMyLevel(id) {
4174
4180
  [id]
4175
4181
  );
4176
4182
  }
4183
+ var shapeRevisions = /* @__PURE__ */ new Map();
4184
+ var shapeListeners = /* @__PURE__ */ new Set();
4185
+ function tableShapeChanged(tableId) {
4186
+ shapeRevisions.set(tableId, (shapeRevisions.get(tableId) ?? 0) + 1);
4187
+ for (const listener of shapeListeners) listener();
4188
+ }
4189
+ function registerShapeInterest(tableId) {
4190
+ if (!shapeRevisions.has(tableId)) shapeRevisions.set(tableId, 0);
4191
+ }
4192
+ function subscribeToShape(listener) {
4193
+ shapeListeners.add(listener);
4194
+ return () => {
4195
+ shapeListeners.delete(listener);
4196
+ };
4197
+ }
4198
+ function useShapeRevision(tableId) {
4199
+ const read = useCallback(() => tableId ? shapeRevisions.get(tableId) ?? 0 : 0, [tableId]);
4200
+ return useSyncExternalStore(subscribeToShape, read, () => 0);
4201
+ }
4177
4202
  function useFields(tableId, recordType) {
4203
+ const revision = useShapeRevision(tableId);
4204
+ useEffect(() => {
4205
+ if (tableId) registerShapeInterest(tableId);
4206
+ }, [tableId]);
4178
4207
  return useAsync(
4179
4208
  async (client) => {
4180
4209
  if (!tableId) return { ok: true, data: [] };
4181
4210
  return client.fields({ table_id: tableId, ...recordType === void 0 ? {} : { recordType } });
4182
4211
  },
4183
- [tableId, recordType]
4212
+ [tableId, recordType, revision]
4184
4213
  );
4185
4214
  }
4186
4215
  function useRecords(tableId, options = {}) {
@@ -4353,19 +4382,41 @@ function useFieldMutation() {
4353
4382
  },
4354
4383
  []
4355
4384
  );
4385
+ const announce = useCallback((tableId) => {
4386
+ if (tableId) {
4387
+ tableShapeChanged(tableId);
4388
+ return;
4389
+ }
4390
+ for (const id of [...shapeRevisions.keys()]) tableShapeChanged(id);
4391
+ }, []);
4356
4392
  return useMemo2(
4357
4393
  () => ({
4358
- declare: (args) => run(
4359
- () => client.fieldDeclare({ table_id: args.table_id, spec: args.spec }),
4360
- null
4361
- ),
4362
- update: (args) => run(() => client.fieldUpdate({ field_id: args.field_id, patch: args.patch }), null),
4363
- retire: (args) => run(() => client.fieldRetire({ field_id: args.field_id }), false),
4394
+ declare: async (args) => {
4395
+ const made = await run(
4396
+ () => client.fieldDeclare({ table_id: args.table_id, spec: args.spec }),
4397
+ null
4398
+ );
4399
+ if (made !== null) announce(args.table_id);
4400
+ return made;
4401
+ },
4402
+ update: async (args) => {
4403
+ const changed = await run(
4404
+ () => client.fieldUpdate({ field_id: args.field_id, patch: args.patch }),
4405
+ null
4406
+ );
4407
+ if (changed !== null) announce(null);
4408
+ return changed;
4409
+ },
4410
+ retire: async (args) => {
4411
+ const gone = await run(() => client.fieldRetire({ field_id: args.field_id }), false);
4412
+ if (gone) announce(null);
4413
+ return gone;
4414
+ },
4364
4415
  saving,
4365
4416
  error,
4366
4417
  clearError: () => setError(null)
4367
4418
  }),
4368
- [client, run, saving, error]
4419
+ [client, run, announce, saving, error]
4369
4420
  );
4370
4421
  }
4371
4422
  function useMergeField(key, state) {
@@ -4878,6 +4929,7 @@ export {
4878
4929
  portalPath,
4879
4930
  publicFormPath,
4880
4931
  scopeChip,
4932
+ tableShapeChanged,
4881
4933
  useEntityFieldMutation,
4882
4934
  useEntityFieldRights,
4883
4935
  useEntityFields,