@stackbe/sdk 0.7.4 → 0.8.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.mts +251 -1
- package/dist/index.d.ts +251 -1
- package/dist/index.js +213 -0
- package/dist/index.mjs +211 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1653,6 +1653,252 @@ declare class FeatureRequestsClient {
|
|
|
1653
1653
|
getCustomerActivity(customerId: string): Promise<CustomerFeatureActivity>;
|
|
1654
1654
|
}
|
|
1655
1655
|
|
|
1656
|
+
interface AffiliateInfo {
|
|
1657
|
+
enrolled: boolean;
|
|
1658
|
+
id?: string;
|
|
1659
|
+
code?: string;
|
|
1660
|
+
status?: 'active' | 'suspended' | 'pending';
|
|
1661
|
+
totalEarned?: number;
|
|
1662
|
+
pendingBalance?: number;
|
|
1663
|
+
paidOut?: number;
|
|
1664
|
+
totalReferrals?: number;
|
|
1665
|
+
totalConversions?: number;
|
|
1666
|
+
createdAt?: string;
|
|
1667
|
+
}
|
|
1668
|
+
interface AffiliateEnrollment {
|
|
1669
|
+
id: string;
|
|
1670
|
+
code: string;
|
|
1671
|
+
status: string;
|
|
1672
|
+
createdAt: string;
|
|
1673
|
+
}
|
|
1674
|
+
interface AffiliateStats {
|
|
1675
|
+
enrolled: boolean;
|
|
1676
|
+
totalEarned: number;
|
|
1677
|
+
pendingBalance: number;
|
|
1678
|
+
paidOut: number;
|
|
1679
|
+
totalReferrals: number;
|
|
1680
|
+
totalConversions: number;
|
|
1681
|
+
}
|
|
1682
|
+
interface AffiliateCommission {
|
|
1683
|
+
id: string;
|
|
1684
|
+
amount: number;
|
|
1685
|
+
currency: string;
|
|
1686
|
+
status: 'pending' | 'approved' | 'paid' | 'rejected';
|
|
1687
|
+
createdAt: string;
|
|
1688
|
+
referredCustomerEmail?: string;
|
|
1689
|
+
}
|
|
1690
|
+
interface AffiliateCommissionsResponse {
|
|
1691
|
+
commissions: AffiliateCommission[];
|
|
1692
|
+
total: number;
|
|
1693
|
+
}
|
|
1694
|
+
interface TrackReferralResponse {
|
|
1695
|
+
token: string;
|
|
1696
|
+
expiresInDays: number;
|
|
1697
|
+
}
|
|
1698
|
+
interface EnrollOptions {
|
|
1699
|
+
/** Preferred referral code (auto-generated if not provided) */
|
|
1700
|
+
code?: string;
|
|
1701
|
+
/** PayPal email for payouts */
|
|
1702
|
+
payoutEmail?: string;
|
|
1703
|
+
}
|
|
1704
|
+
declare class AffiliatesClient {
|
|
1705
|
+
private http;
|
|
1706
|
+
constructor(http: HttpClient);
|
|
1707
|
+
/**
|
|
1708
|
+
* Get the current customer's affiliate info.
|
|
1709
|
+
* Requires customer session token.
|
|
1710
|
+
*
|
|
1711
|
+
* @example
|
|
1712
|
+
* ```typescript
|
|
1713
|
+
* const affiliate = await stackbe.affiliates.get();
|
|
1714
|
+
*
|
|
1715
|
+
* if (affiliate.enrolled) {
|
|
1716
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1717
|
+
* console.log(`Earnings: $${(affiliate.totalEarned! / 100).toFixed(2)}`);
|
|
1718
|
+
* } else {
|
|
1719
|
+
* console.log('Not enrolled in affiliate program');
|
|
1720
|
+
* }
|
|
1721
|
+
* ```
|
|
1722
|
+
*/
|
|
1723
|
+
get(): Promise<AffiliateInfo>;
|
|
1724
|
+
/**
|
|
1725
|
+
* Enroll the current customer as an affiliate.
|
|
1726
|
+
* Requires customer session token.
|
|
1727
|
+
*
|
|
1728
|
+
* @example
|
|
1729
|
+
* ```typescript
|
|
1730
|
+
* // Enroll with auto-generated code
|
|
1731
|
+
* const affiliate = await stackbe.affiliates.enroll();
|
|
1732
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1733
|
+
*
|
|
1734
|
+
* // Enroll with custom code
|
|
1735
|
+
* const affiliate = await stackbe.affiliates.enroll({
|
|
1736
|
+
* code: 'MYCODE',
|
|
1737
|
+
* payoutEmail: 'payouts@example.com',
|
|
1738
|
+
* });
|
|
1739
|
+
* ```
|
|
1740
|
+
*/
|
|
1741
|
+
enroll(options?: EnrollOptions): Promise<AffiliateEnrollment>;
|
|
1742
|
+
/**
|
|
1743
|
+
* Get affiliate statistics.
|
|
1744
|
+
* Requires customer session token.
|
|
1745
|
+
*
|
|
1746
|
+
* @example
|
|
1747
|
+
* ```typescript
|
|
1748
|
+
* const stats = await stackbe.affiliates.getStats();
|
|
1749
|
+
*
|
|
1750
|
+
* if (stats.enrolled) {
|
|
1751
|
+
* console.log(`Total earned: $${(stats.totalEarned / 100).toFixed(2)}`);
|
|
1752
|
+
* console.log(`Pending: $${(stats.pendingBalance / 100).toFixed(2)}`);
|
|
1753
|
+
* console.log(`Referrals: ${stats.totalReferrals}`);
|
|
1754
|
+
* console.log(`Conversions: ${stats.totalConversions}`);
|
|
1755
|
+
* }
|
|
1756
|
+
* ```
|
|
1757
|
+
*/
|
|
1758
|
+
getStats(): Promise<AffiliateStats>;
|
|
1759
|
+
/**
|
|
1760
|
+
* Get affiliate commission history.
|
|
1761
|
+
* Requires customer session token.
|
|
1762
|
+
*
|
|
1763
|
+
* @example
|
|
1764
|
+
* ```typescript
|
|
1765
|
+
* const { commissions, total } = await stackbe.affiliates.getCommissions();
|
|
1766
|
+
*
|
|
1767
|
+
* commissions.forEach((c) => {
|
|
1768
|
+
* console.log(`$${(c.amount / 100).toFixed(2)} - ${c.status}`);
|
|
1769
|
+
* });
|
|
1770
|
+
* ```
|
|
1771
|
+
*/
|
|
1772
|
+
getCommissions(): Promise<AffiliateCommissionsResponse>;
|
|
1773
|
+
/**
|
|
1774
|
+
* Track a referral click (store token for attribution).
|
|
1775
|
+
* Call this when a user lands on your site with a referral code.
|
|
1776
|
+
* Requires API key.
|
|
1777
|
+
*
|
|
1778
|
+
* @example
|
|
1779
|
+
* ```typescript
|
|
1780
|
+
* // In your landing page handler
|
|
1781
|
+
* const refCode = req.query.ref;
|
|
1782
|
+
* if (refCode) {
|
|
1783
|
+
* const { token, expiresInDays } = await stackbe.affiliates.trackReferral(refCode);
|
|
1784
|
+
* // Store token in cookie for attribution on signup
|
|
1785
|
+
* res.cookie('ref_token', token, { maxAge: expiresInDays * 24 * 60 * 60 * 1000 });
|
|
1786
|
+
* }
|
|
1787
|
+
* ```
|
|
1788
|
+
*/
|
|
1789
|
+
trackReferral(code: string, referralUrl?: string): Promise<TrackReferralResponse>;
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
interface EarlyAccessSignup {
|
|
1793
|
+
id: string;
|
|
1794
|
+
status: 'new' | 'invited' | 'converted' | 'archived';
|
|
1795
|
+
email: string;
|
|
1796
|
+
name?: string;
|
|
1797
|
+
createdAt: string;
|
|
1798
|
+
}
|
|
1799
|
+
interface CreateEarlyAccessSignupOptions {
|
|
1800
|
+
email: string;
|
|
1801
|
+
name?: string;
|
|
1802
|
+
note?: string;
|
|
1803
|
+
metadata?: Record<string, any>;
|
|
1804
|
+
}
|
|
1805
|
+
interface EarlyAccessSignupListResponse {
|
|
1806
|
+
items: Array<{
|
|
1807
|
+
id: string;
|
|
1808
|
+
email: string;
|
|
1809
|
+
name?: string;
|
|
1810
|
+
status: string;
|
|
1811
|
+
metadata?: Record<string, any>;
|
|
1812
|
+
createdAt: string;
|
|
1813
|
+
}>;
|
|
1814
|
+
page: number;
|
|
1815
|
+
limit: number;
|
|
1816
|
+
total: number;
|
|
1817
|
+
hasMore: boolean;
|
|
1818
|
+
}
|
|
1819
|
+
interface ListEarlyAccessOptions {
|
|
1820
|
+
status?: 'new' | 'invited' | 'converted' | 'archived';
|
|
1821
|
+
search?: string;
|
|
1822
|
+
limit?: number;
|
|
1823
|
+
offset?: number;
|
|
1824
|
+
}
|
|
1825
|
+
declare class EarlyAccessClient {
|
|
1826
|
+
private http;
|
|
1827
|
+
private appId;
|
|
1828
|
+
constructor(http: HttpClient, appId: string);
|
|
1829
|
+
/**
|
|
1830
|
+
* Submit an early access / waitlist signup.
|
|
1831
|
+
* This is a public endpoint - no auth required.
|
|
1832
|
+
*
|
|
1833
|
+
* @example
|
|
1834
|
+
* ```typescript
|
|
1835
|
+
* // Basic signup
|
|
1836
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1837
|
+
* email: 'user@example.com',
|
|
1838
|
+
* });
|
|
1839
|
+
*
|
|
1840
|
+
* // With additional info
|
|
1841
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1842
|
+
* email: 'user@example.com',
|
|
1843
|
+
* name: 'John Doe',
|
|
1844
|
+
* note: 'Interested in enterprise features',
|
|
1845
|
+
* metadata: { source: 'landing_page', campaign: 'launch' },
|
|
1846
|
+
* });
|
|
1847
|
+
*
|
|
1848
|
+
* console.log(`Signup ID: ${signup.id}`);
|
|
1849
|
+
* ```
|
|
1850
|
+
*/
|
|
1851
|
+
signup(options: CreateEarlyAccessSignupOptions): Promise<EarlyAccessSignup>;
|
|
1852
|
+
/**
|
|
1853
|
+
* List early access signups.
|
|
1854
|
+
* Requires API key (admin).
|
|
1855
|
+
*
|
|
1856
|
+
* @example
|
|
1857
|
+
* ```typescript
|
|
1858
|
+
* // Get all signups
|
|
1859
|
+
* const { items, total } = await stackbe.earlyAccess.list();
|
|
1860
|
+
*
|
|
1861
|
+
* // Filter by status
|
|
1862
|
+
* const newSignups = await stackbe.earlyAccess.list({ status: 'new' });
|
|
1863
|
+
*
|
|
1864
|
+
* // Search by email
|
|
1865
|
+
* const results = await stackbe.earlyAccess.list({ search: 'example.com' });
|
|
1866
|
+
*
|
|
1867
|
+
* // Paginate
|
|
1868
|
+
* const page2 = await stackbe.earlyAccess.list({ offset: 50, limit: 50 });
|
|
1869
|
+
* ```
|
|
1870
|
+
*/
|
|
1871
|
+
list(options?: ListEarlyAccessOptions): Promise<EarlyAccessSignupListResponse>;
|
|
1872
|
+
/**
|
|
1873
|
+
* Get a specific early access signup.
|
|
1874
|
+
* Requires API key (admin).
|
|
1875
|
+
*
|
|
1876
|
+
* @example
|
|
1877
|
+
* ```typescript
|
|
1878
|
+
* const signup = await stackbe.earlyAccess.get('signup_123');
|
|
1879
|
+
* console.log(`${signup.email} - ${signup.status}`);
|
|
1880
|
+
* ```
|
|
1881
|
+
*/
|
|
1882
|
+
get(signupId: string): Promise<EarlyAccessSignup>;
|
|
1883
|
+
/**
|
|
1884
|
+
* Update the status of an early access signup.
|
|
1885
|
+
* Requires API key (admin).
|
|
1886
|
+
*
|
|
1887
|
+
* @example
|
|
1888
|
+
* ```typescript
|
|
1889
|
+
* // Mark as invited
|
|
1890
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'invited');
|
|
1891
|
+
*
|
|
1892
|
+
* // Mark as converted (user signed up)
|
|
1893
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'converted');
|
|
1894
|
+
*
|
|
1895
|
+
* // Archive
|
|
1896
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'archived');
|
|
1897
|
+
* ```
|
|
1898
|
+
*/
|
|
1899
|
+
updateStatus(signupId: string, status: 'new' | 'invited' | 'converted' | 'archived'): Promise<EarlyAccessSignup>;
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1656
1902
|
declare class StackBE {
|
|
1657
1903
|
private http;
|
|
1658
1904
|
private appId;
|
|
@@ -1676,6 +1922,10 @@ declare class StackBE {
|
|
|
1676
1922
|
readonly products: ProductsClient;
|
|
1677
1923
|
/** Feature requests and voting */
|
|
1678
1924
|
readonly featureRequests: FeatureRequestsClient;
|
|
1925
|
+
/** Affiliate program (customer-facing) */
|
|
1926
|
+
readonly affiliates: AffiliatesClient;
|
|
1927
|
+
/** Early access / waitlist signups */
|
|
1928
|
+
readonly earlyAccess: EarlyAccessClient;
|
|
1679
1929
|
/**
|
|
1680
1930
|
* Create a new StackBE client.
|
|
1681
1931
|
*
|
|
@@ -1776,4 +2026,4 @@ declare class StackBE {
|
|
|
1776
2026
|
}): (req: any, res: any, next: any) => Promise<any>;
|
|
1777
2027
|
}
|
|
1778
2028
|
|
|
1779
|
-
export { type AddMemberOptions, type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type CreateFeatureRequestOptions, type CreateOrganizationOptions, type Customer, type CustomerCreatedEvent, type CustomerFeatureActivity, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EntitlementsClient, type EntitlementsResponse, type FeatureRequest, type FeatureRequestComment, type FeatureRequestListResponse, FeatureRequestsClient, type InterestedCustomer, type InterestedCustomersResponse, type InviteMemberOptions, type ListFeatureRequestsOptions, type ListPlansOptions, type ListProductsOptions, type MagicLinkOptions, type MagicLinkResponse, type Organization, type OrganizationInvite, type OrganizationMember, OrganizationsClient, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, type Plan, PlansClient, type Product, ProductsClient, type SessionResponse, StackBE, type StackBEConfig, StackBEError, type StackBEErrorCode, type StackBEErrorResponse, type Subscription, type SubscriptionCancelledEvent, type SubscriptionCreatedEvent, type SubscriptionRenewedEvent, type SubscriptionUpdatedEvent, type SubscriptionWebhookPayload, type SubscriptionWithPlan, SubscriptionsClient, type TrackUsageOptions, type TrackUsageResponse, type TrialEndedEvent, type TrialStartedEvent, type UpdateCustomerOptions, type UpdateOrganizationOptions, type UpdateSubscriptionOptions, UsageClient, type UsageMetric, type VerifyTokenResponse, type WebhookEvent, type WebhookEventType };
|
|
2029
|
+
export { type AddMemberOptions, type AffiliateCommission, type AffiliateCommissionsResponse, type AffiliateEnrollment, type AffiliateInfo, type AffiliateStats, AffiliatesClient, type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type CreateEarlyAccessSignupOptions, type CreateFeatureRequestOptions, type CreateOrganizationOptions, type Customer, type CustomerCreatedEvent, type CustomerFeatureActivity, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EarlyAccessClient, type EarlyAccessSignup, type EarlyAccessSignupListResponse, type EnrollOptions, EntitlementsClient, type EntitlementsResponse, type FeatureRequest, type FeatureRequestComment, type FeatureRequestListResponse, FeatureRequestsClient, type InterestedCustomer, type InterestedCustomersResponse, type InviteMemberOptions, type ListEarlyAccessOptions, type ListFeatureRequestsOptions, type ListPlansOptions, type ListProductsOptions, type MagicLinkOptions, type MagicLinkResponse, type Organization, type OrganizationInvite, type OrganizationMember, OrganizationsClient, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, type Plan, PlansClient, type Product, ProductsClient, type SessionResponse, StackBE, type StackBEConfig, StackBEError, type StackBEErrorCode, type StackBEErrorResponse, type Subscription, type SubscriptionCancelledEvent, type SubscriptionCreatedEvent, type SubscriptionRenewedEvent, type SubscriptionUpdatedEvent, type SubscriptionWebhookPayload, type SubscriptionWithPlan, SubscriptionsClient, type TrackReferralResponse, type TrackUsageOptions, type TrackUsageResponse, type TrialEndedEvent, type TrialStartedEvent, type UpdateCustomerOptions, type UpdateOrganizationOptions, type UpdateSubscriptionOptions, UsageClient, type UsageMetric, type VerifyTokenResponse, type WebhookEvent, type WebhookEventType };
|
package/dist/index.d.ts
CHANGED
|
@@ -1653,6 +1653,252 @@ declare class FeatureRequestsClient {
|
|
|
1653
1653
|
getCustomerActivity(customerId: string): Promise<CustomerFeatureActivity>;
|
|
1654
1654
|
}
|
|
1655
1655
|
|
|
1656
|
+
interface AffiliateInfo {
|
|
1657
|
+
enrolled: boolean;
|
|
1658
|
+
id?: string;
|
|
1659
|
+
code?: string;
|
|
1660
|
+
status?: 'active' | 'suspended' | 'pending';
|
|
1661
|
+
totalEarned?: number;
|
|
1662
|
+
pendingBalance?: number;
|
|
1663
|
+
paidOut?: number;
|
|
1664
|
+
totalReferrals?: number;
|
|
1665
|
+
totalConversions?: number;
|
|
1666
|
+
createdAt?: string;
|
|
1667
|
+
}
|
|
1668
|
+
interface AffiliateEnrollment {
|
|
1669
|
+
id: string;
|
|
1670
|
+
code: string;
|
|
1671
|
+
status: string;
|
|
1672
|
+
createdAt: string;
|
|
1673
|
+
}
|
|
1674
|
+
interface AffiliateStats {
|
|
1675
|
+
enrolled: boolean;
|
|
1676
|
+
totalEarned: number;
|
|
1677
|
+
pendingBalance: number;
|
|
1678
|
+
paidOut: number;
|
|
1679
|
+
totalReferrals: number;
|
|
1680
|
+
totalConversions: number;
|
|
1681
|
+
}
|
|
1682
|
+
interface AffiliateCommission {
|
|
1683
|
+
id: string;
|
|
1684
|
+
amount: number;
|
|
1685
|
+
currency: string;
|
|
1686
|
+
status: 'pending' | 'approved' | 'paid' | 'rejected';
|
|
1687
|
+
createdAt: string;
|
|
1688
|
+
referredCustomerEmail?: string;
|
|
1689
|
+
}
|
|
1690
|
+
interface AffiliateCommissionsResponse {
|
|
1691
|
+
commissions: AffiliateCommission[];
|
|
1692
|
+
total: number;
|
|
1693
|
+
}
|
|
1694
|
+
interface TrackReferralResponse {
|
|
1695
|
+
token: string;
|
|
1696
|
+
expiresInDays: number;
|
|
1697
|
+
}
|
|
1698
|
+
interface EnrollOptions {
|
|
1699
|
+
/** Preferred referral code (auto-generated if not provided) */
|
|
1700
|
+
code?: string;
|
|
1701
|
+
/** PayPal email for payouts */
|
|
1702
|
+
payoutEmail?: string;
|
|
1703
|
+
}
|
|
1704
|
+
declare class AffiliatesClient {
|
|
1705
|
+
private http;
|
|
1706
|
+
constructor(http: HttpClient);
|
|
1707
|
+
/**
|
|
1708
|
+
* Get the current customer's affiliate info.
|
|
1709
|
+
* Requires customer session token.
|
|
1710
|
+
*
|
|
1711
|
+
* @example
|
|
1712
|
+
* ```typescript
|
|
1713
|
+
* const affiliate = await stackbe.affiliates.get();
|
|
1714
|
+
*
|
|
1715
|
+
* if (affiliate.enrolled) {
|
|
1716
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1717
|
+
* console.log(`Earnings: $${(affiliate.totalEarned! / 100).toFixed(2)}`);
|
|
1718
|
+
* } else {
|
|
1719
|
+
* console.log('Not enrolled in affiliate program');
|
|
1720
|
+
* }
|
|
1721
|
+
* ```
|
|
1722
|
+
*/
|
|
1723
|
+
get(): Promise<AffiliateInfo>;
|
|
1724
|
+
/**
|
|
1725
|
+
* Enroll the current customer as an affiliate.
|
|
1726
|
+
* Requires customer session token.
|
|
1727
|
+
*
|
|
1728
|
+
* @example
|
|
1729
|
+
* ```typescript
|
|
1730
|
+
* // Enroll with auto-generated code
|
|
1731
|
+
* const affiliate = await stackbe.affiliates.enroll();
|
|
1732
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1733
|
+
*
|
|
1734
|
+
* // Enroll with custom code
|
|
1735
|
+
* const affiliate = await stackbe.affiliates.enroll({
|
|
1736
|
+
* code: 'MYCODE',
|
|
1737
|
+
* payoutEmail: 'payouts@example.com',
|
|
1738
|
+
* });
|
|
1739
|
+
* ```
|
|
1740
|
+
*/
|
|
1741
|
+
enroll(options?: EnrollOptions): Promise<AffiliateEnrollment>;
|
|
1742
|
+
/**
|
|
1743
|
+
* Get affiliate statistics.
|
|
1744
|
+
* Requires customer session token.
|
|
1745
|
+
*
|
|
1746
|
+
* @example
|
|
1747
|
+
* ```typescript
|
|
1748
|
+
* const stats = await stackbe.affiliates.getStats();
|
|
1749
|
+
*
|
|
1750
|
+
* if (stats.enrolled) {
|
|
1751
|
+
* console.log(`Total earned: $${(stats.totalEarned / 100).toFixed(2)}`);
|
|
1752
|
+
* console.log(`Pending: $${(stats.pendingBalance / 100).toFixed(2)}`);
|
|
1753
|
+
* console.log(`Referrals: ${stats.totalReferrals}`);
|
|
1754
|
+
* console.log(`Conversions: ${stats.totalConversions}`);
|
|
1755
|
+
* }
|
|
1756
|
+
* ```
|
|
1757
|
+
*/
|
|
1758
|
+
getStats(): Promise<AffiliateStats>;
|
|
1759
|
+
/**
|
|
1760
|
+
* Get affiliate commission history.
|
|
1761
|
+
* Requires customer session token.
|
|
1762
|
+
*
|
|
1763
|
+
* @example
|
|
1764
|
+
* ```typescript
|
|
1765
|
+
* const { commissions, total } = await stackbe.affiliates.getCommissions();
|
|
1766
|
+
*
|
|
1767
|
+
* commissions.forEach((c) => {
|
|
1768
|
+
* console.log(`$${(c.amount / 100).toFixed(2)} - ${c.status}`);
|
|
1769
|
+
* });
|
|
1770
|
+
* ```
|
|
1771
|
+
*/
|
|
1772
|
+
getCommissions(): Promise<AffiliateCommissionsResponse>;
|
|
1773
|
+
/**
|
|
1774
|
+
* Track a referral click (store token for attribution).
|
|
1775
|
+
* Call this when a user lands on your site with a referral code.
|
|
1776
|
+
* Requires API key.
|
|
1777
|
+
*
|
|
1778
|
+
* @example
|
|
1779
|
+
* ```typescript
|
|
1780
|
+
* // In your landing page handler
|
|
1781
|
+
* const refCode = req.query.ref;
|
|
1782
|
+
* if (refCode) {
|
|
1783
|
+
* const { token, expiresInDays } = await stackbe.affiliates.trackReferral(refCode);
|
|
1784
|
+
* // Store token in cookie for attribution on signup
|
|
1785
|
+
* res.cookie('ref_token', token, { maxAge: expiresInDays * 24 * 60 * 60 * 1000 });
|
|
1786
|
+
* }
|
|
1787
|
+
* ```
|
|
1788
|
+
*/
|
|
1789
|
+
trackReferral(code: string, referralUrl?: string): Promise<TrackReferralResponse>;
|
|
1790
|
+
}
|
|
1791
|
+
|
|
1792
|
+
interface EarlyAccessSignup {
|
|
1793
|
+
id: string;
|
|
1794
|
+
status: 'new' | 'invited' | 'converted' | 'archived';
|
|
1795
|
+
email: string;
|
|
1796
|
+
name?: string;
|
|
1797
|
+
createdAt: string;
|
|
1798
|
+
}
|
|
1799
|
+
interface CreateEarlyAccessSignupOptions {
|
|
1800
|
+
email: string;
|
|
1801
|
+
name?: string;
|
|
1802
|
+
note?: string;
|
|
1803
|
+
metadata?: Record<string, any>;
|
|
1804
|
+
}
|
|
1805
|
+
interface EarlyAccessSignupListResponse {
|
|
1806
|
+
items: Array<{
|
|
1807
|
+
id: string;
|
|
1808
|
+
email: string;
|
|
1809
|
+
name?: string;
|
|
1810
|
+
status: string;
|
|
1811
|
+
metadata?: Record<string, any>;
|
|
1812
|
+
createdAt: string;
|
|
1813
|
+
}>;
|
|
1814
|
+
page: number;
|
|
1815
|
+
limit: number;
|
|
1816
|
+
total: number;
|
|
1817
|
+
hasMore: boolean;
|
|
1818
|
+
}
|
|
1819
|
+
interface ListEarlyAccessOptions {
|
|
1820
|
+
status?: 'new' | 'invited' | 'converted' | 'archived';
|
|
1821
|
+
search?: string;
|
|
1822
|
+
limit?: number;
|
|
1823
|
+
offset?: number;
|
|
1824
|
+
}
|
|
1825
|
+
declare class EarlyAccessClient {
|
|
1826
|
+
private http;
|
|
1827
|
+
private appId;
|
|
1828
|
+
constructor(http: HttpClient, appId: string);
|
|
1829
|
+
/**
|
|
1830
|
+
* Submit an early access / waitlist signup.
|
|
1831
|
+
* This is a public endpoint - no auth required.
|
|
1832
|
+
*
|
|
1833
|
+
* @example
|
|
1834
|
+
* ```typescript
|
|
1835
|
+
* // Basic signup
|
|
1836
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1837
|
+
* email: 'user@example.com',
|
|
1838
|
+
* });
|
|
1839
|
+
*
|
|
1840
|
+
* // With additional info
|
|
1841
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1842
|
+
* email: 'user@example.com',
|
|
1843
|
+
* name: 'John Doe',
|
|
1844
|
+
* note: 'Interested in enterprise features',
|
|
1845
|
+
* metadata: { source: 'landing_page', campaign: 'launch' },
|
|
1846
|
+
* });
|
|
1847
|
+
*
|
|
1848
|
+
* console.log(`Signup ID: ${signup.id}`);
|
|
1849
|
+
* ```
|
|
1850
|
+
*/
|
|
1851
|
+
signup(options: CreateEarlyAccessSignupOptions): Promise<EarlyAccessSignup>;
|
|
1852
|
+
/**
|
|
1853
|
+
* List early access signups.
|
|
1854
|
+
* Requires API key (admin).
|
|
1855
|
+
*
|
|
1856
|
+
* @example
|
|
1857
|
+
* ```typescript
|
|
1858
|
+
* // Get all signups
|
|
1859
|
+
* const { items, total } = await stackbe.earlyAccess.list();
|
|
1860
|
+
*
|
|
1861
|
+
* // Filter by status
|
|
1862
|
+
* const newSignups = await stackbe.earlyAccess.list({ status: 'new' });
|
|
1863
|
+
*
|
|
1864
|
+
* // Search by email
|
|
1865
|
+
* const results = await stackbe.earlyAccess.list({ search: 'example.com' });
|
|
1866
|
+
*
|
|
1867
|
+
* // Paginate
|
|
1868
|
+
* const page2 = await stackbe.earlyAccess.list({ offset: 50, limit: 50 });
|
|
1869
|
+
* ```
|
|
1870
|
+
*/
|
|
1871
|
+
list(options?: ListEarlyAccessOptions): Promise<EarlyAccessSignupListResponse>;
|
|
1872
|
+
/**
|
|
1873
|
+
* Get a specific early access signup.
|
|
1874
|
+
* Requires API key (admin).
|
|
1875
|
+
*
|
|
1876
|
+
* @example
|
|
1877
|
+
* ```typescript
|
|
1878
|
+
* const signup = await stackbe.earlyAccess.get('signup_123');
|
|
1879
|
+
* console.log(`${signup.email} - ${signup.status}`);
|
|
1880
|
+
* ```
|
|
1881
|
+
*/
|
|
1882
|
+
get(signupId: string): Promise<EarlyAccessSignup>;
|
|
1883
|
+
/**
|
|
1884
|
+
* Update the status of an early access signup.
|
|
1885
|
+
* Requires API key (admin).
|
|
1886
|
+
*
|
|
1887
|
+
* @example
|
|
1888
|
+
* ```typescript
|
|
1889
|
+
* // Mark as invited
|
|
1890
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'invited');
|
|
1891
|
+
*
|
|
1892
|
+
* // Mark as converted (user signed up)
|
|
1893
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'converted');
|
|
1894
|
+
*
|
|
1895
|
+
* // Archive
|
|
1896
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'archived');
|
|
1897
|
+
* ```
|
|
1898
|
+
*/
|
|
1899
|
+
updateStatus(signupId: string, status: 'new' | 'invited' | 'converted' | 'archived'): Promise<EarlyAccessSignup>;
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1656
1902
|
declare class StackBE {
|
|
1657
1903
|
private http;
|
|
1658
1904
|
private appId;
|
|
@@ -1676,6 +1922,10 @@ declare class StackBE {
|
|
|
1676
1922
|
readonly products: ProductsClient;
|
|
1677
1923
|
/** Feature requests and voting */
|
|
1678
1924
|
readonly featureRequests: FeatureRequestsClient;
|
|
1925
|
+
/** Affiliate program (customer-facing) */
|
|
1926
|
+
readonly affiliates: AffiliatesClient;
|
|
1927
|
+
/** Early access / waitlist signups */
|
|
1928
|
+
readonly earlyAccess: EarlyAccessClient;
|
|
1679
1929
|
/**
|
|
1680
1930
|
* Create a new StackBE client.
|
|
1681
1931
|
*
|
|
@@ -1776,4 +2026,4 @@ declare class StackBE {
|
|
|
1776
2026
|
}): (req: any, res: any, next: any) => Promise<any>;
|
|
1777
2027
|
}
|
|
1778
2028
|
|
|
1779
|
-
export { type AddMemberOptions, type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type CreateFeatureRequestOptions, type CreateOrganizationOptions, type Customer, type CustomerCreatedEvent, type CustomerFeatureActivity, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EntitlementsClient, type EntitlementsResponse, type FeatureRequest, type FeatureRequestComment, type FeatureRequestListResponse, FeatureRequestsClient, type InterestedCustomer, type InterestedCustomersResponse, type InviteMemberOptions, type ListFeatureRequestsOptions, type ListPlansOptions, type ListProductsOptions, type MagicLinkOptions, type MagicLinkResponse, type Organization, type OrganizationInvite, type OrganizationMember, OrganizationsClient, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, type Plan, PlansClient, type Product, ProductsClient, type SessionResponse, StackBE, type StackBEConfig, StackBEError, type StackBEErrorCode, type StackBEErrorResponse, type Subscription, type SubscriptionCancelledEvent, type SubscriptionCreatedEvent, type SubscriptionRenewedEvent, type SubscriptionUpdatedEvent, type SubscriptionWebhookPayload, type SubscriptionWithPlan, SubscriptionsClient, type TrackUsageOptions, type TrackUsageResponse, type TrialEndedEvent, type TrialStartedEvent, type UpdateCustomerOptions, type UpdateOrganizationOptions, type UpdateSubscriptionOptions, UsageClient, type UsageMetric, type VerifyTokenResponse, type WebhookEvent, type WebhookEventType };
|
|
2029
|
+
export { type AddMemberOptions, type AffiliateCommission, type AffiliateCommissionsResponse, type AffiliateEnrollment, type AffiliateInfo, type AffiliateStats, AffiliatesClient, type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type CreateEarlyAccessSignupOptions, type CreateFeatureRequestOptions, type CreateOrganizationOptions, type Customer, type CustomerCreatedEvent, type CustomerFeatureActivity, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EarlyAccessClient, type EarlyAccessSignup, type EarlyAccessSignupListResponse, type EnrollOptions, EntitlementsClient, type EntitlementsResponse, type FeatureRequest, type FeatureRequestComment, type FeatureRequestListResponse, FeatureRequestsClient, type InterestedCustomer, type InterestedCustomersResponse, type InviteMemberOptions, type ListEarlyAccessOptions, type ListFeatureRequestsOptions, type ListPlansOptions, type ListProductsOptions, type MagicLinkOptions, type MagicLinkResponse, type Organization, type OrganizationInvite, type OrganizationMember, OrganizationsClient, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, type Plan, PlansClient, type Product, ProductsClient, type SessionResponse, StackBE, type StackBEConfig, StackBEError, type StackBEErrorCode, type StackBEErrorResponse, type Subscription, type SubscriptionCancelledEvent, type SubscriptionCreatedEvent, type SubscriptionRenewedEvent, type SubscriptionUpdatedEvent, type SubscriptionWebhookPayload, type SubscriptionWithPlan, SubscriptionsClient, type TrackReferralResponse, type TrackUsageOptions, type TrackUsageResponse, type TrialEndedEvent, type TrialStartedEvent, type UpdateCustomerOptions, type UpdateOrganizationOptions, type UpdateSubscriptionOptions, UsageClient, type UsageMetric, type VerifyTokenResponse, type WebhookEvent, type WebhookEventType };
|
package/dist/index.js
CHANGED
|
@@ -20,9 +20,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
+
AffiliatesClient: () => AffiliatesClient,
|
|
23
24
|
AuthClient: () => AuthClient,
|
|
24
25
|
CheckoutClient: () => CheckoutClient,
|
|
25
26
|
CustomersClient: () => CustomersClient,
|
|
27
|
+
EarlyAccessClient: () => EarlyAccessClient,
|
|
26
28
|
EntitlementsClient: () => EntitlementsClient,
|
|
27
29
|
FeatureRequestsClient: () => FeatureRequestsClient,
|
|
28
30
|
OrganizationsClient: () => OrganizationsClient,
|
|
@@ -1694,6 +1696,213 @@ var FeatureRequestsClient = class {
|
|
|
1694
1696
|
}
|
|
1695
1697
|
};
|
|
1696
1698
|
|
|
1699
|
+
// src/affiliates.ts
|
|
1700
|
+
var AffiliatesClient = class {
|
|
1701
|
+
constructor(http) {
|
|
1702
|
+
this.http = http;
|
|
1703
|
+
}
|
|
1704
|
+
/**
|
|
1705
|
+
* Get the current customer's affiliate info.
|
|
1706
|
+
* Requires customer session token.
|
|
1707
|
+
*
|
|
1708
|
+
* @example
|
|
1709
|
+
* ```typescript
|
|
1710
|
+
* const affiliate = await stackbe.affiliates.get();
|
|
1711
|
+
*
|
|
1712
|
+
* if (affiliate.enrolled) {
|
|
1713
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1714
|
+
* console.log(`Earnings: $${(affiliate.totalEarned! / 100).toFixed(2)}`);
|
|
1715
|
+
* } else {
|
|
1716
|
+
* console.log('Not enrolled in affiliate program');
|
|
1717
|
+
* }
|
|
1718
|
+
* ```
|
|
1719
|
+
*/
|
|
1720
|
+
async get() {
|
|
1721
|
+
return this.http.get("/v1/affiliate");
|
|
1722
|
+
}
|
|
1723
|
+
/**
|
|
1724
|
+
* Enroll the current customer as an affiliate.
|
|
1725
|
+
* Requires customer session token.
|
|
1726
|
+
*
|
|
1727
|
+
* @example
|
|
1728
|
+
* ```typescript
|
|
1729
|
+
* // Enroll with auto-generated code
|
|
1730
|
+
* const affiliate = await stackbe.affiliates.enroll();
|
|
1731
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1732
|
+
*
|
|
1733
|
+
* // Enroll with custom code
|
|
1734
|
+
* const affiliate = await stackbe.affiliates.enroll({
|
|
1735
|
+
* code: 'MYCODE',
|
|
1736
|
+
* payoutEmail: 'payouts@example.com',
|
|
1737
|
+
* });
|
|
1738
|
+
* ```
|
|
1739
|
+
*/
|
|
1740
|
+
async enroll(options = {}) {
|
|
1741
|
+
return this.http.post("/v1/affiliate/enroll", options);
|
|
1742
|
+
}
|
|
1743
|
+
/**
|
|
1744
|
+
* Get affiliate statistics.
|
|
1745
|
+
* Requires customer session token.
|
|
1746
|
+
*
|
|
1747
|
+
* @example
|
|
1748
|
+
* ```typescript
|
|
1749
|
+
* const stats = await stackbe.affiliates.getStats();
|
|
1750
|
+
*
|
|
1751
|
+
* if (stats.enrolled) {
|
|
1752
|
+
* console.log(`Total earned: $${(stats.totalEarned / 100).toFixed(2)}`);
|
|
1753
|
+
* console.log(`Pending: $${(stats.pendingBalance / 100).toFixed(2)}`);
|
|
1754
|
+
* console.log(`Referrals: ${stats.totalReferrals}`);
|
|
1755
|
+
* console.log(`Conversions: ${stats.totalConversions}`);
|
|
1756
|
+
* }
|
|
1757
|
+
* ```
|
|
1758
|
+
*/
|
|
1759
|
+
async getStats() {
|
|
1760
|
+
return this.http.get("/v1/affiliate/stats");
|
|
1761
|
+
}
|
|
1762
|
+
/**
|
|
1763
|
+
* Get affiliate commission history.
|
|
1764
|
+
* Requires customer session token.
|
|
1765
|
+
*
|
|
1766
|
+
* @example
|
|
1767
|
+
* ```typescript
|
|
1768
|
+
* const { commissions, total } = await stackbe.affiliates.getCommissions();
|
|
1769
|
+
*
|
|
1770
|
+
* commissions.forEach((c) => {
|
|
1771
|
+
* console.log(`$${(c.amount / 100).toFixed(2)} - ${c.status}`);
|
|
1772
|
+
* });
|
|
1773
|
+
* ```
|
|
1774
|
+
*/
|
|
1775
|
+
async getCommissions() {
|
|
1776
|
+
return this.http.get("/v1/affiliate/commissions");
|
|
1777
|
+
}
|
|
1778
|
+
/**
|
|
1779
|
+
* Track a referral click (store token for attribution).
|
|
1780
|
+
* Call this when a user lands on your site with a referral code.
|
|
1781
|
+
* Requires API key.
|
|
1782
|
+
*
|
|
1783
|
+
* @example
|
|
1784
|
+
* ```typescript
|
|
1785
|
+
* // In your landing page handler
|
|
1786
|
+
* const refCode = req.query.ref;
|
|
1787
|
+
* if (refCode) {
|
|
1788
|
+
* const { token, expiresInDays } = await stackbe.affiliates.trackReferral(refCode);
|
|
1789
|
+
* // Store token in cookie for attribution on signup
|
|
1790
|
+
* res.cookie('ref_token', token, { maxAge: expiresInDays * 24 * 60 * 60 * 1000 });
|
|
1791
|
+
* }
|
|
1792
|
+
* ```
|
|
1793
|
+
*/
|
|
1794
|
+
async trackReferral(code, referralUrl) {
|
|
1795
|
+
return this.http.post("/v1/affiliate/track", {
|
|
1796
|
+
code,
|
|
1797
|
+
referralUrl
|
|
1798
|
+
});
|
|
1799
|
+
}
|
|
1800
|
+
};
|
|
1801
|
+
|
|
1802
|
+
// src/early-access.ts
|
|
1803
|
+
var EarlyAccessClient = class {
|
|
1804
|
+
constructor(http, appId) {
|
|
1805
|
+
this.http = http;
|
|
1806
|
+
this.appId = appId;
|
|
1807
|
+
}
|
|
1808
|
+
/**
|
|
1809
|
+
* Submit an early access / waitlist signup.
|
|
1810
|
+
* This is a public endpoint - no auth required.
|
|
1811
|
+
*
|
|
1812
|
+
* @example
|
|
1813
|
+
* ```typescript
|
|
1814
|
+
* // Basic signup
|
|
1815
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1816
|
+
* email: 'user@example.com',
|
|
1817
|
+
* });
|
|
1818
|
+
*
|
|
1819
|
+
* // With additional info
|
|
1820
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1821
|
+
* email: 'user@example.com',
|
|
1822
|
+
* name: 'John Doe',
|
|
1823
|
+
* note: 'Interested in enterprise features',
|
|
1824
|
+
* metadata: { source: 'landing_page', campaign: 'launch' },
|
|
1825
|
+
* });
|
|
1826
|
+
*
|
|
1827
|
+
* console.log(`Signup ID: ${signup.id}`);
|
|
1828
|
+
* ```
|
|
1829
|
+
*/
|
|
1830
|
+
async signup(options) {
|
|
1831
|
+
return this.http.post(
|
|
1832
|
+
`/v1/apps/${this.appId}/early-access/signups`,
|
|
1833
|
+
options
|
|
1834
|
+
);
|
|
1835
|
+
}
|
|
1836
|
+
// ==================== Admin Methods ====================
|
|
1837
|
+
/**
|
|
1838
|
+
* List early access signups.
|
|
1839
|
+
* Requires API key (admin).
|
|
1840
|
+
*
|
|
1841
|
+
* @example
|
|
1842
|
+
* ```typescript
|
|
1843
|
+
* // Get all signups
|
|
1844
|
+
* const { items, total } = await stackbe.earlyAccess.list();
|
|
1845
|
+
*
|
|
1846
|
+
* // Filter by status
|
|
1847
|
+
* const newSignups = await stackbe.earlyAccess.list({ status: 'new' });
|
|
1848
|
+
*
|
|
1849
|
+
* // Search by email
|
|
1850
|
+
* const results = await stackbe.earlyAccess.list({ search: 'example.com' });
|
|
1851
|
+
*
|
|
1852
|
+
* // Paginate
|
|
1853
|
+
* const page2 = await stackbe.earlyAccess.list({ offset: 50, limit: 50 });
|
|
1854
|
+
* ```
|
|
1855
|
+
*/
|
|
1856
|
+
async list(options = {}) {
|
|
1857
|
+
const params = {};
|
|
1858
|
+
if (options.status) params.status = options.status;
|
|
1859
|
+
if (options.search) params.search = options.search;
|
|
1860
|
+
if (options.limit) params.limit = options.limit;
|
|
1861
|
+
if (options.offset) params.offset = options.offset;
|
|
1862
|
+
return this.http.get(
|
|
1863
|
+
`/v1/apps/${this.appId}/early-access/signups`,
|
|
1864
|
+
params
|
|
1865
|
+
);
|
|
1866
|
+
}
|
|
1867
|
+
/**
|
|
1868
|
+
* Get a specific early access signup.
|
|
1869
|
+
* Requires API key (admin).
|
|
1870
|
+
*
|
|
1871
|
+
* @example
|
|
1872
|
+
* ```typescript
|
|
1873
|
+
* const signup = await stackbe.earlyAccess.get('signup_123');
|
|
1874
|
+
* console.log(`${signup.email} - ${signup.status}`);
|
|
1875
|
+
* ```
|
|
1876
|
+
*/
|
|
1877
|
+
async get(signupId) {
|
|
1878
|
+
return this.http.get(
|
|
1879
|
+
`/v1/apps/${this.appId}/early-access/signups/${signupId}`
|
|
1880
|
+
);
|
|
1881
|
+
}
|
|
1882
|
+
/**
|
|
1883
|
+
* Update the status of an early access signup.
|
|
1884
|
+
* Requires API key (admin).
|
|
1885
|
+
*
|
|
1886
|
+
* @example
|
|
1887
|
+
* ```typescript
|
|
1888
|
+
* // Mark as invited
|
|
1889
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'invited');
|
|
1890
|
+
*
|
|
1891
|
+
* // Mark as converted (user signed up)
|
|
1892
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'converted');
|
|
1893
|
+
*
|
|
1894
|
+
* // Archive
|
|
1895
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'archived');
|
|
1896
|
+
* ```
|
|
1897
|
+
*/
|
|
1898
|
+
async updateStatus(signupId, status) {
|
|
1899
|
+
return this.http.patch(
|
|
1900
|
+
`/v1/apps/${this.appId}/early-access/signups/${signupId}`,
|
|
1901
|
+
{ status }
|
|
1902
|
+
);
|
|
1903
|
+
}
|
|
1904
|
+
};
|
|
1905
|
+
|
|
1697
1906
|
// src/client.ts
|
|
1698
1907
|
var DEFAULT_BASE_URL = "https://api.stackbe.io";
|
|
1699
1908
|
var DEFAULT_TIMEOUT = 3e4;
|
|
@@ -1757,6 +1966,8 @@ var StackBE = class {
|
|
|
1757
1966
|
this.plans = new PlansClient(this.http);
|
|
1758
1967
|
this.products = new ProductsClient(this.http, config.appId);
|
|
1759
1968
|
this.featureRequests = new FeatureRequestsClient(this.http, config.appId);
|
|
1969
|
+
this.affiliates = new AffiliatesClient(this.http);
|
|
1970
|
+
this.earlyAccess = new EarlyAccessClient(this.http, config.appId);
|
|
1760
1971
|
}
|
|
1761
1972
|
/**
|
|
1762
1973
|
* Create a middleware for Express that tracks usage automatically.
|
|
@@ -1890,9 +2101,11 @@ var StackBE = class {
|
|
|
1890
2101
|
};
|
|
1891
2102
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1892
2103
|
0 && (module.exports = {
|
|
2104
|
+
AffiliatesClient,
|
|
1893
2105
|
AuthClient,
|
|
1894
2106
|
CheckoutClient,
|
|
1895
2107
|
CustomersClient,
|
|
2108
|
+
EarlyAccessClient,
|
|
1896
2109
|
EntitlementsClient,
|
|
1897
2110
|
FeatureRequestsClient,
|
|
1898
2111
|
OrganizationsClient,
|
package/dist/index.mjs
CHANGED
|
@@ -1657,6 +1657,213 @@ var FeatureRequestsClient = class {
|
|
|
1657
1657
|
}
|
|
1658
1658
|
};
|
|
1659
1659
|
|
|
1660
|
+
// src/affiliates.ts
|
|
1661
|
+
var AffiliatesClient = class {
|
|
1662
|
+
constructor(http) {
|
|
1663
|
+
this.http = http;
|
|
1664
|
+
}
|
|
1665
|
+
/**
|
|
1666
|
+
* Get the current customer's affiliate info.
|
|
1667
|
+
* Requires customer session token.
|
|
1668
|
+
*
|
|
1669
|
+
* @example
|
|
1670
|
+
* ```typescript
|
|
1671
|
+
* const affiliate = await stackbe.affiliates.get();
|
|
1672
|
+
*
|
|
1673
|
+
* if (affiliate.enrolled) {
|
|
1674
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1675
|
+
* console.log(`Earnings: $${(affiliate.totalEarned! / 100).toFixed(2)}`);
|
|
1676
|
+
* } else {
|
|
1677
|
+
* console.log('Not enrolled in affiliate program');
|
|
1678
|
+
* }
|
|
1679
|
+
* ```
|
|
1680
|
+
*/
|
|
1681
|
+
async get() {
|
|
1682
|
+
return this.http.get("/v1/affiliate");
|
|
1683
|
+
}
|
|
1684
|
+
/**
|
|
1685
|
+
* Enroll the current customer as an affiliate.
|
|
1686
|
+
* Requires customer session token.
|
|
1687
|
+
*
|
|
1688
|
+
* @example
|
|
1689
|
+
* ```typescript
|
|
1690
|
+
* // Enroll with auto-generated code
|
|
1691
|
+
* const affiliate = await stackbe.affiliates.enroll();
|
|
1692
|
+
* console.log(`Your referral code: ${affiliate.code}`);
|
|
1693
|
+
*
|
|
1694
|
+
* // Enroll with custom code
|
|
1695
|
+
* const affiliate = await stackbe.affiliates.enroll({
|
|
1696
|
+
* code: 'MYCODE',
|
|
1697
|
+
* payoutEmail: 'payouts@example.com',
|
|
1698
|
+
* });
|
|
1699
|
+
* ```
|
|
1700
|
+
*/
|
|
1701
|
+
async enroll(options = {}) {
|
|
1702
|
+
return this.http.post("/v1/affiliate/enroll", options);
|
|
1703
|
+
}
|
|
1704
|
+
/**
|
|
1705
|
+
* Get affiliate statistics.
|
|
1706
|
+
* Requires customer session token.
|
|
1707
|
+
*
|
|
1708
|
+
* @example
|
|
1709
|
+
* ```typescript
|
|
1710
|
+
* const stats = await stackbe.affiliates.getStats();
|
|
1711
|
+
*
|
|
1712
|
+
* if (stats.enrolled) {
|
|
1713
|
+
* console.log(`Total earned: $${(stats.totalEarned / 100).toFixed(2)}`);
|
|
1714
|
+
* console.log(`Pending: $${(stats.pendingBalance / 100).toFixed(2)}`);
|
|
1715
|
+
* console.log(`Referrals: ${stats.totalReferrals}`);
|
|
1716
|
+
* console.log(`Conversions: ${stats.totalConversions}`);
|
|
1717
|
+
* }
|
|
1718
|
+
* ```
|
|
1719
|
+
*/
|
|
1720
|
+
async getStats() {
|
|
1721
|
+
return this.http.get("/v1/affiliate/stats");
|
|
1722
|
+
}
|
|
1723
|
+
/**
|
|
1724
|
+
* Get affiliate commission history.
|
|
1725
|
+
* Requires customer session token.
|
|
1726
|
+
*
|
|
1727
|
+
* @example
|
|
1728
|
+
* ```typescript
|
|
1729
|
+
* const { commissions, total } = await stackbe.affiliates.getCommissions();
|
|
1730
|
+
*
|
|
1731
|
+
* commissions.forEach((c) => {
|
|
1732
|
+
* console.log(`$${(c.amount / 100).toFixed(2)} - ${c.status}`);
|
|
1733
|
+
* });
|
|
1734
|
+
* ```
|
|
1735
|
+
*/
|
|
1736
|
+
async getCommissions() {
|
|
1737
|
+
return this.http.get("/v1/affiliate/commissions");
|
|
1738
|
+
}
|
|
1739
|
+
/**
|
|
1740
|
+
* Track a referral click (store token for attribution).
|
|
1741
|
+
* Call this when a user lands on your site with a referral code.
|
|
1742
|
+
* Requires API key.
|
|
1743
|
+
*
|
|
1744
|
+
* @example
|
|
1745
|
+
* ```typescript
|
|
1746
|
+
* // In your landing page handler
|
|
1747
|
+
* const refCode = req.query.ref;
|
|
1748
|
+
* if (refCode) {
|
|
1749
|
+
* const { token, expiresInDays } = await stackbe.affiliates.trackReferral(refCode);
|
|
1750
|
+
* // Store token in cookie for attribution on signup
|
|
1751
|
+
* res.cookie('ref_token', token, { maxAge: expiresInDays * 24 * 60 * 60 * 1000 });
|
|
1752
|
+
* }
|
|
1753
|
+
* ```
|
|
1754
|
+
*/
|
|
1755
|
+
async trackReferral(code, referralUrl) {
|
|
1756
|
+
return this.http.post("/v1/affiliate/track", {
|
|
1757
|
+
code,
|
|
1758
|
+
referralUrl
|
|
1759
|
+
});
|
|
1760
|
+
}
|
|
1761
|
+
};
|
|
1762
|
+
|
|
1763
|
+
// src/early-access.ts
|
|
1764
|
+
var EarlyAccessClient = class {
|
|
1765
|
+
constructor(http, appId) {
|
|
1766
|
+
this.http = http;
|
|
1767
|
+
this.appId = appId;
|
|
1768
|
+
}
|
|
1769
|
+
/**
|
|
1770
|
+
* Submit an early access / waitlist signup.
|
|
1771
|
+
* This is a public endpoint - no auth required.
|
|
1772
|
+
*
|
|
1773
|
+
* @example
|
|
1774
|
+
* ```typescript
|
|
1775
|
+
* // Basic signup
|
|
1776
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1777
|
+
* email: 'user@example.com',
|
|
1778
|
+
* });
|
|
1779
|
+
*
|
|
1780
|
+
* // With additional info
|
|
1781
|
+
* const signup = await stackbe.earlyAccess.signup({
|
|
1782
|
+
* email: 'user@example.com',
|
|
1783
|
+
* name: 'John Doe',
|
|
1784
|
+
* note: 'Interested in enterprise features',
|
|
1785
|
+
* metadata: { source: 'landing_page', campaign: 'launch' },
|
|
1786
|
+
* });
|
|
1787
|
+
*
|
|
1788
|
+
* console.log(`Signup ID: ${signup.id}`);
|
|
1789
|
+
* ```
|
|
1790
|
+
*/
|
|
1791
|
+
async signup(options) {
|
|
1792
|
+
return this.http.post(
|
|
1793
|
+
`/v1/apps/${this.appId}/early-access/signups`,
|
|
1794
|
+
options
|
|
1795
|
+
);
|
|
1796
|
+
}
|
|
1797
|
+
// ==================== Admin Methods ====================
|
|
1798
|
+
/**
|
|
1799
|
+
* List early access signups.
|
|
1800
|
+
* Requires API key (admin).
|
|
1801
|
+
*
|
|
1802
|
+
* @example
|
|
1803
|
+
* ```typescript
|
|
1804
|
+
* // Get all signups
|
|
1805
|
+
* const { items, total } = await stackbe.earlyAccess.list();
|
|
1806
|
+
*
|
|
1807
|
+
* // Filter by status
|
|
1808
|
+
* const newSignups = await stackbe.earlyAccess.list({ status: 'new' });
|
|
1809
|
+
*
|
|
1810
|
+
* // Search by email
|
|
1811
|
+
* const results = await stackbe.earlyAccess.list({ search: 'example.com' });
|
|
1812
|
+
*
|
|
1813
|
+
* // Paginate
|
|
1814
|
+
* const page2 = await stackbe.earlyAccess.list({ offset: 50, limit: 50 });
|
|
1815
|
+
* ```
|
|
1816
|
+
*/
|
|
1817
|
+
async list(options = {}) {
|
|
1818
|
+
const params = {};
|
|
1819
|
+
if (options.status) params.status = options.status;
|
|
1820
|
+
if (options.search) params.search = options.search;
|
|
1821
|
+
if (options.limit) params.limit = options.limit;
|
|
1822
|
+
if (options.offset) params.offset = options.offset;
|
|
1823
|
+
return this.http.get(
|
|
1824
|
+
`/v1/apps/${this.appId}/early-access/signups`,
|
|
1825
|
+
params
|
|
1826
|
+
);
|
|
1827
|
+
}
|
|
1828
|
+
/**
|
|
1829
|
+
* Get a specific early access signup.
|
|
1830
|
+
* Requires API key (admin).
|
|
1831
|
+
*
|
|
1832
|
+
* @example
|
|
1833
|
+
* ```typescript
|
|
1834
|
+
* const signup = await stackbe.earlyAccess.get('signup_123');
|
|
1835
|
+
* console.log(`${signup.email} - ${signup.status}`);
|
|
1836
|
+
* ```
|
|
1837
|
+
*/
|
|
1838
|
+
async get(signupId) {
|
|
1839
|
+
return this.http.get(
|
|
1840
|
+
`/v1/apps/${this.appId}/early-access/signups/${signupId}`
|
|
1841
|
+
);
|
|
1842
|
+
}
|
|
1843
|
+
/**
|
|
1844
|
+
* Update the status of an early access signup.
|
|
1845
|
+
* Requires API key (admin).
|
|
1846
|
+
*
|
|
1847
|
+
* @example
|
|
1848
|
+
* ```typescript
|
|
1849
|
+
* // Mark as invited
|
|
1850
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'invited');
|
|
1851
|
+
*
|
|
1852
|
+
* // Mark as converted (user signed up)
|
|
1853
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'converted');
|
|
1854
|
+
*
|
|
1855
|
+
* // Archive
|
|
1856
|
+
* await stackbe.earlyAccess.updateStatus('signup_123', 'archived');
|
|
1857
|
+
* ```
|
|
1858
|
+
*/
|
|
1859
|
+
async updateStatus(signupId, status) {
|
|
1860
|
+
return this.http.patch(
|
|
1861
|
+
`/v1/apps/${this.appId}/early-access/signups/${signupId}`,
|
|
1862
|
+
{ status }
|
|
1863
|
+
);
|
|
1864
|
+
}
|
|
1865
|
+
};
|
|
1866
|
+
|
|
1660
1867
|
// src/client.ts
|
|
1661
1868
|
var DEFAULT_BASE_URL = "https://api.stackbe.io";
|
|
1662
1869
|
var DEFAULT_TIMEOUT = 3e4;
|
|
@@ -1720,6 +1927,8 @@ var StackBE = class {
|
|
|
1720
1927
|
this.plans = new PlansClient(this.http);
|
|
1721
1928
|
this.products = new ProductsClient(this.http, config.appId);
|
|
1722
1929
|
this.featureRequests = new FeatureRequestsClient(this.http, config.appId);
|
|
1930
|
+
this.affiliates = new AffiliatesClient(this.http);
|
|
1931
|
+
this.earlyAccess = new EarlyAccessClient(this.http, config.appId);
|
|
1723
1932
|
}
|
|
1724
1933
|
/**
|
|
1725
1934
|
* Create a middleware for Express that tracks usage automatically.
|
|
@@ -1852,9 +2061,11 @@ var StackBE = class {
|
|
|
1852
2061
|
}
|
|
1853
2062
|
};
|
|
1854
2063
|
export {
|
|
2064
|
+
AffiliatesClient,
|
|
1855
2065
|
AuthClient,
|
|
1856
2066
|
CheckoutClient,
|
|
1857
2067
|
CustomersClient,
|
|
2068
|
+
EarlyAccessClient,
|
|
1858
2069
|
EntitlementsClient,
|
|
1859
2070
|
FeatureRequestsClient,
|
|
1860
2071
|
OrganizationsClient,
|
package/package.json
CHANGED