콘텐츠로 이동

ReadBudget — @gj-kit/expo-workouts

@gj-kit/expo-workouts/core에서 공개하는 class입니다. package version 0.1.1의 release declaration을 그대로 표시합니다.

import { ReadBudget } from '@gj-kit/expo-workouts/core';
/**
* The client-side read pacer.
*
* Budgets: 900 / 15 min and 4 500 / 24 h — 10 % under the measured device constants (1000 / 5000),
* because those are server-pushed and a Mainline update can move them.
*
* It NEVER blocks: it refuses an over-budget call BEFORE the platform call with `rateLimited` and a
* computed `retryAfterMs`. Sleeping inside a 60-second poll would stall the consumer's whole
* single-flight pipeline.
*
* ⚠ Process-local and blind to another health library in the same app: Health Connect's own limiter
* is per-uid, so during a migration off another library our accounting is optimistic.
*/
declare class ReadBudget {
private readonly now;
private readonly spends;
constructor(options?: ReadBudgetOptions);
private prune;
private countSince;
/**
* `null` when `count` more reads fit right now; otherwise the milliseconds to wait before the
* oldest blocking spend leaves its window. NEVER blocks and NEVER throws.
*/
retryAfterMs(count?: number): number | null;
/**
* Charge `count` reads, or refuse with `rateLimited` + `retryAfterMs` BEFORE the platform call.
* Nothing is charged when it refuses.
*/
spend(count?: number): void;
/** 진단용 — 두 창의 현재 사용량. */
usage(): {
readonly shortWindow: number;
readonly longWindow: number;
};
}

이 선언은 매개변수, optionality, 제네릭, 반환값, 공개 union/type 계약의 정본입니다. 호출 전 필요한 환경·권한·오류 경계는 패키지 Golden path와 이 subpath의 import 조건을 함께 확인하세요.

  • 패키지: @gj-kit/expo-workouts
  • 버전: 0.1.1
  • 공개 entry: ./core
  • 소스: GitHub

The client-side read pacer.

Budgets: 900 / 15 min and 4 500 / 24 h — 10 % under the measured device constants (1000 / 5000), because those are server-pushed and a Mainline update can move them.

It NEVER blocks: it refuses an over-budget call BEFORE the platform call with rateLimited and a computed retryAfterMs. Sleeping inside a 60-second poll would stall the consumer’s whole single-flight pipeline.

⚠ Process-local and blind to another health library in the same app: Health Connect’s own limiter is per-uid, so during a migration off another library our accounting is optimistic.