@chatarmin/os 1.7.0 → 1.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.
Files changed (39) hide show
  1. package/README.md +386 -8
  2. package/dist/billing/client.d.ts +8 -0
  3. package/dist/billing/client.d.ts.map +1 -0
  4. package/dist/billing/client.js +46 -0
  5. package/dist/billing/index.d.ts +3 -0
  6. package/dist/billing/index.d.ts.map +1 -0
  7. package/dist/billing/index.js +1 -0
  8. package/dist/billing/types.d.ts +201 -0
  9. package/dist/billing/types.d.ts.map +1 -0
  10. package/dist/billing/types.js +1 -0
  11. package/dist/billing/usage-breakdown-types.d.ts +132 -0
  12. package/dist/billing/usage-breakdown-types.d.ts.map +1 -0
  13. package/dist/billing/usage-breakdown-types.js +1 -0
  14. package/dist/companies/client.d.ts +1 -1
  15. package/dist/companies/client.d.ts.map +1 -1
  16. package/dist/features/client.d.ts +8 -0
  17. package/dist/features/client.d.ts.map +1 -0
  18. package/dist/features/client.js +18 -0
  19. package/dist/features/index.d.ts +3 -0
  20. package/dist/features/index.d.ts.map +1 -0
  21. package/dist/features/index.js +1 -0
  22. package/dist/features/types.d.ts +184 -0
  23. package/dist/features/types.d.ts.map +1 -0
  24. package/dist/features/types.js +1 -0
  25. package/dist/index.d.ts +23 -760
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +5 -361
  28. package/dist/webhooks/construct-event.d.ts +1 -1
  29. package/dist/webhooks/construct-event.d.ts.map +1 -1
  30. package/dist/webhooks/construct-event.js +4 -4
  31. package/dist/webhooks/generate-test-headers.d.ts +1 -1
  32. package/dist/webhooks/generate-test-headers.d.ts.map +1 -1
  33. package/dist/webhooks/generate-test-headers.js +2 -2
  34. package/dist/webhooks/index.d.ts +25 -8
  35. package/dist/webhooks/index.d.ts.map +1 -1
  36. package/dist/webhooks/index.js +24 -7
  37. package/dist/webhooks/read-header.d.ts +1 -1
  38. package/dist/webhooks/read-header.d.ts.map +1 -1
  39. package/package.json +2 -3
@@ -0,0 +1,201 @@
1
+ export interface SyncCompanyFromStripeInput {
2
+ companyId: string;
3
+ stripeCustomerId?: string;
4
+ forceReassign?: boolean;
5
+ }
6
+ export interface SyncCompanyFromStripeResult {
7
+ billingProfileId: string;
8
+ stripeCustomerId: string;
9
+ subscriptionsSynced: number;
10
+ subscriptionItemsSynced: number;
11
+ featuresLinked: number;
12
+ matchedMeters: number;
13
+ }
14
+ export interface EnsureFeatureSubscriptionInput {
15
+ companyId: string;
16
+ featureCode: string;
17
+ stripeSubscriptionId?: string;
18
+ }
19
+ export interface RelinkBillingProfileInput {
20
+ companyId: string;
21
+ stripeCustomerId: string;
22
+ }
23
+ export interface EnsureFeatureSubscriptionResult {
24
+ success: boolean;
25
+ subscriptionItemId: string | null;
26
+ stripePriceId: string | null;
27
+ stripeSubscriptionId: string | null;
28
+ action: 'already_linked' | 'linked_existing' | 'created_new' | 'failed';
29
+ error?: string;
30
+ }
31
+ export interface SetUsageInput {
32
+ companyId: string;
33
+ featureCode: string;
34
+ absoluteValue: number;
35
+ reason: string;
36
+ performedBy?: string;
37
+ metadata?: Record<string, unknown>;
38
+ }
39
+ export interface UsageResult {
40
+ success: boolean;
41
+ featureCode: string;
42
+ previousUsage: number;
43
+ currentUsage: number;
44
+ delta: number;
45
+ quantityLimit: number | null;
46
+ remaining: number | null;
47
+ isAtLimit: boolean;
48
+ includedQuantity: number;
49
+ billableQuantity: number;
50
+ meterId: string;
51
+ eventId: string | null;
52
+ }
53
+ export interface ClaimCheckoutInput {
54
+ companyId: string;
55
+ checkoutSessionId: string;
56
+ }
57
+ export interface ClaimCheckoutResult {
58
+ success: boolean;
59
+ subscriptionId: string;
60
+ alreadyClaimed: boolean;
61
+ status?: string;
62
+ }
63
+ export interface LinkSubscriptionInput {
64
+ companyId: string;
65
+ stripeSubscriptionId: string;
66
+ stripeCustomerId?: string;
67
+ tierCode?: string;
68
+ displayName?: string;
69
+ }
70
+ export interface LinkSubscriptionResult {
71
+ success: boolean;
72
+ subscriptionId: string;
73
+ alreadyLinked: boolean;
74
+ status?: string;
75
+ tierApplied?: boolean;
76
+ featuresApplied?: number;
77
+ }
78
+ export interface BillingProfileSummary {
79
+ id: string;
80
+ hasPaymentMethod: boolean;
81
+ primaryPaymentMethod: string | null;
82
+ defaultCurrency: string;
83
+ stripeCustomerId: string | null;
84
+ }
85
+ export interface BillingSubscriptionSummary {
86
+ id: string;
87
+ status: string;
88
+ stripeSubscriptionId: string | null;
89
+ currentPeriodEnd: Date | null;
90
+ trialEnd: Date | null;
91
+ cancelAtPeriodEnd: boolean;
92
+ tier: {
93
+ code: string;
94
+ name: string;
95
+ } | null;
96
+ }
97
+ export interface BillingStatusSubscription extends BillingSubscriptionSummary {
98
+ billingProfileId: string;
99
+ }
100
+ export type { BillingUsageItem, ExportUsageInput, ExportUsageResult, GetUsageInput, PeriodOffsetRange, UsageAggregate, UsageCycleBucket, UsageCycleSummary, UsageGroupBy, UsagePoint, UsageQueryResult, UsageRecord, UsageSubscriptionItem, UsageWindowSize, } from './usage-breakdown-types';
101
+ import type { BillingUsageItem, ExportUsageInput, ExportUsageResult, GetUsageInput, UsageQueryResult } from './usage-breakdown-types';
102
+ export interface BillingStatus {
103
+ hasBillingProfile: boolean;
104
+ stripeCustomerId: string | null;
105
+ billingProfile: BillingProfileSummary | null;
106
+ activeSubscriptions: BillingStatusSubscription[];
107
+ enabledFeaturesCount: number;
108
+ }
109
+ export interface BillingInvoiceSummary {
110
+ id: string;
111
+ invoiceNumber: string | null;
112
+ status: string;
113
+ amountDueCents: number;
114
+ amountPaidCents: number;
115
+ amountRemainingCents: number;
116
+ currency: string;
117
+ dueDate: Date | null;
118
+ periodEnd: Date | null;
119
+ hostedInvoiceUrl: string | null;
120
+ invoicePdfUrl: string | null;
121
+ }
122
+ export interface BillingOverview {
123
+ company: {
124
+ id: string;
125
+ name: string | null;
126
+ };
127
+ billingProfile: BillingProfileSummary | null;
128
+ subscription: BillingSubscriptionSummary | null;
129
+ invoices: BillingInvoiceSummary[];
130
+ usage?: BillingUsageItem[];
131
+ }
132
+ export interface ProductBillingCompanyScopeInput {
133
+ companyId?: string;
134
+ externalOrgId?: string;
135
+ }
136
+ export interface GetBillingOverviewInput extends ProductBillingCompanyScopeInput {
137
+ invoiceLimit?: number;
138
+ includeUsage?: boolean;
139
+ }
140
+ export interface ListBillingInvoicesOptions {
141
+ limit?: number;
142
+ }
143
+ export interface CreateBillingPortalSessionInput extends ProductBillingCompanyScopeInput {
144
+ returnUrl: string;
145
+ }
146
+ export interface ResolveInvoicePaymentUrlInput extends ProductBillingCompanyScopeInput {
147
+ invoiceId: string;
148
+ }
149
+ export interface PastDuePaymentUrlItem {
150
+ invoiceId: string;
151
+ invoiceNumber: string | null;
152
+ billingProfileName: string;
153
+ status: string;
154
+ amountRemainingCents: number;
155
+ currency: string;
156
+ dueDate: string | null;
157
+ daysOverdue: number;
158
+ hostedInvoiceUrl: string | null;
159
+ invoicePdfUrl: string | null;
160
+ canSend: boolean;
161
+ }
162
+ export interface SendPastDueInvoiceInput extends ProductBillingCompanyScopeInput {
163
+ invoiceId: string;
164
+ }
165
+ export interface SendPastDueInvoiceResult {
166
+ sentTo: string | null;
167
+ }
168
+ export interface BillingClient {
169
+ setUsage: (input: SetUsageInput) => Promise<UsageResult>;
170
+ getUsageHistory: (companyId: string, featureCode: string, options?: {
171
+ limit?: number;
172
+ includeDelivered?: boolean;
173
+ eventType?: 'increment' | 'set' | 'adjustment';
174
+ }) => Promise<unknown>;
175
+ claimCheckout: (input: ClaimCheckoutInput) => Promise<ClaimCheckoutResult>;
176
+ linkSubscription: (input: LinkSubscriptionInput) => Promise<LinkSubscriptionResult>;
177
+ getStatus: (companyIdOrInput: string | ProductBillingCompanyScopeInput) => Promise<BillingStatus>;
178
+ getOverview: (input: GetBillingOverviewInput) => Promise<BillingOverview>;
179
+ getUsage: (companyIdOrInput: string | GetUsageInput, maybeOptions?: Omit<GetUsageInput, 'companyId' | 'externalOrgId'>) => Promise<UsageQueryResult>;
180
+ exportUsage: (companyIdOrInput: string | ExportUsageInput, maybeOptions?: Omit<ExportUsageInput, 'companyId' | 'externalOrgId' | 'format'>) => Promise<ExportUsageResult>;
181
+ listInvoices: (companyIdOrInput: string | ProductBillingCompanyScopeInput, options?: ListBillingInvoicesOptions) => Promise<{
182
+ invoices: BillingInvoiceSummary[];
183
+ }>;
184
+ getPaymentMethod: (companyIdOrInput: string | ProductBillingCompanyScopeInput) => Promise<{
185
+ billingProfile: BillingProfileSummary | null;
186
+ }>;
187
+ createPortalSession: (input: CreateBillingPortalSessionInput) => Promise<{
188
+ url: string;
189
+ }>;
190
+ resolveInvoicePaymentUrl: (input: ResolveInvoicePaymentUrlInput) => Promise<{
191
+ hostedInvoiceUrl: string;
192
+ }>;
193
+ listPastDuePaymentUrls: (companyIdOrInput: string | ProductBillingCompanyScopeInput) => Promise<{
194
+ items: PastDuePaymentUrlItem[];
195
+ }>;
196
+ sendPastDueInvoice: (input: SendPastDueInvoiceInput) => Promise<SendPastDueInvoiceResult>;
197
+ syncCompanyFromStripe: (input: SyncCompanyFromStripeInput) => Promise<SyncCompanyFromStripeResult>;
198
+ relinkBillingProfile: (input: RelinkBillingProfileInput) => Promise<unknown>;
199
+ ensureFeatureSubscription: (input: EnsureFeatureSubscriptionInput) => Promise<EnsureFeatureSubscriptionResult>;
200
+ }
201
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/billing/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,132 @@
1
+ export interface BillingUsageItem {
2
+ featureAccessId?: string;
3
+ featureCode: string;
4
+ featureName: string;
5
+ meterCode: string;
6
+ totalUsage: number;
7
+ includedQuantity: number;
8
+ billableQuantity: number;
9
+ quantityLimit: number | null;
10
+ remaining?: number | null;
11
+ percentUsed?: number | null;
12
+ periodStart: Date;
13
+ periodEnd: Date;
14
+ productLinkId?: string | null;
15
+ productLinkLabel?: string | null;
16
+ externalOrgId?: string | null;
17
+ unitAmountCents?: number | null;
18
+ currency?: string | null;
19
+ estimatedOverageCents?: number | null;
20
+ projectedBillableQuantity?: number | null;
21
+ projectedOverageCents?: number | null;
22
+ }
23
+ export type UsageGroupBy = 'feature' | 'productLink';
24
+ /** Metronome-style window granularity. `none` = one aggregate per feature for the window. */
25
+ export type UsageWindowSize = 'none' | 'day' | 'week' | 'month';
26
+ export interface PeriodOffsetRange {
27
+ from: number;
28
+ to: number;
29
+ }
30
+ export interface UsageAggregate {
31
+ periodOffset: number;
32
+ featureAccessId?: string;
33
+ featureCode: string;
34
+ featureName: string;
35
+ meterCode: string;
36
+ value: number;
37
+ startingOn: Date;
38
+ endingBefore: Date;
39
+ groupKey?: string | null;
40
+ groupValue?: string | null;
41
+ productLinkId?: string | null;
42
+ productLinkLabel?: string | null;
43
+ externalOrgId?: string | null;
44
+ includedQuantity?: number;
45
+ billableQuantity?: number;
46
+ quantityLimit?: number | null;
47
+ remaining?: number | null;
48
+ percentUsed?: number | null;
49
+ unitAmountCents?: number | null;
50
+ currency?: string | null;
51
+ estimatedOverageCents?: number | null;
52
+ projectedBillableQuantity?: number | null;
53
+ projectedOverageCents?: number | null;
54
+ }
55
+ export interface UsagePoint {
56
+ value: number;
57
+ startingOn: Date;
58
+ endingBefore: Date;
59
+ featureAccessId?: string;
60
+ meterCode?: string;
61
+ /** Present with `groupBy: 'productLink'`. */
62
+ groupKey?: string | null;
63
+ groupValue?: string | null;
64
+ /** Present with `groupBy: 'productLink'`, or on bucketed multi-link `companyId` queries. */
65
+ productLinkId?: string | null;
66
+ productLinkLabel?: string | null;
67
+ externalOrgId?: string | null;
68
+ }
69
+ export interface UsageSubscriptionItem {
70
+ featureAccessId: string;
71
+ stripeSubscriptionItemId: string | null;
72
+ stripePriceId: string | null;
73
+ meterCode: string;
74
+ unitAmountCents: number | null;
75
+ currency: string | null;
76
+ includedQuantity: number;
77
+ quantityLimit: number | null;
78
+ usageType: 'metered' | 'licensed' | null;
79
+ intervalUnit: string | null;
80
+ }
81
+ export interface UsageCycleSummary {
82
+ totalUsage: number;
83
+ includedQuantity: number;
84
+ billableQuantity: number;
85
+ remaining: number | null;
86
+ percentUsed: number | null;
87
+ estimatedOverageCents: number | null;
88
+ projectedBillableQuantity?: number | null;
89
+ projectedOverageCents?: number | null;
90
+ }
91
+ export interface UsageCycleBucket {
92
+ periodOffset: number;
93
+ startingOn: Date;
94
+ endingBefore: Date;
95
+ label: string;
96
+ subscriptionItem?: UsageSubscriptionItem;
97
+ summary?: UsageCycleSummary;
98
+ usage: UsagePoint[];
99
+ }
100
+ export interface UsageRecord {
101
+ featureCode: string;
102
+ featureName: string;
103
+ cycles: UsageCycleBucket[];
104
+ }
105
+ export interface GetUsageInput {
106
+ companyId?: string;
107
+ externalOrgId?: string;
108
+ featureCode?: string;
109
+ windowSize: UsageWindowSize;
110
+ startingOn?: Date;
111
+ endingBefore?: Date;
112
+ /**
113
+ * Billing cycles back from current. Omit for current cycle (`{ from: 0, to: 0 }`).
114
+ * Example: `{ from: -11, to: 0 }` for the last 12 cycles.
115
+ */
116
+ periodOffsetRange?: PeriodOffsetRange;
117
+ groupBy?: UsageGroupBy;
118
+ }
119
+ export interface UsageQueryResult {
120
+ data: UsageRecord[];
121
+ next_page?: string | null;
122
+ }
123
+ export interface ExportUsageInput extends GetUsageInput {
124
+ format: 'csv';
125
+ }
126
+ export interface ExportUsageResult {
127
+ filename: string;
128
+ mimeType: 'text/csv';
129
+ content: string;
130
+ rowCount: number;
131
+ }
132
+ //# sourceMappingURL=usage-breakdown-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-breakdown-types.d.ts","sourceRoot":"","sources":["../../src/billing/usage-breakdown-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import type { AppRouter } from '@chatarmin/api';
1
+ import type { AppRouter } from '@chatarmin/api/trpc-types';
2
2
  import type { createTRPCClient } from '@trpc/client';
3
3
  import type { CompaniesClient } from './types';
4
4
  type SdkClient = ReturnType<typeof createTRPCClient<AppRouter>>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/companies/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,SAAS,CAAA;AAEhB,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAA;AAC/D,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,GACZ,eAAe,CAiBjB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/companies/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EACV,eAAe,EAOhB,MAAM,SAAS,CAAA;AAEhB,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAA;AAC/D,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,OAAO,GACZ,eAAe,CAiBjB"}
@@ -0,0 +1,8 @@
1
+ import type { AppRouter } from '@chatarmin/api/trpc-types';
2
+ import type { createTRPCClient } from '@trpc/client';
3
+ import type { FeaturesClient } from './types';
4
+ type SdkClient = ReturnType<typeof createTRPCClient<AppRouter>>;
5
+ type SdkCall = <T>(operation: string, action: () => Promise<T>) => Promise<T>;
6
+ export declare function createFeaturesClient(client: SdkClient, call: SdkCall): FeaturesClient;
7
+ export {};
8
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/features/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAQV,cAAc,EAEf,MAAM,SAAS,CAAA;AAEhB,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAA;AAC/D,KAAK,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAwCrF"}
@@ -0,0 +1,18 @@
1
+ export function createFeaturesClient(client, call) {
2
+ return {
3
+ check: (input) => call('features.check', () => client.features.check.query(input)),
4
+ listAccess: (input) => call('features.listAccess', () => {
5
+ const params = typeof input === 'string' ? { companyId: input } : input;
6
+ return client.features.getAccess.query(params);
7
+ }),
8
+ setAccess: (input) => call('features.setAccess', () => client.features.updateAccess.mutate(input)),
9
+ getAccessByExternalOrgId: (externalOrgId) => call('features.getAccessByExternalOrgId', () => client.features.getAccessByExternalOrgId.query({
10
+ externalOrgId,
11
+ })),
12
+ checkByExternalOrgId: (externalOrgId, featureCode, options) => call('features.checkByExternalOrgId', () => client.features.checkByExternalOrgId.query({
13
+ externalOrgId,
14
+ featureCode,
15
+ verifySubscription: options?.verifySubscription,
16
+ })),
17
+ };
18
+ }
@@ -0,0 +1,3 @@
1
+ export { createFeaturesClient } from './client';
2
+ export type { ExternalOrgFeatureAccessItem, FeatureAccessByExternalOrgIdResult, FeatureAccessItem, FeatureBillingDetails, FeatureCheckByExternalOrgIdResult, FeatureCheckInput, FeatureCheckResult, FeatureSetAccessInput, FeatureSetAccessResult, FeaturesClient, ListFeatureAccessInput, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,YAAY,EACV,4BAA4B,EAC5B,kCAAkC,EAClC,iBAAiB,EACjB,qBAAqB,EACrB,iCAAiC,EACjC,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,sBAAsB,GACvB,MAAM,SAAS,CAAA"}
@@ -0,0 +1 @@
1
+ export { createFeaturesClient } from './client';
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Input for checking feature access.
3
+ */
4
+ export interface FeatureCheckInput {
5
+ /** Company ID to check (either this or externalOrgId required) */
6
+ companyId?: string;
7
+ /** Your product's external org ID (either this or companyId required) */
8
+ externalOrgId?: string;
9
+ /** Product link ID when the company has multiple product links */
10
+ productLinkId?: string;
11
+ /** Feature code (e.g., "ai_credit", "whatsapp_messages") */
12
+ featureCode: string;
13
+ /**
14
+ * Verify Stripe subscription is active for this feature.
15
+ * When true, the response includes subscription validation fields
16
+ * and `canUse` will be false if no active subscription exists.
17
+ * @default false
18
+ */
19
+ verifySubscription?: boolean;
20
+ }
21
+ /**
22
+ * Billing details for a feature (when includeBillingDetails: true)
23
+ */
24
+ export interface FeatureBillingDetails {
25
+ /** Stripe subscription item ID */
26
+ stripeSubscriptionItemId: string | null;
27
+ /** Current billing period start */
28
+ currentPeriodStart: Date | null;
29
+ /** Current billing period end */
30
+ currentPeriodEnd: Date | null;
31
+ /** Unit amount in cents (e.g., 100 = $1.00) */
32
+ unitAmount: number | null;
33
+ /** Currency code (e.g., "usd") */
34
+ currency: string | null;
35
+ /** Billing interval (e.g., "month", "year") */
36
+ intervalUnit: string | null;
37
+ /** Usage type (e.g., "metered", "licensed") */
38
+ usageType: string | null;
39
+ /** Subscription status (e.g., "active", "trialing") */
40
+ subscriptionStatus: string | null;
41
+ }
42
+ /**
43
+ * Input for listing feature access.
44
+ */
45
+ export interface ListFeatureAccessInput {
46
+ /** Company ID */
47
+ companyId: string;
48
+ /**
49
+ * Include billing details (Stripe price, usage, billing period).
50
+ * Adds a `billing` field to each feature with subscription linkage info.
51
+ * @default false
52
+ */
53
+ includeBillingDetails?: boolean;
54
+ }
55
+ /**
56
+ * Result of a feature access check.
57
+ */
58
+ export interface FeatureCheckResult {
59
+ /** Feature code */
60
+ featureCode: string;
61
+ /** Resolved company ID when scoped to a product link */
62
+ companyId?: string;
63
+ /** Resolved product link ID when scoped to a single link */
64
+ productLinkId?: string;
65
+ /** External org ID when the check was scoped by externalOrgId */
66
+ externalOrgId?: string;
67
+ /** Whether the feature is enabled for this company */
68
+ isEnabled: boolean;
69
+ /** Whether this feature tracks quantity/usage */
70
+ hasQuantity: boolean;
71
+ /** Current usage count (for quantity-based features) */
72
+ currentUsage: number;
73
+ /** Maximum allowed quantity (null = unlimited) */
74
+ quantityLimit: number | null;
75
+ /** Included/free quantity before overage charges */
76
+ includedQuantity: number;
77
+ /** Remaining quantity before limit (null = unlimited) */
78
+ remaining: number | null;
79
+ /** Whether usage limit has been reached */
80
+ isAtLimit: boolean;
81
+ /** Whether the company can use this feature (enabled + not at limit + subscription if verified) */
82
+ canUse: boolean;
83
+ /** Whether an active Stripe subscription exists for this feature */
84
+ hasActiveSubscription?: boolean;
85
+ /** Stripe subscription status (active, trialing, canceled, etc.) */
86
+ subscriptionStatus?: string | null;
87
+ /** Stripe price ID from the subscription item */
88
+ stripePriceId?: string | null;
89
+ /** Stripe subscription ID */
90
+ stripeSubscriptionId?: string | null;
91
+ /**
92
+ * Why subscription verification failed when `verifySubscription` is true and
93
+ * `hasActiveSubscription` is false.
94
+ */
95
+ verificationFailure?: 'not_linked' | 'no_subscription';
96
+ }
97
+ /**
98
+ * Input for updating feature access with partial config merge.
99
+ */
100
+ export interface FeatureSetAccessInput {
101
+ /** Company ID to update (either this or externalOrgId required) */
102
+ companyId?: string;
103
+ /** Your product's external org ID (either this or companyId required) */
104
+ externalOrgId?: string;
105
+ /** Feature code to update */
106
+ featureCode: string;
107
+ /** Enable or disable the feature */
108
+ isEnabled?: boolean;
109
+ /** Maximum quantity allowed (for quantity-based features) */
110
+ quantityLimit?: number | null;
111
+ /** Included quantity before billing kicks in */
112
+ includedQuantity?: number | null;
113
+ /**
114
+ * Custom config values to merge with existing config.
115
+ * Only specified fields will be updated - other fields remain unchanged.
116
+ */
117
+ config?: Record<string, unknown>;
118
+ /** Source of the access change */
119
+ source?: 'subscription' | 'manual' | 'trial' | 'api';
120
+ /** When the access expires (null for no expiration) */
121
+ validUntil?: Date | null;
122
+ }
123
+ export interface FeatureAccessItem {
124
+ featureCode: string;
125
+ featureName: string;
126
+ description: string | null;
127
+ hasQuantity: boolean;
128
+ isEnabled: boolean;
129
+ quantityLimit: number | null;
130
+ includedQuantity: number;
131
+ currentUsage: number;
132
+ source: string;
133
+ validUntil: Date | null;
134
+ stripeSubscriptionItemId: string | null;
135
+ stripePriceId: string | null;
136
+ stripeSubscriptionId: string | null;
137
+ meterId: string | null;
138
+ configValues: Record<string, unknown>;
139
+ billing?: FeatureBillingDetails;
140
+ }
141
+ export interface FeatureSetAccessResult {
142
+ success: boolean;
143
+ featureCode: string;
144
+ companyId: string;
145
+ isEnabled: boolean;
146
+ quantityLimit: number | null;
147
+ includedQuantity: number | null;
148
+ configValues: Record<string, unknown>;
149
+ source: string;
150
+ validUntil: Date | null;
151
+ created: boolean;
152
+ updated: boolean;
153
+ }
154
+ export interface ExternalOrgFeatureAccessItem {
155
+ featureCode: string;
156
+ featureName: string;
157
+ description: string | null;
158
+ hasQuantity: boolean;
159
+ isEnabled: boolean;
160
+ quantityLimit: number | null;
161
+ includedQuantity: number;
162
+ configValues: Record<string, unknown>;
163
+ source: string;
164
+ validUntil: Date | null;
165
+ }
166
+ export interface FeatureAccessByExternalOrgIdResult {
167
+ companyId: string;
168
+ productLinkId: string;
169
+ externalOrgId: string;
170
+ features: ExternalOrgFeatureAccessItem[];
171
+ }
172
+ export interface FeatureCheckByExternalOrgIdResult extends FeatureCheckResult {
173
+ configValues: Record<string, unknown>;
174
+ }
175
+ export interface FeaturesClient {
176
+ check: (input: FeatureCheckInput) => Promise<FeatureCheckResult>;
177
+ listAccess: (input: ListFeatureAccessInput | string) => Promise<FeatureAccessItem[]>;
178
+ setAccess: (input: FeatureSetAccessInput) => Promise<FeatureSetAccessResult>;
179
+ getAccessByExternalOrgId: (externalOrgId: string) => Promise<FeatureAccessByExternalOrgIdResult>;
180
+ checkByExternalOrgId: (externalOrgId: string, featureCode: string, options?: {
181
+ verifySubscription?: boolean;
182
+ }) => Promise<FeatureCheckByExternalOrgIdResult>;
183
+ }
184
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/features/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};