tradly
Version:
Tradly JS SDK
900 lines (653 loc) • 37.1 kB
Markdown
<p align="center">
<a href="https://tradly.app">
<h1 align="center"> Tradly Platform JS SDK </h1>
</a>
</p>
<h3 align="center"> Launch Platforms apps superfast. Headless. API First </h3>
<p align="center"> The flexible and modular infrastructure to launch marketplace, community and commerce apps. </p>
<p align="center"><a href="https://tradly.app/tutorials">See demo videos</a></p>
<br />
Tradly helps developers / non technical founders with low-code/no-code solution
to launch marketplaces, Ecosystem for SaaS and commerce apps.
## Features
- ✅ **100+ API Endpoints** - Comprehensive coverage of all Tradly platform
features
- ✅ **Automatic Key Management** - Integrates with `@tradly/auth` for automatic
key injection
- ✅ **Multi-Environment Support** - Production, Development, Sandbox
- ✅ **Domain-Based Configuration** - Support for multiple domains
- ✅ **Error Handling** - Consistent error-first callback pattern
- ✅ **TypeScript Ready** - Works with TypeScript projects
## Installation
```bash
npm install tradly
```
### Optional: Install with Auth Package
For automatic key management, also install `@tradly/auth`:
```bash
npm install tradly @tradly/auth
```
## Quick Start
### Option 1: With @tradly/auth (Recommended)
**Simplest approach - just initialize auth, then use tradly sdk directly:**
```javascript
import { initializeAuth, emailLogin } from "@tradly/auth";
import TradlySDK from "tradly";
// Step 1: Initialize auth (once at app start)
initializeAuth("beauty.tradly.co", "production");
// Step 2: Login via auth (keys automatically stored)
await emailLogin("user@example.com", "password");
// Step 3: Use tradly APIs directly (keys auto-injected!)
const [error, response] = await TradlySDK.app.getListings({
bodyParam: {},
// authKey automatically from auth package!
});
```
**Benefits:**
- ✅ No need to call `init_v2.config()`
- ✅ Keys automatically injected
- ✅ Environment and base URL synced from auth
- ✅ Simplest usage
### Option 2: Standalone (Without Auth Package)
```javascript
import TradlySDK from "tradly";
// Initialize tradly
await TradlySDK.init_v2.config({
domain: "beauty.tradly.co",
env: "production",
});
// Use APIs with manual authKey
const [error, response] = await TradlySDK.app.getListings({
authKey: "your-auth-key",
bodyParam: {},
});
```
### Option 3: With Both (Explicit Control)
```javascript
import { initializeAuth, emailLogin } from "@tradly/auth";
import TradlySDK from "tradly";
// Initialize auth
initializeAuth("beauty.tradly.co", "production");
await emailLogin("user@example.com", "password");
// Initialize tradly (uses auth's PK key automatically)
await TradlySDK.init_v2.config({
domain: "beauty.tradly.co",
env: "production",
});
// Use APIs (keys auto-injected)
const [error, response] = await TradlySDK.app.getListings({
bodyParam: {},
});
```
## Initialization
### Using InitV2 (Recommended)
```javascript
import TradlySDK from "tradly";
await TradlySDK.init_v2.config({
domain: "beauty.tradly.co", // Required
env: "production", // Required: "production" | "development" | "sandbox"
custom_header: {}, // Optional: Custom headers
is_skip_pk_by_domain: false, // Optional: Skip PK key fetch
});
```
**Note:** If `@tradly/auth` is initialized, `init_v2.config()` will
automatically use auth's cached PK key (no duplicate API call).
### Using Legacy Init (Deprecated)
```javascript
import TradlySDK from "tradly";
await TradlySDK.init.config({
token: "your-pk-key", // PK key
environment: "production", // Environment
custom_header: {}, // Optional
});
```
## Integration with @tradly/auth
tradly automatically integrates with `@tradly/auth` when available:
### Automatic Features
1. **PK Key Auto-Injection:**
- If `APPCONSTANT.TOKEN` is empty, gets PK key from auth's cache
- Caches it for future use
2. **Auth Key Auto-Injection:**
- If `authKey` not provided in method params, gets from auth package
- Adds to `x-auth-key` header automatically
3. **Environment Sync:**
- Syncs environment from auth config if `APPCONSTANT.ENVIRONMENT` is empty
4. **Base URL Sync:**
- Uses auth's `baseUrl` if available (preferred over tradly's Environment
function)
### Backward Compatibility
- ✅ Works without `@tradly/auth` package
- ✅ Manual `authKey` passing still works
- ✅ No breaking changes
## API Methods
All methods return `[error, response]` format (error-first callback pattern).
### Response Format
```javascript
const [error, response] = await TradlySDK.app.getListings({});
if (error) {
// Handle error
console.error("Error:", error);
} else {
// Use response
console.log("Data:", response.data);
}
```
## API Reference
### Configuration & Setup
| Method | Description | Parameters |
| ------------------- | ------------------------ | -------------------------------------------------------- |
| `init_v2.config()` | Initialize SDK (new way) | `{ domain, env, custom_header?, is_skip_pk_by_domain? }` |
| `init.config()` | Initialize SDK (legacy) | `{ token, environment, custom_header? }` |
| `init.refreshAPI()` | Refresh auth token | `{ refreshKey }` |
### User Management
| Method | Description | Parameters |
| ------------------------- | ------------------------ | ---------------------------------- |
| `app.getUserDetail()` | Get user by ID | `{ authKey, id }` |
| `app.getUserProfile()` | Get current user profile | `{ authKey, id? }` |
| `app.getUsersList()` | Get users list | `{ authKey, bodyParam? }` |
| `app.updateUserInfo()` | Update user info | `{ authKey, id, data }` |
| `app.deleteUser()` | Delete user | `{ authKey, id }` |
| `app.getUserAttributes()` | Get user attributes | `{ authKey, id, recaptcha_token }` |
| `app.userFollow()` | Follow a user | `{ authKey, data }` |
| `app.getUserFollowings()` | Get user followings | `{ authKey, bodyParam? }` |
| `app.getUserFollowers()` | Get user followers | `{ authKey, bodyParam? }` |
### Listings
| Method | Description | Parameters |
| --------------------------------- | ------------------------------- | ----------------------------- |
| `app.getListings()` | Get listings | `{ authKey?, bodyParam? }` |
| `app.getListingDetail()` | Get listing detail | `{ authKey?, id, slug? }` |
| `app.postListing()` | Create/Update listing | `{ authKey?, id?, data }` |
| `app.deleteListing()` | Delete listing | `{ authKey?, id }` |
| `app.likeListing()` | Like/Unlike listing | `{ authKey?, id, isLiked }` |
| `app.unlikeListing()` | Unlike listing | `{ authKey?, id, isUnLiked }` |
| `app.bulkLikeListings()` | Bulk like listings | `{ authKey?, data }` |
| `app.getMyListingsLikes()` | Get my liked listings | `{ authKey?, bodyParam? }` |
| `app.reportListing()` | Report listing | `{ authKey?, id, data }` |
| `app.getListingsLocations()` | Get listings locations | `{ authKey?, bodyParam? }` |
| `app.FollowingAccountsListings()` | Get following accounts listings | `{ authKey?, bodyParam? }` |
**Note:** `authKey` is optional if `@tradly/auth` is initialized - it will be
auto-injected.
### Listings - Pricing Rules
| Method | Description | Parameters |
| ----------------------------------- | -------------------------- | ----------------------------------------------- |
| `app.postPricingRules()` | Create/Update pricing rule | `{ authKey?, listing_id, rule_id?, data }` |
| `app.getListingsPricingRules()` | Get pricing rules | `{ authKey?, listing_id, bodyParam? }` |
| `app.getListingSinglePricingRule()` | Get single pricing rule | `{ authKey?, listing_id, rule_id, bodyParam? }` |
| `app.deleteListingPricingRule()` | Delete pricing rule | `{ authKey?, listing_id, rule_id }` |
### Listings - Negotiations
| Method | Description | Parameters |
| -------------------------- | --------------------- | ---------------------------------------- |
| `app.addNegotiation()` | Add negotiation | `{ authKey?, id, data }` |
| `app.updateNegotiation()` | Update negotiation | `{ authKey?, id, negotiation_id, data }` |
| `app.getNegotiationList()` | Get negotiations list | `{ authKey?, id, bodyParam? }` |
### Listings - Schedules
| Method | Description | Parameters |
| ---------------------- | --------------- | ------------------------------ |
| `app.createSchedule()` | Create schedule | `{ authKey?, id, data }` |
| `app.getSchedule()` | Get schedule | `{ authKey?, id, bodyParam? }` |
### Variants
| Method | Description | Parameters |
| -------------------------------- | --------------------- | ------------------------------------- |
| `app.getVariants()` | Get variants | `{ authKey? }` |
| `app.getListingVariants()` | Get listing variants | `{ authKey?, listingId }` |
| `app.getListingVariantDetails()` | Get variant details | `{ authKey?, listingId, variant_id }` |
| `app.addEditVariants()` | Create/Update variant | `{ authKey?, listingId, id?, data }` |
| `app.deleteVariant()` | Delete variant | `{ authKey?, listingId, id }` |
### Variant Types
| Method | Description | Parameters |
| ---------------------------------- | -------------------------------- | ---------------------------------- |
| `app.getVariantTypes()` | Get variant types | `{ authKey? }` |
| `app.addEditVariantsTypes()` | Create/Update variant type | `{ authKey?, id?, data }` |
| `app.deleteVariantType()` | Delete variant type | `{ authKey?, id }` |
| `app.getVariantTypeValues()` | Get variant type values | `{ authKey?, id }` |
| `app.getVariantTypeValuesDetail()` | Get variant type value detail | `{ authKey?, id, valueID }` |
| `app.addEditVariantTypeValues()` | Create/Update variant type value | `{ authKey?, id, valueID?, data }` |
| `app.deleteVariantTypeValues()` | Delete variant type value | `{ authKey?, id, valueID }` |
### Categories
| Method | Description | Parameters |
| ------------------------------- | ---------------------- | -------------------------------------- |
| `app.getCategory()` | Get categories | `{ authKey?, bodyParam? }` |
| `app.getSingleCategoryByID()` | Get category by ID | `{ authKey?, categoryID, bodyParam? }` |
| `app.getSingleCategoryBySlug()` | Get category by slug | `{ authKey?, slug, bodyParam? }` |
| `app.addEditCategory()` | Create/Update category | `{ authKey?, id?, data }` |
| `app.deleteCategory()` | Delete category | `{ authKey?, id }` |
### Attributes
| Method | Description | Parameters |
| -------------------------------- | ----------------------------- | ---------------------------------- |
| `app.getAttribute()` | Get attributes | `{ authKey?, bodyParam? }` |
| `app.getAttributesGrouped()` | Get grouped attributes | `{ authKey?, bodyParam? }` |
| `app.getUserAttributeValues()` | Get user attribute values | `{ authKey?, id, bodyParam? }` |
| `app.addEditAttribute()` | Create/Update attribute | `{ authKey?, id?, data }` |
| `app.deleteAttribute()` | Delete attribute | `{ authKey?, id }` |
| `app.getAttributeValues()` | Get attribute values | `{ authKey?, id }` |
| `app.getAttributeValuesDetail()` | Get attribute value detail | `{ authKey?, id, valueID }` |
| `app.addEditAttributeValues()` | Create/Update attribute value | `{ authKey?, id, valueID?, data }` |
| `app.deleteAttributeValues()` | Delete attribute value | `{ authKey?, id, valueID }` |
### Accounts
| Method | Description | Parameters |
| ------------------------------ | --------------------------- | ------------------------------- |
| `app.getAccounts()` | Get accounts | `{ authKey?, bodyParam? }` |
| `app.getAccountDetail()` | Get account detail | `{ authKey?, id, slug? }` |
| `app.postAccounts()` | Create/Update account | `{ authKey?, id?, data }` |
| `app.activeInactiveAccounts()` | Activate/Deactivate account | `{ authKey?, id, data }` |
| `app.followUnfollowAccounts()` | Follow/Unfollow account | `{ authKey?, id, isFollowing }` |
| `app.blockAccount()` | Block/Unblock account | `{ authKey?, id, isBlocked }` |
| `app.reportAccount()` | Report account | `{ authKey?, id, data }` |
| `app.getBlockAccounts()` | Get blocked accounts | `{ authKey?, bodyParam? }` |
| `app.getFollowingAccounts()` | Get following accounts | `{ authKey?, bodyParam? }` |
| `app.getAccountsLocations()` | Get accounts locations | `{ authKey?, bodyParam? }` |
### Cart & Checkout
| Method | Description | Parameters |
| ----------------------------- | ------------------ | ------------------------------------- |
| `app.getCarts()` | Get cart | `{ authKey?, bodyParam?, currency? }` |
| `app.addToCart()` | Add to cart | `{ authKey?, data }` |
| `app.deleteFromCart()` | Remove from cart | `{ authKey?, data }` |
| `app.deleteAllCartDetail()` | Clear cart | `{ authKey?, bodyParam? }` |
| `app.checkout()` | Checkout from cart | `{ authKey?, data, currency? }` |
| `app.listingDirectCheckout()` | Direct checkout | `{ authKey?, id, data, currency? }` |
| `app.applyCoupon()` | Apply coupon | `{ authKey?, data }` |
| `app.removeCoupon()` | Remove coupon | `{ authKey?, data }` |
### Orders
| Method | Description | Parameters |
| ---------------------------- | ---------------------- | -------------------------------------------------------- |
| `app.getOrders()` | Get orders | `{ authKey?, bodyParam? }` |
| `app.getOrderDetail()` | Get order detail | `{ authKey?, id, bodyParam? }` |
| `app.updateOrderStatus()` | Update order status | `{ authKey?, id, data, bodyParam? }` |
| `app.updateOrderDetail()` | Update order details | `{ authKey?, id, data, bodyParam? }` |
| `app.updateOrderShipment()` | Update order shipment | `{ authKey?, order_id, shipment_id, data, bodyParam? }` |
| `app.updateShipmentStatus()` | Update shipment status | `{ authKey?, id, shipment_id, data, bodyParam? }` |
| `app.verifyOrderDetails()` | Verify order details | `{ authKey?, data, bodyParam? }` |
| `app.confirmOrderByUser()` | Confirm order | `{ authKey?, order_ref, access_key?, data, bodyParam? }` |
| `app.getOrderInvoice()` | Get order invoice | `{ authKey?, order_id, bodyParam? }` |
| `app.getDonationsList()` | Get donations list | `{ authKey?, listing_id, bodyParam? }` |
### Shipments
| Method | Description | Parameters |
| ------------------------------------ | ------------------------------ | ---------------------------------------------- |
| `app.getSendCloudShipmentsMethods()` | Get SendCloud shipping methods | `{ authKey?, bodyParam? }` |
| `app.getSendCloudShipmentLabel()` | Get SendCloud shipping label | `{ authKey?, bodyParam? }` |
| `app.getExternalShipmentMethods()` | Get external shipping methods | `{ authKey?, shipping_method_id, bodyParam? }` |
| `app.getExternalShipmentLabel()` | Get external shipping label | `{ authKey?, order_id, shipment_id }` |
### Reviews
| Method | Description | Parameters |
| --------------------- | ----------- | -------------------------- |
| `app.getReviewList()` | Get reviews | `{ authKey?, bodyParam? }` |
| `app.addReview()` | Add review | `{ authKey?, data }` |
| `app.likeReview()` | Like review | `{ authKey?, id, data }` |
### Payments
| Method | Description | Parameters |
| --------------------------- | ------------------------- | ------------------------ |
| `app.getPaymentMethods()` | Get payment methods | `{ authKey? }` |
| `app.getEphemeralKey()` | Get Stripe ephemeral key | `{ authKey?, id, data }` |
| `app.getPaymentIntentKey()` | Get Stripe payment intent | `{ authKey?, id, data }` |
### MangoPay
| Method | Description | Parameters |
| ------------------------------------- | ------------------------- | -------------------------- |
| `app.getKycDetails()` | Get KYC details | `{ authKey?, id }` |
| `app.savePerSonalDetails()` | Save personal details | `{ authKey?, data }` |
| `app.cardRegistration()` | Register card | `{ authKey?, data }` |
| `app.confirmCardRegistration()` | Confirm card registration | `{ authKey?, data }` |
| `app.PayINMangoPayCalc()` | Calculate pay-in | `{ authKey?, data }` |
| `app.PayINMangoPayByCards()` | Pay-in by cards | `{ authKey?, data }` |
| `app.PayINMangoPayPayPal()` | Pay-in by PayPal | `{ authKey?, data }` |
| `app.PayINMangoPayByBank()` | Pay-in by bank | `{ authKey?, data }` |
| `app.mangoPayWithdrawCalc()` | Calculate withdrawal | `{ authKey?, data }` |
| `app.mangoPayWithdrawInit()` | Initiate withdrawal | `{ authKey?, data }` |
| `app.mangoPayWithdrawConfirm()` | Confirm withdrawal | `{ authKey?, data }` |
| `app.getMangopayWalletTransactions()` | Get wallet transactions | `{ authKey?, bodyParam? }` |
| `app.getMangoPayWalletBalance()` | Get wallet balance | `{ authKey?, bodyParam? }` |
### Stripe Connect
| Method | Description | Parameters |
| ------------------------------- | -------------------------- | -------------------- |
| `app.getStripeConnectAccount()` | Get Stripe Connect account | `{ authKey?, id }` |
| `app.createAccountLink()` | Create account link | `{ authKey?, data }` |
| `app.createExpressLoginLink()` | Create express login link | `{ authKey?, data }` |
### Saved Cards
| Method | Description | Parameters |
| ----------------------- | ----------------- | ----------------------- |
| `app.getSavedCards()` | Get saved cards | `{ authKey? }` |
| `app.deleteSavedCard()` | Delete saved card | `{ authKey?, card_id }` |
### Addresses
| Method | Description | Parameters |
| ------------------------------- | ------------------------- | -------------------------- |
| `app.getAddress()` | Get addresses | `{ authKey?, bodyParam? }` |
| `app.addEditAddress()` | Create/Update address | `{ authKey?, id?, data }` |
| `app.deleteAddress()` | Delete address | `{ authKey?, id }` |
| `app.searchAddress()` | Search address | `{ authKey?, searchKey }` |
| `app.reverseGeoCodingAddress()` | Reverse geocoding | `{ authKey?, lat, long }` |
| `app.getPlacesAddress()` | Get places address | `{ authKey?, bodyParam? }` |
| `app.getPlacesAddressDetails()` | Get place address details | `{ authKey?, bodyParam? }` |
| `app.getStates()` | Get states | `{ authKey?, bodyParam? }` |
### Shipping Methods
| Method | Description | Parameters |
| -------------------------- | -------------------- | ---------------------------------- |
| `app.getShippingMethods()` | Get shipping methods | `{ authKey?, type?, account_id? }` |
### Currency
| Method | Description | Parameters |
| ----------------------- | ---------------------- | ------------------------- |
| `app.getCurrency()` | Get currencies | `{ authKey? }` |
| `app.addEditCurrency()` | Create/Update currency | `{ authKey?, id?, data }` |
| `app.deleteCurrency()` | Delete currency | `{ authKey?, id }` |
### Collections
| Method | Description | Parameters |
| --------------------------- | ------------------------ | -------------------------- |
| `app.getCollection()` | Get collections | `{ authKey? }` |
| `app.getCollectionDetail()` | Get collection detail | `{ authKey?, id }` |
| `app.addEditCollection()` | Create/Update collection | `{ authKey?, id?, data }` |
| `app.deleteCollections()` | Delete collection | `{ authKey?, id }` |
| `app.getCollectionData()` | Get collection data | `{ authKey?, bodyParam? }` |
### Promo Banners
| Method | Description | Parameters |
| ------------------------- | -------------------------- | -------------------------- |
| `app.getPromoBanner()` | Get promo banners | `{ authKey?, bodyParam? }` |
| `app.addPromoBanner()` | Create/Update promo banner | `{ authKey?, id?, data }` |
| `app.deletePromoBanner()` | Delete promo banner | `{ authKey?, id }` |
### Transactions & Earnings
| Method | Description | Parameters |
| ----------------------- | ---------------- | -------------------------- |
| `app.getTransactions()` | Get transactions | `{ authKey?, bodyParam? }` |
| `app.getEarning()` | Get earnings | `{ authKey?, bodyParam? }` |
### Commissions
| Method | Description | Parameters |
| --------------------------- | --------------------- | -------------------------- |
| `app.getCommissions()` | Get commissions | `{ authKey?, bodyParam? }` |
| `app.getCommissionDetail()` | Get commission detail | `{ authKey?, id }` |
### Subscriptions
| Method | Description | Parameters |
| ------------------------------ | ------------------------- | ------------------------------------------- |
| `app.subscribe()` | Get subscriptions | `{ authKey?, bodyParam? }` |
| `app.productSubscription()` | Get product subscriptions | `{ authKey?, bodyParam? }` |
| `app.subscriptionConfirm()` | Confirm subscription | `{ authKey?, data }` |
| `app.manageSubscriptionLink()` | Manage subscription link | `{ authKey?, data }` |
| `app.getSubscriptionList()` | Get subscription listings | `{ authKey?, bodyParam? }` |
| `app.getSubscriptionDetails()` | Get subscription details | `{ authKey?, listing_id }` |
| `app.subscribeByMangopay()` | Subscribe via MangoPay | `{ authKey?, listing_id, data, currency? }` |
### Layers
| Method | Description | Parameters |
| ---------------------------- | ------------------- | -------------------------- |
| `app.getLayer()` | Get layers | `{ authKey?, bodyParam? }` |
| `app.getLayerDetail()` | Get layer detail | `{ authKey?, id }` |
| `app.getLayerDetailBySlug()` | Get layer by slug | `{ authKey?, id }` |
| `app.addEditLayer()` | Create/Update layer | `{ authKey?, id?, data }` |
| `app.deleteLayer()` | Delete layer | `{ authKey?, id }` |
### Taxes
| Method | Description | Parameters |
| ------------------------- | ----------------- | -------------------------- |
| `app.getListingTaxes()` | Get listing taxes | `{ authKey?, bodyParam? }` |
| `app.addEditListingTax()` | Create/Update tax | `{ authKey?, id?, data }` |
| `app.deleteListingTax()` | Delete tax | `{ authKey?, id }` |
### Translations
| Method | Description | Parameters |
| --------------------------------------- | ----------------------------- | -------------------------- |
| `app.getTranslations()` | Get translations | `{ authKey?, bodyParam? }` |
| `app.translateData()` | Translate data | `{ authKey?, id, data }` |
| `app.getClientTranslationsGroups()` | Get client translation groups | `{ authKey?, paramBody? }` |
| `app.getClientTranslationsValues()` | Get client translation values | `{ authKey?, bodyParam? }` |
| `app.clientTranslationsValuesByGroup()` | Get translations by group | `{ authKey?, bodyParam? }` |
### Feedback & Comments
| Method | Description | Parameters |
| ----------------------------- | ----------------------- | --------------------------------------- |
| `app.getFeedbackCategories()` | Get feedback categories | `{ authKey?, bodyParam? }` |
| `app.createFeedback()` | Create feedback | `{ authKey?, data }` |
| `app.getComments()` | Get comments | `{ authKey?, bodyParam? }` |
| `app.addEditComments()` | Create/Update comment | `{ authKey?, id?, data }` |
| `app.likeUnlikeComments()` | Like/Unlike comment | `{ authKey?, id, isLike, isDowngrade }` |
### Activities
| Method | Description | Parameters |
| --------------------- | -------------- | -------------------------- |
| `app.getActivities()` | Get activities | `{ authKey?, bodyParam? }` |
### Languages & Countries
| Method | Description | Parameters |
| -------------------------- | -------------------- | -------------- |
| `app.getLanguages()` | Get languages | `{ authKey? }` |
| `app.getTenantLanguages()` | Get tenant languages | `{ authKey? }` |
| `app.getCountries()` | Get countries | `{}` |
| `app.getTenantCountries()` | Get tenant countries | `{ authKey? }` |
### Configuration
| Method | Description | Parameters |
| ---------------------------------- | ------------------------- | -------------------------------------------------- |
| `app.getConfigList()` | Get config list | `{ authKey?, paramBody, domain_id? }` |
| `app.getGroupedConfigList()` | Get grouped config list | `{ authKey?, paramBody, domain_id? }` |
| `app.getGroupedSecureConfigList()` | Get grouped secure config | `{ authKey?, paramBody, domain_id?, access_key? }` |
| `app.home()` | Get home data | `{ authKey? }` |
### S3 & Media
| Method | Description | Parameters |
| -------------------------- | ---------------------- | -------------------------------- |
| `app.generateS3ImageURL()` | Generate S3 signed URL | `{ authKey?, data }` |
| `app.uploadS3Image()` | Upload image to S3 | `{ signedUrl, mime, blob_body }` |
| `app.getS3SignedURL()` | Get S3 signed URL | `{ authKey?, data }` |
### Digital Content
| Method | Description | Parameters |
| --------------------------------- | ----------------------------- | --------------------------------------------- |
| `app.getDigitalContents()` | Get digital contents | `{ authKey?, listing_id, bodyParam? }` |
| `app.postAndEditDigitalContent()` | Create/Update digital content | `{ authKey?, listing_id, content_id?, data }` |
| `app.deleteDigitalContent()` | Delete digital content | `{ authKey?, listing_id, content_id }` |
### SSO
| Method | Description | Parameters |
| ---------------------- | ----------------- | ------------------------------- |
| `app.postSsoReturn()` | SSO return | `{ authKey?, data, currency? }` |
| `app.postSsoEnabled()` | Check SSO enabled | `{ authKey?, data, currency? }` |
### Wallet
| Method | Description | Parameters |
| ----------------------------- | ----------------------- | -------------------------- |
| `app.getWalletBalance()` | Get wallet balance | `{ authKey? }` |
| `app.getWalletTransactions()` | Get wallet transactions | `{ authKey?, bodyParam? }` |
### OPP Merchant
| Method | Description | Parameters |
| -------------------------- | -------------------- | -------------------------- |
| `app.getMerchantDetails()` | Get merchant details | `{ authKey?, bodyParam? }` |
| `app.createNewMerchant()` | Create merchant | `{ authKey?, data }` |
### Time Slots
| Method | Description | Parameters |
| -------------------- | -------------- | -------------------------- |
| `app.getTimeSlots()` | Get time slots | `{ authKey?, bodyParam? }` |
### AI Services
| Method | Description | Parameters |
| --------------------------- | ---------------------- | ------------------------------- |
| `app.getAiPromptResponse()` | Get AI prompt response | `{ authKey?, data, currency? }` |
### Device Management
| Method | Description | Parameters |
| ------------------------ | ------------------ | -------------------- |
| `app.updateDeviceInfo()` | Update device info | `{ authKey?, data }` |
## Usage Examples
### Example 1: Get Listings
```javascript
import TradlySDK from "tradly";
// With auth package (keys auto-injected)
const [error, response] = await TradlySDK.app.getListings({
bodyParam: {
page: 1,
per_page: 20,
type: "listings",
},
});
if (error) {
console.error("Error:", error);
} else {
console.log("Listings:", response.data);
}
```
### Example 2: Create Listing
```javascript
const [error, response] = await TradlySDK.app.postListing({
data: {
title: "My Product",
description: "Product description",
price: 99.99,
// ... other fields
},
});
if (!error) {
console.log("Listing created:", response.data);
}
```
### Example 3: Add to Cart
```javascript
const [error, response] = await TradlySDK.app.addToCart({
data: {
listing_id: 123,
quantity: 2,
// ... other fields
},
});
```
### Example 4: Checkout
```javascript
const [error, response] = await TradlySDK.app.checkout({
data: {
// Checkout data
},
currency: "USD",
});
```
### Example 5: Get Orders
```javascript
const [error, response] = await TradlySDK.app.getOrders({
bodyParam: {
page: 1,
per_page: 10,
status: "pending",
},
});
```
## Parameters
### Common Parameters
Most methods accept these optional parameters:
- `authKey` - User authentication key (auto-injected if `@tradly/auth` is used)
- `currency` - Currency code (e.g., "USD", "EUR")
- `language` - Language code (e.g., "en", "fr")
- `bodyParam` - Query parameters object (converted to URL query string)
### bodyParam Example
```javascript
const [error, response] = await TradlySDK.app.getListings({
bodyParam: {
page: 1,
per_page: 20,
search: "laptop",
category_id: 5,
},
});
// Converts to: ?page=1&per_page=20&search=laptop&category_id=5
```
## Error Handling
All methods return error-first callback pattern:
```javascript
const [error, response] = await TradlySDK.app.getListings({});
if (error) {
// Handle error
console.error("Error Code:", error.code);
console.error("Error Message:", error.message);
console.error("Full Error:", error);
} else {
// Use response
console.log("Status:", response.status);
console.log("Data:", response.data);
}
```
## Integration with @tradly/auth
### Automatic Key Injection
When `@tradly/auth` is installed and initialized:
1. **PK Key:** Automatically injected from auth's cache
2. **Auth Key:** Automatically injected from auth's storage
3. **Environment:** Synced from auth config
4. **Base URL:** Uses auth's baseUrl
### Manual Override
You can still manually provide `authKey` to override auto-injection:
```javascript
// Manual authKey overrides auto-injected key
const [error, response] = await TradlySDK.app.getListings({
authKey: "custom-key", // Overrides auto-injected
bodyParam: {},
});
```
## Environment Variables
Tradly sdk supports these environments:
- `production` - Production API (https://api.tradly.app)
- `development` - Development API (https://api.dev.tradly.app)
- `sandbox` - Sandbox API (https://api.sandbox.tradly.app)
## Best Practices
1. **Initialize Once:** Initialize auth or tradly once at app startup
2. **Use Auth Package:** For automatic key management, use `@tradly/auth`
3. **Error Handling:** Always check for errors before using response
4. **TypeScript:** Use TypeScript for better type safety
5. **Async/Await:** Use async/await for cleaner code
## TypeScript Support
While tradly is written in JavaScript, it works with TypeScript:
```typescript
import TradlySDK from "tradly";
const [error, response]: [any, any] = await TradlySDK.app.getListings({
bodyParam: {},
});
```
## Community Support
For general help using Tradly:
- [Official Tradly Forum](https://community.tradly.app)
- [YouTube Channel](https://www.youtube.com/channel/UCRpXlfFBX5nayubY70-IFEA)
- [API Documentation](https://developer.tradly.app)
## License
ISC
## Repository
https://github.com/TRADLY-PLATFORM
**Note:** This SDK automatically integrates with `@tradly/auth` when available.
For authentication, we recommend using `@tradly/auth` package which provides
automatic key management, storage, and better developer experience.