@nehorai/credits 1.0.2 → 1.3.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/adapters/index.cjs +463 -0
- package/dist/adapters/index.cjs.map +1 -0
- package/dist/adapters/index.d.cts +66 -0
- package/dist/adapters/index.d.ts +66 -3
- package/dist/adapters/index.js +435 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/auth/index.cjs +96 -0
- package/dist/auth/index.cjs.map +1 -0
- package/dist/auth/{api-key.d.ts → index.d.cts} +9 -6
- package/dist/auth/index.d.ts +37 -5
- package/dist/auth/index.js +65 -7
- package/dist/auth/index.js.map +1 -1
- package/dist/core/index.cjs +522 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +119 -0
- package/dist/core/index.d.ts +115 -25
- package/dist/core/index.js +475 -27
- package/dist/core/index.js.map +1 -1
- package/dist/{core/deferred.d.ts → deferred-C7rrRfkm.d.cts} +7 -6
- package/dist/{core/deferred.js → deferred-C7rrRfkm.d.ts} +23 -29
- package/dist/index.cjs +2506 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +437 -0
- package/dist/index.d.ts +429 -49
- package/dist/index.js +2399 -62
- package/dist/index.js.map +1 -1
- package/dist/repository/index.cjs +816 -0
- package/dist/repository/index.cjs.map +1 -0
- package/dist/repository/{memory/index.d.ts → index.d.cts} +35 -5
- package/dist/repository/index.d.ts +97 -7
- package/dist/repository/index.js +783 -10
- package/dist/repository/index.js.map +1 -1
- package/dist/sdk/index.cjs +608 -0
- package/dist/sdk/index.cjs.map +1 -0
- package/dist/sdk/index.d.cts +495 -0
- package/dist/sdk/index.d.ts +491 -9
- package/dist/sdk/index.js +568 -12
- package/dist/sdk/index.js.map +1 -1
- package/dist/service/index.cjs +670 -0
- package/dist/service/index.cjs.map +1 -0
- package/dist/service/{credits-service.d.ts → index.d.cts} +9 -7
- package/dist/service/index.d.ts +141 -3
- package/dist/service/index.js +641 -1
- package/dist/service/index.js.map +1 -1
- package/dist/{core/types.d.ts → types-BBxIWHK2.d.cts} +25 -35
- package/dist/types-BBxIWHK2.d.ts +277 -0
- package/dist/types-D1vdeBcA.d.cts +305 -0
- package/dist/{auth/types.d.ts → types-OZU3I5OM.d.cts} +5 -4
- package/dist/types-OZU3I5OM.d.ts +32 -0
- package/dist/{repository/types.d.ts → types-aJsyv8df.d.ts} +35 -13
- package/package.json +14 -13
- package/dist/adapters/generic.d.ts +0 -18
- package/dist/adapters/generic.d.ts.map +0 -1
- package/dist/adapters/generic.js +0 -147
- package/dist/adapters/generic.js.map +0 -1
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/types.d.ts +0 -45
- package/dist/adapters/types.d.ts.map +0 -1
- package/dist/adapters/types.js +0 -8
- package/dist/adapters/types.js.map +0 -1
- package/dist/auth/api-key.d.ts.map +0 -1
- package/dist/auth/api-key.js +0 -94
- package/dist/auth/api-key.js.map +0 -1
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -2
- package/dist/auth/types.js.map +0 -1
- package/dist/config/costs.d.ts +0 -61
- package/dist/config/costs.d.ts.map +0 -1
- package/dist/config/costs.js +0 -86
- package/dist/config/costs.js.map +0 -1
- package/dist/config/index.d.ts +0 -165
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -286
- package/dist/config/index.js.map +0 -1
- package/dist/core/deferred.d.ts.map +0 -1
- package/dist/core/deferred.js.map +0 -1
- package/dist/core/errors.d.ts +0 -78
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -110
- package/dist/core/errors.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/operations.d.ts +0 -36
- package/dist/core/operations.d.ts.map +0 -1
- package/dist/core/operations.js +0 -87
- package/dist/core/operations.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -93
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -76
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -182
- package/dist/notifications/index.js.map +0 -1
- package/dist/repository/index.d.ts.map +0 -1
- package/dist/repository/memory/index.d.ts.map +0 -1
- package/dist/repository/memory/index.js +0 -518
- package/dist/repository/memory/index.js.map +0 -1
- package/dist/repository/types.d.ts.map +0 -1
- package/dist/repository/types.js +0 -39
- package/dist/repository/types.js.map +0 -1
- package/dist/repository/utils.d.ts +0 -22
- package/dist/repository/utils.d.ts.map +0 -1
- package/dist/repository/utils.js +0 -40
- package/dist/repository/utils.js.map +0 -1
- package/dist/sdk/admin-client.d.ts +0 -146
- package/dist/sdk/admin-client.d.ts.map +0 -1
- package/dist/sdk/admin-client.js +0 -196
- package/dist/sdk/admin-client.js.map +0 -1
- package/dist/sdk/client.d.ts +0 -144
- package/dist/sdk/client.d.ts.map +0 -1
- package/dist/sdk/client.js +0 -247
- package/dist/sdk/client.js.map +0 -1
- package/dist/sdk/errors.d.ts +0 -91
- package/dist/sdk/errors.d.ts.map +0 -1
- package/dist/sdk/errors.js +0 -185
- package/dist/sdk/errors.js.map +0 -1
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/types.d.ts +0 -110
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/types.js +0 -20
- package/dist/sdk/types.js.map +0 -1
- package/dist/service/credits-service.d.ts.map +0 -1
- package/dist/service/credits-service.js +0 -372
- package/dist/service/credits-service.js.map +0 -1
- package/dist/service/index.d.ts.map +0 -1
- package/dist/utils/error-utils.d.ts +0 -48
- package/dist/utils/error-utils.d.ts.map +0 -1
- package/dist/utils/error-utils.js +0 -57
- package/dist/utils/error-utils.js.map +0 -1
- package/dist/utils/index.d.ts +0 -54
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -72
- package/dist/utils/index.js.map +0 -1
package/dist/repository/utils.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared utilities for credit repository implementations
|
|
3
|
-
*
|
|
4
|
-
* These are pure functions with no server-only dependencies,
|
|
5
|
-
* making them safe to use in any repository implementation.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Generate a unique ID
|
|
9
|
-
* Uses timestamp + random string for uniqueness
|
|
10
|
-
*/
|
|
11
|
-
export function generateId() {
|
|
12
|
-
return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Convert date-like value to Date object
|
|
16
|
-
* Handles: Date, string, Firestore Timestamp
|
|
17
|
-
*/
|
|
18
|
-
export function toDate(value) {
|
|
19
|
-
if (value instanceof Date)
|
|
20
|
-
return value;
|
|
21
|
-
if (typeof value === "string")
|
|
22
|
-
return new Date(value);
|
|
23
|
-
// Handle Firestore Timestamp
|
|
24
|
-
if (typeof value === "object" && value !== null && "toDate" in value) {
|
|
25
|
-
return value.toDate();
|
|
26
|
-
}
|
|
27
|
-
return new Date();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Get the first day of next month
|
|
31
|
-
* Used for calculating monthly reset dates
|
|
32
|
-
*/
|
|
33
|
-
export function getNextMonthlyReset(from = new Date()) {
|
|
34
|
-
const next = new Date(from);
|
|
35
|
-
next.setMonth(next.getMonth() + 1);
|
|
36
|
-
next.setDate(1);
|
|
37
|
-
next.setHours(0, 0, 0, 0);
|
|
38
|
-
return next;
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/repository/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,KAA8B;IACnD,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,6BAA6B;IAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACrE,OAAQ,KAAgC,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAa,IAAI,IAAI,EAAE;IACzD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AdminCreditsClient - Admin REST API client for the credits system
|
|
3
|
-
*
|
|
4
|
-
* Provides administrative access to the credits system for managing
|
|
5
|
-
* user credits, configurations, and subscriptions.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const adminClient = new AdminCreditsClient({
|
|
10
|
-
* baseUrl: process.env.CREDITS_API_URL,
|
|
11
|
-
* apiKey: process.env.CREDITS_ADMIN_API_KEY,
|
|
12
|
-
* });
|
|
13
|
-
*
|
|
14
|
-
* // Add credits to a user
|
|
15
|
-
* await adminClient.addCredits("user-123", 100, "Support credit grant");
|
|
16
|
-
*
|
|
17
|
-
* // Update subscription tier
|
|
18
|
-
* await adminClient.updateSubscription("user-123", "premium", "2027-01-01T00:00:00Z");
|
|
19
|
-
*
|
|
20
|
-
* // Update operation costs
|
|
21
|
-
* await adminClient.updateCosts({
|
|
22
|
-
* story_generation: 8,
|
|
23
|
-
* image_generation: 12,
|
|
24
|
-
* });
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
import type { AdminCreditsClientConfig, UserCredits } from "./types.js";
|
|
28
|
-
/**
|
|
29
|
-
* Credits configuration returned by the API
|
|
30
|
-
*/
|
|
31
|
-
export interface CreditsConfig {
|
|
32
|
-
operationCosts: Record<string, number>;
|
|
33
|
-
tierConfigs: Record<string, {
|
|
34
|
-
monthlyLimit: number;
|
|
35
|
-
features: string[];
|
|
36
|
-
}>;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Response from listing users
|
|
40
|
-
*/
|
|
41
|
-
export interface ListUsersResponse {
|
|
42
|
-
users: Array<{
|
|
43
|
-
userId: string;
|
|
44
|
-
balance: number;
|
|
45
|
-
bonusCredits?: number;
|
|
46
|
-
tier: string;
|
|
47
|
-
monthlyUsed?: number;
|
|
48
|
-
}>;
|
|
49
|
-
hasMore: boolean;
|
|
50
|
-
total?: number;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Options for listing users
|
|
54
|
-
*/
|
|
55
|
-
export interface ListUsersOptions {
|
|
56
|
-
page?: number;
|
|
57
|
-
limit?: number;
|
|
58
|
-
tier?: string;
|
|
59
|
-
search?: string;
|
|
60
|
-
}
|
|
61
|
-
export declare class AdminCreditsClient {
|
|
62
|
-
private readonly baseUrl;
|
|
63
|
-
private readonly apiKey;
|
|
64
|
-
private readonly fetchFn;
|
|
65
|
-
constructor(config: AdminCreditsClientConfig);
|
|
66
|
-
/**
|
|
67
|
-
* Make an authenticated admin request to the API
|
|
68
|
-
*/
|
|
69
|
-
private request;
|
|
70
|
-
/**
|
|
71
|
-
* Get a specific user's credits
|
|
72
|
-
*
|
|
73
|
-
* @param userId - ID of the user
|
|
74
|
-
* @returns User's credit information
|
|
75
|
-
* @throws AuthorizationError if API key is invalid
|
|
76
|
-
*/
|
|
77
|
-
getUserCredits(userId: string): Promise<UserCredits>;
|
|
78
|
-
/**
|
|
79
|
-
* Add credits to a user's account
|
|
80
|
-
*
|
|
81
|
-
* Credits are added to bonusCredits, which don't expire on monthly reset.
|
|
82
|
-
*
|
|
83
|
-
* @param userId - ID of the user
|
|
84
|
-
* @param amount - Amount of credits to add
|
|
85
|
-
* @param description - Reason for adding credits
|
|
86
|
-
* @throws AuthorizationError if API key is invalid
|
|
87
|
-
*/
|
|
88
|
-
addCredits(userId: string, amount: number, description: string): Promise<void>;
|
|
89
|
-
/**
|
|
90
|
-
* Update a user's subscription tier
|
|
91
|
-
*
|
|
92
|
-
* @param userId - ID of the user
|
|
93
|
-
* @param tier - New subscription tier
|
|
94
|
-
* @param expiresAt - Optional expiration date (ISO 8601)
|
|
95
|
-
* @throws AuthorizationError if API key is invalid
|
|
96
|
-
*/
|
|
97
|
-
updateSubscription(userId: string, tier: string, expiresAt?: string): Promise<void>;
|
|
98
|
-
/**
|
|
99
|
-
* Get the current credits configuration
|
|
100
|
-
*
|
|
101
|
-
* @returns Credits system configuration
|
|
102
|
-
* @throws AuthorizationError if API key is invalid
|
|
103
|
-
*/
|
|
104
|
-
getConfig(): Promise<CreditsConfig>;
|
|
105
|
-
/**
|
|
106
|
-
* Update operation costs
|
|
107
|
-
*
|
|
108
|
-
* @param costs - New operation costs (operation type -> cost)
|
|
109
|
-
* @throws AuthorizationError if API key is invalid
|
|
110
|
-
*/
|
|
111
|
-
updateCosts(costs: Record<string, number>): Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* List all users with their credits
|
|
114
|
-
*
|
|
115
|
-
* @param options - Pagination and filtering options
|
|
116
|
-
* @returns Paginated list of users
|
|
117
|
-
* @throws AuthorizationError if API key is invalid
|
|
118
|
-
*/
|
|
119
|
-
listUsers(options?: ListUsersOptions): Promise<ListUsersResponse>;
|
|
120
|
-
/**
|
|
121
|
-
* Deduct credits from a user's account
|
|
122
|
-
*
|
|
123
|
-
* @param userId - ID of the user
|
|
124
|
-
* @param amount - Amount of credits to deduct
|
|
125
|
-
* @param description - Reason for deducting credits
|
|
126
|
-
* @throws AuthorizationError if API key is invalid
|
|
127
|
-
*/
|
|
128
|
-
deductCredits(userId: string, amount: number, description: string): Promise<void>;
|
|
129
|
-
/**
|
|
130
|
-
* Get usage statistics for a user
|
|
131
|
-
*
|
|
132
|
-
* @param userId - ID of the user
|
|
133
|
-
* @param options - Optional date range
|
|
134
|
-
* @returns Usage statistics
|
|
135
|
-
* @throws AuthorizationError if API key is invalid
|
|
136
|
-
*/
|
|
137
|
-
getUserStats(userId: string, options?: {
|
|
138
|
-
startDate?: string;
|
|
139
|
-
endDate?: string;
|
|
140
|
-
}): Promise<{
|
|
141
|
-
totalCreditsUsed: number;
|
|
142
|
-
operationBreakdown: Record<string, number>;
|
|
143
|
-
successRate: number;
|
|
144
|
-
}>;
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=admin-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-client.d.ts","sourceRoot":"","sources":["../../src/sdk/admin-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,CACjB,MAAM,EACN;QACE,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CACF,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,MAAM,EAAE,wBAAwB;IAO5C;;OAEG;YACW,OAAO;IA6DrB;;;;;;OAMG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI1D;;;;;;;;;OASG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAUhB;;;;;;;OAOG;IACG,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAehB;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAIzC;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/D;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWvE;;;;;;;OAOG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAUhB;;;;;;;OAOG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC;QACT,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CAYH"}
|
package/dist/sdk/admin-client.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AdminCreditsClient - Admin REST API client for the credits system
|
|
3
|
-
*
|
|
4
|
-
* Provides administrative access to the credits system for managing
|
|
5
|
-
* user credits, configurations, and subscriptions.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const adminClient = new AdminCreditsClient({
|
|
10
|
-
* baseUrl: process.env.CREDITS_API_URL,
|
|
11
|
-
* apiKey: process.env.CREDITS_ADMIN_API_KEY,
|
|
12
|
-
* });
|
|
13
|
-
*
|
|
14
|
-
* // Add credits to a user
|
|
15
|
-
* await adminClient.addCredits("user-123", 100, "Support credit grant");
|
|
16
|
-
*
|
|
17
|
-
* // Update subscription tier
|
|
18
|
-
* await adminClient.updateSubscription("user-123", "premium", "2027-01-01T00:00:00Z");
|
|
19
|
-
*
|
|
20
|
-
* // Update operation costs
|
|
21
|
-
* await adminClient.updateCosts({
|
|
22
|
-
* story_generation: 8,
|
|
23
|
-
* image_generation: 12,
|
|
24
|
-
* });
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
import { parseApiError, NetworkError } from "./errors.js";
|
|
28
|
-
export class AdminCreditsClient {
|
|
29
|
-
baseUrl;
|
|
30
|
-
apiKey;
|
|
31
|
-
fetchFn;
|
|
32
|
-
constructor(config) {
|
|
33
|
-
// Ensure baseUrl doesn't have trailing slash
|
|
34
|
-
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
35
|
-
this.apiKey = config.apiKey;
|
|
36
|
-
this.fetchFn = config.fetch ?? fetch;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Make an authenticated admin request to the API
|
|
40
|
-
*/
|
|
41
|
-
async request(path, options = {}) {
|
|
42
|
-
const { method = "GET", body, params } = options;
|
|
43
|
-
// Build URL with query params
|
|
44
|
-
let url = `${this.baseUrl}${path}`;
|
|
45
|
-
if (params) {
|
|
46
|
-
const searchParams = new URLSearchParams();
|
|
47
|
-
for (const [key, value] of Object.entries(params)) {
|
|
48
|
-
if (value !== undefined) {
|
|
49
|
-
searchParams.set(key, String(value));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const queryString = searchParams.toString();
|
|
53
|
-
if (queryString) {
|
|
54
|
-
url += `?${queryString}`;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Build headers with admin API key
|
|
58
|
-
const headers = {
|
|
59
|
-
"Content-Type": "application/json",
|
|
60
|
-
"x-api-key": this.apiKey,
|
|
61
|
-
};
|
|
62
|
-
// Make the request
|
|
63
|
-
let response;
|
|
64
|
-
try {
|
|
65
|
-
response = await this.fetchFn(url, {
|
|
66
|
-
method,
|
|
67
|
-
headers,
|
|
68
|
-
body: body ? JSON.stringify(body) : undefined,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
throw new NetworkError(error instanceof Error ? error.message : "Network request failed", error instanceof Error ? error : undefined);
|
|
73
|
-
}
|
|
74
|
-
// Parse response
|
|
75
|
-
const responseBody = (await response.json());
|
|
76
|
-
// Handle errors
|
|
77
|
-
if (!response.ok) {
|
|
78
|
-
throw parseApiError(response.status, responseBody);
|
|
79
|
-
}
|
|
80
|
-
// Return data
|
|
81
|
-
return responseBody.data;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Get a specific user's credits
|
|
85
|
-
*
|
|
86
|
-
* @param userId - ID of the user
|
|
87
|
-
* @returns User's credit information
|
|
88
|
-
* @throws AuthorizationError if API key is invalid
|
|
89
|
-
*/
|
|
90
|
-
async getUserCredits(userId) {
|
|
91
|
-
return this.request(`/api/admin/credits/users/${userId}`);
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Add credits to a user's account
|
|
95
|
-
*
|
|
96
|
-
* Credits are added to bonusCredits, which don't expire on monthly reset.
|
|
97
|
-
*
|
|
98
|
-
* @param userId - ID of the user
|
|
99
|
-
* @param amount - Amount of credits to add
|
|
100
|
-
* @param description - Reason for adding credits
|
|
101
|
-
* @throws AuthorizationError if API key is invalid
|
|
102
|
-
*/
|
|
103
|
-
async addCredits(userId, amount, description) {
|
|
104
|
-
await this.request(`/api/admin/credits/users/${userId}/add`, {
|
|
105
|
-
method: "POST",
|
|
106
|
-
body: { amount, description },
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Update a user's subscription tier
|
|
111
|
-
*
|
|
112
|
-
* @param userId - ID of the user
|
|
113
|
-
* @param tier - New subscription tier
|
|
114
|
-
* @param expiresAt - Optional expiration date (ISO 8601)
|
|
115
|
-
* @throws AuthorizationError if API key is invalid
|
|
116
|
-
*/
|
|
117
|
-
async updateSubscription(userId, tier, expiresAt) {
|
|
118
|
-
const body = { tier };
|
|
119
|
-
if (expiresAt) {
|
|
120
|
-
body.expiresAt = expiresAt;
|
|
121
|
-
}
|
|
122
|
-
await this.request(`/api/admin/credits/users/${userId}/subscription`, {
|
|
123
|
-
method: "PUT",
|
|
124
|
-
body,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Get the current credits configuration
|
|
129
|
-
*
|
|
130
|
-
* @returns Credits system configuration
|
|
131
|
-
* @throws AuthorizationError if API key is invalid
|
|
132
|
-
*/
|
|
133
|
-
async getConfig() {
|
|
134
|
-
return this.request("/api/admin/credits/config");
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Update operation costs
|
|
138
|
-
*
|
|
139
|
-
* @param costs - New operation costs (operation type -> cost)
|
|
140
|
-
* @throws AuthorizationError if API key is invalid
|
|
141
|
-
*/
|
|
142
|
-
async updateCosts(costs) {
|
|
143
|
-
await this.request("/api/admin/credits/config/costs", {
|
|
144
|
-
method: "PUT",
|
|
145
|
-
body: { operationCosts: costs },
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* List all users with their credits
|
|
150
|
-
*
|
|
151
|
-
* @param options - Pagination and filtering options
|
|
152
|
-
* @returns Paginated list of users
|
|
153
|
-
* @throws AuthorizationError if API key is invalid
|
|
154
|
-
*/
|
|
155
|
-
async listUsers(options) {
|
|
156
|
-
return this.request("/api/admin/credits/users", {
|
|
157
|
-
params: {
|
|
158
|
-
page: options?.page,
|
|
159
|
-
limit: options?.limit,
|
|
160
|
-
tier: options?.tier,
|
|
161
|
-
search: options?.search,
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Deduct credits from a user's account
|
|
167
|
-
*
|
|
168
|
-
* @param userId - ID of the user
|
|
169
|
-
* @param amount - Amount of credits to deduct
|
|
170
|
-
* @param description - Reason for deducting credits
|
|
171
|
-
* @throws AuthorizationError if API key is invalid
|
|
172
|
-
*/
|
|
173
|
-
async deductCredits(userId, amount, description) {
|
|
174
|
-
await this.request(`/api/admin/credits/users/${userId}/deduct`, {
|
|
175
|
-
method: "POST",
|
|
176
|
-
body: { amount, description },
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Get usage statistics for a user
|
|
181
|
-
*
|
|
182
|
-
* @param userId - ID of the user
|
|
183
|
-
* @param options - Optional date range
|
|
184
|
-
* @returns Usage statistics
|
|
185
|
-
* @throws AuthorizationError if API key is invalid
|
|
186
|
-
*/
|
|
187
|
-
async getUserStats(userId, options) {
|
|
188
|
-
return this.request(`/api/admin/credits/users/${userId}/stats`, {
|
|
189
|
-
params: {
|
|
190
|
-
startDate: options?.startDate,
|
|
191
|
-
endDate: options?.endDate,
|
|
192
|
-
},
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=admin-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-client.js","sourceRoot":"","sources":["../../src/sdk/admin-client.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/client.d.ts
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CreditsClient - REST API client for the credits system
|
|
3
|
-
*
|
|
4
|
-
* Provides a type-safe interface for consuming credits API endpoints
|
|
5
|
-
* from external services or other applications.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const client = new CreditsClient({
|
|
10
|
-
* baseUrl: process.env.CREDITS_API_URL,
|
|
11
|
-
* getAuthToken: async () => session.accessToken,
|
|
12
|
-
* });
|
|
13
|
-
*
|
|
14
|
-
* // Check if user has sufficient credits
|
|
15
|
-
* const check = await client.checkAvailability("story_generation");
|
|
16
|
-
* if (!check.hasCredits) {
|
|
17
|
-
* console.log("Insufficient credits");
|
|
18
|
-
* return;
|
|
19
|
-
* }
|
|
20
|
-
*
|
|
21
|
-
* // Two-phase commit pattern
|
|
22
|
-
* const reservation = await client.reserve("story_generation");
|
|
23
|
-
* try {
|
|
24
|
-
* const result = await doExpensiveWork();
|
|
25
|
-
* await client.commit(reservation.reservationId);
|
|
26
|
-
* return result;
|
|
27
|
-
* } catch (error) {
|
|
28
|
-
* await client.release(reservation.reservationId);
|
|
29
|
-
* throw error;
|
|
30
|
-
* }
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
import type { CreditsClientConfig, UserCredits, CreditCheckResult, ReservationResult, UsageHistoryResponse, PaginationOptions } from "./types.js";
|
|
34
|
-
export declare class CreditsClient {
|
|
35
|
-
private readonly baseUrl;
|
|
36
|
-
private readonly getAuthToken?;
|
|
37
|
-
private readonly fetchFn;
|
|
38
|
-
constructor(config: CreditsClientConfig);
|
|
39
|
-
/**
|
|
40
|
-
* Make an authenticated request to the API
|
|
41
|
-
*/
|
|
42
|
-
private request;
|
|
43
|
-
/**
|
|
44
|
-
* Get the current user's credit balance
|
|
45
|
-
*
|
|
46
|
-
* @returns User's credit information
|
|
47
|
-
* @throws AuthenticationError if not authenticated
|
|
48
|
-
*/
|
|
49
|
-
getBalance(): Promise<UserCredits>;
|
|
50
|
-
/**
|
|
51
|
-
* Check if the user has sufficient credits for an operation
|
|
52
|
-
*
|
|
53
|
-
* @param operationType - Type of operation to check
|
|
54
|
-
* @param customCost - Optional custom cost to check against
|
|
55
|
-
* @returns Credit availability status
|
|
56
|
-
* @throws AuthenticationError if not authenticated
|
|
57
|
-
*/
|
|
58
|
-
checkAvailability(operationType: string, customCost?: number): Promise<CreditCheckResult>;
|
|
59
|
-
/**
|
|
60
|
-
* Reserve credits for an operation
|
|
61
|
-
*
|
|
62
|
-
* This is the first step in the two-phase commit pattern.
|
|
63
|
-
* Reserved credits are held for 5 minutes before expiring.
|
|
64
|
-
*
|
|
65
|
-
* @param operationType - Type of operation
|
|
66
|
-
* @param options - Optional reservation options
|
|
67
|
-
* @returns Reservation details including ID and expiry
|
|
68
|
-
* @throws InsufficientCreditsError if not enough credits
|
|
69
|
-
* @throws AuthenticationError if not authenticated
|
|
70
|
-
*/
|
|
71
|
-
reserve(operationType: string, options?: {
|
|
72
|
-
customCost?: number;
|
|
73
|
-
resourceId?: string;
|
|
74
|
-
resourceType?: string;
|
|
75
|
-
}): Promise<ReservationResult>;
|
|
76
|
-
/**
|
|
77
|
-
* Commit a reservation (deduct credits)
|
|
78
|
-
*
|
|
79
|
-
* This is the second step in the two-phase commit pattern.
|
|
80
|
-
* Call this after your operation succeeds.
|
|
81
|
-
*
|
|
82
|
-
* @param reservationId - ID of the reservation to commit
|
|
83
|
-
* @throws ReservationNotFoundError if reservation doesn't exist
|
|
84
|
-
* @throws ReservationExpiredError if reservation has expired
|
|
85
|
-
* @throws AuthenticationError if not authenticated
|
|
86
|
-
*/
|
|
87
|
-
commit(reservationId: string): Promise<void>;
|
|
88
|
-
/**
|
|
89
|
-
* Release a reservation (refund credits)
|
|
90
|
-
*
|
|
91
|
-
* Call this if your operation fails after reserving credits.
|
|
92
|
-
*
|
|
93
|
-
* @param reservationId - ID of the reservation to release
|
|
94
|
-
* @throws ReservationNotFoundError if reservation doesn't exist
|
|
95
|
-
* @throws AuthenticationError if not authenticated
|
|
96
|
-
*/
|
|
97
|
-
release(reservationId: string): Promise<void>;
|
|
98
|
-
/**
|
|
99
|
-
* Get usage history for the current user
|
|
100
|
-
*
|
|
101
|
-
* @param options - Optional pagination options
|
|
102
|
-
* @returns Paginated list of usage entries
|
|
103
|
-
* @throws AuthenticationError if not authenticated
|
|
104
|
-
*/
|
|
105
|
-
getHistory(options?: PaginationOptions): Promise<UsageHistoryResponse>;
|
|
106
|
-
/**
|
|
107
|
-
* Get the available credits (balance + bonus - reserved)
|
|
108
|
-
*
|
|
109
|
-
* Convenience method that calculates available credits from balance.
|
|
110
|
-
*
|
|
111
|
-
* @returns Number of available credits
|
|
112
|
-
* @throws AuthenticationError if not authenticated
|
|
113
|
-
*/
|
|
114
|
-
getAvailableCredits(): Promise<number>;
|
|
115
|
-
/**
|
|
116
|
-
* Execute an operation with automatic credit handling
|
|
117
|
-
*
|
|
118
|
-
* This is a convenience method that handles the full two-phase commit
|
|
119
|
-
* pattern automatically.
|
|
120
|
-
*
|
|
121
|
-
* @param operationType - Type of operation
|
|
122
|
-
* @param operation - The operation to execute
|
|
123
|
-
* @param options - Optional reservation options
|
|
124
|
-
* @returns Result of the operation
|
|
125
|
-
* @throws InsufficientCreditsError if not enough credits
|
|
126
|
-
* @throws AuthenticationError if not authenticated
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* ```typescript
|
|
130
|
-
* const result = await client.withCredits(
|
|
131
|
-
* "story_generation",
|
|
132
|
-
* async () => {
|
|
133
|
-
* return generateStory(data);
|
|
134
|
-
* }
|
|
135
|
-
* );
|
|
136
|
-
* ```
|
|
137
|
-
*/
|
|
138
|
-
withCredits<T>(operationType: string, operation: () => Promise<T>, options?: {
|
|
139
|
-
customCost?: number;
|
|
140
|
-
resourceId?: string;
|
|
141
|
-
resourceType?: string;
|
|
142
|
-
}): Promise<T>;
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=client.d.ts.map
|
package/dist/sdk/client.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sdk/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,MAAM,EAAE,mBAAmB;IAOvC;;OAEG;YACW,OAAO;IAwErB;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAIxC;;;;;;;OAOG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC;IAS7B;;;;;;;;;;;OAWG;IACG,OAAO,CACX,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,OAAO,CAAC,iBAAiB,CAAC;IAU7B;;;;;;;;;;OAUG;IACG,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlD;;;;;;;;OAQG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;;;;;OAMG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAS5E;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,WAAW,CAAC,CAAC,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GACA,OAAO,CAAC,CAAC,CAAC;CAiBd"}
|