Skip to content

feat: HubSpot association v4 fetch, empty-string datetime fix, OpenAI streaming fix#2177

Merged
AN-BC merged 2 commits intonextfrom
feat/hubspot-assoc-openai-fix
Mar 19, 2026
Merged

feat: HubSpot association v4 fetch, empty-string datetime fix, OpenAI streaming fix#2177
AN-BC merged 2 commits intonextfrom
feat/hubspot-assoc-openai-fix

Conversation

@madhavrs1
Copy link
Copy Markdown
Contributor

Summary

  • HubSpot v4 association fetch: Adds FetchChanges override to route association objects through HubSpot's v4 per-object associations endpoint, with batched parent iteration, full pagination, and composite ExternalID generation
  • Empty-string→null datetime fix: HubSpot returns '' for unset properties — normalizes to null in FlattenHubSpotRecord to prevent SQL conversion errors on datetime/numeric columns
  • BaseREST visibility: GetCachedObject/GetCachedFields changed privateprotected so HubSpot connector can access object metadata for association dispatch
  • OpenAI max_completion_tokens: Fixes streaming path to use the modern parameter name (non-streaming path already used it) — newer models (o1, o3) silently ignored the old max_tokens parameter
  • HubSpot integration metadata: mj-sync config defining all HubSpot CRM objects, association objects, field mappings, and API paths

Test plan

  • Run HubSpot sync with association objects enabled — verify contact↔company, deal↔contact etc. records sync correctly
  • Verify datetime fields with empty values from HubSpot store as NULL (not empty string)
  • Verify OpenAI streaming with o1/o3 models respects maxOutputTokens
  • npm run build passes for integration-connectors, integration-engine, ai-openai

🤖 Generated with Claude Code

…, and OpenAI max_completion_tokens fix

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 19, 2026

🦋 Changeset detected

