@ai-matrx/records 0.51.0 → 0.52.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.
@@ -41,6 +41,7 @@ __export(core_exports, {
41
41
  DEFAULT_ARCHIVE_LANE: () => DEFAULT_ARCHIVE_LANE,
42
42
  DEFAULT_DOCUMENT_MAX_BYTES: () => DEFAULT_DOCUMENT_MAX_BYTES,
43
43
  DEFAULT_PAGE_SIZE: () => DEFAULT_PAGE_SIZE,
44
+ DEFAULT_PORTAL_ARCHIVE_FILTER: () => DEFAULT_PORTAL_ARCHIVE_FILTER,
44
45
  DEFAULT_VALUE_MAX_BYTES: () => DEFAULT_VALUE_MAX_BYTES,
45
46
  DELIVERIES: () => DELIVERIES,
46
47
  DOORS: () => DOORS,
@@ -60,6 +61,7 @@ __export(core_exports, {
60
61
  PERMISSION_LEVELS: () => PERMISSION_LEVELS,
61
62
  PER_VALUE_ACCESS_WORDS: () => PER_VALUE_ACCESS_WORDS,
62
63
  PIPELINE_RULE_KINDS: () => PIPELINE_RULE_KINDS,
64
+ PORTAL_ARCHIVE_FILTERS: () => PORTAL_ARCHIVE_FILTERS,
63
65
  REFUSALS_WORTH_REPEATING: () => REFUSALS_WORTH_REPEATING,
64
66
  RELATION_BINDINGS: () => RELATION_BINDINGS,
65
67
  RELATION_CARDINALITIES: () => RELATION_CARDINALITIES,
@@ -96,6 +98,7 @@ __export(core_exports, {
96
98
  doorCensus: () => doorCensus,
97
99
  doorExists: () => doorExists,
98
100
  emptyArchiveLine: () => emptyArchiveLine,
101
+ emptyPortalArchiveLine: () => emptyPortalArchiveLine,
99
102
  err: () => err,
100
103
  exportCsv: () => exportCsv,
101
104
  exportXlsx: () => exportXlsx,
@@ -110,6 +113,7 @@ __export(core_exports, {
110
113
  isArchiveLane: () => isArchiveLane,
111
114
  isDecided: () => isDecided,
112
115
  isOwnOp: () => isOwnOp,
116
+ isPortalArchiveFilter: () => isPortalArchiveFilter,
113
117
  isRecordsErr: () => isRecordsErr,
114
118
  isTheChosen: () => isTheChosen,
115
119
  looksLikeAnId: () => looksLikeAnId,
@@ -125,7 +129,10 @@ __export(core_exports, {
125
129
  optionLabel: () => optionLabel,
126
130
  parseCsv: () => parseCsv,
127
131
  planQuery: () => planQuery,
132
+ portalArchiveConsequence: () => portalArchiveConsequence,
133
+ portalConfirmLine: () => portalConfirmLine,
128
134
  portalPath: () => portalPath,
135
+ portalTitleTypedBack: () => portalTitleTypedBack,
129
136
  predictEnvelopeRefusal: () => predictEnvelopeRefusal,
130
137
  predictSizeRefusal: () => predictSizeRefusal,
131
138
  predictValueRefusals: () => predictValueRefusals,
@@ -530,6 +537,24 @@ function publicFormPath(formId) {
530
537
  function portalPath(slug) {
531
538
  return `/portal/c/${slug}`;
532
539
  }
540
+ var PORTAL_ARCHIVE_FILTERS = ["active", "archived", "all"];
541
+ var DEFAULT_PORTAL_ARCHIVE_FILTER = "active";
542
+ function isPortalArchiveFilter(word) {
543
+ return typeof word === "string" && PORTAL_ARCHIVE_FILTERS.includes(word);
544
+ }
545
+ function portalArchiveConsequence(title, signedIn, invited) {
546
+ const people = invited === 0 ? "Nobody is invited to it" : signedIn === 0 ? `The ${invited} ${invited === 1 ? "person" : "people"} invited to it will not be able to sign in` : `The ${signedIn} ${signedIn === 1 ? "person" : "people"} signed in to it, and the ${invited - signedIn} still invited, will not be able to sign in`;
547
+ return `\u201C${title}\u201D will leave your portal list. ${people}, and their invitation links will say this portal was archived and can be restored. Nothing is deleted \u2014 every Table it shows and everyone invited to it is kept exactly as it is, and you can restore it at any time.`;
548
+ }
549
+ function portalConfirmLine(title) {
550
+ return `Type the portal\u2019s title \u2014 ${title} \u2014 to confirm you mean this one.`;
551
+ }
552
+ function portalTitleTypedBack(typed, title) {
553
+ return typed.trim() === (title ?? "").trim();
554
+ }
555
+ function emptyPortalArchiveLine() {
556
+ return "No portal of this organization has been archived. A portal you put away waits here until somebody restores it, and nothing is ever destroyed.";
557
+ }
533
558
 
534
559
  // src/aggregate.ts
535
560
  function measureKey(measure) {
@@ -1205,6 +1230,7 @@ var STORE_DOORS = [
1205
1230
  { name: "io_export", args: "p_organization_id uuid, p_table_id uuid, p_columns text[] DEFAULT NULL::text[], p_limit integer DEFAULT 10000, p_required text DEFAULT 'viewer'::text", returns: "jsonb", security: "definer" },
1206
1231
  { name: "io_export_csv", args: "p_organization_id uuid, p_table_id uuid, p_columns text[] DEFAULT NULL::text[], p_limit integer DEFAULT 10000, p_delimiter text DEFAULT chr(44), p_required text DEFAULT 'viewer'::text", returns: "text", security: "definer" },
1207
1232
  { name: "io_import_begin", args: "p_organization_id uuid, p_table_id uuid, p_format text DEFAULT 'csv'::text, p_source_name text DEFAULT NULL::text, p_source_columns jsonb DEFAULT '[]'::jsonb, p_file_hash text DEFAULT NULL::text, p_policy jsonb DEFAULT '{}'::jsonb, p_dedupe_key text DEFAULT NULL::text, p_file_bytes bigint DEFAULT NULL::bigint, p_force boolean DEFAULT false", returns: "jsonb", security: "definer" },
1233
+ { name: "io_import_declare_columns", args: "p_organization_id uuid, p_table_id uuid, p_rows jsonb, p_mapping jsonb DEFAULT '{}'::jsonb", returns: "jsonb", security: "definer" },
1208
1234
  { name: "io_import_finish", args: "p_organization_id uuid, p_import_id uuid, p_unmapped text DEFAULT NULL::text", returns: "jsonb", security: "definer" },
1209
1235
  { name: "io_import_forget", args: "p_organization_id uuid, p_import_id uuid", returns: "boolean", security: "definer" },
1210
1236
  { name: "io_import_open", args: "p_organization_id uuid, p_table_id uuid, p_format text DEFAULT 'csv'::text, p_source_name text DEFAULT NULL::text, p_source_columns jsonb DEFAULT '[]'::jsonb", returns: "uuid", security: "definer" },
@@ -1238,6 +1264,7 @@ var STORE_DOORS = [
1238
1264
  { name: "levels_raised_by_a_less_specific_rung", args: "", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, member_email text, record_id uuid, addressed_level permission_level, answered_level permission_level)", security: "definer" },
1239
1265
  { name: "list_door_disagreements", args: "p_pretend text DEFAULT NULL::text, p_only_organization uuid DEFAULT NULL::uuid, p_sample integer DEFAULT 200", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)", security: "invoker" },
1240
1266
  { name: "list_door_disagreements", args: "p_pretend text, p_only_organization uuid, p_sample integer, p_exhaustive boolean", returns: "TABLE(organization_id uuid, organization_name text, member_id uuid, table_id uuid, record_id uuid, door text, why text)", security: "invoker" },
1267
+ { name: "list_portals", args: "p_organization_id uuid, p_archived text DEFAULT 'active'::text", returns: "TABLE(portal_id uuid, title text, slug text, client_table_id uuid, client_table text, is_active boolean, tables integer, invited integer, signed_in integer, sign_in_method text, opened_at timestamp with time zone)", security: "definer" },
1241
1268
  { name: "lookup_value", args: "p_organization_id uuid, p_record_id uuid, p_field_data jsonb", returns: "jsonb", security: "invoker" },
1242
1269
  { name: "mask_document", args: "p_document jsonb, p_visible_keys text[], p_notices jsonb, p_by_id boolean DEFAULT false, p_key_ids jsonb DEFAULT '{}'::jsonb", returns: "jsonb", security: "invoker" },
1243
1270
  { name: "mask_document", args: "p_document jsonb, p_visible_keys text[], p_notices jsonb, p_by_id boolean DEFAULT false, p_key_ids jsonb DEFAULT '{}'::jsonb, p_declared_keys text[] DEFAULT NULL::text[]", returns: "jsonb", security: "invoker" },
@@ -1287,6 +1314,7 @@ var STORE_DOORS = [
1287
1314
  { name: "pipeline_read", args: "p_organization_id uuid, p_table_id uuid", returns: "jsonb", security: "definer" },
1288
1315
  { name: "pipeline_transition_refusal", args: "p_organization_id uuid, p_record_id uuid, p_to text", returns: "jsonb", security: "definer" },
1289
1316
  { name: "portal_admits", args: "p_organization_id uuid, p_user_id uuid DEFAULT NULL::uuid", returns: "boolean", security: "definer" },
1317
+ { name: "portal_archive", args: "p_organization_id uuid, p_portal_id uuid, p_confirm_title text, p_reason text DEFAULT NULL::text", returns: "jsonb", security: "definer" },
1290
1318
  { name: "portal_card", args: "p_organization_id uuid, p_portal_id uuid", returns: "jsonb", security: "definer" },
1291
1319
  { name: "portal_declare", args: "p_organization_id uuid, p_title text, p_client_table_id uuid, p_tables jsonb, p_portal_id uuid DEFAULT NULL::uuid, p_slug text DEFAULT NULL::text, p_sign_in_method text DEFAULT 'magic_link'::text", returns: "uuid", security: "definer" },
1292
1320
  { name: "portal_field_map", args: "p_organization_id uuid, p_table_id uuid", returns: "TABLE(field_id uuid, field_key text, field_type text, points_at uuid)", security: "definer" },
@@ -1298,6 +1326,7 @@ var STORE_DOORS = [
1298
1326
  { name: "portal_principal_bind", args: "p_organization_id uuid, p_principal_id uuid, p_user_id uuid", returns: "jsonb", security: "definer" },
1299
1327
  { name: "portal_public", args: "p_slug text", returns: "jsonb", security: "definer" },
1300
1328
  { name: "portal_record_title", args: "p_organization_id uuid, p_record_id uuid", returns: "text", security: "definer" },
1329
+ { name: "portal_restore", args: "p_organization_id uuid, p_portal_id uuid, p_confirm_title text", returns: "jsonb", security: "definer" },
1301
1330
  { name: "portal_revoke", args: "p_organization_id uuid, p_portal_id uuid, p_principal_id uuid", returns: "jsonb", security: "definer" },
1302
1331
  { name: "portal_slug", args: "p_organization_id uuid, p_title text, p_portal_id uuid DEFAULT NULL::uuid", returns: "text", security: "definer" },
1303
1332
  { name: "portal_tables", args: "p_organization_id uuid", returns: "TABLE(portal_id uuid, table_id uuid, name text)", security: "definer" },
@@ -1578,16 +1607,16 @@ var STORE_KNOBS = [
1578
1607
  { key: "world_publish_enabled", value: "false", type: "boolean" }
1579
1608
  ];
1580
1609
  var STORE_REFUSAL_CODES = [
1581
- { code: "02000", raised_by: "_checklist_instantiate,_portal_invite_payload,_share_write_person,_table_share_invite_payload,checklist_declare,checklist_run,checklist_step_complete,checklist_step_refusal,checklist_template_shape,conversation_scope_bind,dashboard_delete,dashboard_run,doc_letterhead,doc_render_body,doc_render_document,doc_render_read,doc_sign,doc_signature_intact,doc_signature_read,doc_template_delete,doc_template_read,doc_template_save,enrich_pin,entity_field_retire,entity_field_update,entity_record_read,entity_value_write,external_history_event,external_rows,external_stub_upsert,external_writes_set,io_restore,migrate_delete,migrate_extract_parent,migrate_merge,migrate_reclass,migrate_rename,migrate_reparent,migrate_retype,migrate_split,migrate_undo,organization_clear,portal_card,portal_declare,portal_invite,portal_invite_accept,portal_preview,portal_principal_bind,portal_revoke,read_record,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_uncarry,share_access,share_grant,share_lane_set,share_people,share_revoke,sign_request_cancel,sign_request_create,sign_request_remind,sign_request_unchanged,table_archive,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,table_share_outside_revoke,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state" },
1610
+ { code: "02000", raised_by: "_checklist_instantiate,_portal_invite_payload,_share_write_person,_table_share_invite_payload,checklist_declare,checklist_run,checklist_step_complete,checklist_step_refusal,checklist_template_shape,conversation_scope_bind,dashboard_delete,dashboard_run,doc_letterhead,doc_render_body,doc_render_document,doc_render_read,doc_sign,doc_signature_intact,doc_signature_read,doc_template_delete,doc_template_read,doc_template_save,enrich_pin,entity_field_retire,entity_field_update,entity_record_read,entity_value_write,external_history_event,external_rows,external_stub_upsert,external_writes_set,io_restore,migrate_delete,migrate_extract_parent,migrate_merge,migrate_reclass,migrate_rename,migrate_reparent,migrate_retype,migrate_split,migrate_undo,organization_clear,portal_archive,portal_card,portal_declare,portal_invite,portal_invite_accept,portal_preview,portal_principal_bind,portal_restore,portal_revoke,read_record,record_delete,record_restore,record_restore_preview,record_table,record_update,relation_uncarry,share_access,share_grant,share_lane_set,share_people,share_revoke,sign_request_cancel,sign_request_create,sign_request_remind,sign_request_unchanged,table_archive,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,table_share_outside_revoke,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_assign,work_record_states,work_set_state" },
1582
1611
  { code: "0A000", raised_by: "checklist_step_complete,external_rows,external_source_declare,external_write_through,promote_field,promoted_index_expr,promoted_query_sql,promoted_read,rule_eval,work_assign" },
1583
1612
  { code: "22003", raised_by: "context_resolve" },
1584
1613
  { code: "22004", raised_by: "_entity_custom_fields_guard,_share_write_person,_value_envelope,actor_word,agg_assert_key,agg_sql,anon_capture,anon_token_issue,anon_write,assert_client_may_reach,booking_declare,capture_submit,checklist_declare,context_resolve,dashboard_block_normalize,dashboard_declare,dashboard_window_sql,doc_render_write,doc_sign,doc_signature_write,doc_template_save,enrich_land,enrich_normalize,external_history_event,external_rows,external_source_declare,external_stub_upsert,external_write_through,external_writes_set,field_history,form_declare,form_submit,home_add,io_comment_write,io_import_begin,io_infer_column,io_outbox_drain,io_restore,migrate_choice_keys,migrate_purge,migrate_reclass,migrate_split,migrate_undo,organization_clear,organization_contents,pipeline_declare,pipeline_gate_preview,portal_declare,portal_invite,portal_principal_bind,provenance_retention_days,provenance_write,query_across_homes,query_by_coordinates,query_rollup,record_delete,record_reparent,record_resolve,record_restore,record_update,record_write,record_write_many,relation_carry,relation_own,rule_declare,share_grant,sign_request_create,sign_request_sign,subscription_declare,table_archive,table_declare,table_share_outside_invite,value_restore,view_declare,work_approval_decide,work_approval_request,work_template_declare" },
1585
1614
  { code: "22007", raised_by: "dashboard_window_sql" },
1586
1615
  { code: "22012", raised_by: "rule_eval" },
1587
- { code: "22023", raised_by: "_booking_availability,_entity_custom_fields_guard,_take_op_id,_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,field_update,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,read_records_archived,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" },
1616
+ { code: "22023", raised_by: "_booking_availability,_entity_custom_fields_guard,_take_op_id,_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,field_update,io_export,io_import_begin,io_import_finish,io_import_plan,io_import_report,io_proposal_accept,list_portals,migrate_merge,migrate_reclass,my_levels,organization_clear,page_size,pin_agent_cells,pipeline_move,portal_declare,provenance_write,query_by_coordinates,query_rollup,read_records_archived,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" },
1588
1617
  { code: "23503", raised_by: "_booking_availability,_checklist_instantiate,_containment_guard,_display_spec_for,_field_document_for,_field_type_parity_guard,_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" },
1589
1618
  { code: "23505", raised_by: "_share_write_person,_unique_rule_holds,doc_sign,doc_signature_write,entity_field_declare,field_declare,home_add,inbound_declare,io_proposal_accept,relation_carry,relation_own,sign_request_cancel,sign_request_create,table_share_outside_resend,work_approval_decide,work_slot_hold" },
1590
- { code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_display_spec_for,_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,_with_display,_work_shape_guard,_workdoors_approval_guard,assert_columns_are_defined,assert_entity_is_organization_scoped,booking_declare,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_comment_write,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" },
1619
+ { code: "23514", raised_by: "_checklist_instantiate,_checklist_step_guard,_containment_guard,_dated_values_guard,_derived_fields,_display_spec_for,_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,_with_display,_work_shape_guard,_workdoors_approval_guard,assert_columns_are_defined,assert_entity_is_organization_scoped,booking_declare,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_comment_write,io_import_rows,migrate_merge,portal_archive,portal_restore,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" },
1591
1620
  { code: "40001", raised_by: "has_visibility_at" },
1592
1621
  { code: "42501", raised_by: "_doc_render_immutable,_doc_signature_immutable,_field_definition_write,_field_write_door,_rule_definition_write,_store_door,agent_table_claim,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,doc_sign,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_invite_accept,portal_principal_bind,promote_table,query_visibility_parity,read_record,read_records,read_records_archived,read_records_by_ids,read_records_matching,record_table,share_grant,subscription_mute,subscription_preview,table_share_outside_accept,table_share_outside_invite,table_share_outside_resend,visibility_as_of,work_approval_decide,work_approval_read,work_approval_request,work_person" },
1593
1622
  { code: "42703", raised_by: "entity_table,portal_declare" },
@@ -2849,6 +2878,7 @@ var DOORS = {
2849
2878
  // ways to start an import from one client is how they drift.
2850
2879
  importPlan: "io_import_plan",
2851
2880
  importBegin: "io_import_begin",
2881
+ importDeclareColumns: "io_import_declare_columns",
2852
2882
  importRows: "io_import_rows",
2853
2883
  importFinish: "io_import_finish",
2854
2884
  importReport: "io_import_report",
@@ -2885,6 +2915,17 @@ var DOORS = {
2885
2915
  portalInvite: "portal_invite",
2886
2916
  portalRevoke: "portal_revoke",
2887
2917
  portalPreview: "portal_preview",
2918
+ // ORG-CLEANUP, 2026-09-22 — A PORTAL IS ARCHIVED, NEVER DELETED.
2919
+ // `portals` keeps its signature and HIDES archived portals (the law's default
2920
+ // is to hide); `list_portals(org, 'active'|'archived'|'all')` is the
2921
+ // archive-aware reader, taking the platform archive filter's own three values
2922
+ // so one door serves both lanes and no screen has to invent a second control.
2923
+ // `portal_archive` / `portal_restore` are the way out and the way back; both
2924
+ // take the portal's own title typed back, because ten portals can carry one
2925
+ // title and the title alone is not what picks this one.
2926
+ listPortals: "list_portals",
2927
+ portalArchive: "portal_archive",
2928
+ portalRestore: "portal_restore",
2888
2929
  // SCR-16 — the canvas. A dashboard is a record in the presentation kernel
2889
2930
  // whose blocks are saved SPECS for the eighth verb; `dashboardRun` walks them
2890
2931
  // under the CALLER'S principal, so nothing here is precomputed and nothing is
@@ -3926,6 +3967,18 @@ function createRecordsClient(config) {
3926
3967
  "importBegin"
3927
3968
  );
3928
3969
  },
3970
+ async importDeclareColumns(args) {
3971
+ return callDoor(
3972
+ DOORS.importDeclareColumns,
3973
+ {
3974
+ p_organization_id: org,
3975
+ p_table_id: args.table_id,
3976
+ p_rows: args.rows,
3977
+ p_mapping: args.mapping ?? {}
3978
+ },
3979
+ "importDeclareColumns"
3980
+ );
3981
+ },
3929
3982
  async importRows(args) {
3930
3983
  return callDoor(
3931
3984
  DOORS.importRows,
@@ -3996,6 +4049,36 @@ function createRecordsClient(config) {
3996
4049
  async portals() {
3997
4050
  return callDoor(DOORS.portals, { p_organization_id: org }, "portals");
3998
4051
  },
4052
+ async listPortals(args) {
4053
+ return callDoor(
4054
+ DOORS.listPortals,
4055
+ { p_organization_id: org, p_archived: args?.archived ?? "active" },
4056
+ "listPortals"
4057
+ );
4058
+ },
4059
+ async portalArchive(args) {
4060
+ return callDoor(
4061
+ DOORS.portalArchive,
4062
+ {
4063
+ p_organization_id: org,
4064
+ p_portal_id: args.portal_id,
4065
+ p_confirm_title: args.confirm_title,
4066
+ p_reason: args.reason ?? null
4067
+ },
4068
+ "portalArchive"
4069
+ );
4070
+ },
4071
+ async portalRestore(args) {
4072
+ return callDoor(
4073
+ DOORS.portalRestore,
4074
+ {
4075
+ p_organization_id: org,
4076
+ p_portal_id: args.portal_id,
4077
+ p_confirm_title: args.confirm_title
4078
+ },
4079
+ "portalRestore"
4080
+ );
4081
+ },
3999
4082
  async portalTables() {
4000
4083
  return callDoor(DOORS.portalTables, { p_organization_id: org }, "portalTables");
4001
4084
  },