@formata/limitr 0.5.13

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/main.d.ts ADDED
@@ -0,0 +1,296 @@
1
+ import { StofDoc } from "@formata/stof";
2
+ import { LimitrGate } from "./gate.js";
3
+ /**
4
+ * Cloud init options.
5
+ */
6
+ export interface LimitrCloudInit {
7
+ token: string;
8
+ policy?: string;
9
+ wsAddress?: string;
10
+ ticketAddress?: string;
11
+ connectTimeout?: number;
12
+ denyUnconnected?: boolean;
13
+ }
14
+ /**
15
+ * Internal event handler type.
16
+ */
17
+ export type LimitrEventHandler = (key: string, value: unknown) => void;
18
+ /**
19
+ * Limitr monetization policy.
20
+ */
21
+ export declare class Limitr {
22
+ /** StofDoc. */
23
+ doc: StofDoc;
24
+ /** Gate. */
25
+ protected gate: LimitrGate;
26
+ /** Deny allows if cloud connection interrupted (recommended)? */
27
+ denyUnconnected: boolean;
28
+ protected ws?: WebSocket;
29
+ protected wsInit: boolean;
30
+ protected wsTimeout?: unknown;
31
+ /** Optional named event handlers for all Limitr events. */
32
+ protected eventHandlers: Map<string, LimitrEventHandler>;
33
+ /**
34
+ * Constructor.
35
+ * Make sure StofDoc.initialize() has been called for Stof first.
36
+ */
37
+ constructor(policy?: string | Record<string, unknown> | Uint8Array, format?: string);
38
+ /**
39
+ * Add an event handler by name to this Limitr policy.
40
+ */
41
+ addHandler(name: string, handler: LimitrEventHandler): void;
42
+ /**
43
+ * Remove an event handler by name.
44
+ */
45
+ removeHandler(name: string): boolean;
46
+ /**
47
+ * Clear event handlers.
48
+ */
49
+ clearHandlers(): void;
50
+ /**
51
+ * Async constructor that ensures Stof wasm initialization.
52
+ */
53
+ static new(policy?: string | Record<string, unknown> | Uint8Array, format?: string): Promise<Limitr>;
54
+ /**
55
+ * Call a specific Stof function in this doc by path/name through the gate.
56
+ * For complex use-cases, create your own StofDoc.
57
+ */
58
+ docCall(path: string, ...args: unknown[]): Promise<unknown>;
59
+ /*****************************************************************************
60
+ * Plans API.
61
+ *****************************************************************************/
62
+ /**
63
+ * Get a plan record by ID (plan ID or customer ID).
64
+ */
65
+ plan(id: string, def?: boolean): Promise<Record<string, unknown> | undefined>;
66
+ /**
67
+ * Get the default plan if any.
68
+ */
69
+ defaultPlan(): Promise<Record<string, unknown> | undefined>;
70
+ /**
71
+ * Get a plan price by ID (plan ID or customer ID).
72
+ */
73
+ planPrice(id: string): Promise<Record<string, unknown> | undefined>;
74
+ /**
75
+ * Get a plan price ID.
76
+ */
77
+ planPriceId(id: string): Promise<string | null>;
78
+ /**
79
+ * Get a plan amount.
80
+ */
81
+ planAmount(id: string): Promise<number | null>;
82
+ /**
83
+ * Get a plan price label.
84
+ */
85
+ planPriceLabel(id: string): Promise<string | null>;
86
+ /**
87
+ * Set a plan on this policy by name/ID.
88
+ * Returns a node ID to the resulting Plan.
89
+ */
90
+ setPlan(id: string, planStof: string): Promise<string | null>;
91
+ /**
92
+ * Delete a plan by ID.
93
+ */
94
+ deletePlan(id: string): Promise<boolean>;
95
+ /*****************************************************************************
96
+ * Credits API.
97
+ *****************************************************************************/
98
+ /**
99
+ * Get a credit record by ID/type.
100
+ */
101
+ credit(id: string): Promise<Record<string, unknown> | undefined>;
102
+ /**
103
+ * Get a credit record for a specific entitlement.
104
+ * ID can be a plan ID or a customer ID.
105
+ */
106
+ creditFor(id: string, entitlement: string): Promise<Record<string, unknown> | undefined>;
107
+ /*****************************************************************************
108
+ * Customers API.
109
+ *****************************************************************************/
110
+ /**
111
+ * Get a customer record by ID (or alternative IDs).
112
+ */
113
+ customer(id: string): Promise<Record<string, unknown> | undefined>;
114
+ /**
115
+ * Get a customer metadata object (if any).
116
+ */
117
+ customerMetadata(id: string): Promise<Record<string, unknown> | undefined>;
118
+ /**
119
+ * Get all customers as a single record.
120
+ * Customers contain all state information, so this is all that is required to save/load.
121
+ */
122
+ customers(): Promise<Record<string, unknown> | undefined>;
123
+ /**
124
+ * Get the customer reference IDs for a customer.
125
+ */
126
+ customerRefs(id: string): Promise<string[] | null>;
127
+ /**
128
+ * Set/change a customer's plan by plan ID.
129
+ * Returns true if the plan has changed (and emits customer-set & customer-plan-changed events).
130
+ */
131
+ setCustomerPlan(id: string, plan: string, overwrite_meters?: boolean): Promise<boolean>;
132
+ /**
133
+ * Ensure that a customer exists, creating one if necessary.
134
+ * This takes the cloud into consideration as well.
135
+ * Returns true if a new customer was created.
136
+ */
137
+ ensureCustomer(id: string, plan?: string, type?: string, label?: string, refs?: string[] | null, alts?: string[] | null, metadata?: string | Record<string, unknown> | null): Promise<boolean>;
138
+ /**
139
+ * Create a new customer and add to this Limitr.
140
+ * Use a unique ID - can always add additional unique IDs with alts (Ex. Stripe customer ID, API key, etc.).
141
+ * Note: prefer ensureCustomer API in case this customer already exists.
142
+ */
143
+ createCustomer(id: string, plan?: string, type?: string, label?: string, refs?: string[] | null, alts?: string[] | null, metadata?: string | Record<string, unknown> | null): Promise<void>;
144
+ /**
145
+ * Ensure that a customer exists, creating one by record if necessary.
146
+ * This takes the cloud into consideration as well.
147
+ * Returns true if a new customer was created.
148
+ */
149
+ ensureSetCustomer(customer: string | Record<string, unknown>, event?: boolean): Promise<boolean>;
150
+ /**
151
+ * Set a customer on this policy by ID.
152
+ * Returns a node ID to the resulting Customer.
153
+ */
154
+ setCustomer(customer: string | Record<string, unknown>, event?: boolean): Promise<string | null>;
155
+ /**
156
+ * Load many customers as records.
157
+ * This is all that is required for save/load since customers contain all state information.
158
+ */
159
+ loadCustomers(customers: Record<string, unknown> | Record<string, unknown>[]): Promise<void>;
160
+ /**
161
+ * Remove a customer by ID.
162
+ * If a cloud customer, they will not be removed from the cloud.
163
+ */
164
+ removeCustomer(id: string): Promise<boolean>;
165
+ /**
166
+ * Add an alternative customer ID to an existing customer.
167
+ */
168
+ addAltID(existing: string, alt: string, event?: boolean): Promise<boolean>;
169
+ /**
170
+ * Remove an alternative customer ID from an existing customer.
171
+ */
172
+ removeAltID(alt: string, event?: boolean): Promise<boolean>;
173
+ /**
174
+ * Create a new customer override (limit).
175
+ * Overrides are specific to customers, and they override the limit defined on a specific entitlement for that customer.
176
+ *
177
+ * If the customer already has an override for this entitlement, it will be replaced.
178
+ */
179
+ createCustomerOverride(id: string, entitlement: string, value?: string | number, expires_on?: number, credit?: string, mode?: string, increment?: number | string, resets?: boolean, reset_inc?: number | string): Promise<string | null>;
180
+ /**
181
+ * Remove a customer override (limit).
182
+ */
183
+ removeCustomerOverride(id: string, entitlement: string): Promise<boolean>;
184
+ /**
185
+ * Create a customer credit grant (recommended use in top-ups & one-time purchases).
186
+ * Grants are applied when overage would occur (soft entitlement limits).
187
+ * Defaults to a one-time, fixed-value credit grant.
188
+ * More than one grant with the same "credit" can exist alongside one another.
189
+ * Do not sync grants up with plans - if a plan includes a credit grant, just set a soft limit value (same thing).
190
+ *
191
+ * Ex. a soft limit of 5k tokens + a grant of 2k tokens would result in the customer
192
+ * getting overage events (meter-overage) after 7k tokens spent.
193
+ *
194
+ * @returns true when the customer & credit exists, meaning the grant has been applied.
195
+ */
196
+ create_customer_credit_grant(id: string, credit: string, value: number | string, resets?: boolean, reset_inc?: number | string, expires_on?: number): Promise<boolean>;
197
+ /*****************************************************************************
198
+ * Entitlements API.
199
+ *****************************************************************************/
200
+ /**
201
+ * Get an entitlement record with a plan ID or customer ID and an entitlement name.
202
+ */
203
+ entitlement(id: string, entitlement: string): Promise<Record<string, unknown> | undefined>;
204
+ /**
205
+ * Get the limit value for a metered entitlement.
206
+ * ID can be a customer ID or a plan ID (to get the specific entitlement from a plan).
207
+ * Will always be in the units of the credit associated with this entitlement (ex. limit.value = '2GB', credit.stof_units = 'MB', limit = 2000).
208
+ */
209
+ limit(id: string, entitlement: string): Promise<number | null>;
210
+ /**
211
+ * Get the remaining balance for a customer's entitlement (limit - current (metered) value).
212
+ * Will always be in the units of the credit associated with this entitlement.
213
+ */
214
+ remaining(customer: string, entitlement: string): Promise<number | null>;
215
+ /**
216
+ * Get the current meter value for a customer's entitlement.
217
+ * Will always be in the units of the credit associated with this entitlement.
218
+ */
219
+ value(customer: string, entitlement: string): Promise<number | null>;
220
+ /**
221
+ * Get the cost for a standard increment on an entitlement (if set on its limit).
222
+ */
223
+ cost(id: string, entitlement: string): Promise<number | null>;
224
+ /**
225
+ * Try changing the value of a metered entitlement using a standard increment (defined in the Limit).
226
+ * This is the same as using "meter" with the "cost" of a standard increment for this entitlement.
227
+ * Returns true if changed and the limit was not hit, otherwise false and App.meter_limit lib func will be called (if present).
228
+ * Can use a string value for units in entitlement.limit.increment (must be a valid stof number) (ex. '3GiB' or '5s').
229
+ */
230
+ increment(customer: string, entitlement: string): Promise<boolean>;
231
+ /**
232
+ * Try changing the value of a metered entitlement by removing a standard increment (defined in the Limit).
233
+ * This is the same as using "meter" with the negative "cost" of a standard increment for this entitlement.
234
+ * Can use a string value for units in entitlement.limit.increment (must be a valid stof number) (ex. '3GiB' or '5s').
235
+ */
236
+ deincrement(customer: string, entitlement: string): Promise<boolean>;
237
+ /**
238
+ * Allow changing this entitlement by "value" for this customer?
239
+ * A boolean entitlement check if value is 0 or a limit does not exist for the entitlement (bool flag).
240
+ * Changes a meter for this customer if true.
241
+ * Can use a string value for units (must be a valid stof number) (ex. '3GiB' or '5s').
242
+ */
243
+ allow(customer: string, entitlement: string, value?: number | string): Promise<boolean>;
244
+ /**
245
+ * Would a "check" call work for this entitlement and increment value on this customer?
246
+ * Does not change a meter (charge usage) for this customer, just checks if it would work.
247
+ */
248
+ checkIncrement(customer: string, entitlement: string): Promise<boolean>;
249
+ /**
250
+ * Would a "check" call work for this entitlement and deincrement value on this customer?
251
+ * Does not change a meter (charge usage) for this customer, just checks if it would work.
252
+ */
253
+ checkDeincrement(customer: string, entitlement: string): Promise<boolean>;
254
+ /**
255
+ * Would an "allow" call work for this entitlement and value on this customer?
256
+ * Does not change a meter (charge usage) for this customer, just checks if it would work.
257
+ * Can use a string value for units (must be a valid stof number) (ex. '3GiB' or '5s').
258
+ */
259
+ check(customer: string, entitlement: string, value?: number | string): Promise<boolean>;
260
+ /*****************************************************************************
261
+ * Limitr Cloud.
262
+ *****************************************************************************/
263
+ /**
264
+ * Initialize with cloud.limitr.dev.
265
+ *
266
+ * @param token API token.
267
+ * @param address (optional) Server URL.
268
+ * @param policy (optional) Policy ID or "active" for the active policy.
269
+ * @param connectTimeout (optional) Time to wait when establishing an initial connection (ms).
270
+ */
271
+ static cloud(options: LimitrCloudInit | string): Promise<Limitr | undefined>;
272
+ /**
273
+ * Add a customer from the cloud.
274
+ * Default is to wait 3 seconds before moving on.
275
+ */
276
+ addCloudCustomer(id: string, timeout?: number): Promise<boolean>;
277
+ /**
278
+ * Cloud pre-check.
279
+ */
280
+ protected cloudPreCheckContinue(customer: string): Promise<boolean>;
281
+ /**
282
+ * Close connection to cloud.limitr.dev.
283
+ */
284
+ close(): void;
285
+ /**
286
+ * Send on the cloud WebSocket if enabled.
287
+ */
288
+ private _dataSendQueue;
289
+ wsSend(data: string): Promise<void>;
290
+ /**
291
+ * Cloud message received.
292
+ */
293
+ private _deniedCloudCustomers;
294
+ protected cloudMessageReceived(message: MessageEvent<any>): Promise<void>;
295
+ }
296
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../main.ts"],"names":[],"mappings":"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"}