Skip to content

feat: adds react-query automatic proxy package#2440

Open
stalniy wants to merge 5 commits intomainfrom
feat/react-query-proxy
Open

feat: adds react-query automatic proxy package#2440
stalniy wants to merge 5 commits intomainfrom
feat/react-query-proxy

Conversation

@stalniy
Copy link
Contributor

@stalniy stalniy commented Dec 31, 2025

Why

to have a way to automatically convert service into react-query observable hooks

Summary by CodeRabbit

  • New Features

    • Added a new react-query-proxy package providing a proxy-based integration to useQuery/useMutation for async SDKs, with nested support and customizable query-key mapping.
  • Documentation

    • Added a README with installation, usage examples, query key/invalidation guidance, and license.
  • Tests

    • Added comprehensive tests covering key generation, query/mutation flows, nested proxies, caching, and edge cases.
  • Chores

    • Added package metadata and project configs (linting, testing, TypeScript) and simplified ESLint in the query-sdk package.

✏️ Tip: You can customize this high-level summary in your review settings.

@stalniy stalniy requested a review from a team as a code owner December 31, 2025 07:02
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 31, 2025

📝 Walkthrough

Walkthrough

Adds a new package @akashnetwork/react-query-proxy containing a proxy-based API exposing React Query hooks for SDK methods, with implementation, tests, README, package metadata, ESLint/Jest/TS configs; also removes an overrides block from packages/react-query-sdk/.eslintrc.js.

Changes

Cohort / File(s) Summary
Documentation
packages/react-query-proxy/README.md
New README: installation, usage (wrapping an SDK with createProxy), examples for useQuery/useMutation, query keys/invalidation, license.
Package manifest & configs
packages/react-query-proxy/package.json, packages/react-query-proxy/tsconfig.json, packages/react-query-proxy/tsconfig.build.json, packages/react-query-proxy/jest.config.ts, packages/react-query-proxy/.eslintrc.js
New package manifest and tooling configs (TypeScript build/dev configs, Jest config, ESLint extend). Declares dependency on @tanstack/react-query and dev tooling.
Core implementation
packages/react-query-proxy/src/createProxy/createProxy.ts
New createProxy implementation: recursive proxies with per-path WeakMap caching; for function properties returns a HooksProxy exposing getKey, useQuery, useMutation; supports CreateProxyOptions including inputToKey and custom useQuery/useMutation.
Tests
packages/react-query-proxy/src/createProxy/createProxy.spec.ts
Comprehensive Jest tests covering key construction, useQuery/useMutation flows, nested proxies, caching/reuse, inputToKey behavior, edge cases (primitives, nulls, missing props), and class/object scenarios.
Lint config change
packages/react-query-sdk/.eslintrc.js
Removed the previous overrides block; file now only extends the shared dev ESLint config.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant Consumer as Consumer Component
    participant Proxy as Hooks Proxy
    participant RQ as React Query
    participant SDK as SDK Method

    Consumer->>Proxy: access api.user.get
    note right of Proxy: returns HooksProxy with getKey/useQuery/useMutation

    alt useQuery flow
      Consumer->>Proxy: call useQuery(input, opts)
      Proxy->>Proxy: compute queryKey (path + inputToKey(input))
      Proxy->>RQ: call useQuery({ queryKey, queryFn })
      RQ->>SDK: invoke queryFn -> SDK.user.get(input)
      SDK-->>RQ: return data
      RQ-->>Consumer: provide data/status
    end

    alt useMutation flow
      Consumer->>Proxy: call useMutation(opts)
      Proxy->>Proxy: compute mutationKey (path)
      Proxy->>RQ: call useMutation({ mutationKey, mutationFn })
      Consumer->>RQ: trigger mutate(input)
      RQ->>SDK: call mutationFn -> SDK.user.update(input)
      SDK-->>RQ: return result
      RQ-->>Consumer: mutation result/status
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers

  • ygrishajev
  • baktun14

Poem

🐰 I hopped through files to spin a proxy bright,
Wrapping SDK calls in hooks both swift and light,
Keys neat as carrots, caches warm and small,
Tests and docs in tow, I bounce down the hall,
A joyful nibble for code — hop, cheer, and all! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: adds react-query automatic proxy package' directly and clearly summarizes the main change—the addition of a new package that provides an automatic proxy for react-query hooks.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings


📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 32bb430 and 51a9d3b.

📒 Files selected for processing (4)
  • packages/react-query-proxy/.eslintrc.js
  • packages/react-query-proxy/jest.config.ts
  • packages/react-query-proxy/tsconfig.build.json
  • packages/react-query-proxy/tsconfig.json
✅ Files skipped from review due to trivial changes (2)
  • packages/react-query-proxy/tsconfig.build.json
  • packages/react-query-proxy/tsconfig.json
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

**/*.{ts,tsx,js}: Never use type any or cast to type any. Always define the proper TypeScript types.
Never use deprecated methods from libraries.
Don't add unnecessary comments to the code.

Files:

  • packages/react-query-proxy/jest.config.ts
🧠 Learnings (4)
📚 Learning: 2025-11-25T17:45:44.790Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/no-jest-mock.mdc:0-0
Timestamp: 2025-11-25T17:45:44.790Z
Learning: Applies to **/*.spec.{ts,tsx} : Don't use `jest.mock()` in test files. Instead, use `jest-mock-extended` to create mocks and pass mocks as dependencies to the service under test

Applied to files:

  • packages/react-query-proxy/jest.config.ts
📚 Learning: 2025-11-25T17:45:52.965Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/setup-instead-of-before-each.mdc:0-0
Timestamp: 2025-11-25T17:45:52.965Z
Learning: Applies to **/*.spec.{ts,tsx} : Use `setup` function instead of `beforeEach` in test files. The `setup` function must be at the bottom of the root `describe` block, should create an object under test and return it, accept a single parameter with inline type definition, avoid shared state, and not have a specified return type.

Applied to files:

  • packages/react-query-proxy/jest.config.ts
📚 Learning: 2026-01-15T12:29:45.510Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-15T12:29:45.510Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Use `setup` function instead of `beforeEach` in unit and service level tests

Applied to files:

  • packages/react-query-proxy/jest.config.ts
📚 Learning: 2025-11-25T17:45:58.258Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/test-descriptions.mdc:0-0
Timestamp: 2025-11-25T17:45:58.258Z
Learning: Applies to **/*.spec.{ts,tsx} : Use either a method name or a condition starting with 'when' for nested suite descriptions in tests

Applied to files:

  • packages/react-query-proxy/jest.config.ts
🧬 Code graph analysis (1)
packages/react-query-proxy/jest.config.ts (1)
packages/logging/src/config/index.ts (1)
  • Config (7-7)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (12)
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: Validate local packages
  • GitHub Check: Analyze (javascript-typescript)
🔇 Additional comments (2)
packages/react-query-proxy/.eslintrc.js (1)

1-3: LGTM!

The ESLint configuration correctly extends the shared dev-config, which aligns with the centralized configuration approach across packages.

packages/react-query-proxy/jest.config.ts (1)

1-8: LGTM!

Clean Jest configuration with proper TypeScript type safety using satisfies Config. The test match pattern correctly targets .spec.ts files, which aligns with the project's testing conventions.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@@ -8511,6 +8511,10 @@
"resolved": "apps/provider-proxy",
Copy link
Contributor

@github-actions github-actions bot Dec 31, 2025

Choose a reason for hiding this comment

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

🔄 Carefully review the package-lock.json diff

Resolve the comment if everything is ok

+ node_modules/@akashnetwork/react-query-proxy                                             link:packages/react-query-proxy
+ packages/react-query-proxy                                                               1.0.0   

@codecov
Copy link

codecov bot commented Dec 31, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 50.88%. Comparing base (3bfa541) to head (51a9d3b).
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2440      +/-   ##
==========================================
- Coverage   50.89%   50.88%   -0.01%     
==========================================
  Files        1063     1063              
  Lines       29417    29417              
  Branches     6512     6495      -17     
==========================================
- Hits        14971    14970       -1     
- Misses      14026    14038      +12     
+ Partials      420      409      -11     
Flag Coverage Δ
api 79.33% <ø> (ø)
deploy-web 31.33% <ø> (-0.01%) ⬇️
log-collector 75.35% <ø> (ø)
notifications 87.94% <ø> (ø)
provider-console 81.48% <ø> (ø)
provider-proxy 84.35% <ø> (ø)
see 4 files with indirect coverage changes
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@stalniy stalniy force-pushed the feat/react-query-proxy branch from 02225eb to dcc5410 Compare December 31, 2025 07:05
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🧹 Nitpick comments (1)
packages/react-query-proxy/package.json (1)

4-4: Add a description for the package.

The description field is empty. Adding a meaningful description will help users understand the package's purpose.

🔎 Proposed fix
-  "description": "",
+  "description": "Wrap any async service into fully-typed TanStack React Query hooks at runtime",
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ab32673 and 02225eb.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • packages/react-query-proxy/README.md
  • packages/react-query-proxy/package.json
  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
  • packages/react-query-proxy/src/createProxy/createProxy.ts
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

**/*.{ts,tsx,js}: Never use type any or cast to type any. Always define the proper TypeScript types.
Never use deprecated methods from libraries.
Don't add unnecessary comments to the code.

Files:

  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
  • packages/react-query-proxy/src/createProxy/createProxy.ts
**/*.spec.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/no-jest-mock.mdc)

Don't use jest.mock() in test files. Instead, use jest-mock-extended to create mocks and pass mocks as dependencies to the service under test

Use setup function instead of beforeEach in test files. The setup function must be at the bottom of the root describe block, should create an object under test and return it, accept a single parameter with inline type definition, avoid shared state, and not have a specified return type.

**/*.spec.{ts,tsx}: Use <Subject>.name in the root describe suite description instead of hardcoded class/service name strings to enable automated refactoring tools to find all references
Use either a method name or a condition starting with 'when' for nested suite descriptions in tests
Use present simple, 3rd person singular for test descriptions without prepending 'should'

Files:

  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
🧠 Learnings (2)
📚 Learning: 2025-11-25T17:45:52.965Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/setup-instead-of-before-each.mdc:0-0
Timestamp: 2025-11-25T17:45:52.965Z
Learning: Applies to **/*.spec.{ts,tsx} : Use `setup` function instead of `beforeEach` in test files. The `setup` function must be at the bottom of the root `describe` block, should create an object under test and return it, accept a single parameter with inline type definition, avoid shared state, and not have a specified return type.

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
📚 Learning: 2025-11-25T17:45:44.790Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/no-jest-mock.mdc:0-0
Timestamp: 2025-11-25T17:45:44.790Z
Learning: Applies to **/*.spec.{ts,tsx} : Don't use `jest.mock()` in test files. Instead, use `jest-mock-extended` to create mocks and pass mocks as dependencies to the service under test

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
🧬 Code graph analysis (1)
packages/react-query-proxy/src/createProxy/createProxy.spec.ts (1)
packages/react-query-proxy/src/createProxy/createProxy.ts (1)
  • createProxy (4-6)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (17)
  • GitHub Check: validate (apps/log-collector) / validate-unsafe
  • GitHub Check: validate (apps/stats-web) / validate-unsafe
  • GitHub Check: validate (apps/api) / validate-unsafe
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: Validate local packages
  • GitHub Check: Analyze (javascript-typescript)

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (2)
packages/react-query-proxy/src/createProxy/createProxy.ts (2)

4-4: Replace any types with proper TypeScript types.

The coding guidelines state: "Never use type any or cast to type any. Always define the proper TypeScript types."

This was already flagged in previous reviews.

Also applies to: 15-15, 32-32, 50-50, 61-61, 77-77, 80-80

As per coding guidelines.


54-56: Critical bug: mutationKey mutates the shared fullPath array.

This was already flagged in previous reviews.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 02225eb and dcc5410.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (4)
  • packages/react-query-proxy/README.md
  • packages/react-query-proxy/package.json
  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
  • packages/react-query-proxy/src/createProxy/createProxy.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/react-query-proxy/package.json
  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
  • packages/react-query-proxy/README.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

**/*.{ts,tsx,js}: Never use type any or cast to type any. Always define the proper TypeScript types.
Never use deprecated methods from libraries.
Don't add unnecessary comments to the code.

Files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
🧠 Learnings (2)
📚 Learning: 2025-11-25T17:45:39.561Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-11-25T17:45:39.561Z
Learning: Applies to **/*.{ts,tsx,js} : Never use type `any` or cast to type `any`. Always define the proper TypeScript types.

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
📚 Learning: 2025-11-25T17:45:39.561Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-11-25T17:45:39.561Z
Learning: Applies to **/*.{ts,tsx,js} : Never use deprecated methods from libraries.

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: provider-proxy-ci
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: test-build
  • GitHub Check: validate / validate-app
  • GitHub Check: test-build

Comment on lines +41 to +51
const sdk = {
alerts: {
async list(input?: { page?: number }) {
return fetchAlerts(input)
},

async create(input: { name: string }) {
return createAlert(input)
},
},
}
Copy link
Contributor

Choose a reason for hiding this comment

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

question: how would this be defined? with the auto generation code from this pr? https://github.com/akash-network/console/pull/2437/changes

Copy link
Contributor Author

Choose a reason for hiding this comment

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

these are 2 conflicting approaches. Here is the key difference:

react-query hooks inference (this PR):

  • it doesn't care how you generate SDK, it can be protobuf based sdk, REST based sdk or even self-written service. It just wraps that service and expose react-query hooks for its methods.
  • we have clear layer separation: SDK on service layer and this proxy acts as a glue to expose any SDK/service to react world (i.e., in View).

