@opengeni/db 3.2.2 → 3.3.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.
Files changed (81) hide show
  1. package/dist/canonical-human-identities.js +3 -3
  2. package/dist/capability-reconciliation.js +2 -2
  3. package/dist/{chunk-V2X2NK7T.js → chunk-5MPQZI43.js} +2675 -2540
  4. package/dist/{chunk-V2X2NK7T.js.map → chunk-5MPQZI43.js.map} +1 -1
  5. package/dist/{chunk-L3NT43Z5.js → chunk-7K5AVQUZ.js} +3 -3
  6. package/dist/{chunk-JYPBOJ2Y.js → chunk-AAOKWNHE.js} +4 -4
  7. package/dist/{chunk-D7LTIG33.js → chunk-B4RMLA2X.js} +2 -2
  8. package/dist/{chunk-OXO32LTK.js → chunk-CEJ3NQ3B.js} +11 -1
  9. package/dist/chunk-CEJ3NQ3B.js.map +1 -0
  10. package/dist/{chunk-AYZC65QU.js → chunk-CGSINPLW.js} +2 -2
  11. package/dist/{chunk-VCJAYIPH.js → chunk-FX2PSMGH.js} +2 -2
  12. package/dist/{chunk-HMKUJ6NI.js → chunk-HQWXEF77.js} +57 -9
  13. package/dist/chunk-HQWXEF77.js.map +1 -0
  14. package/dist/{chunk-V22DUH4C.js → chunk-HWEHZKHA.js} +5 -5
  15. package/dist/{chunk-6UU7OVUN.js → chunk-JTBJGSUZ.js} +37 -7
  16. package/dist/chunk-JTBJGSUZ.js.map +1 -0
  17. package/dist/{chunk-YH4GWEDM.js → chunk-KPC7I5WG.js} +2 -2
  18. package/dist/{chunk-XQHABE23.js → chunk-OWM6XG55.js} +4 -4
  19. package/dist/{chunk-YWHG45TK.js → chunk-PNEJVKKV.js} +6 -6
  20. package/dist/{chunk-4BAKPTPG.js → chunk-S74WULCK.js} +3 -3
  21. package/dist/{chunk-K6NT66NP.js → chunk-SDKFRIAN.js} +4 -4
  22. package/dist/{chunk-RCDMYTLP.js → chunk-UWS5DJQ6.js} +2 -2
  23. package/dist/{chunk-LRRGVHAQ.js → chunk-VUR5U5B3.js} +2 -2
  24. package/dist/{chunk-IF63BST7.js → chunk-Y4ERASEM.js} +2 -2
  25. package/dist/{chunk-VBG4TW5C.js → chunk-ZZOEKHGU.js} +2 -2
  26. package/dist/connect-attempts.js +3 -3
  27. package/dist/database.d.ts +9 -0
  28. package/dist/editable-artifact-durable-export.js +2 -2
  29. package/dist/editable-artifacts.js +3 -3
  30. package/dist/index.d.ts +93 -22
  31. package/dist/index.js +31 -19
  32. package/dist/insights-site-usage.d.ts +10 -0
  33. package/dist/managed-auth-session-sets.js +3 -3
  34. package/dist/mcp-operations.js +2 -2
  35. package/dist/migrate.js +19 -19
  36. package/dist/organization-integration-policy.js +3 -3
  37. package/dist/provision-roles.js +1 -1
  38. package/dist/retained-provider-commands.js +6 -6
  39. package/dist/schema.d.ts +102 -0
  40. package/dist/schema.js +1 -1
  41. package/dist/session-background-commands.js +5 -5
  42. package/dist/session-command-output.js +5 -5
  43. package/dist/session-event-slices.js +3 -3
  44. package/dist/session-mcp-credential-rotation.js +6 -6
  45. package/dist/session-tenancy.js +6 -6
  46. package/dist/site-publishing.d.ts +11 -0
  47. package/dist/{subscription-core-codex-4G4CCOJU.js → subscription-core-codex-HIAP7CY2.js} +6 -6
  48. package/dist/{subscription-core-codex-compat-64ACIZVP.js → subscription-core-codex-compat-IBERN7DU.js} +8 -8
  49. package/dist/video-generation.js +3 -3
  50. package/dist/workspace-tool-defaults.js +5 -5
  51. package/drizzle/0793_private_site_sessions.sql +166 -0
  52. package/drizzle/0794_site_ai_insights.sql +175 -0
  53. package/drizzle/0795_site_lifecycle_cancellation.sql +121 -0
  54. package/package.json +9 -9
  55. package/src/database.ts +44 -3
  56. package/src/index.ts +142 -11
  57. package/src/insights-site-usage.ts +37 -0
  58. package/src/provision-roles.ts +15 -0
  59. package/src/runtime-posture.ts +76 -7
  60. package/src/schema.ts +10 -0
  61. package/src/site-publishing.ts +35 -0
  62. package/dist/chunk-6UU7OVUN.js.map +0 -1
  63. package/dist/chunk-HMKUJ6NI.js.map +0 -1
  64. package/dist/chunk-OXO32LTK.js.map +0 -1
  65. /package/dist/{chunk-L3NT43Z5.js.map → chunk-7K5AVQUZ.js.map} +0 -0
  66. /package/dist/{chunk-JYPBOJ2Y.js.map → chunk-AAOKWNHE.js.map} +0 -0
  67. /package/dist/{chunk-D7LTIG33.js.map → chunk-B4RMLA2X.js.map} +0 -0
  68. /package/dist/{chunk-AYZC65QU.js.map → chunk-CGSINPLW.js.map} +0 -0
  69. /package/dist/{chunk-VCJAYIPH.js.map → chunk-FX2PSMGH.js.map} +0 -0
  70. /package/dist/{chunk-V22DUH4C.js.map → chunk-HWEHZKHA.js.map} +0 -0
  71. /package/dist/{chunk-YH4GWEDM.js.map → chunk-KPC7I5WG.js.map} +0 -0
  72. /package/dist/{chunk-XQHABE23.js.map → chunk-OWM6XG55.js.map} +0 -0
  73. /package/dist/{chunk-YWHG45TK.js.map → chunk-PNEJVKKV.js.map} +0 -0
  74. /package/dist/{chunk-4BAKPTPG.js.map → chunk-S74WULCK.js.map} +0 -0
  75. /package/dist/{chunk-K6NT66NP.js.map → chunk-SDKFRIAN.js.map} +0 -0
  76. /package/dist/{chunk-RCDMYTLP.js.map → chunk-UWS5DJQ6.js.map} +0 -0
  77. /package/dist/{chunk-LRRGVHAQ.js.map → chunk-VUR5U5B3.js.map} +0 -0
  78. /package/dist/{chunk-IF63BST7.js.map → chunk-Y4ERASEM.js.map} +0 -0
  79. /package/dist/{chunk-VBG4TW5C.js.map → chunk-ZZOEKHGU.js.map} +0 -0
  80. /package/dist/{subscription-core-codex-4G4CCOJU.js.map → subscription-core-codex-HIAP7CY2.js.map} +0 -0
  81. /package/dist/{subscription-core-codex-compat-64ACIZVP.js.map → subscription-core-codex-compat-IBERN7DU.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  rawRows,
3
3
  withWorkspaceSubjectRls
4
- } from "./chunk-6UU7OVUN.js";
4
+ } from "./chunk-JTBJGSUZ.js";
5
5
 
