@doow/track 0.1.4 → 0.1.9

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.
@@ -25,7 +25,7 @@ async function gzipBuffer(data) {
25
25
  gz.end(data);
26
26
  });
27
27
  }
28
- const SDK_VERSION = "0.1.4";
28
+ const SDK_VERSION = "0.1.9";
29
29
  function toWireEvent(event) {
30
30
  var _a;
31
31
  const sourceSystem = ((_a = event.source_system) === null || _a === void 0 ? void 0 : _a.trim()) ? event.source_system : 'sdk';
package/dist/cjs/index.js CHANGED
@@ -2,9 +2,12 @@
2
2
 
3
3
  var tracker = require('./tracker.js');
4
4
  var fileOfflineStore = require('./file-offline-store.js');
5
+ var management = require('./management.js');
5
6
 
6
7
 
7
8
 
8
9
  exports.DoowTracker = tracker.DoowTracker;
9
10
  exports.FileOfflineStore = fileOfflineStore.FileOfflineStore;
11
+ exports.DoowManagement = management.DoowManagement;
12
+ exports.ManagementApiError = management.ManagementApiError;
10
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -0,0 +1,244 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * DoowManagement — CRUD operations for apps, contracts, licenses, and metrics
5
+ *
6
+ * Usage:
7
+ * import { DoowManagement } from '@doow/track';
8
+ * const mgmt = new DoowManagement('dk_your_api_key');
9
+ *
10
+ * // Create an app
11
+ * const app = await mgmt.apps.create({ name: 'My SaaS' });
12
+ *
13
+ * // Create a contract under the app
14
+ * const contract = await mgmt.contracts.create(app.id, { title: 'Enterprise Plan' });
15
+ *
16
+ * // Create a license under the contract
17
+ * const license = await mgmt.licenses.create(contract.id, { name: 'API Usage' });
18
+ *
19
+ * // Create a metric under the license
20
+ * const metric = await mgmt.metrics.create(license.id, { metric_type: 'api_calls' });
21
+ */
22
+ const DEFAULT_ENDPOINT = 'https://api.doow.co';
23
+ const DEFAULT_TIMEOUT = 30000;
24
+ class ManagementApiError extends Error {
25
+ constructor(error) {
26
+ super(error.message);
27
+ this.name = 'ManagementApiError';
28
+ this.status = error.status;
29
+ if (error.code !== undefined)
30
+ this.code = error.code;
31
+ if (error.details !== undefined)
32
+ this.details = error.details;
33
+ }
34
+ }
35
+ class DoowManagement {
36
+ constructor(apiKey, options = {}) {
37
+ var _a, _b, _c;
38
+ if (!apiKey.startsWith('dk_')) {
39
+ console.warn(`[doow/management] API key must start with "dk_". Got: "${apiKey.slice(0, 10)}..."`);
40
+ }
41
+ this._apiKey = apiKey;
42
+ this._endpoint = (_a = options.endpoint) !== null && _a !== void 0 ? _a : DEFAULT_ENDPOINT;
43
+ this._timeout = (_b = options.timeout) !== null && _b !== void 0 ? _b : DEFAULT_TIMEOUT;
44
+ this._debug = (_c = options.debug) !== null && _c !== void 0 ? _c : false;
45
+ this.apps = new AppsClient(this);
46
+ this.contracts = new ContractsClient(this);
47
+ this.licenses = new LicensesClient(this);
48
+ this.metrics = new MetricsClient(this);
49
+ this.expenses = new ExpensesClient(this);
50
+ }
51
+ log(message) {
52
+ if (this._debug) {
53
+ console.log(`[doow/management] ${message}`);
54
+ }
55
+ }
56
+ async request(method, path, body, query) {
57
+ const url = new URL(`${this._endpoint}${path}`);
58
+ if (query) {
59
+ for (const [key, value] of Object.entries(query)) {
60
+ if (value !== undefined) {
61
+ url.searchParams.set(key, String(value));
62
+ }
63
+ }
64
+ }
65
+ const headers = {
66
+ Authorization: `Bearer ${this._apiKey}`,
67
+ 'Content-Type': 'application/json',
68
+ 'User-Agent': '@doow/track-sdk',
69
+ };
70
+ this.log(`${method} ${url.pathname}${url.search}`);
71
+ const controller = new AbortController();
72
+ const timeoutId = setTimeout(() => controller.abort(), this._timeout);
73
+ try {
74
+ const fetchOptions = {
75
+ method,
76
+ headers,
77
+ signal: controller.signal,
78
+ };
79
+ if (body) {
80
+ fetchOptions.body = JSON.stringify(body);
81
+ }
82
+ const response = await fetch(url.toString(), fetchOptions);
83
+ clearTimeout(timeoutId);
84
+ if (!response.ok) {
85
+ let errorBody;
86
+ try {
87
+ errorBody = (await response.json());
88
+ }
89
+ catch {
90
+ errorBody = {
91
+ status: response.status,
92
+ message: response.statusText || `HTTP ${response.status}`,
93
+ };
94
+ }
95
+ errorBody.status = response.status;
96
+ throw new ManagementApiError(errorBody);
97
+ }
98
+ if (response.status === 204) {
99
+ return undefined;
100
+ }
101
+ return (await response.json());
102
+ }
103
+ catch (error) {
104
+ clearTimeout(timeoutId);
105
+ if (error instanceof ManagementApiError) {
106
+ throw error;
107
+ }
108
+ if (error instanceof Error && error.name === 'AbortError') {
109
+ throw new ManagementApiError({
110
+ status: 0,
111
+ message: `Request timeout after ${this._timeout}ms`,
112
+ code: 'TIMEOUT',
113
+ });
114
+ }
115
+ throw new ManagementApiError({
116
+ status: 0,
117
+ message: error instanceof Error ? error.message : 'Network error',
118
+ code: 'NETWORK_ERROR',
119
+ });
120
+ }
121
+ }
122
+ }
123
+ // ─── Apps Client ───────────────────────────────────────────────────────────
124
+ class AppsClient {
125
+ constructor(mgmt) {
126
+ this.mgmt = mgmt;
127
+ }
128
+ async create(input) {
129
+ return this.mgmt.request('POST', '/sdk/apps', input);
130
+ }
131
+ async list(params = {}) {
132
+ return this.mgmt.request('GET', '/sdk/apps', undefined, {
133
+ cursor: params.cursor,
134
+ limit: params.limit,
135
+ name: params.name,
136
+ });
137
+ }
138
+ async get(id) {
139
+ return this.mgmt.request('GET', `/sdk/apps/${id}`);
140
+ }
141
+ async update(id, input) {
142
+ return this.mgmt.request('PUT', `/sdk/apps/${id}`, input);
143
+ }
144
+ async delete(id) {
145
+ return this.mgmt.request('DELETE', `/sdk/apps/${id}`);
146
+ }
147
+ }
148
+ // ─── Contracts Client ──────────────────────────────────────────────────────
149
+ class ContractsClient {
150
+ constructor(mgmt) {
151
+ this.mgmt = mgmt;
152
+ }
153
+ async create(appId, input) {
154
+ return this.mgmt.request('POST', `/sdk/apps/${appId}/contracts`, input);
155
+ }
156
+ async listByApp(appId, params = {}) {
157
+ return this.mgmt.request('GET', `/sdk/apps/${appId}/contracts`, undefined, {
158
+ cursor: params.cursor,
159
+ limit: params.limit,
160
+ contract_type: params.contract_type,
161
+ });
162
+ }
163
+ async get(id) {
164
+ return this.mgmt.request('GET', `/sdk/contracts/${id}`);
165
+ }
166
+ async update(id, input) {
167
+ return this.mgmt.request('PUT', `/sdk/contracts/${id}`, input);
168
+ }
169
+ async delete(id) {
170
+ return this.mgmt.request('DELETE', `/sdk/contracts/${id}`);
171
+ }
172
+ }
173
+ // ─── Licenses Client ───────────────────────────────────────────────────────
174
+ class LicensesClient {
175
+ constructor(mgmt) {
176
+ this.mgmt = mgmt;
177
+ }
178
+ async create(contractId, input) {
179
+ return this.mgmt.request('POST', `/sdk/contracts/${contractId}/licenses`, input);
180
+ }
181
+ async listByContract(contractId, params = {}) {
182
+ return this.mgmt.request('GET', `/sdk/contracts/${contractId}/licenses`, undefined, {
183
+ cursor: params.cursor,
184
+ limit: params.limit,
185
+ license_type: params.license_type,
186
+ });
187
+ }
188
+ async get(id) {
189
+ return this.mgmt.request('GET', `/sdk/licenses/${id}`);
190
+ }
191
+ async update(id, input) {
192
+ return this.mgmt.request('PUT', `/sdk/licenses/${id}`, input);
193
+ }
194
+ async delete(id) {
195
+ return this.mgmt.request('DELETE', `/sdk/licenses/${id}`);
196
+ }
197
+ }
198
+ // ─── Metrics Client ────────────────────────────────────────────────────────
199
+ class MetricsClient {
200
+ constructor(mgmt) {
201
+ this.mgmt = mgmt;
202
+ }
203
+ async create(licenseId, input) {
204
+ return this.mgmt.request('POST', `/sdk/licenses/${licenseId}/metrics`, input);
205
+ }
206
+ async listByLicense(licenseId, params = {}) {
207
+ return this.mgmt.request('GET', `/sdk/licenses/${licenseId}/metrics`, undefined, {
208
+ cursor: params.cursor,
209
+ limit: params.limit,
210
+ metric_type: params.metric_type,
211
+ });
212
+ }
213
+ async get(id) {
214
+ return this.mgmt.request('GET', `/sdk/metrics/${id}`);
215
+ }
216
+ async update(id, input) {
217
+ return this.mgmt.request('PUT', `/sdk/metrics/${id}`, input);
218
+ }
219
+ async delete(id) {
220
+ return this.mgmt.request('DELETE', `/sdk/metrics/${id}`);
221
+ }
222
+ }
223
+ class ExpensesClient {
224
+ constructor(mgmt) {
225
+ this.mgmt = mgmt;
226
+ }
227
+ async list(params = {}) {
228
+ return this.mgmt.request('GET', '/sdk/expenses', undefined, {
229
+ cursor: params.cursor,
230
+ limit: params.limit,
231
+ app_id: params.app_id,
232
+ contract_id: params.contract_id,
233
+ year: params.year,
234
+ month: params.month,
235
+ });
236
+ }
237
+ async get(id) {
238
+ return this.mgmt.request('GET', `/sdk/expenses/${id}`);
239
+ }
240
+ }
241
+
242
+ exports.DoowManagement = DoowManagement;
243
+ exports.ManagementApiError = ManagementApiError;
244
+ //# sourceMappingURL=management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management.js","sources":["../../../src/management.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/dist/cli.cjs CHANGED
@@ -69,7 +69,7 @@ async function gzipBuffer(data) {
69
69
  gz.end(data);
70
70
  });
