@profplum700/etsy-v3-api-client 3.0.1 → 4.1.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;
@@ -1369,6 +1374,7 @@ declare class EtsyClient {
1369
1374
  deleteListing(listingId: string): Promise<void>;
1370
1375
  updateListingInventory(listingId: string, params: UpdateListingInventoryParams, options?: {
1371
1376
  legacy?: boolean;
1377
+ enableScaleValidation?: boolean;
1372
1378
  }): Promise<EtsyListingInventory>;
1373
1379
  uploadListingImage(shopId: string, listingId: string, imageData: Blob | Buffer, params?: {
1374
1380
  rank?: number;
@@ -1546,14 +1552,22 @@ declare class MemoryTokenStorage implements TokenStorage {
1546
1552
  declare class TokenManager {
1547
1553
  private keystring;
1548
1554
  private currentTokens;
1555
+ private pendingTokens?;
1549
1556
  private refreshCallback?;
1557
+ private refreshClearRequired;
1550
1558
  private storage?;
1559
+ private clearCallback?;
1560
+ private tokenMutationGeneration;
1551
1561
  private refreshPromise?;
1552
1562
  private rotationConfig?;
1553
1563
  private rotationTimer?;
1554
1564
  constructor(config: EtsyClientConfig, storage?: TokenStorage, rotationConfig?: TokenRotationConfig);
1555
1565
  getAccessToken(): Promise<string>;
1556
1566
  refreshToken(): Promise<EtsyTokens>;
1567
+ private throwIfSuperseded;
1568
+ private repairPersistenceToCurrentTokens;
1569
+ private persistRefreshedTokens;
1570
+ private retryPendingTokenPersistence;
1557
1571
  private performTokenRefresh;
1558
1572
  getCurrentTokens(): EtsyTokens | null;
1559
1573
  updateTokens(tokens: EtsyTokens): void;
@@ -1606,8 +1620,8 @@ declare const ETSY_RATE_LIMITS: {
1606
1620
  readonly MIN_REQUEST_INTERVAL: 200;
1607
1621
  };
1608
1622
  declare class EtsyRateLimiter {
1609
- private requestCount;
1610
- private dailyReset;
1623
+ private requestTimestamps;
1624
+ private uncertainRequestTimestamps;
1611
1625
  private lastRequestTime;
1612
1626
  private readonly config;
1613
1627
  private headerLimitPerSecond?;
@@ -1615,13 +1629,33 @@ declare class EtsyRateLimiter {
1615
1629
  private headerLimitPerDay?;
1616
1630
  private headerRemainingToday?;
1617
1631
  private isHeaderBasedLimiting;
1632
+ private headerQuotaAvailableAt;
1633
+ private retryNotBefore;
1634
+ private quotaProbeBackoffMs;
1635
+ private nextReservationId;
1636
+ private latestHeaderReservationId;
1637
+ private inFlightReservations;
1638
+ private quotaProbeInFlight;
1639
+ private readonly stateWaiters;
1618
1640
  private currentRetryCount;
1641
+ private reservationQueue;
1619
1642
  constructor(config?: Partial<RateLimitConfig>);
1620
- private setNextDailyReset;
1621
- updateFromHeaders(headers: Headers | Record<string, string> | undefined | null): void;
1643
+ private pruneRequestTimestamps;
1644
+ private getLocalResetTime;
1645
+ private getLocalRemainingRequests;
1646
+ private getEffectiveRemainingRequests;
1647
+ private isQuotaProbeReady;
1648
+ private refreshExpiredHeaderQuota;
1649
+ private notifyStateWaiters;
1650
+ private scheduleQuotaProbe;
1651
+ private waitForStateChange;
1652
+ private finishReservation;
1653
+ acquireRequestSlot(): Promise<number>;
1654
+ releaseRequestSlot(reservationId: number): void;
1655
+ updateFromHeaders(headers: Headers | Record<string, string> | undefined | null, reservationId?: number): void;
1622
1656
  private parseRateLimitHeaders;
1623
1657
  private checkApproachingLimit;
1624
- handleRateLimitResponse(headers: Headers | Record<string, string> | undefined | null): Promise<{
1658
+ handleRateLimitResponse(headers: Headers | Record<string, string> | undefined | null, reservationId?: number, retryAttempt?: number): Promise<{
1625
1659
  shouldRetry: boolean;
1626
1660
  delayMs: number;
1627
1661
  }>;
@@ -1631,6 +1665,7 @@ declare class EtsyRateLimiter {
1631
1665
  setWarningThreshold(threshold: number): void;
1632
1666
  private getEffectiveMinInterval;
1633
1667
  waitForRateLimit(): Promise<void>;
1668
+ waitForRateLimitWithReservation(): Promise<number>;
1634
1669
  getRateLimitStatus(): RateLimitStatus;
1635
1670
  getRemainingRequests(): number;
1636
1671
  reset(): void;
@@ -1651,8 +1686,7 @@ declare class GlobalRequestQueue {
1651
1686
  private queue;
1652
1687
  private processing;
1653
1688
  private rateLimits;
1654
- private requestCount;
1655
- private dailyReset;
1689
+ private requestTimestamps;
1656
1690
  private lastRequestTime;
1657
1691
  private readonly maxRequestsPerDay;
1658
1692
  private readonly maxRequestsPerSecond;
@@ -1671,7 +1705,9 @@ declare class GlobalRequestQueue {
1671
1705
  private processQueue;
1672
1706
  private waitForRateLimit;
1673
1707
  private updateRateLimitInfo;
1674
- private setNextDailyReset;
1708
+ private pruneRequestTimestamps;
1709
+ private getNextRequestExpiry;
1710
+ private startRequest;
1675
1711
  private generateId;
1676
1712
  private delay;
1677
1713
  }