@resvary/sdk 0.8.0 → 1.0.0-rc.2
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/admin/index.d.ts +3 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/service.d.ts +62 -0
- package/dist/admin/service.d.ts.map +1 -0
- package/dist/admin/service.js +150 -0
- package/dist/admin/service.js.map +1 -0
- package/dist/admin/types.d.ts +117 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +25 -0
- package/dist/admin/types.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { decodeAdminCursor, encodeAdminCursor, normalizeAdminPage, type AdminAuditQuery, type AdminCursorValue, type AdminCustomerDetail, type AdminCustomerQuery, type AdminCustomerSummary, type AdminOverview, type AdminPage, type AdminPageInput, type AdminQueryStore, type AdminUsageEvidence, type AuditItem, type AuditItemKind, type OperatorAction, type OperatorActionStatus, type OperatorActionType, } from './types.js';
|
|
2
|
+
export { OperatorService, type OperatorAdjustInput, type OperatorExpireOverdueInput, type OperatorGrantInput, type OperatorRequeueInput, type OperatorServiceConfig, } from './service.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GAgBnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,GAMhB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { CreditLedger } from '../credits/ledger.js';
|
|
2
|
+
import type { CreditStore, OutboxDeliveryStore } from '../credits/store.js';
|
|
3
|
+
import type { AdminQueryStore, OperatorAction } from './types.js';
|
|
4
|
+
export interface OperatorServiceConfig {
|
|
5
|
+
projectId: string;
|
|
6
|
+
ledger: CreditLedger;
|
|
7
|
+
adminStore: AdminQueryStore;
|
|
8
|
+
deliveryStore: CreditStore & OutboxDeliveryStore;
|
|
9
|
+
now?: () => number;
|
|
10
|
+
}
|
|
11
|
+
interface OperatorCommandBase {
|
|
12
|
+
actionId: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
export interface OperatorGrantInput extends OperatorCommandBase {
|
|
16
|
+
customerId: string;
|
|
17
|
+
amount: string;
|
|
18
|
+
}
|
|
19
|
+
export interface OperatorAdjustInput extends OperatorCommandBase {
|
|
20
|
+
customerId: string;
|
|
21
|
+
amount: string;
|
|
22
|
+
}
|
|
23
|
+
export interface OperatorExpireOverdueInput extends OperatorCommandBase {
|
|
24
|
+
before?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface OperatorRequeueInput extends OperatorCommandBase {
|
|
27
|
+
eventId: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class OperatorService {
|
|
30
|
+
private readonly config;
|
|
31
|
+
private readonly now;
|
|
32
|
+
constructor(config: OperatorServiceConfig);
|
|
33
|
+
grantCredits(input: OperatorGrantInput): Promise<{
|
|
34
|
+
action: OperatorAction;
|
|
35
|
+
result: {
|
|
36
|
+
account: import("../index.js").CreditAccount;
|
|
37
|
+
grant: import("../index.js").CreditGrant;
|
|
38
|
+
};
|
|
39
|
+
}>;
|
|
40
|
+
adjustCredits(input: OperatorAdjustInput): Promise<{
|
|
41
|
+
action: OperatorAction;
|
|
42
|
+
result: {
|
|
43
|
+
account: import("../index.js").CreditAccount;
|
|
44
|
+
entry: import("../index.js").LedgerEntry;
|
|
45
|
+
};
|
|
46
|
+
}>;
|
|
47
|
+
expireOverdueReservations(input: OperatorExpireOverdueInput): Promise<{
|
|
48
|
+
action: OperatorAction;
|
|
49
|
+
result: import("../index.js").CreditReservation[];
|
|
50
|
+
}>;
|
|
51
|
+
requeueDeadLetter(input: OperatorRequeueInput): Promise<{
|
|
52
|
+
action: OperatorAction;
|
|
53
|
+
result: import("../index.js").CreditOutboxEvent<unknown> | undefined;
|
|
54
|
+
}>;
|
|
55
|
+
private execute;
|
|
56
|
+
private appendOutcome;
|
|
57
|
+
private assertSameCommand;
|
|
58
|
+
private idempotencyKey;
|
|
59
|
+
private metadata;
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/admin/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAGf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,eAAe,CAAC;IAC5B,aAAa,EAAE,WAAW,GAAG,mBAAmB,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEN,MAAM,EAAE,qBAAqB;IAQ1D,YAAY,CAAC,KAAK,EAAE,kBAAkB;gBAkEjB,cAAc;;;;;;IApDnC,aAAa,CAAC,KAAK,EAAE,mBAAmB;gBAoDnB,cAAc;;;;;;IAxCnC,yBAAyB,CAAC,KAAK,EAAE,0BAA0B;gBAwCtC,cAAc;;;IA3B7B,iBAAiB,CAAC,KAAK,EAAE,oBAAoB;gBA2B9B,cAAc;;;YANrB,OAAO;YA8DP,aAAa;IA8B3B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,QAAQ;CAOjB"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { toCreditUnits } from '../credits/amount.js';
|
|
2
|
+
export class OperatorService {
|
|
3
|
+
config;
|
|
4
|
+
now;
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
if (!config.projectId.trim())
|
|
8
|
+
throw new Error('Operator projectId is required');
|
|
9
|
+
if (config.ledger.projectId !== config.projectId) {
|
|
10
|
+
throw new Error('Operator service and ledger must use the same projectId');
|
|
11
|
+
}
|
|
12
|
+
this.now = config.now ?? Date.now;
|
|
13
|
+
}
|
|
14
|
+
grantCredits(input) {
|
|
15
|
+
if (toCreditUnits(input.amount) <= 0n)
|
|
16
|
+
throw new Error('Operator grant amount must be positive');
|
|
17
|
+
return this.execute(input, 'credit.grant', 'customer', input.customerId, () => this.config.ledger.grantCredits({
|
|
18
|
+
customerId: input.customerId,
|
|
19
|
+
amount: input.amount,
|
|
20
|
+
source: 'manual',
|
|
21
|
+
idempotencyKey: this.idempotencyKey(input.actionId),
|
|
22
|
+
metadata: this.metadata(input),
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
adjustCredits(input) {
|
|
26
|
+
return this.execute(input, 'credit.adjust', 'customer', input.customerId, () => this.config.ledger.adjustCredits({
|
|
27
|
+
customerId: input.customerId,
|
|
28
|
+
amount: input.amount,
|
|
29
|
+
reason: input.reason,
|
|
30
|
+
idempotencyKey: this.idempotencyKey(input.actionId),
|
|
31
|
+
metadata: this.metadata(input),
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
expireOverdueReservations(input) {
|
|
35
|
+
const currentTime = this.now();
|
|
36
|
+
const before = input.before ?? currentTime;
|
|
37
|
+
if (!Number.isSafeInteger(before))
|
|
38
|
+
throw new Error('Operator expiry time must be an integer');
|
|
39
|
+
if (before > currentTime)
|
|
40
|
+
throw new Error('Operator expiry time cannot be in the future');
|
|
41
|
+
return this.execute(input, 'reservation.expire_overdue', 'project', this.config.projectId, () => this.config.ledger.releaseExpiredReservations({
|
|
42
|
+
now: before,
|
|
43
|
+
idempotencyKey: this.idempotencyKey(input.actionId),
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
async requeueDeadLetter(input) {
|
|
47
|
+
return this.execute(input, 'outbox.requeue', 'outbox_event', input.eventId, async (pendingRecovery) => {
|
|
48
|
+
const event = await this.config.deliveryStore.getOutboxEvent(input.eventId);
|
|
49
|
+
if (!event || event.projectId !== this.config.projectId) {
|
|
50
|
+
throw new Error(`Outbox event not found: ${input.eventId}`);
|
|
51
|
+
}
|
|
52
|
+
if (pendingRecovery && event.status === 'pending' && event.attemptCount === 0)
|
|
53
|
+
return event;
|
|
54
|
+
if (event.status !== 'dead_letter') {
|
|
55
|
+
throw new Error(`Outbox event is not dead-lettered: ${input.eventId}`);
|
|
56
|
+
}
|
|
57
|
+
await this.config.deliveryStore.requeueOutboxEvent(input.eventId, this.now());
|
|
58
|
+
return this.config.deliveryStore.getOutboxEvent(input.eventId);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async execute(input, type, targetType, targetId, operation) {
|
|
62
|
+
const actionId = requireUuid(input.actionId);
|
|
63
|
+
const reason = requireText(input.reason, 'reason');
|
|
64
|
+
const existing = await this.config.adminStore.getOperatorAction(this.config.projectId, actionId);
|
|
65
|
+
if (existing) {
|
|
66
|
+
this.assertSameCommand(existing, type, targetType, targetId, reason);
|
|
67
|
+
if (existing.status === 'succeeded') {
|
|
68
|
+
return { action: existing, result: existing.result };
|
|
69
|
+
}
|
|
70
|
+
if (existing.status === 'failed')
|
|
71
|
+
throw new Error(existing.error ?? 'Operator action failed');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
await this.config.adminStore.appendOperatorAction({
|
|
75
|
+
id: actionId,
|
|
76
|
+
sequence: 0,
|
|
77
|
+
projectId: this.config.projectId,
|
|
78
|
+
type,
|
|
79
|
+
targetType,
|
|
80
|
+
targetId,
|
|
81
|
+
reason,
|
|
82
|
+
status: 'pending',
|
|
83
|
+
createdAt: this.now(),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
let result;
|
|
87
|
+
try {
|
|
88
|
+
result = await operation(existing?.status === 'pending');
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
await this.appendOutcome(actionId, type, targetType, targetId, reason, 'failed', undefined, error instanceof Error ? error.message : String(error));
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
const action = await this.appendOutcome(actionId, type, targetType, targetId, reason, 'succeeded', result);
|
|
95
|
+
return { action, result };
|
|
96
|
+
}
|
|
97
|
+
async appendOutcome(id, type, targetType, targetId, reason, status, result, error) {
|
|
98
|
+
const pending = await this.config.adminStore.getOperatorAction(this.config.projectId, id);
|
|
99
|
+
if (pending?.status === 'succeeded')
|
|
100
|
+
return pending;
|
|
101
|
+
const action = {
|
|
102
|
+
id,
|
|
103
|
+
sequence: (pending?.sequence ?? 0) + 1,
|
|
104
|
+
projectId: this.config.projectId,
|
|
105
|
+
type,
|
|
106
|
+
targetType,
|
|
107
|
+
targetId,
|
|
108
|
+
reason,
|
|
109
|
+
status,
|
|
110
|
+
createdAt: pending?.createdAt ?? this.now(),
|
|
111
|
+
completedAt: this.now(),
|
|
112
|
+
result,
|
|
113
|
+
error,
|
|
114
|
+
};
|
|
115
|
+
await this.config.adminStore.appendOperatorAction(action);
|
|
116
|
+
return action;
|
|
117
|
+
}
|
|
118
|
+
assertSameCommand(action, type, targetType, targetId, reason) {
|
|
119
|
+
if (action.type !== type ||
|
|
120
|
+
action.targetType !== targetType ||
|
|
121
|
+
action.targetId !== targetId ||
|
|
122
|
+
action.reason !== reason) {
|
|
123
|
+
throw new Error(`Operator action id ${action.id} was already used for another command`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
idempotencyKey(actionId) {
|
|
127
|
+
return `operator:${this.config.projectId}:${actionId}`;
|
|
128
|
+
}
|
|
129
|
+
metadata(input) {
|
|
130
|
+
return {
|
|
131
|
+
source: 'operator_console',
|
|
132
|
+
operatorActionId: input.actionId,
|
|
133
|
+
reason: input.reason,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function requireText(value, field) {
|
|
138
|
+
const normalized = value.trim();
|
|
139
|
+
if (!normalized)
|
|
140
|
+
throw new Error(`Operator ${field} is required`);
|
|
141
|
+
return normalized;
|
|
142
|
+
}
|
|
143
|
+
function requireUuid(value) {
|
|
144
|
+
const actionId = requireText(value, 'actionId');
|
|
145
|
+
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(actionId)) {
|
|
146
|
+
throw new Error('Operator actionId must be a UUID');
|
|
147
|
+
}
|
|
148
|
+
return actionId;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/admin/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { CreditAccount, CreditGrant, CreditLot, CreditOutboxEvent, CreditReservation, FundingIntent, FundingTransaction, LedgerEntry, PriceVersion, UsageReceipt } from '../credits/types.js';
|
|
2
|
+
export interface AdminPage<T> {
|
|
3
|
+
items: T[];
|
|
4
|
+
nextCursor?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AdminPageInput {
|
|
7
|
+
cursor?: string;
|
|
8
|
+
limit?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AdminOverview {
|
|
11
|
+
projectId: string;
|
|
12
|
+
generatedAt: number;
|
|
13
|
+
postedUnits: string;
|
|
14
|
+
reservedUnits: string;
|
|
15
|
+
availableUnits: string;
|
|
16
|
+
charged24hUnits: string;
|
|
17
|
+
charged7dUnits: string;
|
|
18
|
+
charged30dUnits: string;
|
|
19
|
+
customerCount: number;
|
|
20
|
+
overdueReservationCount: number;
|
|
21
|
+
pendingOutboxCount: number;
|
|
22
|
+
deadLetterCount: number;
|
|
23
|
+
reconciliationRequiredCount: number;
|
|
24
|
+
dailyCharges: Array<{
|
|
25
|
+
day: string;
|
|
26
|
+
amountUnits: string;
|
|
27
|
+
receiptCount: number;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
export interface AdminCustomerSummary {
|
|
31
|
+
account: CreditAccount;
|
|
32
|
+
receiptCount: number;
|
|
33
|
+
charged30dUnits: string;
|
|
34
|
+
openReservationCount: number;
|
|
35
|
+
lastActivityAt?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface AdminCustomerQuery extends AdminPageInput {
|
|
38
|
+
projectId: string;
|
|
39
|
+
search?: string;
|
|
40
|
+
}
|
|
41
|
+
export type AuditItemKind = 'grant' | 'reservation' | 'usage_receipt' | 'ledger_entry' | 'funding_intent' | 'funding_transaction' | 'outbox_event' | 'operator_action';
|
|
42
|
+
export interface AuditItem {
|
|
43
|
+
id: string;
|
|
44
|
+
projectId: string;
|
|
45
|
+
customerId?: string;
|
|
46
|
+
kind: AuditItemKind;
|
|
47
|
+
type: string;
|
|
48
|
+
status?: string;
|
|
49
|
+
amountUnits?: string;
|
|
50
|
+
createdAt: number;
|
|
51
|
+
payload: unknown;
|
|
52
|
+
}
|
|
53
|
+
export interface AdminAuditQuery extends AdminPageInput {
|
|
54
|
+
projectId: string;
|
|
55
|
+
customerId?: string;
|
|
56
|
+
entityId?: string;
|
|
57
|
+
kind?: AuditItemKind;
|
|
58
|
+
type?: string;
|
|
59
|
+
status?: string;
|
|
60
|
+
from?: number;
|
|
61
|
+
to?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface AdminCustomerDetail {
|
|
64
|
+
account: CreditAccount;
|
|
65
|
+
grants: CreditGrant[];
|
|
66
|
+
lots: CreditLot[];
|
|
67
|
+
reservations: CreditReservation[];
|
|
68
|
+
receipts: UsageReceipt[];
|
|
69
|
+
ledgerEntries: LedgerEntry[];
|
|
70
|
+
fundingIntents: FundingIntent[];
|
|
71
|
+
fundingTransactions: FundingTransaction[];
|
|
72
|
+
}
|
|
73
|
+
export interface AdminUsageEvidence {
|
|
74
|
+
receipt: UsageReceipt;
|
|
75
|
+
reservation?: CreditReservation;
|
|
76
|
+
price?: PriceVersion;
|
|
77
|
+
ledgerEntries: LedgerEntry[];
|
|
78
|
+
}
|
|
79
|
+
export type OperatorActionType = 'credit.grant' | 'credit.adjust' | 'reservation.expire_overdue' | 'outbox.requeue';
|
|
80
|
+
export type OperatorActionStatus = 'pending' | 'succeeded' | 'failed';
|
|
81
|
+
export interface OperatorAction {
|
|
82
|
+
id: string;
|
|
83
|
+
sequence: number;
|
|
84
|
+
projectId: string;
|
|
85
|
+
type: OperatorActionType;
|
|
86
|
+
targetType: 'customer' | 'project' | 'outbox_event';
|
|
87
|
+
targetId: string;
|
|
88
|
+
reason: string;
|
|
89
|
+
status: OperatorActionStatus;
|
|
90
|
+
createdAt: number;
|
|
91
|
+
completedAt?: number;
|
|
92
|
+
result?: unknown;
|
|
93
|
+
error?: string;
|
|
94
|
+
}
|
|
95
|
+
export interface AdminQueryStore {
|
|
96
|
+
getOverview(projectId: string, now?: number): Promise<AdminOverview>;
|
|
97
|
+
listCustomers(input: AdminCustomerQuery): Promise<AdminPage<AdminCustomerSummary>>;
|
|
98
|
+
getCustomer(projectId: string, customerId: string): Promise<AdminCustomerDetail | undefined>;
|
|
99
|
+
listAuditItems(input: AdminAuditQuery): Promise<AdminPage<AuditItem>>;
|
|
100
|
+
getUsageEvidence(projectId: string, receiptId: string): Promise<AdminUsageEvidence | undefined>;
|
|
101
|
+
listOverdueReservations(projectId: string, now?: number): Promise<CreditReservation[]>;
|
|
102
|
+
listDeadLetterEvents(projectId: string): Promise<CreditOutboxEvent[]>;
|
|
103
|
+
getOperatorAction(projectId: string, id: string): Promise<OperatorAction | undefined>;
|
|
104
|
+
listOperatorActions(projectId: string, input?: AdminPageInput): Promise<AdminPage<OperatorAction>>;
|
|
105
|
+
appendOperatorAction(action: OperatorAction): Promise<void>;
|
|
106
|
+
}
|
|
107
|
+
export interface AdminCursorValue {
|
|
108
|
+
createdAt: number;
|
|
109
|
+
id: string;
|
|
110
|
+
}
|
|
111
|
+
export declare function normalizeAdminPage(input: AdminPageInput): {
|
|
112
|
+
limit: number;
|
|
113
|
+
cursor?: AdminCursorValue;
|
|
114
|
+
};
|
|
115
|
+
export declare function encodeAdminCursor(value: AdminCursorValue): string;
|
|
116
|
+
export declare function decodeAdminCursor(value: string): AdminCursorValue;
|
|
117
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function normalizeAdminPage(input) {
|
|
2
|
+
const limit = input.limit ?? 50;
|
|
3
|
+
if (!Number.isSafeInteger(limit) || limit <= 0 || limit > 100) {
|
|
4
|
+
throw new Error('Admin page limit must be an integer between 1 and 100');
|
|
5
|
+
}
|
|
6
|
+
return { limit, cursor: input.cursor ? decodeAdminCursor(input.cursor) : undefined };
|
|
7
|
+
}
|
|
8
|
+
export function encodeAdminCursor(value) {
|
|
9
|
+
const encoded = JSON.stringify(value);
|
|
10
|
+
return Buffer.from(encoded, 'utf8').toString('base64url');
|
|
11
|
+
}
|
|
12
|
+
export function decodeAdminCursor(value) {
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(Buffer.from(value, 'base64url').toString('utf8'));
|
|
15
|
+
const createdAt = parsed.createdAt;
|
|
16
|
+
if (!Number.isSafeInteger(createdAt) || typeof parsed.id !== 'string' || !parsed.id) {
|
|
17
|
+
throw new Error('invalid cursor payload');
|
|
18
|
+
}
|
|
19
|
+
return { createdAt: createdAt, id: parsed.id };
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw new Error('Invalid admin cursor');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/admin/types.ts"],"names":[],"mappings":"AAoJA,MAAM,UAAU,kBAAkB,CAAC,KAAqB;IAItD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAuB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACpB,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,SAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resvary/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-rc.2",
|
|
4
4
|
"description": "Prepaid credits and usage billing SDK for AI products",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
"types": "./dist/credits/index.d.ts",
|
|
27
27
|
"import": "./dist/credits/index.js"
|
|
28
28
|
},
|
|
29
|
+
"./admin": {
|
|
30
|
+
"types": "./dist/admin/index.d.ts",
|
|
31
|
+
"import": "./dist/admin/index.js"
|
|
32
|
+
},
|
|
29
33
|
"./pricing": {
|
|
30
34
|
"types": "./dist/pricing/index.d.ts",
|
|
31
35
|
"import": "./dist/pricing/index.js"
|
|
@@ -115,5 +119,5 @@
|
|
|
115
119
|
"typescript": "^5.6.0",
|
|
116
120
|
"vitest": "^4.1.11"
|
|
117
121
|
},
|
|
118
|
-
"gitHead": "
|
|
122
|
+
"gitHead": "ecd314fbda6d20041dd121dae0f050a92c012b5c"
|
|
119
123
|
}
|