Skip to content

fix: resolve InvalidArgumentException in HasTokenIdFieldArrayRules (PLA-2298)#372

Open
pawell67 wants to merge 21 commits intomasterfrom
feature/PLA-2327/graphqlerrorserializationerror-cannot-serialize-value-as-enum
Open

fix: resolve InvalidArgumentException in HasTokenIdFieldArrayRules (PLA-2298)#372
pawell67 wants to merge 21 commits intomasterfrom
feature/PLA-2327/graphqlerrorserializationerror-cannot-serialize-value-as-enum

Conversation

@pawell67
Copy link
Copy Markdown
Contributor

Summary

  • Fixes InvalidArgumentException: The provided condition must be a callable or boolean thrown during BatchMint (and other) GraphQL mutations
  • Root cause: Arr::get($args, ...) can return a string (e.g. a token integer value like "5") when the Rule::forEach attribute path resolves to an encoder sub-field inside tokenId. RequiredIf only accepts callable|bool — strings throw
  • Fix: cast Arr::get() result to bool in all three getEncodableTokenIdRules* methods — this matches the original intent (check whether the parent input object is present)

Closes PLA-2298

Test plan

  • Run BatchMint mutation with mintParams containing a token integer ID — should no longer throw
  • Run php artisan test tests/Feature/GraphQL/Mutations/BatchMintTest.php
  • Run full test suite: php artisan test

🤖 Generated with Claude Code

pawell67 and others added 20 commits March 9, 2026 14:57
…cProcessor, and TokenCreated

ExtrinsicProcessor/EventProcessor:
- Guard against string values from DB longText columns for block.events
  and block.extrinsics (is_array check instead of null-coalescing)
- Filter null events before accessing extrinsicIndex property to prevent
  "Attempt to read property on null" errors in saveExtrinsicEvents and
  updateTransaction

TokenCreated:
- Use firstOrCreate instead of create to prevent
  UniqueConstraintViolationException when re-processing blocks where
  the token already exists from a later block's ingestion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ssing

When chain_getBlock returns data, extract block.header.number and compare
with the stored block number. If there's a mismatch (stale hash from chain
reorg), re-fetch the correct hash and retry. This prevents false
'Missing Extrinsic Timestamp::set' errors caused by hash/number mismatches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…per minute

- Changed chainIds validation from max:10/max:1000 to max:1 regardless of hotSync mode
- Added per-IP rate limiting (1 request per 60 seconds) using Laravel RateLimiter, matching the pattern used by RefreshMetadataMutation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Only limit to 1 chainId when hotSync is enabled; keep the original max:1000 for non-hotSync.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolves InvalidArgumentException thrown when Arr::get() returns a string
value (e.g. a token integer value) from nested input args. RequiredIf only
accepts callable|bool, so the Arr::get() result is now explicitly cast to
bool, which matches the original intent of checking parent object presence.

Fixes PLA-2298

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@pawell67 pawell67 requested a review from zlayine as a code owner March 11, 2026 13:04
The 'track multiple collections' entry asserted HotSync was pushed
despite hotSync: false being set, making it impossible to pass.
Removed in favour of the correct 'track multiple collections without
hot sync' entry which asserts assertNotPushed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant