@stackbe/sdk 0.6.3 → 0.6.4
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 +183 -1
- package/dist/index.d.ts +183 -1
- package/dist/index.js +179 -0
- package/dist/index.mjs +178 -0
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -251,6 +251,59 @@ interface SessionResponse {
|
|
|
251
251
|
/** Feature entitlements */
|
|
252
252
|
entitlements?: Record<string, boolean | number | string>;
|
|
253
253
|
}
|
|
254
|
+
interface OrganizationMember {
|
|
255
|
+
id: string;
|
|
256
|
+
customerId: string;
|
|
257
|
+
email: string;
|
|
258
|
+
role: 'owner' | 'admin' | 'member';
|
|
259
|
+
invitedAt: string;
|
|
260
|
+
acceptedAt?: string;
|
|
261
|
+
}
|
|
262
|
+
interface Organization {
|
|
263
|
+
id: string;
|
|
264
|
+
appId: string;
|
|
265
|
+
name: string;
|
|
266
|
+
slug: string;
|
|
267
|
+
logoUrl?: string;
|
|
268
|
+
members: OrganizationMember[];
|
|
269
|
+
memberCount: number;
|
|
270
|
+
createdAt: string;
|
|
271
|
+
updatedAt: string;
|
|
272
|
+
}
|
|
273
|
+
interface CreateOrganizationOptions {
|
|
274
|
+
/** Organization name */
|
|
275
|
+
name: string;
|
|
276
|
+
/** Customer ID to set as owner */
|
|
277
|
+
ownerId: string;
|
|
278
|
+
/** Optional logo URL */
|
|
279
|
+
logoUrl?: string;
|
|
280
|
+
}
|
|
281
|
+
interface UpdateOrganizationOptions {
|
|
282
|
+
/** New organization name */
|
|
283
|
+
name?: string;
|
|
284
|
+
/** New logo URL */
|
|
285
|
+
logoUrl?: string;
|
|
286
|
+
}
|
|
287
|
+
interface AddMemberOptions {
|
|
288
|
+
/** Customer ID to add */
|
|
289
|
+
customerId: string;
|
|
290
|
+
/** Role for the member */
|
|
291
|
+
role?: 'admin' | 'member';
|
|
292
|
+
}
|
|
293
|
+
interface InviteMemberOptions {
|
|
294
|
+
/** Email to invite */
|
|
295
|
+
email: string;
|
|
296
|
+
/** Role for the invited member */
|
|
297
|
+
role?: 'admin' | 'member';
|
|
298
|
+
}
|
|
299
|
+
interface OrganizationInvite {
|
|
300
|
+
id: string;
|
|
301
|
+
organizationId: string;
|
|
302
|
+
email: string;
|
|
303
|
+
role: 'admin' | 'member';
|
|
304
|
+
status: 'pending' | 'accepted' | 'cancelled';
|
|
305
|
+
sentAt: string;
|
|
306
|
+
}
|
|
254
307
|
interface CreateCheckoutOptions {
|
|
255
308
|
/** Customer ID or email */
|
|
256
309
|
customer: string | {
|
|
@@ -1050,6 +1103,133 @@ declare class AuthClient {
|
|
|
1050
1103
|
isAuthenticated(sessionToken: string): Promise<boolean>;
|
|
1051
1104
|
}
|
|
1052
1105
|
|
|
1106
|
+
declare class OrganizationsClient {
|
|
1107
|
+
private http;
|
|
1108
|
+
private appId;
|
|
1109
|
+
constructor(http: HttpClient, appId: string);
|
|
1110
|
+
/**
|
|
1111
|
+
* Create a new organization with a customer as owner.
|
|
1112
|
+
* Use this for B2B signup flows where you provision everything server-side.
|
|
1113
|
+
*
|
|
1114
|
+
* @example
|
|
1115
|
+
* ```typescript
|
|
1116
|
+
* const customer = await stackbe.customers.getOrCreate({ email: 'user@company.com' });
|
|
1117
|
+
* const org = await stackbe.organizations.create({
|
|
1118
|
+
* name: 'Acme Corp',
|
|
1119
|
+
* ownerId: customer.id
|
|
1120
|
+
* });
|
|
1121
|
+
* ```
|
|
1122
|
+
*/
|
|
1123
|
+
create(options: CreateOrganizationOptions): Promise<Organization>;
|
|
1124
|
+
/**
|
|
1125
|
+
* List all organizations for this app.
|
|
1126
|
+
*
|
|
1127
|
+
* @example
|
|
1128
|
+
* ```typescript
|
|
1129
|
+
* const orgs = await stackbe.organizations.list();
|
|
1130
|
+
* ```
|
|
1131
|
+
*/
|
|
1132
|
+
list(options?: {
|
|
1133
|
+
limit?: number;
|
|
1134
|
+
offset?: number;
|
|
1135
|
+
search?: string;
|
|
1136
|
+
}): Promise<Organization[]>;
|
|
1137
|
+
/**
|
|
1138
|
+
* Get an organization by ID.
|
|
1139
|
+
*
|
|
1140
|
+
* @example
|
|
1141
|
+
* ```typescript
|
|
1142
|
+
* const org = await stackbe.organizations.get('org_123');
|
|
1143
|
+
* ```
|
|
1144
|
+
*/
|
|
1145
|
+
get(orgId: string): Promise<Organization>;
|
|
1146
|
+
/**
|
|
1147
|
+
* Update an organization.
|
|
1148
|
+
*
|
|
1149
|
+
* @example
|
|
1150
|
+
* ```typescript
|
|
1151
|
+
* const org = await stackbe.organizations.update('org_123', {
|
|
1152
|
+
* name: 'New Name'
|
|
1153
|
+
* });
|
|
1154
|
+
* ```
|
|
1155
|
+
*/
|
|
1156
|
+
update(orgId: string, options: UpdateOrganizationOptions): Promise<Organization>;
|
|
1157
|
+
/**
|
|
1158
|
+
* Delete an organization.
|
|
1159
|
+
* Note: Organizations with active subscriptions cannot be deleted.
|
|
1160
|
+
*
|
|
1161
|
+
* @example
|
|
1162
|
+
* ```typescript
|
|
1163
|
+
* await stackbe.organizations.delete('org_123');
|
|
1164
|
+
* ```
|
|
1165
|
+
*/
|
|
1166
|
+
delete(orgId: string): Promise<void>;
|
|
1167
|
+
/**
|
|
1168
|
+
* Add a customer as a member of an organization.
|
|
1169
|
+
*
|
|
1170
|
+
* @example
|
|
1171
|
+
* ```typescript
|
|
1172
|
+
* await stackbe.organizations.addMember('org_123', {
|
|
1173
|
+
* customerId: 'cust_456',
|
|
1174
|
+
* role: 'member'
|
|
1175
|
+
* });
|
|
1176
|
+
* ```
|
|
1177
|
+
*/
|
|
1178
|
+
addMember(orgId: string, options: AddMemberOptions): Promise<OrganizationMember>;
|
|
1179
|
+
/**
|
|
1180
|
+
* Remove a member from an organization.
|
|
1181
|
+
*
|
|
1182
|
+
* @example
|
|
1183
|
+
* ```typescript
|
|
1184
|
+
* await stackbe.organizations.removeMember('org_123', 'member_456');
|
|
1185
|
+
* ```
|
|
1186
|
+
*/
|
|
1187
|
+
removeMember(orgId: string, memberId: string): Promise<void>;
|
|
1188
|
+
/**
|
|
1189
|
+
* Update a member's role.
|
|
1190
|
+
*
|
|
1191
|
+
* @example
|
|
1192
|
+
* ```typescript
|
|
1193
|
+
* await stackbe.organizations.updateMember('org_123', 'member_456', {
|
|
1194
|
+
* role: 'admin'
|
|
1195
|
+
* });
|
|
1196
|
+
* ```
|
|
1197
|
+
*/
|
|
1198
|
+
updateMember(orgId: string, memberId: string, options: {
|
|
1199
|
+
role: 'admin' | 'member';
|
|
1200
|
+
}): Promise<OrganizationMember>;
|
|
1201
|
+
/**
|
|
1202
|
+
* Send an invite to join an organization.
|
|
1203
|
+
*
|
|
1204
|
+
* @example
|
|
1205
|
+
* ```typescript
|
|
1206
|
+
* await stackbe.organizations.invite('org_123', {
|
|
1207
|
+
* email: 'newuser@company.com',
|
|
1208
|
+
* role: 'member'
|
|
1209
|
+
* });
|
|
1210
|
+
* ```
|
|
1211
|
+
*/
|
|
1212
|
+
invite(orgId: string, options: InviteMemberOptions): Promise<OrganizationInvite>;
|
|
1213
|
+
/**
|
|
1214
|
+
* List pending invites for an organization.
|
|
1215
|
+
*
|
|
1216
|
+
* @example
|
|
1217
|
+
* ```typescript
|
|
1218
|
+
* const invites = await stackbe.organizations.listInvites('org_123');
|
|
1219
|
+
* ```
|
|
1220
|
+
*/
|
|
1221
|
+
listInvites(orgId: string): Promise<OrganizationInvite[]>;
|
|
1222
|
+
/**
|
|
1223
|
+
* Cancel a pending invite.
|
|
1224
|
+
*
|
|
1225
|
+
* @example
|
|
1226
|
+
* ```typescript
|
|
1227
|
+
* await stackbe.organizations.cancelInvite('org_123', 'invite_456');
|
|
1228
|
+
* ```
|
|
1229
|
+
*/
|
|
1230
|
+
cancelInvite(orgId: string, inviteId: string): Promise<void>;
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1053
1233
|
declare class StackBE {
|
|
1054
1234
|
private http;
|
|
1055
1235
|
private appId;
|
|
@@ -1065,6 +1245,8 @@ declare class StackBE {
|
|
|
1065
1245
|
readonly subscriptions: SubscriptionsClient;
|
|
1066
1246
|
/** Customer authentication (magic links) */
|
|
1067
1247
|
readonly auth: AuthClient;
|
|
1248
|
+
/** Organization management (B2B multi-user) */
|
|
1249
|
+
readonly organizations: OrganizationsClient;
|
|
1068
1250
|
/**
|
|
1069
1251
|
* Create a new StackBE client.
|
|
1070
1252
|
*
|
|
@@ -1165,4 +1347,4 @@ declare class StackBE {
|
|
|
1165
1347
|
}): (req: any, res: any, next: any) => Promise<any>;
|
|
1166
1348
|
}
|
|
1167
1349
|
|
|
1168
|
-
export { type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type Customer, type CustomerCreatedEvent, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EntitlementsClient, type EntitlementsResponse, type MagicLinkOptions, type MagicLinkResponse, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, 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 UpdateSubscriptionOptions, UsageClient, type UsageMetric, type VerifyTokenResponse, type WebhookEvent, type WebhookEventType };
|
|
1350
|
+
export { type AddMemberOptions, type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type CreateOrganizationOptions, type Customer, type CustomerCreatedEvent, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EntitlementsClient, type EntitlementsResponse, type InviteMemberOptions, type MagicLinkOptions, type MagicLinkResponse, type Organization, type OrganizationInvite, type OrganizationMember, OrganizationsClient, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, 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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -251,6 +251,59 @@ interface SessionResponse {
|
|
|
251
251
|
/** Feature entitlements */
|
|
252
252
|
entitlements?: Record<string, boolean | number | string>;
|
|
253
253
|
}
|
|
254
|
+
interface OrganizationMember {
|
|
255
|
+
id: string;
|
|
256
|
+
customerId: string;
|
|
257
|
+
email: string;
|
|
258
|
+
role: 'owner' | 'admin' | 'member';
|
|
259
|
+
invitedAt: string;
|
|
260
|
+
acceptedAt?: string;
|
|
261
|
+
}
|
|
262
|
+
interface Organization {
|
|
263
|
+
id: string;
|
|
264
|
+
appId: string;
|
|
265
|
+
name: string;
|
|
266
|
+
slug: string;
|
|
267
|
+
logoUrl?: string;
|
|
268
|
+
members: OrganizationMember[];
|
|
269
|
+
memberCount: number;
|
|
270
|
+
createdAt: string;
|
|
271
|
+
updatedAt: string;
|
|
272
|
+
}
|
|
273
|
+
interface CreateOrganizationOptions {
|
|
274
|
+
/** Organization name */
|
|
275
|
+
name: string;
|
|
276
|
+
/** Customer ID to set as owner */
|
|
277
|
+
ownerId: string;
|
|
278
|
+
/** Optional logo URL */
|
|
279
|
+
logoUrl?: string;
|
|
280
|
+
}
|
|
281
|
+
interface UpdateOrganizationOptions {
|
|
282
|
+
/** New organization name */
|
|
283
|
+
name?: string;
|
|
284
|
+
/** New logo URL */
|
|
285
|
+
logoUrl?: string;
|
|
286
|
+
}
|
|
287
|
+
interface AddMemberOptions {
|
|
288
|
+
/** Customer ID to add */
|
|
289
|
+
customerId: string;
|
|
290
|
+
/** Role for the member */
|
|
291
|
+
role?: 'admin' | 'member';
|
|
292
|
+
}
|
|
293
|
+
interface InviteMemberOptions {
|
|
294
|
+
/** Email to invite */
|
|
295
|
+
email: string;
|
|
296
|
+
/** Role for the invited member */
|
|
297
|
+
role?: 'admin' | 'member';
|
|
298
|
+
}
|
|
299
|
+
interface OrganizationInvite {
|
|
300
|
+
id: string;
|
|
301
|
+
organizationId: string;
|
|
302
|
+
email: string;
|
|
303
|
+
role: 'admin' | 'member';
|
|
304
|
+
status: 'pending' | 'accepted' | 'cancelled';
|
|
305
|
+
sentAt: string;
|
|
306
|
+
}
|
|
254
307
|
interface CreateCheckoutOptions {
|
|
255
308
|
/** Customer ID or email */
|
|
256
309
|
customer: string | {
|
|
@@ -1050,6 +1103,133 @@ declare class AuthClient {
|
|
|
1050
1103
|
isAuthenticated(sessionToken: string): Promise<boolean>;
|
|
1051
1104
|
}
|
|
1052
1105
|
|
|
1106
|
+
declare class OrganizationsClient {
|
|
1107
|
+
private http;
|
|
1108
|
+
private appId;
|
|
1109
|
+
constructor(http: HttpClient, appId: string);
|
|
1110
|
+
/**
|
|
1111
|
+
* Create a new organization with a customer as owner.
|
|
1112
|
+
* Use this for B2B signup flows where you provision everything server-side.
|
|
1113
|
+
*
|
|
1114
|
+
* @example
|
|
1115
|
+
* ```typescript
|
|
1116
|
+
* const customer = await stackbe.customers.getOrCreate({ email: 'user@company.com' });
|
|
1117
|
+
* const org = await stackbe.organizations.create({
|
|
1118
|
+
* name: 'Acme Corp',
|
|
1119
|
+
* ownerId: customer.id
|
|
1120
|
+
* });
|
|
1121
|
+
* ```
|
|
1122
|
+
*/
|
|
1123
|
+
create(options: CreateOrganizationOptions): Promise<Organization>;
|
|
1124
|
+
/**
|
|
1125
|
+
* List all organizations for this app.
|
|
1126
|
+
*
|
|
1127
|
+
* @example
|
|
1128
|
+
* ```typescript
|
|
1129
|
+
* const orgs = await stackbe.organizations.list();
|
|
1130
|
+
* ```
|
|
1131
|
+
*/
|
|
1132
|
+
list(options?: {
|
|
1133
|
+
limit?: number;
|
|
1134
|
+
offset?: number;
|
|
1135
|
+
search?: string;
|
|
1136
|
+
}): Promise<Organization[]>;
|
|
1137
|
+
/**
|
|
1138
|
+
* Get an organization by ID.
|
|
1139
|
+
*
|
|
1140
|
+
* @example
|
|
1141
|
+
* ```typescript
|
|
1142
|
+
* const org = await stackbe.organizations.get('org_123');
|
|
1143
|
+
* ```
|
|
1144
|
+
*/
|
|
1145
|
+
get(orgId: string): Promise<Organization>;
|
|
1146
|
+
/**
|
|
1147
|
+
* Update an organization.
|
|
1148
|
+
*
|
|
1149
|
+
* @example
|
|
1150
|
+
* ```typescript
|
|
1151
|
+
* const org = await stackbe.organizations.update('org_123', {
|
|
1152
|
+
* name: 'New Name'
|
|
1153
|
+
* });
|
|
1154
|
+
* ```
|
|
1155
|
+
*/
|
|
1156
|
+
update(orgId: string, options: UpdateOrganizationOptions): Promise<Organization>;
|
|
1157
|
+
/**
|
|
1158
|
+
* Delete an organization.
|
|
1159
|
+
* Note: Organizations with active subscriptions cannot be deleted.
|
|
1160
|
+
*
|
|
1161
|
+
* @example
|
|
1162
|
+
* ```typescript
|
|
1163
|
+
* await stackbe.organizations.delete('org_123');
|
|
1164
|
+
* ```
|
|
1165
|
+
*/
|
|
1166
|
+
delete(orgId: string): Promise<void>;
|
|
1167
|
+
/**
|
|
1168
|
+
* Add a customer as a member of an organization.
|
|
1169
|
+
*
|
|
1170
|
+
* @example
|
|
1171
|
+
* ```typescript
|
|
1172
|
+
* await stackbe.organizations.addMember('org_123', {
|
|
1173
|
+
* customerId: 'cust_456',
|
|
1174
|
+
* role: 'member'
|
|
1175
|
+
* });
|
|
1176
|
+
* ```
|
|
1177
|
+
*/
|
|
1178
|
+
addMember(orgId: string, options: AddMemberOptions): Promise<OrganizationMember>;
|
|
1179
|
+
/**
|
|
1180
|
+
* Remove a member from an organization.
|
|
1181
|
+
*
|
|
1182
|
+
* @example
|
|
1183
|
+
* ```typescript
|
|
1184
|
+
* await stackbe.organizations.removeMember('org_123', 'member_456');
|
|
1185
|
+
* ```
|
|
1186
|
+
*/
|
|
1187
|
+
removeMember(orgId: string, memberId: string): Promise<void>;
|
|
1188
|
+
/**
|
|
1189
|
+
* Update a member's role.
|
|
1190
|
+
*
|
|
1191
|
+
* @example
|
|
1192
|
+
* ```typescript
|
|
1193
|
+
* await stackbe.organizations.updateMember('org_123', 'member_456', {
|
|
1194
|
+
* role: 'admin'
|
|
1195
|
+
* });
|
|
1196
|
+
* ```
|
|
1197
|
+
*/
|
|
1198
|
+
updateMember(orgId: string, memberId: string, options: {
|
|
1199
|
+
role: 'admin' | 'member';
|
|
1200
|
+
}): Promise<OrganizationMember>;
|
|
1201
|
+
/**
|
|
1202
|
+
* Send an invite to join an organization.
|
|
1203
|
+
*
|
|
1204
|
+
* @example
|
|
1205
|
+
* ```typescript
|
|
1206
|
+
* await stackbe.organizations.invite('org_123', {
|
|
1207
|
+
* email: 'newuser@company.com',
|
|
1208
|
+
* role: 'member'
|
|
1209
|
+
* });
|
|
1210
|
+
* ```
|
|
1211
|
+
*/
|
|
1212
|
+
invite(orgId: string, options: InviteMemberOptions): Promise<OrganizationInvite>;
|
|
1213
|
+
/**
|
|
1214
|
+
* List pending invites for an organization.
|
|
1215
|
+
*
|
|
1216
|
+
* @example
|
|
1217
|
+
* ```typescript
|
|
1218
|
+
* const invites = await stackbe.organizations.listInvites('org_123');
|
|
1219
|
+
* ```
|
|
1220
|
+
*/
|
|
1221
|
+
listInvites(orgId: string): Promise<OrganizationInvite[]>;
|
|
1222
|
+
/**
|
|
1223
|
+
* Cancel a pending invite.
|
|
1224
|
+
*
|
|
1225
|
+
* @example
|
|
1226
|
+
* ```typescript
|
|
1227
|
+
* await stackbe.organizations.cancelInvite('org_123', 'invite_456');
|
|
1228
|
+
* ```
|
|
1229
|
+
*/
|
|
1230
|
+
cancelInvite(orgId: string, inviteId: string): Promise<void>;
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1053
1233
|
declare class StackBE {
|
|
1054
1234
|
private http;
|
|
1055
1235
|
private appId;
|
|
@@ -1065,6 +1245,8 @@ declare class StackBE {
|
|
|
1065
1245
|
readonly subscriptions: SubscriptionsClient;
|
|
1066
1246
|
/** Customer authentication (magic links) */
|
|
1067
1247
|
readonly auth: AuthClient;
|
|
1248
|
+
/** Organization management (B2B multi-user) */
|
|
1249
|
+
readonly organizations: OrganizationsClient;
|
|
1068
1250
|
/**
|
|
1069
1251
|
* Create a new StackBE client.
|
|
1070
1252
|
*
|
|
@@ -1165,4 +1347,4 @@ declare class StackBE {
|
|
|
1165
1347
|
}): (req: any, res: any, next: any) => Promise<any>;
|
|
1166
1348
|
}
|
|
1167
1349
|
|
|
1168
|
-
export { type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type Customer, type CustomerCreatedEvent, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EntitlementsClient, type EntitlementsResponse, type MagicLinkOptions, type MagicLinkResponse, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, 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 UpdateSubscriptionOptions, UsageClient, type UsageMetric, type VerifyTokenResponse, type WebhookEvent, type WebhookEventType };
|
|
1350
|
+
export { type AddMemberOptions, type AnyWebhookEvent, AuthClient, type CancelSubscriptionOptions, type CancelSubscriptionResponse, type CheckEntitlementResponse, type CheckUsageResponse, CheckoutClient, type CheckoutSessionResponse, type CreateCheckoutOptions, type CreateCustomerOptions, type CreateOrganizationOptions, type Customer, type CustomerCreatedEvent, type CustomerUpdatedEvent, type CustomerUsageResponse, type CustomerWebhookPayload, type CustomerWithSubscription, CustomersClient, EntitlementsClient, type EntitlementsResponse, type InviteMemberOptions, type MagicLinkOptions, type MagicLinkResponse, type Organization, type OrganizationInvite, type OrganizationMember, OrganizationsClient, type PaymentFailedEvent, type PaymentSucceededEvent, type PaymentWebhookPayload, 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 };
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ __export(index_exports, {
|
|
|
24
24
|
CheckoutClient: () => CheckoutClient,
|
|
25
25
|
CustomersClient: () => CustomersClient,
|
|
26
26
|
EntitlementsClient: () => EntitlementsClient,
|
|
27
|
+
OrganizationsClient: () => OrganizationsClient,
|
|
27
28
|
StackBE: () => StackBE,
|
|
28
29
|
StackBEError: () => StackBEError,
|
|
29
30
|
SubscriptionsClient: () => SubscriptionsClient,
|
|
@@ -1156,6 +1157,182 @@ var AuthClient = class {
|
|
|
1156
1157
|
}
|
|
1157
1158
|
};
|
|
1158
1159
|
|
|
1160
|
+
// src/organizations.ts
|
|
1161
|
+
var OrganizationsClient = class {
|
|
1162
|
+
constructor(http, appId) {
|
|
1163
|
+
this.http = http;
|
|
1164
|
+
this.appId = appId;
|
|
1165
|
+
}
|
|
1166
|
+
/**
|
|
1167
|
+
* Create a new organization with a customer as owner.
|
|
1168
|
+
* Use this for B2B signup flows where you provision everything server-side.
|
|
1169
|
+
*
|
|
1170
|
+
* @example
|
|
1171
|
+
* ```typescript
|
|
1172
|
+
* const customer = await stackbe.customers.getOrCreate({ email: 'user@company.com' });
|
|
1173
|
+
* const org = await stackbe.organizations.create({
|
|
1174
|
+
* name: 'Acme Corp',
|
|
1175
|
+
* ownerId: customer.id
|
|
1176
|
+
* });
|
|
1177
|
+
* ```
|
|
1178
|
+
*/
|
|
1179
|
+
async create(options) {
|
|
1180
|
+
return this.http.post(
|
|
1181
|
+
`/v1/apps/${this.appId}/admin/organizations`,
|
|
1182
|
+
options
|
|
1183
|
+
);
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1186
|
+
* List all organizations for this app.
|
|
1187
|
+
*
|
|
1188
|
+
* @example
|
|
1189
|
+
* ```typescript
|
|
1190
|
+
* const orgs = await stackbe.organizations.list();
|
|
1191
|
+
* ```
|
|
1192
|
+
*/
|
|
1193
|
+
async list(options) {
|
|
1194
|
+
const params = new URLSearchParams();
|
|
1195
|
+
if (options?.limit) params.set("limit", String(options.limit));
|
|
1196
|
+
if (options?.offset) params.set("offset", String(options.offset));
|
|
1197
|
+
if (options?.search) params.set("search", options.search);
|
|
1198
|
+
const query = params.toString();
|
|
1199
|
+
const path = `/v1/apps/${this.appId}/admin/organizations${query ? `?${query}` : ""}`;
|
|
1200
|
+
return this.http.get(path);
|
|
1201
|
+
}
|
|
1202
|
+
/**
|
|
1203
|
+
* Get an organization by ID.
|
|
1204
|
+
*
|
|
1205
|
+
* @example
|
|
1206
|
+
* ```typescript
|
|
1207
|
+
* const org = await stackbe.organizations.get('org_123');
|
|
1208
|
+
* ```
|
|
1209
|
+
*/
|
|
1210
|
+
async get(orgId) {
|
|
1211
|
+
return this.http.get(
|
|
1212
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}`
|
|
1213
|
+
);
|
|
1214
|
+
}
|
|
1215
|
+
/**
|
|
1216
|
+
* Update an organization.
|
|
1217
|
+
*
|
|
1218
|
+
* @example
|
|
1219
|
+
* ```typescript
|
|
1220
|
+
* const org = await stackbe.organizations.update('org_123', {
|
|
1221
|
+
* name: 'New Name'
|
|
1222
|
+
* });
|
|
1223
|
+
* ```
|
|
1224
|
+
*/
|
|
1225
|
+
async update(orgId, options) {
|
|
1226
|
+
return this.http.patch(
|
|
1227
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}`,
|
|
1228
|
+
options
|
|
1229
|
+
);
|
|
1230
|
+
}
|
|
1231
|
+
/**
|
|
1232
|
+
* Delete an organization.
|
|
1233
|
+
* Note: Organizations with active subscriptions cannot be deleted.
|
|
1234
|
+
*
|
|
1235
|
+
* @example
|
|
1236
|
+
* ```typescript
|
|
1237
|
+
* await stackbe.organizations.delete('org_123');
|
|
1238
|
+
* ```
|
|
1239
|
+
*/
|
|
1240
|
+
async delete(orgId) {
|
|
1241
|
+
return this.http.delete(
|
|
1242
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}`
|
|
1243
|
+
);
|
|
1244
|
+
}
|
|
1245
|
+
/**
|
|
1246
|
+
* Add a customer as a member of an organization.
|
|
1247
|
+
*
|
|
1248
|
+
* @example
|
|
1249
|
+
* ```typescript
|
|
1250
|
+
* await stackbe.organizations.addMember('org_123', {
|
|
1251
|
+
* customerId: 'cust_456',
|
|
1252
|
+
* role: 'member'
|
|
1253
|
+
* });
|
|
1254
|
+
* ```
|
|
1255
|
+
*/
|
|
1256
|
+
async addMember(orgId, options) {
|
|
1257
|
+
return this.http.post(
|
|
1258
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/members`,
|
|
1259
|
+
options
|
|
1260
|
+
);
|
|
1261
|
+
}
|
|
1262
|
+
/**
|
|
1263
|
+
* Remove a member from an organization.
|
|
1264
|
+
*
|
|
1265
|
+
* @example
|
|
1266
|
+
* ```typescript
|
|
1267
|
+
* await stackbe.organizations.removeMember('org_123', 'member_456');
|
|
1268
|
+
* ```
|
|
1269
|
+
*/
|
|
1270
|
+
async removeMember(orgId, memberId) {
|
|
1271
|
+
return this.http.delete(
|
|
1272
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/members/${memberId}`
|
|
1273
|
+
);
|
|
1274
|
+
}
|
|
1275
|
+
/**
|
|
1276
|
+
* Update a member's role.
|
|
1277
|
+
*
|
|
1278
|
+
* @example
|
|
1279
|
+
* ```typescript
|
|
1280
|
+
* await stackbe.organizations.updateMember('org_123', 'member_456', {
|
|
1281
|
+
* role: 'admin'
|
|
1282
|
+
* });
|
|
1283
|
+
* ```
|
|
1284
|
+
*/
|
|
1285
|
+
async updateMember(orgId, memberId, options) {
|
|
1286
|
+
return this.http.patch(
|
|
1287
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/members/${memberId}`,
|
|
1288
|
+
options
|
|
1289
|
+
);
|
|
1290
|
+
}
|
|
1291
|
+
/**
|
|
1292
|
+
* Send an invite to join an organization.
|
|
1293
|
+
*
|
|
1294
|
+
* @example
|
|
1295
|
+
* ```typescript
|
|
1296
|
+
* await stackbe.organizations.invite('org_123', {
|
|
1297
|
+
* email: 'newuser@company.com',
|
|
1298
|
+
* role: 'member'
|
|
1299
|
+
* });
|
|
1300
|
+
* ```
|
|
1301
|
+
*/
|
|
1302
|
+
async invite(orgId, options) {
|
|
1303
|
+
return this.http.post(
|
|
1304
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/invites`,
|
|
1305
|
+
options
|
|
1306
|
+
);
|
|
1307
|
+
}
|
|
1308
|
+
/**
|
|
1309
|
+
* List pending invites for an organization.
|
|
1310
|
+
*
|
|
1311
|
+
* @example
|
|
1312
|
+
* ```typescript
|
|
1313
|
+
* const invites = await stackbe.organizations.listInvites('org_123');
|
|
1314
|
+
* ```
|
|
1315
|
+
*/
|
|
1316
|
+
async listInvites(orgId) {
|
|
1317
|
+
return this.http.get(
|
|
1318
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/invites`
|
|
1319
|
+
);
|
|
1320
|
+
}
|
|
1321
|
+
/**
|
|
1322
|
+
* Cancel a pending invite.
|
|
1323
|
+
*
|
|
1324
|
+
* @example
|
|
1325
|
+
* ```typescript
|
|
1326
|
+
* await stackbe.organizations.cancelInvite('org_123', 'invite_456');
|
|
1327
|
+
* ```
|
|
1328
|
+
*/
|
|
1329
|
+
async cancelInvite(orgId, inviteId) {
|
|
1330
|
+
return this.http.delete(
|
|
1331
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/invites/${inviteId}`
|
|
1332
|
+
);
|
|
1333
|
+
}
|
|
1334
|
+
};
|
|
1335
|
+
|
|
1159
1336
|
// src/client.ts
|
|
1160
1337
|
var DEFAULT_BASE_URL = "https://api.stackbe.io";
|
|
1161
1338
|
var DEFAULT_TIMEOUT = 3e4;
|
|
@@ -1215,6 +1392,7 @@ var StackBE = class {
|
|
|
1215
1392
|
sessionCacheTTL: config.sessionCacheTTL,
|
|
1216
1393
|
devCallbackUrl: config.devCallbackUrl
|
|
1217
1394
|
});
|
|
1395
|
+
this.organizations = new OrganizationsClient(this.http, config.appId);
|
|
1218
1396
|
}
|
|
1219
1397
|
/**
|
|
1220
1398
|
* Create a middleware for Express that tracks usage automatically.
|
|
@@ -1352,6 +1530,7 @@ var StackBE = class {
|
|
|
1352
1530
|
CheckoutClient,
|
|
1353
1531
|
CustomersClient,
|
|
1354
1532
|
EntitlementsClient,
|
|
1533
|
+
OrganizationsClient,
|
|
1355
1534
|
StackBE,
|
|
1356
1535
|
StackBEError,
|
|
1357
1536
|
SubscriptionsClient,
|
package/dist/index.mjs
CHANGED
|
@@ -1123,6 +1123,182 @@ var AuthClient = class {
|
|
|
1123
1123
|
}
|
|
1124
1124
|
};
|
|
1125
1125
|
|
|
1126
|
+
// src/organizations.ts
|
|
1127
|
+
var OrganizationsClient = class {
|
|
1128
|
+
constructor(http, appId) {
|
|
1129
|
+
this.http = http;
|
|
1130
|
+
this.appId = appId;
|
|
1131
|
+
}
|
|
1132
|
+
/**
|
|
1133
|
+
* Create a new organization with a customer as owner.
|
|
1134
|
+
* Use this for B2B signup flows where you provision everything server-side.
|
|
1135
|
+
*
|
|
1136
|
+
* @example
|
|
1137
|
+
* ```typescript
|
|
1138
|
+
* const customer = await stackbe.customers.getOrCreate({ email: 'user@company.com' });
|
|
1139
|
+
* const org = await stackbe.organizations.create({
|
|
1140
|
+
* name: 'Acme Corp',
|
|
1141
|
+
* ownerId: customer.id
|
|
1142
|
+
* });
|
|
1143
|
+
* ```
|
|
1144
|
+
*/
|
|
1145
|
+
async create(options) {
|
|
1146
|
+
return this.http.post(
|
|
1147
|
+
`/v1/apps/${this.appId}/admin/organizations`,
|
|
1148
|
+
options
|
|
1149
|
+
);
|
|
1150
|
+
}
|
|
1151
|
+
/**
|
|
1152
|
+
* List all organizations for this app.
|
|
1153
|
+
*
|
|
1154
|
+
* @example
|
|
1155
|
+
* ```typescript
|
|
1156
|
+
* const orgs = await stackbe.organizations.list();
|
|
1157
|
+
* ```
|
|
1158
|
+
*/
|
|
1159
|
+
async list(options) {
|
|
1160
|
+
const params = new URLSearchParams();
|
|
1161
|
+
if (options?.limit) params.set("limit", String(options.limit));
|
|
1162
|
+
if (options?.offset) params.set("offset", String(options.offset));
|
|
1163
|
+
if (options?.search) params.set("search", options.search);
|
|
1164
|
+
const query = params.toString();
|
|
1165
|
+
const path = `/v1/apps/${this.appId}/admin/organizations${query ? `?${query}` : ""}`;
|
|
1166
|
+
return this.http.get(path);
|
|
1167
|
+
}
|
|
1168
|
+
/**
|
|
1169
|
+
* Get an organization by ID.
|
|
1170
|
+
*
|
|
1171
|
+
* @example
|
|
1172
|
+
* ```typescript
|
|
1173
|
+
* const org = await stackbe.organizations.get('org_123');
|
|
1174
|
+
* ```
|
|
1175
|
+
*/
|
|
1176
|
+
async get(orgId) {
|
|
1177
|
+
return this.http.get(
|
|
1178
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}`
|
|
1179
|
+
);
|
|
1180
|
+
}
|
|
1181
|
+
/**
|
|
1182
|
+
* Update an organization.
|
|
1183
|
+
*
|
|
1184
|
+
* @example
|
|
1185
|
+
* ```typescript
|
|
1186
|
+
* const org = await stackbe.organizations.update('org_123', {
|
|
1187
|
+
* name: 'New Name'
|
|
1188
|
+
* });
|
|
1189
|
+
* ```
|
|
1190
|
+
*/
|
|
1191
|
+
async update(orgId, options) {
|
|
1192
|
+
return this.http.patch(
|
|
1193
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}`,
|
|
1194
|
+
options
|
|
1195
|
+
);
|
|
1196
|
+
}
|
|
1197
|
+
/**
|
|
1198
|
+
* Delete an organization.
|
|
1199
|
+
* Note: Organizations with active subscriptions cannot be deleted.
|
|
1200
|
+
*
|
|
1201
|
+
* @example
|
|
1202
|
+
* ```typescript
|
|
1203
|
+
* await stackbe.organizations.delete('org_123');
|
|
1204
|
+
* ```
|
|
1205
|
+
*/
|
|
1206
|
+
async delete(orgId) {
|
|
1207
|
+
return this.http.delete(
|
|
1208
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}`
|
|
1209
|
+
);
|
|
1210
|
+
}
|
|
1211
|
+
/**
|
|
1212
|
+
* Add a customer as a member of an organization.
|
|
1213
|
+
*
|
|
1214
|
+
* @example
|
|
1215
|
+
* ```typescript
|
|
1216
|
+
* await stackbe.organizations.addMember('org_123', {
|
|
1217
|
+
* customerId: 'cust_456',
|
|
1218
|
+
* role: 'member'
|
|
1219
|
+
* });
|
|
1220
|
+
* ```
|
|
1221
|
+
*/
|
|
1222
|
+
async addMember(orgId, options) {
|
|
1223
|
+
return this.http.post(
|
|
1224
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/members`,
|
|
1225
|
+
options
|
|
1226
|
+
);
|
|
1227
|
+
}
|
|
1228
|
+
/**
|
|
1229
|
+
* Remove a member from an organization.
|
|
1230
|
+
*
|
|
1231
|
+
* @example
|
|
1232
|
+
* ```typescript
|
|
1233
|
+
* await stackbe.organizations.removeMember('org_123', 'member_456');
|
|
1234
|
+
* ```
|
|
1235
|
+
*/
|
|
1236
|
+
async removeMember(orgId, memberId) {
|
|
1237
|
+
return this.http.delete(
|
|
1238
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/members/${memberId}`
|
|
1239
|
+
);
|
|
1240
|
+
}
|
|
1241
|
+
/**
|
|
1242
|
+
* Update a member's role.
|
|
1243
|
+
*
|
|
1244
|
+
* @example
|
|
1245
|
+
* ```typescript
|
|
1246
|
+
* await stackbe.organizations.updateMember('org_123', 'member_456', {
|
|
1247
|
+
* role: 'admin'
|
|
1248
|
+
* });
|
|
1249
|
+
* ```
|
|
1250
|
+
*/
|
|
1251
|
+
async updateMember(orgId, memberId, options) {
|
|
1252
|
+
return this.http.patch(
|
|
1253
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/members/${memberId}`,
|
|
1254
|
+
options
|
|
1255
|
+
);
|
|
1256
|
+
}
|
|
1257
|
+
/**
|
|
1258
|
+
* Send an invite to join an organization.
|
|
1259
|
+
*
|
|
1260
|
+
* @example
|
|
1261
|
+
* ```typescript
|
|
1262
|
+
* await stackbe.organizations.invite('org_123', {
|
|
1263
|
+
* email: 'newuser@company.com',
|
|
1264
|
+
* role: 'member'
|
|
1265
|
+
* });
|
|
1266
|
+
* ```
|
|
1267
|
+
*/
|
|
1268
|
+
async invite(orgId, options) {
|
|
1269
|
+
return this.http.post(
|
|
1270
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/invites`,
|
|
1271
|
+
options
|
|
1272
|
+
);
|
|
1273
|
+
}
|
|
1274
|
+
/**
|
|
1275
|
+
* List pending invites for an organization.
|
|
1276
|
+
*
|
|
1277
|
+
* @example
|
|
1278
|
+
* ```typescript
|
|
1279
|
+
* const invites = await stackbe.organizations.listInvites('org_123');
|
|
1280
|
+
* ```
|
|
1281
|
+
*/
|
|
1282
|
+
async listInvites(orgId) {
|
|
1283
|
+
return this.http.get(
|
|
1284
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/invites`
|
|
1285
|
+
);
|
|
1286
|
+
}
|
|
1287
|
+
/**
|
|
1288
|
+
* Cancel a pending invite.
|
|
1289
|
+
*
|
|
1290
|
+
* @example
|
|
1291
|
+
* ```typescript
|
|
1292
|
+
* await stackbe.organizations.cancelInvite('org_123', 'invite_456');
|
|
1293
|
+
* ```
|
|
1294
|
+
*/
|
|
1295
|
+
async cancelInvite(orgId, inviteId) {
|
|
1296
|
+
return this.http.delete(
|
|
1297
|
+
`/v1/apps/${this.appId}/admin/organizations/${orgId}/invites/${inviteId}`
|
|
1298
|
+
);
|
|
1299
|
+
}
|
|
1300
|
+
};
|
|
1301
|
+
|
|
1126
1302
|
// src/client.ts
|
|
1127
1303
|
var DEFAULT_BASE_URL = "https://api.stackbe.io";
|
|
1128
1304
|
var DEFAULT_TIMEOUT = 3e4;
|
|
@@ -1182,6 +1358,7 @@ var StackBE = class {
|
|
|
1182
1358
|
sessionCacheTTL: config.sessionCacheTTL,
|
|
1183
1359
|
devCallbackUrl: config.devCallbackUrl
|
|
1184
1360
|
});
|
|
1361
|
+
this.organizations = new OrganizationsClient(this.http, config.appId);
|
|
1185
1362
|
}
|
|
1186
1363
|
/**
|
|
1187
1364
|
* Create a middleware for Express that tracks usage automatically.
|
|
@@ -1318,6 +1495,7 @@ export {
|
|
|
1318
1495
|
CheckoutClient,
|
|
1319
1496
|
CustomersClient,
|
|
1320
1497
|
EntitlementsClient,
|
|
1498
|
+
OrganizationsClient,
|
|
1321
1499
|
StackBE,
|
|
1322
1500
|
StackBEError,
|
|
1323
1501
|
SubscriptionsClient,
|
package/package.json
CHANGED