Skip to content

Add Reevo API module (@friggframework/api-module-reevo) - #97

Merged
seanspeaks merged 4 commits into
nextfrom
claude/reevo-integration-examples-sh0n9e
Aug 19, 2026
Merged

Add Reevo API module (@friggframework/api-module-reevo)#97
seanspeaks merged 4 commits into
nextfrom
claude/reevo-integration-examples-sh0n9e

Conversation

@seanspeaks

@seanspeaks seanspeaks commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

What

Adds @friggframework/api-module-reevo — a Frigg API module for Reevo, the AI-native Revenue OS (CRM). Branched from next (Frigg 2.0).

Reevo's public API is a small, API-key-authenticated REST surface (x-api-key header, base https://api.reevo.ai/api/v1/public). The module is built on ApiKeyRequester and covers the full documented public surface:

  • Accounts — create / update / get / search, plus the combined account_contact upsert
  • Contacts — get / search
  • Opportunities — create / update / get / search + shift_stage
  • Tasks and manual_activities (call / meeting-intelligence logging)
  • Users & mailboxes search, sequence enrollments, account+contact retrieval

Auth uses the x-api-key header via ApiKeyRequester.addAuthHeaders (api_key_name = 'x-api-key'); the entity/credential externalId is a sha256 fingerprint of the key (Reevo returns no workspace id at auth time).

Canonical OpenAPI spec

Reevo does not publish an OpenAPI document, so reevo.openapi.yaml (authored from their help-docs reference) ships as the canonical machine-readable contract. The api.js client mirrors it 1:1 — one method per operationId — and a spec-sync test asserts they can't drift. Follows the library's prior art for spec-driven modules (Marketo's captured spec + openapi-client-axios).

Tests

Offline jest suites — API surface, auth/definition wiring, and spec↔client sync. 24 tests, all passing against @friggframework/core@2.0.0-next.107 (no live key needed).

Publish

private unset, publishConfig.access: public, workspace member under packages/v1-ready/* — publishable via the repo's lerna/auto release flow.

Files

packages/v1-ready/reevo/
├── api.js                 # ApiKeyRequester client (18 operations)
├── definition.js          # Frigg module definition (x-api-key auth)
├── index.js
├── defaultConfig.json
├── reevo.openapi.yaml     # canonical spec (source of truth)
├── package.json
├── README.md
├── LICENSE.md
├── .env.example
└── tests/                 # api / definition / spec-sync (24 tests)

🤖 Generated with Claude Code


Generated by Claude Code

Version

Published prerelease version: @friggframework/api-module-reevo@1.0.1-next.0

Changelog

🐛 Bug Fix

  • @friggframework/api-module-reevo
    • Add Reevo API module (@friggframework/api-module-reevo) #97 (@seanspeaks)
  • @friggframework/api-module-microsoft-teams, @friggframework/api-module-slack, @friggframework/api-module-42matters, @friggframework/api-module-asana, @friggframework/api-module-attio, @friggframework/api-module-clio, @friggframework/api-module-connectwise, @friggframework/api-module-contentful, @friggframework/api-module-contentstack, @friggframework/api-module-crossbeam, @friggframework/api-module-deel, @friggframework/api-module-frigg-scale-test, @friggframework/api-module-frontify, @friggframework/api-module-google-calendar, @friggframework/api-module-google-drive, @friggframework/api-module-helpscout, @friggframework/api-module-hubspot, @friggframework/api-module-ironclad, @friggframework/api-module-linear, @friggframework/api-module-pipedrive, @friggframework/api-module-salesforce, @friggframework/api-module-stripe, @friggframework/api-module-unbabel-projects, @friggframework/api-module-unbabel, @friggframework/api-module-zoho-crm, @friggframework/api-module-zoom
    • fix(attio): assert the token is active in testAuthRequest #96 (@d-klotz)

Authors: 2

seanspeaks and others added 4 commits August 19, 2026 01:03
Reevo is an AI-native Revenue OS whose public API is an x-api-key
authenticated REST surface at https://api.reevo.ai/api/v1/public.

Adds packages/v1-ready/reevo built on ApiKeyRequester:
- Accounts (create/update/get/search) + combined account_contact upsert
- Contacts (get/search)
- Opportunities (create/update/get/search + shift_stage)
- Tasks and manual activities (call / meeting-intelligence logging)
- Users/mailboxes search, sequence enrollments, account+contact retrieval

Auth uses the x-api-key header via ApiKeyRequester.addAuthHeaders; the
entity/credential externalId is a sha256 fingerprint of the key. Offline
jest suites cover the API surface and auth wiring (21 tests, no live key).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDh45c1vm91ySYtvVv9Z65
Reevo does not publish an OpenAPI document, so reevo.openapi.yaml authored
from their help-docs is the machine-readable source of truth. Covers all 18
public operations (accounts, contacts, opportunities, tasks, manual
activities, users/mailboxes, sequence enrollments, retrieval) with request
schemas, x-api-key security, and reusable components.

The api.js client mirrors the spec 1:1 (one method per operationId); a new
spec-sync test asserts they cannot drift (24 tests total). Follows the
prior art in the library for spec-driven modules (Marketo's captured spec +
openapi-client-axios; frigg-scale-test's mock-CRM yaml).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDh45c1vm91ySYtvVv9Z65
publishConfig.access is public and the package is a v1-ready workspace
member, so it will publish via the repo's lerna/auto release flow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDh45c1vm91ySYtvVv9Z65
The Release workflow's `npm ci` failed with EUSAGE because package-lock.json
was out of sync with package.json — the new reevo workspace package (and a
batch of pre-existing transitive drift on next: express, aws-sdk, opentelemetry,
etc.) were missing from the lock file. Regenerated the lock file with
`npm install` so `npm ci` resolves cleanly.

Also added @aws-sdk/client-scheduler as a reevo devDependency: @friggframework/
core@2.0.0-next.107 requires it at load time (eventbridge-scheduler-adapter)
but does not declare it, so reevo's jest suite could not resolve core. With it
installed the package's 24 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDh45c1vm91ySYtvVv9Z65
@seanspeaks seanspeaks added prerelease This change is available in a prerelease. release labels Aug 19, 2026 — with Claude
@seanspeaks
seanspeaks merged commit 16f315e into next Aug 19, 2026
4 checks passed
seanspeaks added a commit that referenced this pull request Aug 20, 2026
Node 20 reached end-of-life on 2026-04-30, and `.node-version` was pinned to
the long-stale 16.15.0 while the release workflow ran Node 18. Bump both to the
current Active LTS line (Node 24; 22 is in maintenance, 26 is Current-not-yet-LTS):

- `.node-version`: 16.15.0 → 24
- `.github/workflows/release.yml`: setup-node 18 → 24

`engines.node` in package.json is already `>=18`, which permits 24, so it's left
unchanged. Scope is CI-Node-only: the lockfile-sync that originally rode along in
this PR is dropped — `next`'s lockfile was already regenerated by the #97/#99
merges, so re-applying the old copy would regress it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDh45c1vm91ySYtvVv9Z65
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

prerelease This change is available in a prerelease. release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant