Skip to content

Conversation

@shauns
Copy link
Contributor

@shauns shauns commented Dec 5, 2025

WHY are these changes introduced?

Add optional support for automatic recovery of rate limit consumed in Admin API calls. If a call consumes 10 units (from extensions.cost.actualQueryCost), and the recovery rate per second is 1000 units (from extensions.cost.restoreRate), then we should wait 0.01s after making our API call to ensure the same amount of tokens we've consumed have had the chance to recover.

This means we can have code that hits the Admin API in succession -- such as Metafield import, where there are many queries to make -- without being a bad citizen or hitting a rate limit.

From a callers perspective its as if the API call took very very slightly longer.

WHAT is this pull request doing?

After making a GraphQL call, if the relevant option is enabled, inspect the extensions.cost part of the raw GraphQL response, check for unit usage/recovery rate, and sleep the requisite amount of time. The time is dependent on query complexity, but it's often no more than double digit milliseconds.

Sleep information is included in the debug output. Time spent sleeping is counted under network usage time for analytics purposes.

How to test your changes?

There's good test coverage, and an upstack PR makes direct use of this in a CLI command

Measuring impact

How do we know this change was effective? Please choose one:

  • n/a - this doesn't need measurement, e.g. a linting rule or a bug-fix
  • Existing analytics will cater for this addition
  • PR includes analytics changes to measure impact

Checklist

  • I've considered possible cross-platform impacts (Mac, Linux, Windows)
  • I've considered possible documentation changes

Copy link
Contributor Author

shauns commented Dec 5, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Contributor

github-actions bot commented Dec 5, 2025

Coverage report

St.
Category Percentage Covered / Total
🟡 Statements
79.18% (-0.05% 🔻)
13866/17512
🟡 Branches
73.16% (+0.05% 🔼)
6772/9257
🟡 Functions
79.35% (-0.02% 🔻)
3558/4484
🟡 Lines
79.55% (-0.04% 🔻)
13102/16471
Show new covered files 🐣
St.
File Statements Branches Functions Lines
🟢
... / admin-as-app.ts
100% 100% 100% 100%
🟢
... / bulk-operation-run-mutation.ts
100% 100% 100% 100%
🟢
... / bulk-operation-run-query.ts
100% 100% 100% 100%
🟢
... / get-bulk-operation-by-id.ts
100% 100% 100% 100%
🟢
... / list-bulk-operations.ts
100% 100% 100% 100%
🟢
... / staged-uploads-create.ts
100% 100% 100% 100%
🔴
... / execute.ts
0% 0% 0% 0%
🔴
... / status.ts
0% 0% 0% 0%
🔴
... / pull.ts
0% 100% 0% 0%
🔴
... / pull.ts
0% 0% 0% 0%
🟢
... / bulk-operation-status.ts
96% 90.63% 100% 100%
🟢
... / download-bulk-operation-results.ts
100% 100% 100% 100%
🟢
... / execute-bulk-operation.ts
91.94% 84.21% 100% 93.22%
🟢
... / format-bulk-operation-status.ts
100% 100% 100% 100%
🟢
... / run-mutation.ts
100% 100% 100% 100%
🟢
... / run-query.ts
100% 100% 100% 100%
🟡
... / stage-file.ts
72.73% 62.5% 83.33% 71.88%
🟢
... / watch-bulk-operation.ts
100% 100% 100% 100%
🔴
... / promiseWithResolvers.ts
33.33% 50% 50% 33.33%
Show files with reduced coverage 🔻
St.
File Statements Branches Functions Lines
🟢
... / extension-instance.ts
84.8% (+0.23% 🔼)
77.6% (-0.91% 🔻)
92.06% (+0.13% 🔼)
85.11% (+0.24% 🔼)
🟡
... / specification.ts
69.09%
75.61% (+2.44% 🔼)
76.47% (-1.31% 🔻)
68.75%
🟢
... / ui_extension.ts
85.38% (-9.44% 🔻)
72.34% (-8.91% 🔻)
84% (-16% 🔻)
88% (-8.46% 🔻)
🟢
... / developer-platform-client.ts
84.62% (-1.5% 🔻)
73.68% (+3.1% 🔼)
81.82% (+1.82% 🔼)
90.63% (-2.71% 🔻)
🟢
... / api.ts
87.07% (-0.43% 🔻)
76.71% (-0.1% 🔻)
100%
86.49% (-0.43% 🔻)
🟢
... / SingleTask.tsx
84.21% (-15.79% 🔻)
50% (-50% 🔻)
80% (-20% 🔻)
84.21% (-15.79% 🔻)
🔴
... / ui.tsx
50.82% (-0.79% 🔻)
42.86% (-5.53% 🔻)
54.55% (+1.42% 🔼)
50% (-0.82% 🔻)
🟢
... / console.ts
81.82% (+15.15% 🔼)
75% (-25% 🔻)
100% (+33.33% 🔼)
81.82% (+15.15% 🔼)
🔴
... / dev.ts
14.29% (+0.95% 🔼)
3.13% (+0.18% 🔼)
50% (-7.14% 🔻)
14.29% (+0.95% 🔼)
🟢
... / init.ts
88% (-0.89% 🔻)
71.43% (+4.76% 🔼)
86.67% (+4.85% 🔼)
88% (-0.89% 🔻)
🟡
... / theme-polling.ts
67.12% (-0.93% 🔻)
68.75% 78.57%
66.67% (-0.98% 🔻)

Test suite run success

3452 tests passing in 1397 suites.

Report generated by 🧪jest coverage report action from 68d8802

@shauns shauns marked this pull request as ready for review December 5, 2025 09:42
@shauns shauns requested a review from a team as a code owner December 5, 2025 09:42
@github-actions
Copy link
Contributor

github-actions bot commented Dec 5, 2025

We detected some changes at packages/*/src and there are no updates in the .changeset.
If the changes are user-facing, run pnpm changeset add to track your changes and include them in the next release CHANGELOG.

Caution

DO NOT create changesets for features which you do not wish to be included in the public changelog of the next CLI release.

@shauns shauns force-pushed the shauns/12-05-automatic_rate_limit_restoration_w__admin_api_calls branch from 80c8dcb to 68d8802 Compare December 5, 2025 10:28
@github-actions
Copy link
Contributor

github-actions bot commented Dec 5, 2025

Differences in type declarations

We detected differences in the type declarations generated by Typescript for this branch compared to the baseline ('main' branch). Please, review them to ensure they are backward-compatible. Here are some important things to keep in mind:

  • Some seemingly private modules might be re-exported through public modules.
  • If the branch is behind main you might see odd diffs, rebase main into this branch.

New type declarations

We found no new type declarations in this PR

Existing type declarations

packages/cli-kit/dist/public/node/http.d.ts
@@ -18,7 +18,7 @@ type AutomaticCancellationBehaviour = {
 } | {
     useAbortSignal: AbortSignal | (() => AbortSignal);
 };
-type RequestBehaviour = NetworkRetryBehaviour & AutomaticCancellationBehaviour;
+export type RequestBehaviour = NetworkRetryBehaviour & AutomaticCancellationBehaviour;
 export type RequestModeInput = PresetFetchBehaviour | RequestBehaviour;
 /**
  * Specify the behaviour of a network request.
packages/cli-kit/dist/public/node/api/graphql.d.ts
@@ -47,6 +47,7 @@ export type GraphQLRequestDocOptions<TResult, TVariables> = GraphQLRequestBaseOp
     }>>;
     variables?: TVariables;
     unauthorizedHandler?: UnauthorizedHandler;
+    autoRateLimitRestore?: boolean;
 };
 export interface GraphQLResponseOptions<T> {
     handleErrors?: boolean;

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.

1 participant