@bzbs/react-api-client 1.4.15 → 2.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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A TypeScript library providing a type-safe API client for Buzzebees loyalty and reward services. Supports authentication, campaigns, user profiles, shopping carts, notifications, stamps, consent management, and more.
4
4
 
5
- **Version:** 1.4.14 | **License:** ISC | **Author:** Buzzebees Co., Ltd.
5
+ **Version:** 1.4.15 | **License:** ISC | **Author:** Buzzebees Co., Ltd.
6
6
  **Repository:** [Azure DevOps](https://dev.azure.com/buzzebees/Buzzebees/_git/React_API_Client)
7
7
 
8
8
  ---
@@ -11,6 +11,7 @@ A TypeScript library providing a type-safe API client for Buzzebees loyalty and
11
11
 
12
12
  - [Installation](#installation)
13
13
  - [Quick Start](#quick-start)
14
+ - [API Version](#api-version)
14
15
  - [Configuration](#configuration)
15
16
  - [Architecture](#architecture)
16
17
  - [BzbsService Properties](#bzbsservice-properties)
@@ -98,6 +99,18 @@ if (result.type === 'success') {
98
99
 
99
100
  ---
100
101
 
102
+ ## API Version
103
+
104
+ This library targets **Buzzebees API v2**. Key differences from v1:
105
+
106
+ - All POST request bodies use **JSON** (`application/json`) — no more `application/x-www-form-urlencoded`
107
+ - Profile image upload uses `multipart/form-data` via the dedicated `updateProfileImage()` method
108
+ - Flat endpoint paths replace REST-style path parameters (e.g. `campaign/detail?campaignId=123` replaces `campaign/123`)
109
+ - `profile/me/` prefix removed — the auth token identifies the user (e.g. `profile/info` replaces `profile/me`)
110
+ - Address lookups moved from `main/` to `address/` prefix
111
+
112
+ ---
113
+
101
114
  ## Configuration
102
115
 
103
116
  ### Constructor
@@ -158,21 +171,21 @@ BzbsService (entry point)
158
171
  ├── BadgeApi → profile/me/badges
159
172
  ├── CampaignApi → campaign/
160
173
  ├── CartApi → cart/
161
- ├── CategoryApi → campaigncat/
174
+ ├── CategoryApi → category/
162
175
  ├── ConsentApi → consent/
163
176
  ├── CouponApi → coupon/
164
- ├── DashboardApi → dashboard/
177
+ ├── DashboardApi → dashboard/config
165
178
  ├── HistoryApi → redeem/
166
179
  ├── LineApi → LINE OAuth (optional)
167
- ├── NotificationApi → noti/
180
+ ├── NotificationApi → notification/
168
181
  ├── PlaceApi → place/
169
182
  ├── PointLogApi → log/points
170
- ├── ProfileApi → profile/me
183
+ ├── ProfileApi → profile/
171
184
  ├── RegistrationApi → auth/register
172
- ├── AddressApi → profile/me/address, main/
185
+ ├── AddressApi → profile/address, address/
173
186
  ├── StampApi → stamp/
174
187
  ├── RequestHelpApi → buzz/, profile/me/help
175
- ├── SettingApi → setting/
188
+ ├── SettingApi → setting/add
176
189
  └── Blob → blob storage
177
190
 
178
191
 
@@ -344,8 +357,8 @@ const response = await bzbsService.profileApi.profile(undefined, {
344
357
  | `authApi` | `connectGoogle` | POST | `auth/google_login` | idToken, appId, uuid, os, platform, deviceToken, macAddress | `LoginResponse` | `#auth` |
345
358
  | `authApi` | `connectApple` | POST | `auth/apple_login` | idToken, refreshToken, appId, uuid, os, platform, deviceToken, macAddress | `LoginResponse` | `#auth` |
346
359
  | `authApi` | `logout` | POST | `auth/logout` | uuid | `unknown` | `#auth` |
347
- | `authApi` | `forgetPassword` | GET | `profile/{contact}/forget_password` | contact, type (`email`\|`contact_number`) | `ForgetPasswordResponse` | `#auth #profile` |
348
- | `authApi` | `resetPassword` | POST | `profile/{contact}/forget_password` | contact, refCode, newPassword; opt: otp | `StatusResponse` | `#auth #profile` |
360
+ | `authApi` | `forgetPassword` | GET | `profile/forget_password` | contact (as `id` param), type (`email`\|`contact_number`\|`email_otp`) | `ForgetPasswordResponse` | `#auth #profile` |
361
+ | `authApi` | `resetPassword` | POST | `profile/forget_password` | contact (as `id`), refCode, newPassword; opt: otp | `StatusResponse` | `#auth #profile` |
349
362
  | `authApi` | `otp` | GET | `auth/otp` | uuid, appId, contactNumber; opt: channel | `OtpResponse` | `#auth` |
350
363
  | `authApi` | `otpV2` | POST | `auth/otp` | appId, contactNumber; opt: channel | `OtpResponse` | `#auth` |
351
364
  | `authApi` | `otpEmail` | GET | `auth/otp_email` | uuid, appId, email; opt: channel | `OtpResponse` | `#auth` |
@@ -356,55 +369,56 @@ const response = await bzbsService.profileApi.profile(undefined, {
356
369
  | `authApi` | `version` | GET | `auth/version` | clientVersion | `Version` | `#auth` |
357
370
  | `authApi` | `versionRaw` | GET | `auth/version` | clientVersion | `any` | `#auth` |
358
371
  | `badgeApi` | `badges` | GET | `profile/me/badges` | opt: badgeId | `Badge[]` | `#profile` |
359
- | `campaignApi` | `campaigns` | GET | `campaign` | config; opt: cat, byConfig, skip, top, locale, keyword, startDate, sponsorId, maxPoints, minPoints, sortBy, center, hashTags, locationAgencyId | `Campaign[]` | `#campaign` |
360
- | `campaignApi` | `favoriteCampaigns` | GET | `profile/me/favourite_campaign` | opt: skip, top, locale | `Campaign[]` | `#campaign #profile` |
361
- | `campaignApi` | `campaignDetails` | GET | `campaign/{id}` | id; opt: deviceLocale | `CampaignDetail` | `#campaign` |
362
- | `campaignApi` | `addToFavorite` | POST | `campaign/{id}/favourite` | id | `FavoriteResponse` | `#campaign` |
363
- | `campaignApi` | `removeFromFavorite` | DELETE | `campaign/{id}/favourite` | id | `FavoriteResponse` | `#campaign` |
364
- | `campaignApi` | `redeem` | POST | `campaign/{id}/redeem` | id; opt: addressKey, contactNumber, pointUnit, spPoints | `RedeemResponse` | `#campaign #points` |
372
+ | `campaignApi` | `campaigns` | GET | `campaign/list` | config; opt: cat, byConfig, skip, top, locale, keyword, startDate, sponsorId, maxPoints, minPoints, sortBy, center, hashTags, locationAgencyId | `Campaign[]` | `#campaign` |
373
+ | `campaignApi` | `favoriteCampaigns` | GET | `profile/favourite_campaign` | opt: skip, top, locale | `Campaign[]` | `#campaign #profile` |
374
+ | `campaignApi` | `campaignDetails` | GET | `campaign/detail` | id (as `campaignId`); opt: deviceLocale | `CampaignDetail` | `#campaign` |
375
+ | `campaignApi` | `addToFavorite` | POST | `campaign/favourite` | id (as body `id`, `favourite: true`) | `FavoriteResponse` | `#campaign` |
376
+ | `campaignApi` | `removeFromFavorite` | DELETE | `campaign/favourite` | id (as query param) | `FavoriteResponse` | `#campaign` |
377
+ | `campaignApi` | `redeem` | POST | `campaign/redeem` | id (as `campaignid`); opt: addressKey, contactNumber, pointUnit, spPoints | `RedeemResponse` | `#campaign #points` |
365
378
  | `campaignApi` | `bulkRedeem` | POST | `campaign/{id}/bulkredeem` | id, quantity; opt: addressKey, contactNumber, pointUnit, spPoints | `RedeemResponse` | `#campaign #points` |
366
379
  | `cartApi` | `addCart` | POST | `cart/{id}/add` | id; opt: mode, qty, sideCampaignJson | `CartCountResponse` | `#cart #campaign` |
367
380
  | `cartApi` | `cartCount` | GET | `cart/count` | opt: options | `CartCountResponse` | `#cart` |
368
- | `cartApi` | `cartAccess` | POST | `setting` | errorUrl, successUrl, returnUrl, appId, appName | `CartAccessResponse` | `#cart #setting` |
369
- | `categoryApi` | `categories` | GET | `campaigncat/menu` | config; opt: byConfig | `Category[]` | `#category #campaign` |
370
- | `consentApi` | `consent` | GET | `consent` | opt: options | `Consent` | `#consent` |
371
- | `consentApi` | `updateConsent` | POST | `consent` | opt: termsAndConditions, dataPrivacy, marketingOption, consentAge, email, sms, notification, line, analyticsBuzzebeesCookies, analyticsFirebaseCookies, analyticsGoogleCookies, analyticsMetaCookies, analyticsOtherCookies, functionalCookies, marketingCookies, necessaryCookies | `Consent` | `#consent` |
381
+ | `cartApi` | `cartAccess` | POST | `setting/add` | errorUrl, successUrl, returnUrl, appId, appName | `CartAccessResponse` | `#cart #setting` |
382
+ | `categoryApi` | `categories` | GET | `category/menu` | config; opt: byConfig | `Category[]` | `#category #campaign` |
383
+ | `consentApi` | `consent` | GET | `consent/status` | opt: options | `Consent` | `#consent` |
384
+ | `consentApi` | `updateConsent` | POST | `consent/consent` | opt: termsAndConditions, dataPrivacy, marketingOption, consentAge, email, sms, notification, line, analyticsBuzzebeesCookies, analyticsFirebaseCookies, analyticsGoogleCookies, analyticsMetaCookies, analyticsOtherCookies, functionalCookies, marketingCookies, necessaryCookies | `Consent` | `#consent` |
372
385
  | `consentApi` | `unconsent` | POST | `consent/unconsent` | opt: options | `unknown` | `#consent` |
373
- | `couponApi` | `processCodes` | POST | `coupon/process` | codes (string) | `CouponResponse` | `#coupon #campaign` |
374
- | `dashboardApi` | `mainDashboard` | GET | `dashboard/main` | appName, locale | `Dashboard[]` | `#dashboard` |
375
- | `dashboardApi` | `subDashboard` | GET | `dashboard/{dashboardName}` | dashboardName, locale | `Dashboard[]` | `#dashboard` |
376
- | `historyApi` | `redeemHistories` | GET | `redeem` | byConfig, config, skip, top; opt: locale, startDate, endDate | `Purchase[]` | `#history #campaign` |
377
- | `historyApi` | `use` | POST | `redeem/{redeemKey}/use` | redeemKey | `UseCampaignResponse` | `#history #campaign` |
386
+ | `couponApi` | `processCodes` | POST | `coupon/process` | codes (string or string[], sent as JSON array) | `CouponResponse` | `#coupon #campaign` |
387
+ | `dashboardApi` | `mainDashboard` | GET | `dashboard/config` | appName (as `config`), locale | `Dashboard[]` | `#dashboard` |
388
+ | `dashboardApi` | `subDashboard` | GET | `dashboard/config` | dashboardName (as `config`), locale | `Dashboard[]` | `#dashboard` |
389
+ | `historyApi` | `redeemHistories` | GET | `redeem/list` | byConfig, config, skip, top; opt: locale, startDate, endDate | `Purchase[]` | `#history #campaign` |
390
+ | `historyApi` | `use` | POST | `redeem/use` | redeemKey (as `redeemkey` in body) | `UseCampaignResponse` | `#history #campaign` |
378
391
  | `lineApi` | `lineAuth` | POST | `oauth2/v2.1/token` _(baseLineUrl)_ | grantType, code, clientId, clientSecret, redirectUrl | `LineAuthResponse` | `#line #auth` |
379
- | `notificationApi` | `notifications` | GET | `noti` | mode (`new`\|`all`), sortBy (`createdate_desc`\|`createdate_asc`); opt: top, skip | `Notification[]` | `#notification` |
380
- | `notificationApi` | `read` | POST | `noti/read` | ids (comma-separated) | `unknown` | `#notification` |
392
+ | `notificationApi` | `notifications` | GET | `notification/list` | mode (`new`\|`all`), sortBy (`createdate_desc`\|`createdate_asc`); opt: top, skip | `Notification[]` | `#notification` |
393
+ | `notificationApi` | `read` | POST | `notification/read` | ids (comma-separated, sent as JSON body) | `unknown` | `#notification` |
381
394
  | `placeApi` | `placeList` | GET | `place` | agencyId, center, distance, top; opt: provinceCode, category, mode, requiredCampaign, keyword, isFavourite | `Place[]` | `#place` |
382
395
  | `placeApi` | `place` | GET | `place/{id}` | id, agencyId; opt: requiredCampaign, isFavourite | `Place` | `#place` |
383
396
  | `placeApi` | `addToFavourite` | POST | `place/{id}/favourite` | id | `unknown` | `#place` |
384
397
  | `placeApi` | `removeFromFavourite` | POST | `place/{id}/unfavourite` | id | `unknown` | `#place` |
385
398
  | `pointLogApi` | `getPointLog` | GET | `log/points` | month; opt: type, lastRowKey, top | `PointLog[]` | `#points #profile` |
386
- | `profileApi` | `profile` | GET | `profile/me` | opt: options | `ProfileResponse` | `#profile` |
387
- | `profileApi` | `updateProfile` | POST | `profile/me` | opt: profileImage (File), firstName, lastName, contactNumber, email, notification, locale, title, gender, birthDate, address, subdistrictCode, districtCode, provinceCode, countryCode, zipCode, idCard, passport, maritalStatus, displayName, latitude, longitude, income, interests, region, occupation, remark, ... | `ProfileResponse` | `#profile` |
388
- | `profileApi` | `changePassword` | POST | `profile/me/change_password` | current, change | `StatusResponse` | `#profile #auth` |
389
- | `profileApi` | `updateShipping` | POST | `profile/me/shipping` | opt: shippingFirstName, shippingLastName, shippingProvinceCode, shippingDistrictCode, shippingSubDistrictCode, shippingZipCode, shippingAddress, shippingContactNumber, ... | `unknown` | `#profile #address` |
399
+ | `profileApi` | `profile` | GET | `profile/info` | opt: options | `ProfileResponse` | `#profile` |
400
+ | `profileApi` | `updateProfile` | POST | `profile/info` | opt: firstName, lastName, contactNumber, email, notification, locale, title, gender, birthDate, address, subdistrictCode, districtCode, provinceCode, countryCode, zipCode, idCard, passport, maritalStatus, displayName, latitude, longitude, income, interests, region, occupation, remark, ... (JSON body) | `ProfileResponse` | `#profile` |
401
+ | `profileApi` | `updateProfileImage` | POST | `profile/picture` | image (File or `{uri, name, type}`, sent as `multipart/form-data` with key `data`) | `ProfileResponse` | `#profile` |
402
+ | `profileApi` | `changePassword` | POST | `profile/change_password` | current, change | `StatusResponse` | `#profile #auth` |
403
+ | `profileApi` | `updateShipping` | POST | `profile/shipping` | opt: shippingFirstName, shippingLastName, shippingProvinceCode, shippingDistrictCode, shippingSubDistrictCode, shippingZipCode, shippingAddress, shippingContactNumber, ... | `unknown` | `#profile #address` |
390
404
  | `profileApi` | `changeContactNumber` | POST | `auth/change_authen` | contactNumber, otp, refCode; opt: idCard | `ConfirmOtpResponse` | `#profile #auth` |
391
- | `profileApi` | `changeContactNumberV2` | POST | `profile/me/contact_number` | contactNumber, otp, refCode | `any` | `#profile #auth` |
392
- | `profileApi` | `changeContactNumberV3` | POST | `profile/{userId}/contact_number` | userId, contactNumber, otp, refCode | `any` | `#profile #auth` |
393
- | `profileApi` | `points` | GET | `profile/me/updated_points` | opt: options | `UpdatedPoints` | `#profile #points` |
394
- | `profileApi` | `expiringPoints` | GET | `profile/me/allexpiring_points` | opt: options | `ExpiringPoints` | `#profile #points` |
395
- | `profileApi` | `deactivate` | POST | `profile/me/deactivate` | opt: options | `unknown` | `#profile` |
405
+ | `profileApi` | `changeContactNumberV2` | POST | `profile/contact_number` | contactNumber, otp, refCode | `any` | `#profile #auth` |
406
+ | `profileApi` | `changeContactNumberV3` | POST | `profile/contact_number` | userId (as `userid` in body), contactNumber, otp, refCode | `any` | `#profile #auth` |
407
+ | `profileApi` | `points` | GET | `profile/updated_points` | opt: options | `UpdatedPoints` | `#profile #points` |
408
+ | `profileApi` | `expiringPoints` | GET | `profile/allexpiring_points` | opt: options | `ExpiringPoints` | `#profile #points` |
409
+ | `profileApi` | `deactivate` | POST | `profile/deactivate` | opt: options | `unknown` | `#profile` |
396
410
  | `registerApi` | `validateRegister` | POST | `auth/validate_register` | appId, username, email, contactNumber | `OtpResponse` | `#registration #auth` |
397
411
  | `registerApi` | `register` | POST | `auth/register` | appId, uuid, macAddress, os, platform, clientVersion, deviceNotificationEnable, username, password, confirmPassword, firstName, lastName, contactNumber, otp, refCode, options; opt: address, gender, birthdate, email, refUserCode, termAndConditionVersion, dataPrivacyVersion, marketingOptionsVersion, consentAge, emailMarketing, smsMarketing, notificationMarketing, lineMarketing, phoneMarketing | `RegistrationResponse` | `#registration #auth` |
398
- | `addressApi` | `zipCodes` | GET | `main/postcode` | opt: zipCode | `ZipCode[]` | `#address` |
399
- | `addressApi` | `provinces` | GET | `main/province` | opt: options | `Province[]` | `#address` |
400
- | `addressApi` | `districts` | GET | `main/district` | opt: provinceCode | `District[]` | `#address` |
401
- | `addressApi` | `subDistricts` | GET | `main/subdistrict` | opt: provinceCode, districtCode | `SubDistrict[]` | `#address` |
402
- | `addressApi` | `userAddresses` | GET | `profile/me/addresses` | opt: options | `Address[]` | `#address #profile` |
403
- | `addressApi` | `updateAddress` | POST | `profile/me/address` | opt: name, addressName, firstName, lastName, address, zipcode, provinceCode, provinceName, districtCode, districtName, subDistrictCode, subDistrictName, contactNumber, countryCode, countryName, isDefault, rowKey | `Address` | `#address #profile` |
404
- | `addressApi` | `deleteAddress` | DELETE | `profile/me/address` | opt: rowKey | `unknown` | `#address #profile` |
405
- | `addressApi` | `userTaxAddresses` | GET | `profile/me/taxes` | opt: options | `Address[]` | `#address #profile` |
406
- | `addressApi` | `updateTaxAddress` | POST | `profile/me/tax` | opt: rowKey, taxId, isDefault, personType, title, name, firstName, lastName, email, contactNumber, companyName, address, addressName, floor, building, moo, road, room, soi, village, districtCode, provinceName, subDistrictCode, zipcode | `Address` | `#address #profile` |
407
- | `addressApi` | `deleteTaxAddress` | DELETE | `profile/me/tax` | opt: rowKey | `unknown` | `#address #profile` |
412
+ | `addressApi` | `zipCodes` | GET | `address/postcode` | opt: zipCode | `ZipCode[]` | `#address` |
413
+ | `addressApi` | `provinces` | GET | `address/province` | opt: options | `Province[]` | `#address` |
414
+ | `addressApi` | `districts` | GET | `address/district` | opt: provinceCode | `District[]` | `#address` |
415
+ | `addressApi` | `subDistricts` | GET | `address/subdistrict` | opt: provinceCode, districtCode | `SubDistrict[]` | `#address` |
416
+ | `addressApi` | `userAddresses` | GET | `profile/addresses` | opt: options | `Address[]` | `#address #profile` |
417
+ | `addressApi` | `updateAddress` | POST | `profile/address` | opt: name, addressName, firstName, lastName, address, zipcode, provinceCode, provinceName, districtCode, districtName, subDistrictCode, subDistrictName, contactNumber, countryCode, countryName, latitude, longitude, landmark, isDefault, rowKey | `Address` | `#address #profile` |
418
+ | `addressApi` | `deleteAddress` | DELETE | `profile/address` | opt: rowKey | `unknown` | `#address #profile` |
419
+ | `addressApi` | `userTaxAddresses` | GET | `profile/taxes` | opt: options | `Address[]` | `#address #profile` |
420
+ | `addressApi` | `updateTaxAddress` | POST | `profile/tax` | opt: rowKey, taxId, isDefault, personType, title, name, firstName, lastName, email, contactNumber, brnachId, branchName, companyName, address, addressName, floor, building, moo, road, room, soi, village, districtCode, provinceName, subDistrictCode, zipcode | `Address` | `#address #profile` |
421
+ | `addressApi` | `deleteTaxAddress` | DELETE | `profile/tax` | opt: rowKey | `unknown` | `#address #profile` |
408
422
  | `stampApi` | `createStamp` | POST | `stamp/create` | opt: imei, issuer, os, platform | `CreateStampResponse` | `#stamp` |
409
423
  | `stampApi` | `stamps` | GET | `stamp` | options | `Stamp[]` | `#stamp` |
410
424
  | `stampApi` | `stampProfile` | GET | `stamp/{id}/profile` | id, cardId | `StampProfileResponse` | `#stamp` |
@@ -416,7 +430,7 @@ const response = await bzbsService.profileApi.profile(undefined, {
416
430
  | `forumApi` | `postComment` | POST | `buzz/{buzzKey}/comments` | buzzKey, message; opt: image (File) | `ChatMessage` | `#forum` |
417
431
  | `forumApi` | `like` | POST | `buzz/{buzzKey}/like` | buzzKey | `LikeForumResponse` | `#forum` |
418
432
  | `forumApi` | `unlike` | DELETE | `buzz/{buzzKey}/like` | buzzKey | `LikeForumResponse` | `#forum` |
419
- | `settingApi` | `accessKey` | POST | `setting` | data (JSON: app_id, campaign_id, locale, return_url, version; opt: redeem_key) | `AccessTokenResponse` | `#setting #campaign` |
433
+ | `settingApi` | `accessKey` | POST | `setting/add` | data (JSON: app_id, campaign_id, locale, return_url, version; opt: redeem_key) | `AccessTokenResponse` | `#setting #campaign` |
420
434
  | `blob` | `consentVersion` | GET | `pdpaconsent/{appId}/version` _(baseBlobUrl)_ | appId | `ConsentVersion` | `#blob #consent` |
421
435
  | `blob` | `maintenance` | GET | `config/maintenance/{appId}.json` _(baseBlobUrl)_ | appId | `Maintenance` | `#blob` |
422
436
  | `blob` | `blob` | GET | `{path}` _(baseBlobUrl)_ | path | `unknown` | `#blob` |
@@ -551,7 +565,8 @@ const redeem = await bzbsService.campaignApi.redeem({
551
565
  | Method | Description | Returns |
552
566
  |---|---|---|
553
567
  | `profile()` | Get current user profile | `ProfileResponse` |
554
- | `updateProfile(params)` | Update user profile (supports image upload) | `ProfileResponse` |
568
+ | `updateProfile(params)` | Update user profile fields (JSON body) | `ProfileResponse` |
569
+ | `updateProfileImage(params)` | Upload profile picture (multipart/form-data) | `ProfileResponse` |
555
570
  | `changePassword(params)` | Change user password | `StatusResponse` |
556
571
  | `updateShipping(params)` | Update shipping information | `unknown` |
557
572
  | `changeContactNumber(params)` | Change contact number (v1) | `ConfirmOtpResponse` |
@@ -562,15 +577,19 @@ const redeem = await bzbsService.campaignApi.redeem({
562
577
  | `deactivate()` | Deactivate user account | `unknown` |
563
578
 
564
579
  ```typescript
565
- // Update profile with image
580
+ // Update profile fields (JSON)
566
581
  const result = await bzbsService.profileApi.updateProfile({
567
582
  firstName: 'John',
568
583
  lastName: 'Doe',
569
584
  email: 'john@example.com',
570
585
  contactNumber: '0812345678',
571
586
  gender: 'male',
572
- birthDate: 946684800, // Unix timestamp in seconds
573
- profileImage: fileObject,
587
+ birthDate: 946684800, // Unix timestamp in seconds
588
+ });
589
+
590
+ // Upload profile picture (multipart/form-data, field key: "data")
591
+ await bzbsService.profileApi.updateProfileImage({
592
+ image: imageFile, // File | { uri: string; name: string; type: string }
574
593
  });
575
594
  ```
576
595
 
@@ -775,6 +794,8 @@ const badge = await bzbsService.badgeApi.badges({ badgeId: '123' });
775
794
 
776
795
  `bzbsService.consentApi` — PDPA and marketing consent management.
777
796
 
797
+ > **v2 change:** `consent()` now calls `consent/status`; `updateConsent()` now calls `consent/consent`.
798
+
778
799
  | Method | Description | Returns |
779
800
  |---|---|---|
780
801
  | `consent()` | Get user's consent status | `Consent` |
@@ -805,6 +826,8 @@ await bzbsService.consentApi.updateConsent({
805
826
 
806
827
  `bzbsService.dashboardApi` — Dashboard content configuration.
807
828
 
829
+ > **v2 change:** Both `mainDashboard` and `subDashboard` now call `dashboard/config`. The `appName`/`dashboardName` param is sent as `config`.
830
+
808
831
  | Method | Description | Returns |
809
832
  |---|---|---|
810
833
  | `mainDashboard(params)` | Get main dashboard data | `Dashboard[]` |
@@ -812,12 +835,12 @@ await bzbsService.consentApi.updateConsent({
812
835
 
813
836
  ```typescript
814
837
  const dashboard = await bzbsService.dashboardApi.mainDashboard({
815
- appName: 'buzzebeesdemo',
816
- locale: 1054, // Thai locale
838
+ appName: 'buzzebeesdemo', // sent as `config` query param
839
+ locale: 1054,
817
840
  });
818
841
 
819
842
  const sub = await bzbsService.dashboardApi.subDashboard({
820
- dashboardName: 'featured',
843
+ dashboardName: 'featured', // sent as `config` query param
821
844
  locale: 1054,
822
845
  });
823
846
  ```
@@ -943,6 +966,8 @@ await bzbsService.forumApi.postRequestHelp({
943
966
 
944
967
  `bzbsService.settingApi` — Web landing page access tokens.
945
968
 
969
+ > **v2 change:** Endpoint changed from `setting` to `setting/add`.
970
+
946
971
  | Method | Description | Returns |
947
972
  |---|---|---|
948
973
  | `accessKey(params)` | Get access key for web landing pages | `AccessTokenResponse` |
package/dist/index.d.mts CHANGED
@@ -1583,7 +1583,7 @@ declare class AuthenticateApi extends BaseService {
1583
1583
  */
1584
1584
  forgetPassword(params: {
1585
1585
  contact: string;
1586
- type: 'email' | 'contact_number';
1586
+ type: 'email' | 'contact_number' | 'email_otp';
1587
1587
  options?: {
1588
1588
  [key: string]: unknown;
1589
1589
  };
@@ -2054,7 +2054,7 @@ declare class ConsentApi extends BaseService {
2054
2054
  [key: string]: unknown;
2055
2055
  }, requestOptions?: RequestOptions): Promise<ServiceResponse<Consent>>;
2056
2056
  /**
2057
- * Retrieves the user's consent information.
2057
+ * Update the user's consent information.
2058
2058
  *
2059
2059
  * @param params - The parameters for the consent request.
2060
2060
  * @param params.termsAndConditions - The terms and conditions consent version.
@@ -2099,10 +2099,10 @@ declare class ConsentApi extends BaseService {
2099
2099
  };
2100
2100
  }, requestOptions?: RequestOptions): Promise<ServiceResponse<Consent>>;
2101
2101
  /**
2102
- * Unconsents the user.
2102
+ * Revoke user consent.
2103
2103
  *
2104
2104
  * @param requestOptions - The options for the request.
2105
- * @returns A promise that resolves to a ServiceResponse containing the result of the unconsent operation.
2105
+ * @returns A promise that resolves to a ServiceResponse containing the result of the revoke consent operation.
2106
2106
  */
2107
2107
  unconsent(options?: {
2108
2108
  [key: string]: unknown;
@@ -2112,7 +2112,7 @@ declare class ConsentApi extends BaseService {
2112
2112
  declare class CouponApi extends BaseService {
2113
2113
  constructor(client: AxiosInstance, baseUrl: string);
2114
2114
  /**
2115
- * Processes coupon codes.
2115
+ * Process coupon codes to earn points.
2116
2116
  *
2117
2117
  * @param params - The parameters.
2118
2118
  * @param params.codes - The coupon codes to process.
@@ -2410,11 +2410,6 @@ declare class ProfileApi extends BaseService {
2410
2410
  * @returns A promise that resolves to a ServiceResponse containing the updated profile.
2411
2411
  */
2412
2412
  updateProfile(params: {
2413
- profileImage?: File | {
2414
- uri: string;
2415
- name: string;
2416
- type: string;
2417
- } | object;
2418
2413
  firstName?: string;
2419
2414
  lastName?: string;
2420
2415
  contactNumber?: string;
@@ -2586,6 +2581,25 @@ declare class ProfileApi extends BaseService {
2586
2581
  expiringPoints(options?: {
2587
2582
  [key: string]: unknown;
2588
2583
  }, requestOptions?: RequestOptions): Promise<ServiceResponse<ExpiringPoints>>;
2584
+ /**
2585
+ * Updates the user's profile picture.
2586
+ *
2587
+ * @param params - The parameters.
2588
+ * @param params.image - The image file to upload (File or cross-platform file object with uri, name, type).
2589
+ * @param params.options - Optional additional parameters.
2590
+ * @param requestOptions - Optional request options.
2591
+ * @returns A promise that resolves to a ServiceResponse containing the updated profile.
2592
+ */
2593
+ updateProfileImage(params: {
2594
+ image: File | {
2595
+ uri: string;
2596
+ name: string;
2597
+ type: string;
2598
+ } | object;
2599
+ options?: {
2600
+ [key: string]: unknown;
2601
+ };
2602
+ }, requestOptions?: RequestOptions): Promise<ServiceResponse<ProfileResponse>>;
2589
2603
  /**
2590
2604
  * Deactivates the user's profile.
2591
2605
  *
@@ -2788,6 +2802,9 @@ declare class AddressApi extends BaseService {
2788
2802
  contactNumber?: string;
2789
2803
  countryCode?: string;
2790
2804
  countryName?: string;
2805
+ latitude?: number;
2806
+ longitude?: number;
2807
+ landmark?: string;
2791
2808
  isDefault?: boolean;
2792
2809
  rowKey?: string;
2793
2810
  options?: {
@@ -2837,6 +2854,8 @@ declare class AddressApi extends BaseService {
2837
2854
  lastName?: string;
2838
2855
  email?: string;
2839
2856
  contactNumber?: string;
2857
+ brnachId?: string;
2858
+ branchName?: string;
2840
2859
  companyName?: string;
2841
2860
  address?: string;
2842
2861
  addressName?: string;
package/dist/index.d.ts CHANGED
@@ -1583,7 +1583,7 @@ declare class AuthenticateApi extends BaseService {
1583
1583
  */
1584
1584
  forgetPassword(params: {
1585
1585
  contact: string;
1586
- type: 'email' | 'contact_number';
1586
+ type: 'email' | 'contact_number' | 'email_otp';
1587
1587
  options?: {
1588
1588
  [key: string]: unknown;
1589
1589
  };
@@ -2054,7 +2054,7 @@ declare class ConsentApi extends BaseService {
2054
2054
  [key: string]: unknown;
2055
2055
  }, requestOptions?: RequestOptions): Promise<ServiceResponse<Consent>>;
2056
2056
  /**
2057
- * Retrieves the user's consent information.
2057
+ * Update the user's consent information.
2058
2058
  *
2059
2059
  * @param params - The parameters for the consent request.
2060
2060
  * @param params.termsAndConditions - The terms and conditions consent version.
@@ -2099,10 +2099,10 @@ declare class ConsentApi extends BaseService {
2099
2099
  };
2100
2100
  }, requestOptions?: RequestOptions): Promise<ServiceResponse<Consent>>;
2101
2101
  /**
2102
- * Unconsents the user.
2102
+ * Revoke user consent.
2103
2103
  *
2104
2104
  * @param requestOptions - The options for the request.
2105
- * @returns A promise that resolves to a ServiceResponse containing the result of the unconsent operation.
2105
+ * @returns A promise that resolves to a ServiceResponse containing the result of the revoke consent operation.
2106
2106
  */
2107
2107
  unconsent(options?: {
2108
2108
  [key: string]: unknown;
@@ -2112,7 +2112,7 @@ declare class ConsentApi extends BaseService {
2112
2112
  declare class CouponApi extends BaseService {
2113
2113
  constructor(client: AxiosInstance, baseUrl: string);
2114
2114
  /**
2115
- * Processes coupon codes.
2115
+ * Process coupon codes to earn points.
2116
2116
  *
2117
2117
  * @param params - The parameters.
2118
2118
  * @param params.codes - The coupon codes to process.
@@ -2410,11 +2410,6 @@ declare class ProfileApi extends BaseService {
2410
2410
  * @returns A promise that resolves to a ServiceResponse containing the updated profile.
2411
2411
  */
2412
2412
  updateProfile(params: {
2413
- profileImage?: File | {
2414
- uri: string;
2415
- name: string;
2416
- type: string;
2417
- } | object;
2418
2413
  firstName?: string;
2419
2414
  lastName?: string;
2420
2415
  contactNumber?: string;
@@ -2586,6 +2581,25 @@ declare class ProfileApi extends BaseService {
2586
2581
  expiringPoints(options?: {
2587
2582
  [key: string]: unknown;
2588
2583
  }, requestOptions?: RequestOptions): Promise<ServiceResponse<ExpiringPoints>>;
2584
+ /**
2585
+ * Updates the user's profile picture.
2586
+ *
2587
+ * @param params - The parameters.
2588
+ * @param params.image - The image file to upload (File or cross-platform file object with uri, name, type).
2589
+ * @param params.options - Optional additional parameters.
2590
+ * @param requestOptions - Optional request options.
2591
+ * @returns A promise that resolves to a ServiceResponse containing the updated profile.
2592
+ */
2593
+ updateProfileImage(params: {
2594
+ image: File | {
2595
+ uri: string;
2596
+ name: string;
2597
+ type: string;
2598
+ } | object;
2599
+ options?: {
2600
+ [key: string]: unknown;
2601
+ };
2602
+ }, requestOptions?: RequestOptions): Promise<ServiceResponse<ProfileResponse>>;
2589
2603
  /**
2590
2604
  * Deactivates the user's profile.
2591
2605
  *
@@ -2788,6 +2802,9 @@ declare class AddressApi extends BaseService {
2788
2802
  contactNumber?: string;
2789
2803
  countryCode?: string;
2790
2804
  countryName?: string;
2805
+ latitude?: number;
2806
+ longitude?: number;
2807
+ landmark?: string;
2791
2808
  isDefault?: boolean;
2792
2809
  rowKey?: string;
2793
2810
  options?: {
@@ -2837,6 +2854,8 @@ declare class AddressApi extends BaseService {
2837
2854
  lastName?: string;
2838
2855
  email?: string;
2839
2856
  contactNumber?: string;
2857
+ brnachId?: string;
2858
+ branchName?: string;
2840
2859
  companyName?: string;
2841
2860
  address?: string;
2842
2861
  addressName?: string;