@profplum700/etsy-v3-api-client 3.0.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -4,7 +4,9 @@ interface EtsyClientConfig {
4
4
  accessToken: string;
5
5
  refreshToken: string;
6
6
  expiresAt: Date;
7
- refreshSave?: (_accessToken: string, _refreshToken: string, _expiresAt: Date) => void;
7
+ refreshSave?: TokenRefreshCallback;
8
+ refreshSaveAsync?: TokenRefreshCallbackAsync;
9
+ refreshClearAsync?: TokenRefreshClearCallbackAsync;
8
10
  baseUrl?: string;
9
11
  rateLimiting?: {
10
12
  enabled: boolean;
@@ -46,6 +48,8 @@ interface EtsyTokenResponse {
46
48
  scope: string;
47
49
  }
48
50
  type TokenRefreshCallback = (_accessToken: string, _refreshToken: string, _expiresAt: Date) => void;
51
+ type TokenRefreshCallbackAsync = (_accessToken: string, _refreshToken: string, _expiresAt: Date) => void | Promise<void>;
52
+ type TokenRefreshClearCallbackAsync = () => void | Promise<void>;
49
53
  type TokenRotationCallback = (oldTokens: EtsyTokens, newTokens: EtsyTokens) => void | Promise<void>;
50
54
  interface TokenStorage {
51
55
  save(_tokens: EtsyTokens): Promise<void>;
@@ -906,27 +910,25 @@ interface UpdateListingParams {
906
910
  }
907
911
  interface UpdateListingInventoryParams {
908
912
  products: Array<{
909
- sku?: string;
910
- property_values?: Array<{
913
+ sku?: string | null;
914
+ property_values: Array<{
911
915
  property_id: number;
912
916
  property_name?: string;
913
- scale_id?: number;
914
- scale_name?: string;
915
- value_ids?: number[];
916
- values?: string[];
917
+ scale_id?: number | null;
918
+ value_ids: number[];
919
+ values: string[];
917
920
  }>;
918
921
  offerings: Array<{
919
- offering_id?: number;
920
922
  price: number;
921
923
  quantity: number;
922
924
  is_enabled: boolean;
923
- readiness_state_id?: number;
925
+ readiness_state_id: number | null;
924
926
  }>;
925
927
  }>;
926
928
  price_on_property?: number[];
927
929
  quantity_on_property?: number[];
928
930
  sku_on_property?: number[];
929
- readiness_state_on_property?: number[];
931
+ readiness_state_on_property?: number[] | null;
930
932
  }
931
933
  interface EtsyListingProperty {
932
934
  property_id: number;
@@ -1333,10 +1335,13 @@ declare class EtsyClient {
1333
1335
  private logger;
1334
1336
  private cache?;
1335
1337
  private cacheTtl;
1338
+ private rateLimitingEnabled;
1336
1339
  private keystring;
1337
1340
  private sharedSecret;
1338
1341
  private bulkOperationManager;
1339
1342
  constructor(config: EtsyClientConfig);
1343
+ private acquireRateLimitSlot;
1344
+ private fetchOnceWithRateLimit;
1340
1345
  private makeRequest;
1341
1346
  private executeWithRetry;
1342
1347
  private sleep;
@@ -1546,14 +1551,22 @@ declare class MemoryTokenStorage implements TokenStorage {
1546
1551
  declare class TokenManager {
1547
1552
  private keystring;
1548
1553
  private currentTokens;
1554
+ private pendingTokens?;
1549
1555
  private refreshCallback?;
1556
+ private refreshClearRequired;
1550
1557
  private storage?;
1558
+ private clearCallback?;
1559
+ private tokenMutationGeneration;
1551
1560
  private refreshPromise?;
1552
1561
  private rotationConfig?;
1553
1562
  private rotationTimer?;
1554
1563
  constructor(config: EtsyClientConfig, storage?: TokenStorage, rotationConfig?: TokenRotationConfig);
1555
1564
  getAccessToken(): Promise<string>;
1556
1565
  refreshToken(): Promise<EtsyTokens>;
1566
+ private throwIfSuperseded;
1567
+ private repairPersistenceToCurrentTokens;
1568
+ private persistRefreshedTokens;
1569
+ private retryPendingTokenPersistence;
1557
1570
  private performTokenRefresh;
1558
1571
  getCurrentTokens(): EtsyTokens | null;
1559
1572
  updateTokens(tokens: EtsyTokens): void;
@@ -1606,8 +1619,8 @@ declare const ETSY_RATE_LIMITS: {
1606
1619
  readonly MIN_REQUEST_INTERVAL: 200;
1607
1620
  };
1608
1621
  declare class EtsyRateLimiter {
1609
- private requestCount;
1610
- private dailyReset;
1622
+ private requestTimestamps;
1623
+ private uncertainRequestTimestamps;
1611
1624
  private lastRequestTime;
1612
1625
  private readonly config;
1613
1626
  private headerLimitPerSecond?;
@@ -1615,13 +1628,33 @@ declare class EtsyRateLimiter {
1615
1628
  private headerLimitPerDay?;
1616
1629
  private headerRemainingToday?;
1617
1630
  private isHeaderBasedLimiting;
1631
+ private headerQuotaAvailableAt;
1632
+ private retryNotBefore;
1633
+ private quotaProbeBackoffMs;
1634
+ private nextReservationId;
1635
+ private latestHeaderReservationId;
1636
+ private inFlightReservations;
1637
+ private quotaProbeInFlight;
1638
+ private readonly stateWaiters;
1618
1639
  private currentRetryCount;
1640
+ private reservationQueue;
1619
1641
  constructor(config?: Partial<RateLimitConfig>);
1620
- private setNextDailyReset;
1621
- updateFromHeaders(headers: Headers | Record<string, string> | undefined | null): void;
1642
+ private pruneRequestTimestamps;
1643
+ private getLocalResetTime;
1644
+ private getLocalRemainingRequests;
1645
+ private getEffectiveRemainingRequests;
1646
+ private isQuotaProbeReady;
1647
+ private refreshExpiredHeaderQuota;
1648
+ private notifyStateWaiters;
1649
+ private scheduleQuotaProbe;
1650
+ private waitForStateChange;
1651
+ private finishReservation;
1652
+ acquireRequestSlot(): Promise<number>;
1653
+ releaseRequestSlot(reservationId: number): void;
1654
+ updateFromHeaders(headers: Headers | Record<string, string> | undefined | null, reservationId?: number): void;
1622
1655
  private parseRateLimitHeaders;
1623
1656
  private checkApproachingLimit;
1624
- handleRateLimitResponse(headers: Headers | Record<string, string> | undefined | null): Promise<{
1657
+ handleRateLimitResponse(headers: Headers | Record<string, string> | undefined | null, reservationId?: number, retryAttempt?: number): Promise<{
1625
1658
  shouldRetry: boolean;
1626
1659
  delayMs: number;
1627
1660
  }>;
@@ -1631,6 +1664,7 @@ declare class EtsyRateLimiter {
1631
1664
  setWarningThreshold(threshold: number): void;
1632
1665
  private getEffectiveMinInterval;
1633
1666
  waitForRateLimit(): Promise<void>;
1667
+ waitForRateLimitWithReservation(): Promise<number>;
1634
1668
  getRateLimitStatus(): RateLimitStatus;
1635
1669
  getRemainingRequests(): number;
1636
1670
  reset(): void;
@@ -1651,8 +1685,7 @@ declare class GlobalRequestQueue {
1651
1685
  private queue;
1652
1686
  private processing;
1653
1687
  private rateLimits;
1654
- private requestCount;
1655
- private dailyReset;
1688
+ private requestTimestamps;
1656
1689
  private lastRequestTime;
1657
1690
  private readonly maxRequestsPerDay;
1658
1691
  private readonly maxRequestsPerSecond;
@@ -1671,7 +1704,9 @@ declare class GlobalRequestQueue {
1671
1704
  private processQueue;
1672
1705
  private waitForRateLimit;
1673
1706
  private updateRateLimitInfo;
1674
- private setNextDailyReset;
1707
+ private pruneRequestTimestamps;
1708
+ private getNextRequestExpiry;
1709
+ private startRequest;
1675
1710
  private generateId;
1676
1711
  private delay;
1677
1712
  }