71
71
  }
72
- const SDK_VERSION = "0.1.4";
72
+ const SDK_VERSION = "0.1.9";
73
73
  function toWireEvent(event) {
74
74
  var _a;
75
75
  const sourceSystem = ((_a = event.source_system) === null || _a === void 0 ? void 0 : _a.trim()) ? event.source_system : 'sdk';
@@ -23,7 +23,7 @@ async function gzipBuffer(data) {
23
23
  gz.end(data);
24
24
  });
25
25
  }
26
- const SDK_VERSION = "0.1.4";
26
+ const SDK_VERSION = "0.1.9";
27
27
  function toWireEvent(event) {
28
28
  var _a;
29
29
  const sourceSystem = ((_a = event.source_system) === null || _a === void 0 ? void 0 : _a.trim()) ? event.source_system : 'sdk';
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { DoowTracker } from './tracker.js';
2
2
  export { FileOfflineStore } from './file-offline-store.js';
3
+ export { DoowManagement, ManagementApiError } from './management.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * DoowManagement — CRUD operations for apps, contracts, licenses, and metrics
3
+ *
4
+ * Usage:
5
+ * import { DoowManagement } from '@doow/track';
6
+ * const mgmt = new DoowManagement('dk_your_api_key');
7
+ *
8
+ * // Create an app
9
+ * const app = await mgmt.apps.create({ name: 'My SaaS' });
10
+ *
11
+ * // Create a contract under the app
12
+ * const contract = await mgmt.contracts.create(app.id, { title: 'Enterprise Plan' });
13
+ *
14
+ * // Create a license under the contract
15
+ * const license = await mgmt.licenses.create(contract.id, { name: 'API Usage' });
16
+ *
17
+ * // Create a metric under the license
18
+ * const metric = await mgmt.metrics.create(license.id, { metric_type: 'api_calls' });
19
+ */
20
+ const DEFAULT_ENDPOINT = 'https://api.doow.co';
21
+ const DEFAULT_TIMEOUT = 30000;
22
+ class ManagementApiError extends Error {
23
+ constructor(error) {
24
+ super(error.message);
25
+ this.name = 'ManagementApiError';
26
+ this.status = error.status;
27
+ if (error.code !== undefined)
28
+ this.code = error.code;
29
+ if (error.details !== undefined)
30
+ this.details = error.details;
31
+ }
32
+ }
33
+ class DoowManagement {
34
+ constructor(apiKey, options = {}) {
35
+ var _a, _b, _c;
36
+ if (!apiKey.startsWith('dk_')) {
37
+ console.warn(`[doow/management] API key must start with "dk_". Got: "${apiKey.slice(0, 10)}..."`);
38
+ }
39
+ this._apiKey = apiKey;
40
+ this._endpoint = (_a = options.endpoint) !== null && _a !== void 0 ? _a : DEFAULT_ENDPOINT;
41
+ this._timeout = (_b = options.timeout) !== null && _b !== void 0 ? _b : DEFAULT_TIMEOUT;
42
+ this._debug = (_c = options.debug) !== null && _c !== void 0 ? _c : false;
43
+ this.apps = new AppsClient(this);
44
+ this.contracts = new ContractsClient(this);
45
+ this.licenses = new LicensesClient(this);
46
+ this.metrics = new MetricsClient(this);
47
+ this.expenses = new ExpensesClient(this);
48
+ }
49
+ log(message) {
50
+ if (this._debug) {
51
+ console.log(`[doow/management] ${message}`);
52
+ }
53
+ }
54
+ async request(method, path, body, query) {
55
+ const url = new URL(`${this._endpoint}${path}`);
56
+ if (query) {
57
+ for (const [key, value] of Object.entries(query)) {
58
+ if (value !== undefined) {
59
+ url.searchParams.set(key, String(value));
60
+ }
61
+ }
62
+ }
63
+ const headers = {
64
+ Authorization: `Bearer ${this._apiKey}`,
65
+ 'Content-Type': 'application/json',
66
+ 'User-Agent': '@doow/track-sdk',
67
+ };
68
+ this.log(`${method} ${url.pathname}${url.search}`);
69
+ const controller = new AbortController();
70
+ const timeoutId = setTimeout(() => controller.abort(), this._timeout);
71
+ try {
72
+ const fetchOptions = {
73
+ method,
74
+ headers,
75
+ signal: controller.signal,
76
+ };
77
+ if (body) {
78
+ fetchOptions.body = JSON.stringify(body);
79
+ }
80
+ const response = await fetch(url.toString(), fetchOptions);
81
+ clearTimeout(timeoutId);
82
+ if (!response.ok) {
83
+ let errorBody;
84
+ try {
85
+ errorBody = (await response.json());
86
+ }
87
+ catch {
88
+ errorBody = {
89
+ status: response.status,
90
+ message: response.statusText || `HTTP ${response.status}`,
91
+ };
92
+ }
93
+ errorBody.status = response.status;
94
+ throw new ManagementApiError(errorBody);
95
+ }
96
+ if (response.status === 204) {
97
+ return undefined;
98
+ }
99
+ return (await response.json());
100
+ }
101
+ catch (error) {
102
+ clearTimeout(timeoutId);
103
+ if (error instanceof ManagementApiError) {
104
+ throw error;
105
+ }
106
+ if (error instanceof Error && error.name === 'AbortError') {
107
+ throw new ManagementApiError({
108
+ status: 0,
109
+ message: `Request timeout after ${this._timeout}ms`,
110
+ code: 'TIMEOUT',
111
+ });
112
+ }
113
+ throw new ManagementApiError({
114
+ status: 0,
115
+ message: error instanceof Error ? error.message : 'Network error',
116
+ code: 'NETWORK_ERROR',
117
+ });
118
+ }
119
+ }
120
+ }
121
+ // ─── Apps Client ───────────────────────────────────────────────────────────
122
+ class AppsClient {
123
+ constructor(mgmt) {
124
+ this.mgmt = mgmt;
125
+ }
126
+ async create(input) {
127
+ return this.mgmt.request('POST', '/sdk/apps', input);
128
+ }
129
+ async list(params = {}) {
130
+ return this.mgmt.request('GET', '/sdk/apps', undefined, {
131
+ cursor: params.cursor,
132
+ limit: params.limit,
133
+ name: params.name,
134
+ });
135
+ }
136
+ async get(id) {
137
+ return this.mgmt.request('GET', `/sdk/apps/${id}`);
138
+ }
139
+ async update(id, input) {
140
+ return this.mgmt.request('PUT', `/sdk/apps/${id}`, input);
141
+ }
142
+ async delete(id) {
143
+ return this.mgmt.request('DELETE', `/sdk/apps/${id}`);
144
+ }
145
+ }
146
+ // ─── Contracts Client ──────────────────────────────────────────────────────
147
+ class ContractsClient {
148
+ constructor(mgmt) {
149
+ this.mgmt = mgmt;
150
+ }
151
+ async create(appId, input) {
152
+ return this.mgmt.request('POST', `/sdk/apps/${appId}/contracts`, input);
153
+ }
154
+ async listByApp(appId, params = {}) {
155
+ return this.mgmt.request('GET', `/sdk/apps/${appId}/contracts`, undefined, {
156
+ cursor: params.cursor,
157
+ limit: params.limit,
158
+ contract_type: params.contract_type,
159
+ });
160
+ }
161
+ async get(id) {
162
+ return this.mgmt.request('GET', `/sdk/contracts/${id}`);
163
+ }
164
+ async update(id, input) {
165
+ return this.mgmt.request('PUT', `/sdk/contracts/${id}`, input);
166
+ }
167
+ async delete(id) {
168
+ return this.mgmt.request('DELETE', `/sdk/contracts/${id}`);
169
+ }
170
+ }
171
+ // ─── Licenses Client ───────────────────────────────────────────────────────
172
+ class LicensesClient {
173
+ constructor(mgmt) {
174
+ this.mgmt = mgmt;
175
+ }
176
+ async create(contractId, input) {
177
+ return this.mgmt.request('POST', `/sdk/contracts/${contractId}/licenses`, input);
178
+ }
179
+ async listByContract(contractId, params = {}) {
180
+ return this.mgmt.request('GET', `/sdk/contracts/${contractId}/licenses`, undefined, {
181
+ cursor: params.cursor,
182
+ limit: params.limit,
183
+ license_type: params.license_type,
184
+ });
185
+ }
186
+ async get(id) {
187
+ return this.mgmt.request('GET', `/sdk/licenses/${id}`);
188
+ }
189
+ async update(id, input) {
190
+ return this.mgmt.request('PUT', `/sdk/licenses/${id}`, input);
191
+ }
192
+ async delete(id) {
193
+ return this.mgmt.request('DELETE', `/sdk/licenses/${id}`);
194
+ }
195
+ }
196
+ // ─── Metrics Client ────────────────────────────────────────────────────────
197
+ class MetricsClient {
198
+ constructor(mgmt) {
199
+ this.mgmt = mgmt;
200
+ }
201
+ async create(licenseId, input) {
202
+ return this.mgmt.request('POST', `/sdk/licenses/${licenseId}/metrics`, input);
203
+ }
204
+ async listByLicense(licenseId, params = {}) {
205
+ return this.mgmt.request('GET', `/sdk/licenses/${licenseId}/metrics`, undefined, {
206
+ cursor: params.cursor,
207
+ limit: params.limit,
208
+ metric_type: params.metric_type,
209
+ });
210
+ }
211
+ async get(id) {
212
+ return this.mgmt.request('GET', `/sdk/metrics/${id}`);
213
+ }
214
+ async update(id, input) {
215
+ return this.mgmt.request('PUT', `/sdk/metrics/${id}`, input);
216
+ }
217
+ async delete(id) {
218
+ return this.mgmt.request('DELETE', `/sdk/metrics/${id}`);
219
+ }
220
+ }
221
+ class ExpensesClient {
222
+ constructor(mgmt) {
223
+ this.mgmt = mgmt;
224
+ }
225
+ async list(params = {}) {
226
+ return this.mgmt.request('GET', '/sdk/expenses', undefined, {
227
+ cursor: params.cursor,
228
+ limit: params.limit,
229
+ app_id: params.app_id,
230
+ contract_id: params.contract_id,
231
+ year: params.year,
232
+ month: params.month,
233
+ });
234
+ }
235
+ async get(id) {
236
+ return this.mgmt.request('GET', `/sdk/expenses/${id}`);
237
+ }
238
+ }
239
+
240
+ export { DoowManagement, ManagementApiError };
241
+ //# sourceMappingURL=management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management.js","sources":["../../../src/management.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
package/dist/sidecar.cjs CHANGED
@@ -71,7 +71,7 @@ async function gzipBuffer(data) {
71
71
  gz.end(data);
72
72
  });