6
6
  // src/connect-attempts.ts
7
7
  import { createHash } from "crypto";
@@ -245,4 +245,4 @@ export {
245
245
  claimConnectOperation,
246
246
  finishConnectOperation
247
247
  };
248
- //# sourceMappingURL=chunk-AYZC65QU.js.map
248
+ //# sourceMappingURL=chunk-CGSINPLW.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  setSubjectRlsContext,
3
3
  withRlsContext
4
- } from "./chunk-6UU7OVUN.js";
4
+ } from "./chunk-JTBJGSUZ.js";
5
5
 
6
6
  // src/connection-token-resolver.ts
7
7
  import {
@@ -863,4 +863,4 @@ export {
863
863
  refreshOAuthConnectionCredential,
864
864
  isPrivateAddress
865
865
  };
866
- //# sourceMappingURL=chunk-VCJAYIPH.js.map
866
+ //# sourceMappingURL=chunk-FX2PSMGH.js.map
@@ -566,6 +566,12 @@ var SCHEDULED_PERSONAL_RESOURCE_CAPABILITY_PREDICATE_ROUTINE = "scheduled_person
566
566
  var SCHEDULED_PERSONAL_RESOURCE_CAPABILITY_TABLE = "scheduled_personal_resource_capabilities";
567
567
  var VARIABLE_SET_CAPABILITY_PREDICATE_ROUTINE = "variable_set_authority_capability_active(text)";
568
568
  var VARIABLE_SET_CAPABILITY_TABLE = "variable_set_authority_capabilities";
569
+ var SITE_CANCELLATION_CAPABILITY_TABLE = "site_session_cancellation_capabilities";
570
+ var SITE_CANCELLATION_PREDICATE = "site_session_cancellation_capability_active(uuid, uuid, uuid, uuid)";
571
+ var SITE_CANCELLATION_PRIVATE_ROUTINES = [
572
+ "begin_site_session_cancellation(uuid, uuid, uuid, uuid)",
573
+ "end_site_session_cancellation(uuid)"
574
+ ];
569
575
  var PERSONAL_DOCUMENT_CAPABILITY_PREDICATE_ROUTINE = "personal_document_authority_capability_active(text)";
570
576
  var PERSONAL_DOCUMENT_CAPABILITY_TABLE = "personal_document_authority_capabilities";
571
577
  var PERSONAL_DOCUMENT_AUTHORITY_ROUTINES = [
@@ -2627,15 +2633,15 @@ async function inspectRuntimeDatabasePosture(db, options) {
2627
2633
  -- Column-only grants on capability tables are also unsafe; a pin
2628
2634
  -- table must remain EXECUTE-only even after column ACL drift.
2629
2635
  (has_table_privilege(current_user, c.oid, 'SELECT') or
2630
- ((c.relname in ('modal_native_origin_read_capabilities','modal_inventory_read_capabilities','usage_allowance_capabilities','session_import_batches', ${ARTIFACT_PINS_TABLE}) or
2636
+ ((c.relname in ('modal_native_origin_read_capabilities','modal_inventory_read_capabilities','usage_allowance_capabilities','session_import_batches', ${ARTIFACT_PINS_TABLE}, ${SITE_CANCELLATION_CAPABILITY_TABLE}) or
2631
2637
  c.relname in (select jsonb_array_elements_text(${JSON.stringify([...RUNTIME_ALLOWANCE_PRIVATE_TABLES, ...RUNTIME_SESSION_USAGE_LIMIT_PRIVATE_TABLES, "session_usage_limit_capabilities"])}::jsonb))) and
2632
2638
  has_any_column_privilege(current_user, c.oid, 'SELECT'))) as can_select,
2633
2639
  (has_table_privilege(current_user, c.oid, 'INSERT') or
2634
- ((c.relname in ('modal_native_origin_read_capabilities','modal_inventory_read_capabilities','usage_allowance_capabilities','session_import_batches', ${ARTIFACT_PINS_TABLE}) or
2640
+ ((c.relname in ('modal_native_origin_read_capabilities','modal_inventory_read_capabilities','usage_allowance_capabilities','session_import_batches', ${ARTIFACT_PINS_TABLE}, ${SITE_CANCELLATION_CAPABILITY_TABLE}) or
2635
2641
  c.relname in (select jsonb_array_elements_text(${JSON.stringify([...RUNTIME_ALLOWANCE_PRIVATE_TABLES, ...RUNTIME_SESSION_USAGE_LIMIT_PRIVATE_TABLES, "session_usage_limit_capabilities"])}::jsonb))) and
2636
2642
  has_any_column_privilege(current_user, c.oid, 'INSERT'))) as can_insert,
2637
2643
  (has_table_privilege(current_user, c.oid, 'UPDATE') or
2638
- ((c.relname in ('modal_native_origin_read_capabilities','modal_inventory_read_capabilities','usage_allowance_capabilities','session_import_batches', ${ARTIFACT_PINS_TABLE}) or
2644
+ ((c.relname in ('modal_native_origin_read_capabilities','modal_inventory_read_capabilities','usage_allowance_capabilities','session_import_batches', ${ARTIFACT_PINS_TABLE}, ${SITE_CANCELLATION_CAPABILITY_TABLE}) or
2639
2645
  c.relname in (select jsonb_array_elements_text(${JSON.stringify([...RUNTIME_ALLOWANCE_PRIVATE_TABLES, ...RUNTIME_SESSION_USAGE_LIMIT_PRIVATE_TABLES, "session_usage_limit_capabilities"])}::jsonb))) and
2640
2646
  has_any_column_privilege(current_user, c.oid, 'UPDATE'))) as can_update,
2641
2647
  has_table_privilege(current_user, c.oid, 'DELETE') as can_delete,
@@ -2657,6 +2663,7 @@ async function inspectRuntimeDatabasePosture(db, options) {
2657
2663
  ${PERSONAL_RESOURCE_CAPABILITY_TABLE},
2658
2664
  ${SCHEDULED_PERSONAL_RESOURCE_CAPABILITY_TABLE},
2659
2665
  ${VARIABLE_SET_CAPABILITY_TABLE},
2666
+ ${SITE_CANCELLATION_CAPABILITY_TABLE},
2660
2667
  ${VAULT_CAPABILITY_TABLE},
2661
2668
  ${PERSONAL_DOCUMENT_CAPABILITY_TABLE},
2662
2669
  ${DOCUMENT_MIGRATION_CAPABILITY_TABLE},
@@ -2721,7 +2728,8 @@ async function inspectRuntimeDatabasePosture(db, options) {
2721
2728
  from aclexplode(coalesce(p.proacl, acldefault('f', p.proowner))) acl
2722
2729
  where acl.grantee = 0 and acl.privilege_type = 'EXECUTE'
2723
2730
  ) as public_execute,
2724
- p.prosecdef as security_definer
2731
+ p.prosecdef as security_definer,
2732
+ p.proconfig as configuration
2725
2733
  from pg_proc p
2726
2734
  join pg_namespace n on n.oid = p.pronamespace
2727
2735
  where n.nspname = ${targetSchema}
@@ -2729,9 +2737,11 @@ async function inspectRuntimeDatabasePosture(db, options) {
2729
2737
  and (p.proname || '(' || pg_catalog.oidvectortypes(p.proargtypes) || ')') = any(
2730
2738
  array[
2731
2739
  ${sql.join(
2732
- [...targetSchemaCapabilityRoutines, ...targetSchemaForbiddenRoutines].map(
2733
- (name) => sql`${name}`
2734
- ),
2740
+ [
2741
+ ...targetSchemaCapabilityRoutines,
2742
+ ...targetSchemaForbiddenRoutines,
2743
+ SITE_CANCELLATION_PREDICATE
2744
+ ].map((name) => sql`${name}`),
2735
2745
  sql`, `
2736
2746
  )}
2737
2747
  ]::text[]
@@ -2743,7 +2753,8 @@ async function inspectRuntimeDatabasePosture(db, options) {
2743
2753
  owner: row.owner,
2744
2754
  execute: row.can_execute,
2745
2755
  publicExecute: row.public_execute,
2746
- securityDefiner: row.security_definer
2756
+ securityDefiner: row.security_definer,
2757
+ configuration: row.configuration
2747
2758
  })).sort((left, right) => left.name.localeCompare(right.name));
2748
2759
  const privateRoutines = resultRows(
2749
2760
  await tx.execute(sql`
@@ -4626,6 +4637,28 @@ function evaluateRuntimeDatabasePosture(posture, options) {
4626
4637
  violations.push("organization usage aggregate capability is missing or unsafe");
4627
4638
  }
4628
4639
  }
4640
+ const siteCancellation = posture.privateTables.find(
4641
+ (table) => table.name === SITE_CANCELLATION_CAPABILITY_TABLE
4642
+ );
4643
+ const siteCancellationPredicate = posture.targetRoutines.filter(
4644
+ (routine) => routine.name === SITE_CANCELLATION_PREDICATE
4645
+ );
4646
+ const siteCancellationRoutines = posture.privateRoutines.filter(
4647
+ (routine) => SITE_CANCELLATION_PRIVATE_ROUTINES.includes(routine.name)
4648
+ );
4649
+ if (!options.protectedTables || siteCancellation || siteCancellationPredicate.length || siteCancellationRoutines.length) {
4650
+ if (!siteCancellation || siteCancellation.owner === expectedRole || siteCancellation.owner !== tableByName.get("sessions")?.owner || siteCancellation.select || siteCancellation.insert || siteCancellation.update || siteCancellation.delete || siteCancellation.truncate || siteCancellation.references || siteCancellation.trigger)
4651
+ violations.push("Site cancellation capability ledger is missing or unsafe");
4652
+ const predicate = siteCancellationPredicate[0];
4653
+ if (siteCancellationPredicate.length !== 1 || !predicate?.securityDefiner || !predicate.execute || !predicate.publicExecute || predicate.owner !== siteCancellation?.owner || !predicate.configuration?.includes("search_path=pg_catalog"))
4654
+ violations.push("Site cancellation policy predicate is missing or unsafe");
4655
+ for (const name of SITE_CANCELLATION_PRIVATE_ROUTINES) {
4656
+ const matches = siteCancellationRoutines.filter((routine2) => routine2.name === name);
4657
+ const routine = matches[0];
4658
+ if (matches.length !== 1 || !routine?.securityDefiner || !routine.execute || routine.publicExecute || routine.owner !== siteCancellation?.owner || !(name.startsWith("end_") ? routine.configuration?.includes("search_path=pg_catalog") : safeSearchPath(routine)))
4659
+ violations.push(`Site cancellation routine ${name} is missing or unsafe`);
4660
+ }
4661
+ }
4629
4662
  const modelCallFactsOwner = tableByName.get("model_call_facts")?.owner;
4630
4663
  const modelFactCapabilityRoutines = new Set(
4631
4664
  options.modelFactCapabilityRoutines ?? MODEL_FACT_CAPABILITY_ROUTINES.map(([name]) => name)
@@ -7086,6 +7119,21 @@ BEGIN
7086
7119
  REVOKE ALL ON FUNCTION opengeni_private.insights_raw_amount_inputs(uuid,uuid,timestamptz,timestamptz) FROM PUBLIC;
7087
7120
  REVOKE ALL ON FUNCTION opengeni_private.insights_usage_payer(text,text), opengeni_private.insights_usage_filter(jsonb,jsonb) FROM PUBLIC;
7088
7121
  END IF;
7122
+ IF to_regprocedure('opengeni_private.insights_site_usage(uuid,uuid,timestamptz,timestamptz,text)') IS NOT NULL THEN
7123
+ REVOKE ALL ON FUNCTION opengeni_private.insights_site_usage(uuid,uuid,timestamptz,timestamptz,text) FROM PUBLIC;
7124
+ END IF;
7125
+ IF to_regclass('opengeni_private.site_session_cancellation_capabilities') IS NOT NULL THEN
7126
+ EXECUTE format('REVOKE ALL ON TABLE opengeni_private.site_session_cancellation_capabilities FROM %I', ${literal(role)});
7127
+ EXECUTE format('REVOKE ALL (%s) ON TABLE opengeni_private.site_session_cancellation_capabilities FROM %I',
7128
+ (SELECT string_agg(quote_ident(attname),',' ORDER BY attnum) FROM pg_attribute
7129
+ WHERE attrelid='opengeni_private.site_session_cancellation_capabilities'::regclass AND attnum>0 AND NOT attisdropped), ${literal(role)});
7130
+ REVOKE ALL ON TABLE opengeni_private.site_session_cancellation_capabilities FROM PUBLIC;
7131
+ EXECUTE format('REVOKE ALL (%s) ON TABLE opengeni_private.site_session_cancellation_capabilities FROM PUBLIC',
7132
+ (SELECT string_agg(quote_ident(attname),',' ORDER BY attnum) FROM pg_attribute
7133
+ WHERE attrelid='opengeni_private.site_session_cancellation_capabilities'::regclass AND attnum>0 AND NOT attisdropped));
7134
+ REVOKE ALL ON FUNCTION opengeni_private.begin_site_session_cancellation(uuid,uuid,uuid,uuid),
7135
+ opengeni_private.end_site_session_cancellation(uuid) FROM PUBLIC;
7136
+ END IF;
7089
7137
  IF to_regclass('opengeni_private.usage_allowance_capabilities') IS NOT NULL THEN
7090
7138
  EXECUTE format('REVOKE ALL ON TABLE opengeni_private.usage_allowance_capabilities FROM %I', ${literal(role)});
7091
7139
  EXECUTE format('REVOKE ALL (backend_pid,transaction_id,data_schema,account_id,workspace_id) ON TABLE opengeni_private.usage_allowance_capabilities FROM %I', ${literal(role)});
@@ -7455,4 +7503,4 @@ export {
7455
7503
  provisionRoles,
7456
7504
  runProvisionRolesCli
7457
7505
  };
7458
- //# sourceMappingURL=chunk-HMKUJ6NI.js.map
7506
+ //# sourceMappingURL=chunk-HQWXEF77.js.map