Latest commit: 43d6342

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 190 packages
Name Type
@memberjunction/core Minor
@memberjunction/integration-connectors Minor
@memberjunction/integration-engine Minor
@memberjunction/ai-openai Minor
@memberjunction/codegen-lib Minor
@memberjunction/component-registry-server Minor
@memberjunction/component-registry-client-sdk Minor
@memberjunction/content-autotagging Minor
@memberjunction/db-auto-doc Minor
@memberjunction/doc-utils Minor
@memberjunction/encryption Minor
@memberjunction/external-change-detection Minor
@memberjunction/generic-database-provider Minor
@memberjunction/graphql-dataprovider Minor
@memberjunction/interactive-component-types Minor
@memberjunction/cli Minor
@memberjunction/core-entities Minor
@memberjunction/core-entities-server Minor
@memberjunction/data-context Minor
@memberjunction/data-context-server Minor
@memberjunction/queue Minor
@memberjunction/server Minor
@memberjunction/storage Minor
@memberjunction/metadata-sync Minor
@memberjunction/postgresql-dataprovider Minor
@memberjunction/query-gen Minor
@memberjunction/query-processor Minor
@memberjunction/redis-provider Minor
@memberjunction/sqlserver-dataprovider Minor
@memberjunction/server-bootstrap Minor
@memberjunction/server-bootstrap-lite Minor
@memberjunction/skip-types Minor
@memberjunction/version-history Minor
@memberjunction/actions-apollo Minor
@memberjunction/actions-base Minor
@memberjunction/code-execution Minor
@memberjunction/actions-content-autotag Minor
@memberjunction/core-actions Minor
@memberjunction/actions Minor
@memberjunction/scheduled-actions Minor
@memberjunction/scheduled-actions-server Minor
@memberjunction/actions-bizapps-accounting Minor
@memberjunction/actions-bizapps-crm Minor
@memberjunction/actions-bizapps-formbuilders Minor
@memberjunction/actions-bizapps-lms Minor
@memberjunction/actions-bizapps-social Minor
@memberjunction/a2aserver Minor
@memberjunction/ai-cli Minor
@memberjunction/ai-agents Minor
@memberjunction/ai-engine-base Minor
@memberjunction/computer-use Minor
@memberjunction/ai-core-plus Minor
@memberjunction/aiengine Minor
@memberjunction/ai-mcp-client Minor
@memberjunction/ai-mcp-server Minor
@memberjunction/computer-use-engine Minor
@memberjunction/ai-prompts Minor
@memberjunction/ai-reranker Minor
@memberjunction/ai-recommendations-rex Minor
@memberjunction/ai-vectors-pinecone Minor
@memberjunction/ai-recommendations Minor
@memberjunction/ai-vectors Minor
@memberjunction/ai-vectordb Minor
@memberjunction/ai-vector-dupe Minor
@memberjunction/ai-vectors-memory Minor
@memberjunction/ai-vector-sync Minor
@memberjunction/ai-agent-manager-actions Minor
@memberjunction/ai-agent-manager Minor
@memberjunction/communication-types Minor
@memberjunction/communication-engine Minor
@memberjunction/entity-communications-base Minor
@memberjunction/entity-communications-client Minor
@memberjunction/entity-communications-server Minor
@memberjunction/notifications Minor
@memberjunction/communication-ms-graph Minor
@memberjunction/communication-gmail Minor
@memberjunction/communication-sendgrid Minor
@memberjunction/communication-twilio Minor
@memberjunction/templates-base-types Minor
@memberjunction/templates Minor
@memberjunction/ng-bootstrap Minor
@memberjunction/ng-auth-services Minor
@memberjunction/ng-base-application Minor
@memberjunction/ng-core-entity-forms Minor
@memberjunction/ng-dashboards Minor
@memberjunction/ng-entity-form-dialog Minor
@memberjunction/ng-entity-permissions Minor
@memberjunction/ng-explorer-app Minor
@memberjunction/ng-explorer-core Minor
@memberjunction/ng-explorer-settings Minor
@memberjunction/ng-link-directives Minor
@memberjunction/ng-list-detail-grid Minor
@memberjunction/ng-shared Minor
@memberjunction/ng-simple-record-list Minor
@memberjunction/ng-workspace-initializer Minor
@memberjunction/ng-testing Minor
@memberjunction/ng-action-gallery Minor
@memberjunction/ng-actions Minor
@memberjunction/ng-agent-requests Minor
@memberjunction/ng-agents Minor
@memberjunction/ng-ai-test-harness Minor
@memberjunction/ng-artifacts Minor
@memberjunction/ng-base-forms Minor
@memberjunction/ng-base-types Minor
@memberjunction/ng-chat Minor
@memberjunction/ng-code-editor Minor
@memberjunction/ng-container-directives Minor
@memberjunction/ng-conversations Minor
@memberjunction/ng-credentials Minor
@memberjunction/ng-dashboard-viewer Minor
@memberjunction/ng-data-context Minor
@memberjunction/ng-deep-diff Minor
@memberjunction/ng-entity-communications Minor
@memberjunction/ng-entity-relationship-diagram Minor
@memberjunction/ng-entity-viewer Minor
@memberjunction/ng-file-storage Minor
@memberjunction/ng-filter-builder Minor
@memberjunction/ng-find-record Minor
@memberjunction/ng-flow-editor Minor
@memberjunction/ng-join-grid Minor
@memberjunction/ng-list-management Minor
@memberjunction/ng-notifications Minor
@memberjunction/ng-query-viewer Minor
@memberjunction/ng-react Minor
@memberjunction/ng-record-changes Minor
@memberjunction/ng-record-selector Minor
@memberjunction/ng-resource-permissions Minor
@memberjunction/ng-scheduling Minor
@memberjunction/ng-shared-generic Minor
@memberjunction/ng-tasks Minor
@memberjunction/ng-timeline Minor
@memberjunction/ng-trees Minor
@memberjunction/ng-user-avatar Minor
@memberjunction/ng-versions Minor
@memberjunction/react-runtime Minor
@memberjunction/react-test-harness Minor
@memberjunction/scheduling-actions Minor
@memberjunction/scheduling-engine-base Minor
@memberjunction/scheduling-engine Minor
@memberjunction/testing-cli Minor
@memberjunction/testing-engine Minor
@memberjunction/testing-engine-base Minor
@memberjunction/credentials Minor
@memberjunction/api-keys-base Minor
@memberjunction/api-keys Minor
@memberjunction/open-app-engine Minor
@memberjunction/integration-actions Minor
@memberjunction/integration-engine-base Minor
@memberjunction/integration-schema-builder Minor
@memberjunction/ai-provider-bundle Minor
@memberjunction/ai-minimax Minor
@memberjunction/ai-openrouter Minor
@memberjunction/ai-zhipu Minor
@memberjunction/ai-xai Minor
@memberjunction/ng-forms Minor
@memberjunction/ng-explorer-modules Minor
@memberjunction/ng-tabstrip Minor
@memberjunction/config Minor
@memberjunction/export-engine Minor
@memberjunction/global Minor
@memberjunction/installer Minor
@memberjunction/sql-converter Minor
@memberjunction/sql-dialect Minor
@memberjunction/sqlglot-ts Minor
@memberjunction/unit-testing Minor
@memberjunction/ai Minor
@memberjunction/ai-anthropic Minor
@memberjunction/ai-azure Minor
@memberjunction/ai-bedrock Minor
@memberjunction/ai-betty-bot Minor
@memberjunction/ai-blackforestlabs Minor
@memberjunction/ai-cerebras Minor
@memberjunction/ai-cohere Minor
@memberjunction/ai-elevenlabs Minor
@memberjunction/ai-fireworks Minor
@memberjunction/ai-gemini Minor
@memberjunction/ai-groq Minor
@memberjunction/ai-heygen Minor
@memberjunction/ai-lmstudio Minor
@memberjunction/ai-local-embeddings Minor
@memberjunction/ai-mistral Minor
@memberjunction/ai-ollama Minor
@memberjunction/ai-vertex Minor
@memberjunction/ng-kendo-modules Minor
@memberjunction/ng-export-service Minor
@memberjunction/ng-generic-dialog Minor
@memberjunction/ng-markdown Minor
@memberjunction/ng-pagination Minor
@memberjunction/scheduling-base-types Minor
@memberjunction/integration-ui-types Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@claude
Copy link
Copy Markdown

claude bot commented Mar 19, 2026

Claude finished @madhavrs1's task —— View job


SQL Migration Review Completed

Review Tasks:

  • Start pending review
  • Check for migration files in the PR
  • Analyze any SQL files for INSERT statements and spCreate procedures
  • Verify hard-coded UUIDs in migration statements
  • Submit review feedback

Summary

I've completed the review focusing on SQL migration files as requested. No migration files were found in this PR - all changes are in source code (TypeScript) and metadata (JSON) files. Therefore, there were no INSERT statements or spCreate procedures to check for hard-coded UUIDs.

The PR includes:

  • HubSpot v4 association fetch implementation
  • Empty-string to null datetime fix
  • BaseREST visibility changes
  • OpenAI streaming parameter fix
  • HubSpot integration metadata configuration

Since there are no migration files to review, the PR passes the requested checks by default.

Copy link
Copy Markdown

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SQL Migration Review

I've reviewed this PR specifically for SQL migration files as requested.

No migration files were found in this PR. The changes include:

  • .changeset/bright-wolves-hunt.md - Changeset configuration
  • metadata/integrations/.hubspot.json - HubSpot integration metadata
  • TypeScript source files for HubSpot connector and OpenAI integration

Since there are no migrations/*.sql files to review for INSERT statements or spCreate procedures with hard-coded UUIDs, there are no migration-related concerns to address.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 19, 2026

✅ Dependency Check Results

All dependencies are properly declared!

No missing dependencies detected in this PR.

@madhavrs1
Copy link
Copy Markdown
Contributor Author

Just a quick overview of the changes made here:

  1. We added the v4 association fetching and also fixes Hubspot's ''->null coersion so that datetime columns won't cause problems
  2. In BaseRESTIntegrationConnector, GetCachedObject/GetCachedFields, made these protected instead of private, just to make it available to the HubSpot connector for use. This comes fro mthe fact we override FetchChanges to route fetching based on the type of table, eg. in this case, the Association category of Entity Map.
  3. openAI.ts, very minor change I noticed, if alright, streaming path uses max_completed_tokens now as newer models ignore depricated 'max_tokens.'

messages: formattedMessages,
temperature: params.temperature,
max_tokens: params.maxOutputTokens,
max_completion_tokens: params.maxOutputTokens,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@madhavrs1 did this change in the OpenAI API? This type of thing deserves a comment if you're modifying a long standinng component in the system

Copy link
Copy Markdown
Contributor Author

@madhavrs1 madhavrs1 Mar 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Amith, youre right, I added a global pr comment instead of starting a review and adding an inline comment.

There I state:
"openAI.ts, very minor change I noticed, if alright, streaming path uses max_completed_tokens now as newer models ignore depricated 'max_tokens.'"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

got it, sorry didn't see that

Copy link
Copy Markdown
Contributor

@AN-BC AN-BC left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

except the OpenAI thing, LGTM

@AN-BC AN-BC merged commit 2912c8e into next Mar 19, 2026
3 checks passed
@AN-BC AN-BC deleted the feat/hubspot-assoc-openai-fix branch March 19, 2026 17:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants