Skip to content

Migration Guide: v2.2 to v2.3

This guide helps you migrate from SDK version 2.2.x to version 2.3.0. This release focuses on type safety improvements and API contract alignment for the Promotion module.

Overview

Version 2.3.0 includes:

  • 18 breaking changes in method signatures (optional → required parameters)
  • 3 new typed responses for Calendar API methods
  • 35 JSDoc fixes for code examples
  • Improved TypeScript developer experience

Breaking Changes

This release contains breaking changes that may cause TypeScript compilation errors in existing code. Read this guide carefully before upgrading.

Quick Migration

Step 1: Update Package

bash
npm update daytona-wildberries-typescript-sdk
# or
yarn upgrade daytona-wildberries-typescript-sdk

Step 2: Fix Compilation Errors

After updating, run TypeScript compilation:

bash
npm run type-check

Fix any errors by adding required parameters (see Affected Methods below).

Step 3: Verify Tests

bash
npm test

What Changed

Required Parameters (18 Methods)

In v2.2.x, many Promotion module methods had optional parameters that were actually required by the WB API. This led to:

  • Code that compiled but failed at runtime
  • No TypeScript errors for missing required parameters
  • Runtime 400 errors from Wildberries API

v2.3.0 fixes this by making these parameters required at the TypeScript level.

Before vs After

typescript
// ❌ v2.2.x - Compiled without error, but API returned 400
await sdk.promotion.getAdvBudget();
await sdk.promotion.getAdvStart();
await sdk.promotion.getCalendarPromotions({ allPromo: true });

// ✅ v2.3.0 - TypeScript catches the error at compile time
await sdk.promotion.getAdvBudget({ id: 12345 });
await sdk.promotion.getAdvStart({ id: 12345 });
await sdk.promotion.getCalendarPromotions({
  startDateTime: '2024-01-01T00:00:00Z',
  endDateTime: '2024-12-31T23:59:59Z',
  allPromo: true
});

Affected Methods

Campaign Control Methods

Methodv2.2.xv2.3.0
getAdvStart()options?: { id: number }options: { id: number }
getAdvPause()options?: { id: number }options: { id: number }
getAdvStop()options?: { id: number }options: { id: number }
getAdvDelete()options?: { id: number }options: { id: number }

Migration:

typescript
// Before
await sdk.promotion.getAdvStart();  // Wrong - but compiled

// After
await sdk.promotion.getAdvStart({ id: campaignId });  // Correct

Budget Methods

Methodv2.2.xv2.3.0
getAdvBudget()options?: { id: number }options: { id: number }
createBudgetDeposit()options?: { id: number }options: { id: number }

Migration:

typescript
// Before
const budget = await sdk.promotion.getAdvBudget();

// After
const budget = await sdk.promotion.getAdvBudget({ id: campaignId });

Keyword/Phrase Methods

Methodv2.2.xv2.3.0
getSearchSetPlus()options?: { id; fixed? }options: { id; fixed? }
createSearchSetPlu()options?: { id }options: { id }
createSearchSetExcluded()options?: { id }options: { id }
createAutoSetExcluded()options?: { id }options: { id }

Migration:

typescript
// Before
await sdk.promotion.createSearchSetExcluded(
  { excluded: ['cheap', 'discount'] }
);

// After
await sdk.promotion.createSearchSetExcluded(
  { excluded: ['cheap', 'discount'] },
  { id: campaignId }  // Required
);

Product Management Methods

Methodv2.2.xv2.3.0
getAutoGetnmtoadd()options?: { id }options: { id }
createAutoUpdatenm()options?: { id }options: { id }

Other Methods

Methodv2.2.xv2.3.0
getAdvUpd()options?: { from; to }options: { from; to }
createAdvRename()data?: { advertId; name }data: { advertId; name }

Migration:

typescript
// Before
await sdk.promotion.getAdvUpd();  // Missing required dates

// After
await sdk.promotion.getAdvUpd({
  from: '2024-01-01',
  to: '2024-12-31'
});

Calendar API Methods

Methodv2.2.xv2.3.0
getCalendarPromotions()options?: { ... }options: { startDateTime; endDateTime; allPromo; limit?; offset? }
getPromotionsDetails()options?: { promotionIDs }options: { promotionIDs }
getPromotionsNomenclatures()options?: { ... }options: { promotionID; inAction; limit?; offset? }

Migration:

typescript
// Before
const promos = await sdk.promotion.getCalendarPromotions({ allPromo: true });

// After
const promos = await sdk.promotion.getCalendarPromotions({
  startDateTime: '2024-01-01T00:00:00Z',  // Required
  endDateTime: '2024-12-31T23:59:59Z',     // Required
  allPromo: true                            // Required
});

New Features in v2.3.0

Typed Calendar API Responses

Calendar API methods now return properly typed responses instead of Promise<unknown>:

typescript
// v2.2.x - No autocomplete, unknown type
const promos = await sdk.promotion.getCalendarPromotions({...});
// promos: unknown

// v2.3.0 - Full TypeScript support
const promos = await sdk.promotion.getCalendarPromotions({
  startDateTime: '2024-01-01T00:00:00Z',
  endDateTime: '2024-12-31T23:59:59Z',
  allPromo: true
});

// Now with full autocomplete!
promos.data?.promotions?.forEach(promo => {
  console.log(promo.name);          // ✅ TypeScript knows about .name
  console.log(promo.type);          // ✅ TypeScript knows about .type
  console.log(promo.startDateTime); // ✅ TypeScript knows about .startDateTime
});

Response Type Definitions

typescript
// getCalendarPromotions() response
interface CalendarPromotionsResponse {
  data?: {
    promotions?: Array<{
      id?: number;
      name?: string;
      type?: string;           // 'regular' | 'auto' | 'express'
      startDateTime?: string;  // ISO 8601
      endDateTime?: string;    // ISO 8601
    }>;
  };
}

// getPromotionsDetails() response
interface PromotionsDetailsResponse {
  data?: {
    promotions?: Array<{
      id?: number;
      name?: string;
      description?: string;
      startDateTime?: string;
      endDateTime?: string;
      inPromoActionLeftovers?: number;     // Products in promo with stock
      inPromoActionTotal?: number;          // Total products in promo
      notInPromoActionLeftovers?: number;   // Products not in promo with stock
      notInPromoActionTotal?: number;       // Total products not in promo
    }>;
  };
}

// getPromotionsNomenclatures() response
interface PromotionsNomenclaturesResponse {
  data?: {
    nomenclatures?: Array<{
      nmID?: number;
      vendorCode?: string;
      inAction?: boolean;
    }>;
  };
}

Fixed JSDoc Examples

All 35 Promotion module methods now have correct JSDoc examples using sdk.promotion.* instead of the incorrect sdk.general.*:

typescript
// v2.2.x (incorrect)
/**
 * @example
 * const result = await sdk.general.getPromotionCount();  // Wrong namespace
 */

// v2.3.0 (correct)
/**
 * @example
 * const result = await sdk.promotion.getPromotionCount();  // Correct namespace
 */

Complete Migration Checklist

Use this checklist to ensure your migration is complete:

Required Parameter Updates

  • [ ] getAdvStart() - Add { id } parameter
  • [ ] getAdvPause() - Add { id } parameter
  • [ ] getAdvStop() - Add { id } parameter
  • [ ] getAdvDelete() - Add { id } parameter
  • [ ] getAdvBudget() - Add { id } parameter
  • [ ] createBudgetDeposit() - Add { id } parameter
  • [ ] getSearchSetPlus() - Add { id } parameter
  • [ ] createSearchSetPlu() - Add { id } parameter
  • [ ] createSearchSetExcluded() - Add { id } parameter
  • [ ] createAutoSetExcluded() - Add { id } parameter
  • [ ] getAutoGetnmtoadd() - Add { id } parameter
  • [ ] createAutoUpdatenm() - Add { id } parameter
  • [ ] getAdvUpd() - Add { from, to } parameters
  • [ ] createAdvRename() - Ensure { advertId, name } is provided
  • [ ] getCalendarPromotions() - Add { startDateTime, endDateTime, allPromo } parameters
  • [ ] getPromotionsDetails() - Add { promotionIDs } parameter
  • [ ] getPromotionsNomenclatures() - Add { promotionID, inAction } parameters

Verification Steps

  • [ ] Run npm run type-check - No TypeScript errors
  • [ ] Run npm test - All tests pass
  • [ ] Test Promotion module methods in development environment
  • [ ] Verify Calendar API responses are properly typed

FAQ

Why were these changes made?

The WB API requires these parameters - they were never optional. The v2.2.x SDK incorrectly marked them as optional, which meant:

  • TypeScript didn't catch missing parameters
  • Code compiled but failed at runtime with 400 errors
  • Developer experience was poor (no IDE warnings)

Will this break my production code?

If your code was working before, it was already passing the required parameters. This change will only break code that:

  • Called methods without required parameters (which would fail at runtime anyway)
  • Used TypeScript strict mode and relied on optional parameters

Can I stay on v2.2.x?

Yes, but you'll miss out on:

  • Calendar API typed responses
  • Better TypeScript error messages
  • Correct JSDoc examples

What if I find a bug?

Please report issues at: https://github.com/salacoste/daytona-wildberries-typescript-sdk/issues

Version History

VersionDateChanges
2.3.0Dec 2024Breaking: 18 required parameters, Calendar API types, JSDoc fixes
2.2.2Dec 2024Fixed getStatsKeywords() required parameters
2.2.1Dec 2024Fixed getStatsKeywords() URL
2.2.0Dec 2024Added Promotion module comprehensive testing

See Also

Made with ❤️ for the Wildberries developer community