qraft PR:

  • works only with OpenAPI defined APIs. Cannot be applied to chain-sdk or self-written services
  • no clear separation between view and service layer, since it was written to support react and react SSR. This potentially may cause react & react-query libs to leak into server side bundle (in console-api/etc). IMO, this is code "smell"

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is part of built console-api, you can see that it contains react-query code and very likely it also contains react. So, our API depends on react without a good reason to do so. Who knows which surprises this can bring in long term

Screenshot 2026-01-06 at 08 34 58

@stalniy stalniy force-pushed the feat/react-query-proxy branch from dcc5410 to 95fd181 Compare January 15, 2026 14:12
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/react-query-proxy/src/createProxy/createProxy.ts`:
- Around line 39-51: getKey currently builds keys from fullPath which omits the
current property (prop), causing methods like users.get and users.getById to
produce identical queryKeys; update the getKey closure to include prop in the
path (i.e., derive getKey from fullPath.concat(prop) or otherwise prepend/insert
prop into the key construction), then ensure useQuery and
valueByPath[key].getKey call that corrected getKey so queryKey includes the
method name for unique cache keys.
♻️ Duplicate comments (2)
packages/react-query-proxy/src/createProxy/createProxy.ts (2)

53-62: Note: mutationKey also missing method name (in addition to mutation bug).

The mutation bug at line 54-56 was already flagged. When fixing it, ensure the method name (prop) is included in the key, consistent with the queryKey fix above:

             useMutation: options => {
-              const mutationKey = fullPath;
+              const mutationKey = [...methodPath];
               if (options?.mutationKey) {
                 mutationKey.push(...(options.mutationKey as PropertyKey[]));
               }

This assumes methodPath is defined as [...fullPath, prop] per the queryKey fix.


76-96: Type definitions use any extensively.

The type definitions at lines 77, 80, 85, 87, 93, 95 use any which violates the coding guidelines. This was flagged in a previous review - please address it along with the other any usages throughout the file.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dcc5410 and 95fd181.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (5)
  • packages/react-query-proxy/README.md
  • packages/react-query-proxy/package.json
  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
  • packages/react-query-proxy/src/createProxy/createProxy.ts
  • packages/react-query-sdk/.eslintrc.js
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/react-query-proxy/src/createProxy/createProxy.spec.ts
  • packages/react-query-proxy/README.md
  • packages/react-query-proxy/package.json
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (.cursor/rules/general.mdc)

**/*.{ts,tsx,js}: Never use type any or cast to type any. Always define the proper TypeScript types.
Never use deprecated methods from libraries.
Don't add unnecessary comments to the code.

Files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
🧠 Learnings (3)
📚 Learning: 2025-11-25T17:45:39.561Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-11-25T17:45:39.561Z
Learning: Applies to **/*.{ts,tsx,js} : Never use type `any` or cast to type `any`. Always define the proper TypeScript types.

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
📚 Learning: 2025-11-25T17:45:39.561Z
Learnt from: CR
Repo: akash-network/console PR: 0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-11-25T17:45:39.561Z
Learning: Applies to **/*.{ts,tsx,js} : Never use deprecated methods from libraries.

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
📚 Learning: 2025-10-31T11:26:42.138Z
Learnt from: stalniy
Repo: akash-network/console PR: 2138
File: apps/api/src/billing/lib/batch-signing-client/batch-signing-client.service.ts:379-382
Timestamp: 2025-10-31T11:26:42.138Z
Learning: In TypeScript/JavaScript, the pattern of checking a cached value and then performing an async operation to fetch it without proper synchronization is race condition unsafe:
```typescript
private async getAddress() {
  if (!this.address) {
    this.address = await this.wallet.getFirstAddress();
  }
  return this.address;
}
```
Multiple concurrent calls can all pass the `if (!this.address)` check before any of them sets the value, leading to duplicate async operations. This should be flagged as a race condition. Proper synchronization (mutex, atomic promise caching, or guaranteed single-threaded execution) is required.

Applied to files:

  • packages/react-query-proxy/src/createProxy/createProxy.ts
🔇 Additional comments (1)
packages/react-query-sdk/.eslintrc.js (1)

1-3: Simplification approved.

The removal of the overrides block with emitDecoratorMetadata and experimentalDecorators is safe—the package does not use TypeScript decorators. This change appropriately simplifies the ESLint configuration to inherit from the shared dev-config, improving consistency and maintainability.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

@stalniy stalniy force-pushed the feat/react-query-proxy branch from dec34fc to 32bb430 Compare January 15, 2026 14:32
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