73
73
  }
74
- const SDK_VERSION = "0.1.4";
74
+ const SDK_VERSION = "0.1.9";
75
75
  function toWireEvent(event) {
76
76
  var _a;
77
77
  const sourceSystem = ((_a = event.source_system) === null || _a === void 0 ? void 0 : _a.trim()) ? event.source_system : 'sdk';
@@ -220,5 +220,371 @@ declare class FileOfflineStore implements OfflineStore {
220
220
  get directory(): string;
221
221
  }
222
222
 
223
- export { DoowTracker, FileOfflineStore };
224
- export type { BatchPayload, CustomTransport, DoowTrackerOptions, OfflineStore, PartialAcceptResponse, RateLimit, SdkError, SdkErrorKind, SerializedBatch, SerializedEvent, TrackEvent, TransportPayload, TransportResponse };
223
+ /**
224
+ * Types for SDK Management API (CRUD operations for apps, contracts, licenses, metrics)
225
+ */
226
+ interface PaginationParams {
227
+ cursor?: string;
228
+ limit?: number;
229
+ }
230
+ interface PaginatedResponse<T> {
231
+ data: T[];
232
+ cursor?: string;
233
+ has_more: boolean;
234
+ }
235
+ interface CreateAppInput {
236
+ name: string;
237
+ description?: string;
238
+ website?: string;
239
+ logo_url?: string;
240
+ categories?: string[];
241
+ }
242
+ interface UpdateAppInput {
243
+ name?: string;
244
+ description?: string;
245
+ website?: string;
246
+ logo_url?: string;
247
+ categories?: string[];
248
+ }
249
+ interface App {
250
+ id: string;
251
+ name: string;
252
+ description?: string;
253
+ website?: string;
254
+ logo_url?: string;
255
+ categories?: string[];
256
+ saas_application_id: string;
257
+ created_at: string;
258
+ updated_at: string;
259
+ }
260
+ interface ListAppsParams extends PaginationParams {
261
+ name?: string;
262
+ }
263
+ type ContractType = 'PAY_AS_YOU_GO' | 'ENTERPRISE' | 'UNKNOWN';
264
+ type CostAmortization = 'PRORATA' | 'MONTHS' | 'QUARTER' | 'YEARS';
265
+ interface Expense {
266
+ id: string;
267
+ app_id: string | null;
268
+ contract_id: string | null;
269
+ license_id: string | null;
270
+ total: number;
271
+ date: string;
272
+ month: number;
273
+ year: number;
274
+ description: string | null;
275
+ transaction_id: string | null;
276
+ vendor: string | null;
277
+ payment_channel: string | null;
278
+ created_at: string;
279
+ updated_at: string | null;
280
+ }
281
+ interface ListExpensesParams extends PaginationParams {
282
+ app_id?: string;
283
+ contract_id?: string;
284
+ year?: number;
285
+ month?: number;
286
+ }
287
+ /**
288
+ * Input for creating a license inline with a contract.
289
+ *
290
+ * SDK only supports USAGE_BASED licenses — SEAT_BASED must be created via UI.
291
+ * total_cost is optional (calculated from usage metrics).
292
+ */
293
+ interface LicenseInput {
294
+ name: string;
295
+ /** Defaults to USAGE_BASED. SDK only supports USAGE_BASED. */
296
+ license_type?: LicenseType;
297
+ seats?: number;
298
+ price_per_seat?: number;
299
+ total_cost?: number;
300
+ discount?: Record<string, unknown>;
301
+ discount_amount?: number;
302
+ discounted_cost?: number;
303
+ original_cost?: number;
304
+ tenure?: number;
305
+ seats_included_in_base_plan?: number;
306
+ }
307
+ /**
308
+ * License in contract response. Uses AllLicenseType since responses may include
309
+ * UI-created SEAT_BASED licenses.
310
+ */
311
+ interface LicenseInContract {
312
+ id: string;
313
+ name: string;
314
+ license_type: AllLicenseType;
315
+ seats?: number;
316
+ price_per_seat?: number;
317
+ total_cost?: number;
318
+ discount?: Record<string, unknown>;
319
+ discount_amount?: number;
320
+ discounted_cost?: number;
321
+ original_cost?: number;
322
+ tenure?: number;
323
+ seats_included_in_base_plan?: number;
324
+ }
325
+ interface CreateContractInput {
326
+ title?: string;
327
+ contract_type?: ContractType;
328
+ start_date?: string;
329
+ end_date?: string;
330
+ currency?: string;
331
+ cost?: number;
332
+ cost_break_down?: Record<string, unknown>;
333
+ cost_amortization?: CostAmortization;
334
+ add_ons?: Record<string, unknown>;
335
+ add_ons_total_cost?: number;
336
+ total_contract_cost?: number;
337
+ total_discount_amount?: number;
338
+ total_original_cost?: number;
339
+ licenses: LicenseInput[];
340
+ expense_ids?: string[];
341
+ }
342
+ interface UpdateContractInput {
343
+ title?: string;
344
+ contract_type?: ContractType;
345
+ start_date?: string;
346
+ end_date?: string;
347
+ currency?: string;
348
+ cost?: number;
349
+ cost_break_down?: Record<string, unknown>;
350
+ cost_amortization?: CostAmortization;
351
+ add_ons?: Record<string, unknown>;
352
+ add_ons_total_cost?: number;
353
+ total_contract_cost?: number;
354
+ total_discount_amount?: number;
355
+ total_original_cost?: number;
356
+ }
357
+ interface Contract {
358
+ id: string;
359
+ app_id: string;
360
+ title: string;
361
+ contract_type: ContractType;
362
+ start_date?: string;
363
+ end_date?: string;
364
+ currency?: string;
365
+ cost?: number;
366
+ cost_break_down?: Record<string, unknown>;
367
+ cost_amortization?: CostAmortization;
368
+ add_ons?: Record<string, unknown>;
369
+ add_ons_total_cost?: number;
370
+ total_contract_cost?: number;
371
+ total_discount_amount?: number;
372
+ total_original_cost?: number;
373
+ licenses?: LicenseInContract[];
374
+ expenses?: Expense[];
375
+ created_at: string;
376
+ updated_at: string;
377
+ }
378
+ interface ListContractsParams extends PaginationParams {
379
+ contract_type?: ContractType;
380
+ }
381
+ /**
382
+ * License types for SDK creation. SDK only supports USAGE_BASED.
383
+ * SEAT_BASED licenses must be created via the UI.
384
+ */
385
+ type LicenseType = 'USAGE_BASED';
386
+ /**
387
+ * All license types (for responses that may include UI-created licenses)
388
+ */
389
+ type AllLicenseType = 'USAGE_BASED' | 'SEAT_BASED' | 'PREPAID_CREDITS' | 'FLAT_RATE';
390
+ interface CreateLicenseInput {
391
+ name: string;
392
+ license_type?: LicenseType;
393
+ seats?: number;
394
+ price_per_seat?: number;
395
+ total_cost?: number;
396
+ discount?: Record<string, unknown>;
397
+ discount_amount?: number;
398
+ discounted_cost?: number;
399
+ original_cost?: number;
400
+ tenure?: number;
401
+ seats_included_in_base_plan?: number;
402
+ }
403
+ interface UpdateLicenseInput {
404
+ name?: string;
405
+ license_type?: LicenseType;
406
+ seats?: number;
407
+ price_per_seat?: number;
408
+ total_cost?: number;
409
+ discount?: Record<string, unknown>;
410
+ discount_amount?: number;
411
+ discounted_cost?: number;
412
+ original_cost?: number;
413
+ tenure?: number;
414
+ seats_included_in_base_plan?: number;
415
+ }
416
+ /**
417
+ * License response. Uses AllLicenseType since responses may include
418
+ * UI-created SEAT_BASED licenses.
419
+ */
420
+ interface License {
421
+ id: string;
422
+ contract_id: string;
423
+ name: string;
424
+ license_type: AllLicenseType;
425
+ seats?: number;
426
+ price_per_seat?: number;
427
+ total_cost?: number;
428
+ discount?: Record<string, unknown>;
429
+ discount_amount?: number;
430
+ discounted_cost?: number;
431
+ original_cost?: number;
432
+ tenure?: number;
433
+ seats_included_in_base_plan?: number;
434
+ }
435
+ interface ListLicensesParams extends PaginationParams {
436
+ license_type?: AllLicenseType;
437
+ }
438
+ type UsageAggregationType = 'SUM' | 'MAX' | 'CUMULATIVE';
439
+ type RateKind = 'PER_UNIT' | 'FLAT_FEE' | 'PER_SEAT' | 'TIERED' | 'VOLUME';
440
+ type EntitlementPeriod = 'MONTHLY' | 'YEARLY' | 'QUARTERLY' | 'WEEKLY' | 'DAILY' | 'ONE_TIME';
441
+ type CarryoverPolicy = 'EXPIRE_AT_PERIOD_END' | 'ROLLOVER' | 'ROLLOVER_CAPPED';
442
+ interface CreateMetricInput {
443
+ metric_type: string;
444
+ usage_aggregation_type?: UsageAggregationType;
445
+ rate_kind?: RateKind;
446
+ entitlement_period?: EntitlementPeriod;
447
+ carryover_policy?: CarryoverPolicy;
448
+ usage_rate?: number;
449
+ usage_limit?: number;
450
+ usage_included?: number;
451
+ per_unit_cap?: number;
452
+ usage_rate_is_estimated?: boolean;
453
+ usage_custom_unit_label?: string;
454
+ expected_emission_interval_minutes?: number;
455
+ }
456
+ interface UpdateMetricInput {
457
+ metric_type?: string;
458
+ usage_aggregation_type?: UsageAggregationType;
459
+ rate_kind?: RateKind;
460
+ entitlement_period?: EntitlementPeriod;
461
+ carryover_policy?: CarryoverPolicy;
462
+ usage_rate?: number;
463
+ usage_limit?: number;
464
+ usage_included?: number;
465
+ per_unit_cap?: number;
466
+ usage_rate_is_estimated?: boolean;
467
+ usage_custom_unit_label?: string;
468
+ expected_emission_interval_minutes?: number;
469
+ }
470
+ interface Metric {
471
+ id: string;
472
+ license_id: string;
473
+ metric_type: string;
474
+ usage_aggregation_type: UsageAggregationType;
475
+ rate_kind: RateKind;
476
+ entitlement_period: EntitlementPeriod;
477
+ carryover_policy: CarryoverPolicy;
478
+ usage_rate?: number;
479
+ usage_limit?: number;
480
+ usage_included?: number;
481
+ per_unit_cap?: number;
482
+ usage_rate_is_estimated?: boolean;
483
+ usage_custom_unit_label?: string;
484
+ expected_emission_interval_minutes?: number;
485
+ created_at: string;
486
+ updated_at: string;
487
+ }
488
+ interface ListMetricsParams extends PaginationParams {
489
+ metric_type?: string;
490
+ }
491
+ interface DoowManagementOptions {
492
+ /** Server endpoint. Default: https://api.doow.co */
493
+ endpoint?: string;
494
+ /** Request timeout in ms. Default: 30000 */
495
+ timeout?: number;
496
+ /** Enable debug logging */
497
+ debug?: boolean;
498
+ }
499
+ interface ApiError {
500
+ status: number;
501
+ message: string;
502
+ code?: string;
503
+ details?: Record<string, unknown>;
504
+ }
505
+
506
+ /**
507
+ * DoowManagement — CRUD operations for apps, contracts, licenses, and metrics
508
+ *
509
+ * Usage:
510
+ * import { DoowManagement } from '@doow/track';
511
+ * const mgmt = new DoowManagement('dk_your_api_key');
512
+ *
513
+ * // Create an app
514
+ * const app = await mgmt.apps.create({ name: 'My SaaS' });
515
+ *
516
+ * // Create a contract under the app
517
+ * const contract = await mgmt.contracts.create(app.id, { title: 'Enterprise Plan' });
518
+ *
519
+ * // Create a license under the contract
520
+ * const license = await mgmt.licenses.create(contract.id, { name: 'API Usage' });
521
+ *
522
+ * // Create a metric under the license
523
+ * const metric = await mgmt.metrics.create(license.id, { metric_type: 'api_calls' });
524
+ */
525
+
526
+ declare class ManagementApiError extends Error {
527
+ readonly status: number;
528
+ readonly code?: string | undefined;
529
+ readonly details?: Record<string, unknown> | undefined;
530
+ constructor(error: ApiError);
531
+ }
532
+ declare class DoowManagement {
533
+ private readonly _apiKey;
534
+ private readonly _endpoint;
535
+ private readonly _timeout;
536
+ private readonly _debug;
537
+ readonly apps: AppsClient;
538
+ readonly contracts: ContractsClient;
539
+ readonly licenses: LicensesClient;
540
+ readonly metrics: MetricsClient;
541
+ readonly expenses: ExpensesClient;
542
+ constructor(apiKey: string, options?: DoowManagementOptions);
543
+ private log;
544
+ request<T>(method: string, path: string, body?: Record<string, unknown>, query?: Record<string, string | number | undefined>): Promise<T>;
545
+ }
546
+ declare class AppsClient {
547
+ private readonly mgmt;
548
+ constructor(mgmt: DoowManagement);
549
+ create(input: CreateAppInput): Promise<App>;
550
+ list(params?: ListAppsParams): Promise<PaginatedResponse<App>>;
551
+ get(id: string): Promise<App>;
552
+ update(id: string, input: UpdateAppInput): Promise<App>;
553
+ delete(id: string): Promise<void>;
554
+ }
555
+ declare class ContractsClient {
556
+ private readonly mgmt;
557
+ constructor(mgmt: DoowManagement);
558
+ create(appId: string, input: CreateContractInput): Promise<Contract>;
559
+ listByApp(appId: string, params?: ListContractsParams): Promise<PaginatedResponse<Contract>>;
560
+ get(id: string): Promise<Contract>;
561
+ update(id: string, input: UpdateContractInput): Promise<Contract>;
562
+ delete(id: string): Promise<void>;
563
+ }
564
+ declare class LicensesClient {
565
+ private readonly mgmt;
566
+ constructor(mgmt: DoowManagement);
567
+ create(contractId: string, input: CreateLicenseInput): Promise<License>;
568
+ listByContract(contractId: string, params?: ListLicensesParams): Promise<PaginatedResponse<License>>;
569
+ get(id: string): Promise<License>;
570
+ update(id: string, input: UpdateLicenseInput): Promise<License>;
571
+ delete(id: string): Promise<void>;
572
+ }
573
+ declare class MetricsClient {
574
+ private readonly mgmt;
575
+ constructor(mgmt: DoowManagement);
576
+ create(licenseId: string, input: CreateMetricInput): Promise<Metric>;
577
+ listByLicense(licenseId: string, params?: ListMetricsParams): Promise<PaginatedResponse<Metric>>;
578
+ get(id: string): Promise<Metric>;
579
+ update(id: string, input: UpdateMetricInput): Promise<Metric>;
580
+ delete(id: string): Promise<void>;
581
+ }
582
+ declare class ExpensesClient {
583
+ private readonly mgmt;
584
+ constructor(mgmt: DoowManagement);
585
+ list(params?: ListExpensesParams): Promise<PaginatedResponse<Expense>>;
586
+ get(id: string): Promise<Expense>;
587
+ }
588
+
589
+ export { DoowManagement, DoowTracker, FileOfflineStore, ManagementApiError };
590
+ export type { ApiError, App, BatchPayload, CarryoverPolicy, Contract, ContractType, CostAmortization, CreateAppInput, CreateContractInput, CreateLicenseInput, CreateMetricInput, CustomTransport, DoowManagementOptions, DoowTrackerOptions, EntitlementPeriod, Expense, License, LicenseInContract, LicenseInput, LicenseType, ListAppsParams, ListContractsParams, ListExpensesParams, ListLicensesParams, ListMetricsParams, Metric, OfflineStore, PaginatedResponse, PaginationParams, PartialAcceptResponse, RateKind, RateLimit, SdkError, SdkErrorKind, SerializedBatch, SerializedEvent, TrackEvent, TransportPayload, TransportResponse, UpdateAppInput, UpdateContractInput, UpdateLicenseInput, UpdateMetricInput, UsageAggregationType };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doow/track",
3
- "version": "0.1.4",
3
+ "version": "0.1.9",
4
4
  "description": "Customer-facing SDK for emitting usage telemetry to Doow",
5
5
  "license": "MIT",
6
6
  "author": "Doow",