@elevasis/core 0.12.0 → 0.14.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 (50) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +9 -2
  3. package/dist/organization-model/index.d.ts +1 -1
  4. package/dist/organization-model/index.js +9 -2
  5. package/dist/test-utils/index.d.ts +480 -389
  6. package/dist/test-utils/index.js +28 -2
  7. package/package.json +1 -1
  8. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2324 -0
  9. package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -216
  10. package/src/auth/multi-tenancy/credentials/server/encryption.ts +5 -19
  11. package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +3 -13
  12. package/src/auth/multi-tenancy/permissions.ts +12 -5
  13. package/src/business/acquisition/activity-events.test.ts +250 -0
  14. package/src/business/acquisition/activity-events.ts +84 -0
  15. package/src/business/acquisition/api-schemas.test.ts +1180 -0
  16. package/src/business/acquisition/api-schemas.ts +456 -235
  17. package/src/business/acquisition/crm-state-actions.test.ts +160 -0
  18. package/src/business/acquisition/derive-actions.test.ts +518 -0
  19. package/src/business/acquisition/derive-actions.ts +103 -0
  20. package/src/business/acquisition/index.ts +51 -11
  21. package/src/business/acquisition/stateful.ts +30 -0
  22. package/src/business/acquisition/types.ts +44 -77
  23. package/src/execution/engine/index.ts +4 -1
  24. package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +1 -2
  25. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -361
  26. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -186
  27. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -338
  28. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -210
  29. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -0
  30. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -134
  31. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -75
  32. package/src/execution/engine/tools/integration/service.test.ts +34 -9
  33. package/src/execution/engine/tools/integration/service.ts +6 -3
  34. package/src/execution/engine/tools/lead-service-types.ts +90 -30
  35. package/src/execution/engine/tools/platform/acquisition/types.ts +266 -260
  36. package/src/execution/engine/tools/registry.ts +5 -4
  37. package/src/execution/engine/tools/tool-maps.ts +43 -21
  38. package/src/execution/engine/workflow/types.ts +11 -0
  39. package/src/organization-model/contracts.ts +4 -4
  40. package/src/organization-model/domains/navigation.ts +62 -62
  41. package/src/organization-model/domains/sales.ts +272 -0
  42. package/src/organization-model/organization-graph.mdx +2 -2
  43. package/src/organization-model/published.ts +21 -21
  44. package/src/organization-model/resolve.ts +21 -8
  45. package/src/platform/constants/versions.ts +1 -1
  46. package/src/reference/_generated/contracts.md +2324 -0
  47. package/src/scaffold-registry/index.ts +10 -9
  48. package/src/scaffold-registry/schema.ts +68 -62
  49. package/src/supabase/database.types.ts +2958 -2884
  50. package/src/test-utils/rls/RLSTestContext.ts +585 -553
@@ -1991,6 +1991,7 @@ var RLSTestContext = class {
1991
1991
  throw new Error(`Failed to create membership: ${error.message}`);
1992
1992
  }
1993
1993
  this.createdIds.memberships.push(data.id);
1994
+ await this.assignSystemRole(data.id, role);
1994
1995
  return {
1995
1996
  id: data.id,
1996
1997
  user_id: data.user_id,
@@ -1998,6 +1999,23 @@ var RLSTestContext = class {
1998
1999
  role_slug: data.role_slug
1999
2000
  };
2000
2001
  }
2002
+ /**
2003
+ * Assign a system role to a membership via org_rol_assignments.
2004
+ * After the 2026-04-25 auth refactor, RLS policies read `effective_permissions[]`
2005
+ * (materialized by trigger from org_rol_assignments → org_rol_grants).
2006
+ * Without this assignment, role_slug is informational only and the membership
2007
+ * has zero permissions, causing all has_org_permission() checks to deny.
2008
+ */
2009
+ async assignSystemRole(membershipId, slug) {
2010
+ const { data: roleDef, error: roleErr } = await this.adminClient.from("org_rol_definitions").select("id").is("organization_id", null).eq("slug", slug).single();
2011
+ if (roleErr || !roleDef) {
2012
+ throw new Error(`Failed to look up system role '${slug}': ${roleErr?.message ?? "not found"}`);
2013
+ }
2014
+ const { error: assignErr } = await this.adminClient.from("org_rol_assignments").insert({ membership_id: membershipId, role_id: roleDef.id });
2015
+ if (assignErr) {
2016
+ throw new Error(`Failed to assign system role '${slug}' to membership: ${assignErr.message}`);
2017
+ }
2018
+ }
2001
2019
  /**
2002
2020
  * Create a pre-provisioned organization membership (without WorkOS membership ID)
2003
2021
  * Used for testing invitation flows where memberships are created before user accepts
@@ -2016,6 +2034,7 @@ var RLSTestContext = class {
2016
2034
  throw new Error(`Failed to create pre-provisioned membership: ${error.message}`);
2017
2035
  }
2018
2036
  this.createdIds.memberships.push(data.id);
2037
+ await this.assignSystemRole(data.id, role);
2019
2038
  return {
2020
2039
  id: data.id,
2021
2040
  user_id: data.user_id,
@@ -20457,9 +20476,16 @@ function deepMerge2(base, override) {
20457
20476
  }
20458
20477
  return result;
20459
20478
  }
20460
- function resolveOrganizationModel(override) {
20479
+ function resolveOrganizationModel(override, organizationId) {
20461
20480
  const merged = deepMerge2(DEFAULT_ORGANIZATION_MODEL, override);
20462
- return OrganizationModelSchema.parse(merged);
20481
+ const model = OrganizationModelSchema.parse(merged);
20482
+ if (!model.sales?.pipelines || model.sales.pipelines.length === 0) {
20483
+ const orgLabel = "Organization";
20484
+ throw new Error(
20485
+ `${orgLabel} has no sales pipeline configuration. This indicates an incomplete provisioning state. Run org provisioning to seed defaults.`
20486
+ );
20487
+ }
20488
+ return model;
20463
20489
  }
20464
20490
 
20465
20491
  // src/test-utils/organization-model.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elevasis/core",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "license": "MIT",
5
5
  "description": "Minimal shared constants across Elevasis monorepo",
6
6
  "sideEffects": false,