Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

3.1 KiB

Scratchpad

  • User selected no backfill: existing tier-entitled tenants do not automatically receive add-on rows.
  • Existing AI add-on infrastructure uses tenant_addons, session addons, TierContext.hasAddOn, assertAddOnAccess, and Stripe metadata addon_key.
  • Key files identified:
    • packages/types/src/constants/addOns.ts
    • server/src/context/TierContext.tsx
    • server/src/components/settings/SettingsPage.tsx
    • ee/server/src/app/api/integrations/entra/_guards.ts
    • ee/packages/microsoft-teams/src/lib/teams/teamsAvailability.ts
    • ee/server/src/lib/stripe/StripeService.ts
    • ee/server/src/components/settings/account/AccountManagement.tsx

Implementation notes

  • Added ADD_ONS.TEAMS = 'teams' and ADD_ONS.ENTERPRISE = 'enterprise'.
  • Made ENTRA_SYNC and TEAMS_INTEGRATION add-on-only for tier utilities by excluding them from derived tier maps and returning false from tierHasFeature.
  • Settings now computes Entra access from hasAddOn(ADD_ONS.ENTERPRISE) and Teams access from hasAddOn(ADD_ONS.TEAMS).
  • Entra API guard keeps the base INTEGRATIONS check and now also calls assertAddOnAccess(ADD_ONS.ENTERPRISE).
  • Teams runtime availability and Teams notification delivery check the active teams add-on row.
  • Stripe add-on price lookup now supports AI, Teams, and Enterprise add-ons via monthly/annual env vars.
  • Account Management renders all three add-ons through one generic purchase/cancel card flow.

Validation

  • Attempted focused Vitest run with pnpm exec vitest run ...; startup failed before tests because the repo-local Vitest config imports dotenv, but this checkout has no local node_modules/dotenv available.

  • Added Enterprise add-on filtering to Entra recurring Temporal schedule setup so scheduled syncs are deleted/skipped when the add-on is inactive.

  • Reviewer found the Teams Microsoft-provider binding bypass; fixed by hiding Teams consumer UI unless canUseTeams is true and by rejecting setMicrosoftConsumerBinding({ consumerType: 'teams' }) without an active Teams add-on.

  • Added missing package dependencies for new @alga-psa/types runtime imports in ee/packages/microsoft-teams and ee/temporal-workflows; refreshed package-lock.json with npm install --package-lock-only --ignore-scripts.

  • pnpm exec tsc --noEmit --pretty false --skipLibCheck completed successfully.

  • Focused Vitest initially could not start without local dependencies; after wiring/installing dependencies, the focused Teams/add-on regression set passed:

    • ../packages/integrations/src/lib/teamsAvailability.test.ts
    • src/test/unit/teamsMeetingHelpers.test.ts
    • src/test/unit/internal-notifications/teamsNotificationDelivery.test.ts
    • ../packages/integrations/src/actions/integrations/teamsActions.test.ts
    • ../packages/integrations/src/actions/integrations/teamsPackageActions.test.ts
    • ../packages/integrations/src/actions/integrations/microsoftActions.test.ts
    • ../packages/scheduling/tests/availabilitySettingsActions.permission.test.ts
  • cd server && npx tsc --noEmit --pretty false --project tsconfig.json completed successfully.