@thirdweb-dev/service-utils 0.9.14 → 0.10.0-nightly-c5f9921dc9cf6c62d754f12ce6171d95bd87a590-20250625053652
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/cjs/node/index.js +1 -0
- package/dist/cjs/node/index.js.map +1 -1
- package/dist/cjs/node/usageV2.js +21 -27
- package/dist/cjs/node/usageV2.js.map +1 -1
- package/dist/cjs/node/webhookProducer.js +49 -0
- package/dist/cjs/node/webhookProducer.js.map +1 -0
- package/dist/esm/node/index.js +1 -0
- package/dist/esm/node/index.js.map +1 -1
- package/dist/esm/node/usageV2.js +21 -27
- package/dist/esm/node/usageV2.js.map +1 -1
- package/dist/esm/node/webhookProducer.js +45 -0
- package/dist/esm/node/webhookProducer.js.map +1 -0
- package/dist/types/node/index.d.ts +1 -0
- package/dist/types/node/index.d.ts.map +1 -1
- package/dist/types/node/usageV2.d.ts +15 -11
- package/dist/types/node/usageV2.d.ts.map +1 -1
- package/dist/types/node/webhookProducer.d.ts +37 -0
- package/dist/types/node/webhookProducer.d.ts.map +1 -0
- package/package.json +3 -2
package/dist/cjs/node/index.js
CHANGED
@@ -13,6 +13,7 @@ tslib_1.__exportStar(require("../core/usage.js"), exports);
|
|
13
13
|
tslib_1.__exportStar(require("../core/usageV2.js"), exports);
|
14
14
|
tslib_1.__exportStar(require("./kafka.js"), exports);
|
15
15
|
tslib_1.__exportStar(require("./usageV2.js"), exports);
|
16
|
+
tslib_1.__exportStar(require("./webhookProducer.js"), exports);
|
16
17
|
async function authorizeNode(authInput, serviceConfig, cacheOptions) {
|
17
18
|
let authData;
|
18
19
|
try {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/node/usageV2.js
CHANGED
@@ -4,18 +4,14 @@ exports.UsageV2Producer = void 0;
|
|
4
4
|
const node_crypto_1 = require("node:crypto");
|
5
5
|
const usageV2_js_1 = require("../core/usageV2.js");
|
6
6
|
const kafka_js_1 = require("./kafka.js");
|
7
|
-
const TEAM_ID_PREFIX = "team_";
|
8
|
-
const PROJECT_ID_PREFIX = "prj_";
|
9
7
|
/**
|
10
|
-
* Creates a
|
11
|
-
* This class is thread-safe so your service should re-use one instance.
|
8
|
+
* Creates a producer for usage events.
|
12
9
|
*
|
13
10
|
* Example:
|
14
11
|
* ```ts
|
15
|
-
*
|
16
|
-
*
|
17
|
-
*
|
18
|
-
* // void usageV2.sendEvents(events).catch((e) => console.error(e))
|
12
|
+
* const kafkaProducer = new KafkaProducer({...});
|
13
|
+
* const usageV2 = new UsageV2Producer({ kafkaProducer, source: "storage" });
|
14
|
+
* await usageV2.sendEvents(events);
|
19
15
|
* ```
|
20
16
|
*/
|
21
17
|
class UsageV2Producer {
|
@@ -32,12 +28,17 @@ class UsageV2Producer {
|
|
32
28
|
writable: true,
|
33
29
|
value: void 0
|
34
30
|
});
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
31
|
+
if ("kafkaProducer" in config) {
|
32
|
+
this.kafkaProducer = config.kafkaProducer;
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
this.kafkaProducer = new kafka_js_1.KafkaProducer({
|
36
|
+
kafkaServers: config.kafkaServers,
|
37
|
+
password: config.password,
|
38
|
+
producerName: config.producerName,
|
39
|
+
username: config.username,
|
40
|
+
});
|
41
|
+
}
|
41
42
|
this.topic = (0, usageV2_js_1.getTopicName)(config.source);
|
42
43
|
}
|
43
44
|
/**
|
@@ -56,24 +57,17 @@ class UsageV2Producer {
|
|
56
57
|
created_at: event.created_at ?? new Date(),
|
57
58
|
// Default to a generated UUID.
|
58
59
|
id: event.id ?? (0, node_crypto_1.randomUUID)(),
|
59
|
-
// Remove the "prj_" prefix
|
60
|
-
project_id: event.project_id?.startsWith(
|
61
|
-
? event.project_id.slice(
|
60
|
+
// Remove the "prj_" prefix.
|
61
|
+
project_id: event.project_id?.startsWith("prj_")
|
62
|
+
? event.project_id.slice(4)
|
62
63
|
: event.project_id,
|
63
|
-
// Remove the "team_" prefix
|
64
|
-
team_id: event.team_id.startsWith(
|
65
|
-
? event.team_id.slice(
|
64
|
+
// Remove the "team_" prefix.
|
65
|
+
team_id: event.team_id.startsWith("team_")
|
66
|
+
? event.team_id.slice(5)
|
66
67
|
: event.team_id,
|
67
68
|
}));
|
68
69
|
await this.kafkaProducer.send(this.topic, parsedEvents);
|
69
70
|
}
|
70
|
-
/**
|
71
|
-
* Disconnects UsageV2Producer.
|
72
|
-
* Useful when shutting down the service to flush in-flight events.
|
73
|
-
*/
|
74
|
-
async disconnect() {
|
75
|
-
await this.kafkaProducer.disconnect();
|
76
|
-
}
|
77
71
|
}
|
78
72
|
exports.UsageV2Producer = UsageV2Producer;
|
79
73
|
//# sourceMappingURL=usageV2.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"usageV2.js","sourceRoot":"","sources":["../../../src/node/usageV2.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,mDAI4B;AAC5B,yCAA2C;AAE3C,
|
1
|
+
{"version":3,"file":"usageV2.js","sourceRoot":"","sources":["../../../src/node/usageV2.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,mDAI4B;AAC5B,yCAA2C;AAE3C;;;;;;;;;GASG;AACH,MAAa,eAAe;IAI1B,YACE,MA2BK;QA/BC;;;;;WAA6B;QAC7B;;;;;WAAc;QAgCpB,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,IAAI,wBAAa,CAAC;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAA,yBAAY,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,MAAsB;QACrC,MAAM,YAAY,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1D,GAAG,KAAK;YACR,kBAAkB;YAClB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE;YAC1C,+BAA+B;YAC/B,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAA,wBAAU,GAAE;YAC5B,4BAA4B;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;gBAC9C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3B,CAAC,CAAC,KAAK,CAAC,UAAU;YACpB,6BAA6B;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxB,CAAC,CAAC,KAAK,CAAC,OAAO;SAClB,CAAC,CAAC,CAAC;QACJ,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;CACF;AA1ED,0CA0EC"}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.WebhookEventProducer = void 0;
|
4
|
+
const node_assert_1 = require("node:assert");
|
5
|
+
const cuid2_1 = require("@paralleldrive/cuid2");
|
6
|
+
/**
|
7
|
+
* Creates a producer for webhook events.
|
8
|
+
*
|
9
|
+
* Example:
|
10
|
+
* ```ts
|
11
|
+
* const kafkaProducer = new KafkaProducer({...});
|
12
|
+
* const webhookProducer = new WebhookEventProducer({ kafkaProducer });
|
13
|
+
* await webhookProducer.sendEvents("your.topic.name", events);
|
14
|
+
* ```
|
15
|
+
*/
|
16
|
+
class WebhookEventProducer {
|
17
|
+
constructor(config) {
|
18
|
+
Object.defineProperty(this, "kafkaProducer", {
|
19
|
+
enumerable: true,
|
20
|
+
configurable: true,
|
21
|
+
writable: true,
|
22
|
+
value: void 0
|
23
|
+
});
|
24
|
+
this.kafkaProducer = config.kafkaProducer;
|
25
|
+
}
|
26
|
+
/**
|
27
|
+
* Emit a webhook event.
|
28
|
+
* This method may throw. To call this non-blocking:
|
29
|
+
* ```ts
|
30
|
+
* void webhookProducer.sendEvents(events).catch((e) => console.error(e))
|
31
|
+
* ```
|
32
|
+
*/
|
33
|
+
async sendEvents(topic, events) {
|
34
|
+
const parsedEvents = events.map((event) => {
|
35
|
+
(0, node_assert_1.default)(event.teamId.startsWith("team_"), "teamId must start with 'team_'");
|
36
|
+
(0, node_assert_1.default)(!event.projectId || event.projectId.startsWith("prj_"), "projectId must start with 'prj_'");
|
37
|
+
return {
|
38
|
+
...event,
|
39
|
+
// Default to now.
|
40
|
+
created_at: event.createdAt ?? new Date(),
|
41
|
+
// Default to a generated UUID.
|
42
|
+
id: event.id ?? `evt_${(0, cuid2_1.createId)()}`,
|
43
|
+
};
|
44
|
+
});
|
45
|
+
await this.kafkaProducer.send(topic, parsedEvents);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
exports.WebhookEventProducer = WebhookEventProducer;
|
49
|
+
//# sourceMappingURL=webhookProducer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"webhookProducer.js","sourceRoot":"","sources":["../../../src/node/webhookProducer.ts"],"names":[],"mappings":";;;AAAA,6CAAiC;AACjC,gDAAgD;AAchD;;;;;;;;;GASG;AACH,MAAa,oBAAoB;IAG/B,YAAY,MAAwC;QAF5C;;;;;WAA6B;QAGnC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,MAAsB;QACpD,MAAM,YAAY,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACxD,IAAA,qBAAM,EACJ,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAChC,gCAAgC,CACjC,CAAC;YACF,IAAA,qBAAM,EACJ,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EACtD,kCAAkC,CACnC,CAAC;YAEF,OAAO;gBACL,GAAG,KAAK;gBACR,kBAAkB;gBAClB,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE;gBACzC,+BAA+B;gBAC/B,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,OAAO,IAAA,gBAAQ,GAAE,EAAE;aACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;CACF;AAnCD,oDAmCC"}
|
package/dist/esm/node/index.js
CHANGED
@@ -6,6 +6,7 @@ export * from "../core/usage.js";
|
|
6
6
|
export * from "../core/usageV2.js";
|
7
7
|
export * from "./kafka.js";
|
8
8
|
export * from "./usageV2.js";
|
9
|
+
export * from "./webhookProducer.js";
|
9
10
|
export async function authorizeNode(authInput, serviceConfig, cacheOptions) {
|
10
11
|
let authData;
|
11
12
|
try {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAIvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/node/usageV2.js
CHANGED
@@ -1,18 +1,14 @@
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
2
2
|
import { getTopicName, } from "../core/usageV2.js";
|
3
3
|
import { KafkaProducer } from "./kafka.js";
|
4
|
-
const TEAM_ID_PREFIX = "team_";
|
5
|
-
const PROJECT_ID_PREFIX = "prj_";
|
6
4
|
/**
|
7
|
-
* Creates a
|
8
|
-
* This class is thread-safe so your service should re-use one instance.
|
5
|
+
* Creates a producer for usage events.
|
9
6
|
*
|
10
7
|
* Example:
|
11
8
|
* ```ts
|
12
|
-
*
|
13
|
-
*
|
14
|
-
*
|
15
|
-
* // void usageV2.sendEvents(events).catch((e) => console.error(e))
|
9
|
+
* const kafkaProducer = new KafkaProducer({...});
|
10
|
+
* const usageV2 = new UsageV2Producer({ kafkaProducer, source: "storage" });
|
11
|
+
* await usageV2.sendEvents(events);
|
16
12
|
* ```
|
17
13
|
*/
|
18
14
|
export class UsageV2Producer {
|
@@ -29,12 +25,17 @@ export class UsageV2Producer {
|
|
29
25
|
writable: true,
|
30
26
|
value: void 0
|
31
27
|
});
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
28
|
+
if ("kafkaProducer" in config) {
|
29
|
+
this.kafkaProducer = config.kafkaProducer;
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
this.kafkaProducer = new KafkaProducer({
|
33
|
+
kafkaServers: config.kafkaServers,
|
34
|
+
password: config.password,
|
35
|
+
producerName: config.producerName,
|
36
|
+
username: config.username,
|
37
|
+
});
|
38
|
+
}
|
38
39
|
this.topic = getTopicName(config.source);
|
39
40
|
}
|
40
41
|
/**
|
@@ -53,23 +54,16 @@ export class UsageV2Producer {
|
|
53
54
|
created_at: event.created_at ?? new Date(),
|
54
55
|
// Default to a generated UUID.
|
55
56
|
id: event.id ?? randomUUID(),
|
56
|
-
// Remove the "prj_" prefix
|
57
|
-
project_id: event.project_id?.startsWith(
|
58
|
-
? event.project_id.slice(
|
57
|
+
// Remove the "prj_" prefix.
|
58
|
+
project_id: event.project_id?.startsWith("prj_")
|
59
|
+
? event.project_id.slice(4)
|
59
60
|
: event.project_id,
|
60
|
-
// Remove the "team_" prefix
|
61
|
-
team_id: event.team_id.startsWith(
|
62
|
-
? event.team_id.slice(
|
61
|
+
// Remove the "team_" prefix.
|
62
|
+
team_id: event.team_id.startsWith("team_")
|
63
|
+
? event.team_id.slice(5)
|
63
64
|
: event.team_id,
|
64
65
|
}));
|
65
66
|
await this.kafkaProducer.send(this.topic, parsedEvents);
|
66
67
|
}
|
67
|
-
/**
|
68
|
-
* Disconnects UsageV2Producer.
|
69
|
-
* Useful when shutting down the service to flush in-flight events.
|
70
|
-
*/
|
71
|
-
async disconnect() {
|
72
|
-
await this.kafkaProducer.disconnect();
|
73
|
-
}
|
74
68
|
}
|
75
69
|
//# sourceMappingURL=usageV2.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"usageV2.js","sourceRoot":"","sources":["../../../src/node/usageV2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,
|
1
|
+
{"version":3,"file":"usageV2.js","sourceRoot":"","sources":["../../../src/node/usageV2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;GASG;AACH,MAAM,OAAO,eAAe;IAI1B,YACE,MA2BK;QA/BC;;;;;WAA6B;QAC7B;;;;;WAAc;QAgCpB,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC;gBACrC,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,MAAsB;QACrC,MAAM,YAAY,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC1D,GAAG,KAAK;YACR,kBAAkB;YAClB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE;YAC1C,+BAA+B;YAC/B,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,UAAU,EAAE;YAC5B,4BAA4B;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;gBAC9C,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3B,CAAC,CAAC,KAAK,CAAC,UAAU;YACpB,6BAA6B;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxB,CAAC,CAAC,KAAK,CAAC,OAAO;SAClB,CAAC,CAAC,CAAC;QACJ,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import assert from "node:assert";
|
2
|
+
import { createId } from "@paralleldrive/cuid2";
|
3
|
+
/**
|
4
|
+
* Creates a producer for webhook events.
|
5
|
+
*
|
6
|
+
* Example:
|
7
|
+
* ```ts
|
8
|
+
* const kafkaProducer = new KafkaProducer({...});
|
9
|
+
* const webhookProducer = new WebhookEventProducer({ kafkaProducer });
|
10
|
+
* await webhookProducer.sendEvents("your.topic.name", events);
|
11
|
+
* ```
|
12
|
+
*/
|
13
|
+
export class WebhookEventProducer {
|
14
|
+
constructor(config) {
|
15
|
+
Object.defineProperty(this, "kafkaProducer", {
|
16
|
+
enumerable: true,
|
17
|
+
configurable: true,
|
18
|
+
writable: true,
|
19
|
+
value: void 0
|
20
|
+
});
|
21
|
+
this.kafkaProducer = config.kafkaProducer;
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Emit a webhook event.
|
25
|
+
* This method may throw. To call this non-blocking:
|
26
|
+
* ```ts
|
27
|
+
* void webhookProducer.sendEvents(events).catch((e) => console.error(e))
|
28
|
+
* ```
|
29
|
+
*/
|
30
|
+
async sendEvents(topic, events) {
|
31
|
+
const parsedEvents = events.map((event) => {
|
32
|
+
assert(event.teamId.startsWith("team_"), "teamId must start with 'team_'");
|
33
|
+
assert(!event.projectId || event.projectId.startsWith("prj_"), "projectId must start with 'prj_'");
|
34
|
+
return {
|
35
|
+
...event,
|
36
|
+
// Default to now.
|
37
|
+
created_at: event.createdAt ?? new Date(),
|
38
|
+
// Default to a generated UUID.
|
39
|
+
id: event.id ?? `evt_${createId()}`,
|
40
|
+
};
|
41
|
+
});
|
42
|
+
await this.kafkaProducer.send(topic, parsedEvents);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
//# sourceMappingURL=webhookProducer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"webhookProducer.js","sourceRoot":"","sources":["../../../src/node/webhookProducer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAchD;;;;;;;;;GASG;AACH,MAAM,OAAO,oBAAoB;IAG/B,YAAY,MAAwC;QAF5C;;;;;WAA6B;QAGnC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,MAAsB;QACpD,MAAM,YAAY,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACxD,MAAM,CACJ,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAChC,gCAAgC,CACjC,CAAC;YACF,MAAM,CACJ,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EACtD,kCAAkC,CACnC,CAAC;YAEF,OAAO;gBACL,GAAG,KAAK;gBACR,kBAAkB;gBAClB,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE;gBACzC,+BAA+B;gBAC/B,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,OAAO,QAAQ,EAAE,EAAE;aACpC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;CACF"}
|
@@ -9,6 +9,7 @@ export * from "../core/usage.js";
|
|
9
9
|
export * from "../core/usageV2.js";
|
10
10
|
export * from "./kafka.js";
|
11
11
|
export * from "./usageV2.js";
|
12
|
+
export * from "./webhookProducer.js";
|
12
13
|
type NodeServiceConfig = CoreServiceConfig;
|
13
14
|
export type AuthInput = CoreAuthInput & {
|
14
15
|
req: IncomingMessage | Request;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/node/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AAErC,KAAK,iBAAiB,GAAG,iBAAiB,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG;IACtC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAsB,aAAa,CACjC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,iBAAiB,EAChC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAmBD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,SAAS,GACnB,kBAAkB,CA4GpB;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,UAE9C;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,GAAG,EACH,GAAG,EACH,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,SAAS,GAAG;IAEb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,QAwBA"}
|
@@ -1,26 +1,35 @@
|
|
1
1
|
import { type UsageV2Event, type UsageV2Source } from "../core/usageV2.js";
|
2
|
+
import { KafkaProducer } from "./kafka.js";
|
2
3
|
/**
|
3
|
-
* Creates a
|
4
|
-
* This class is thread-safe so your service should re-use one instance.
|
4
|
+
* Creates a producer for usage events.
|
5
5
|
*
|
6
6
|
* Example:
|
7
7
|
* ```ts
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
11
|
-
* // void usageV2.sendEvents(events).catch((e) => console.error(e))
|
8
|
+
* const kafkaProducer = new KafkaProducer({...});
|
9
|
+
* const usageV2 = new UsageV2Producer({ kafkaProducer, source: "storage" });
|
10
|
+
* await usageV2.sendEvents(events);
|
12
11
|
* ```
|
13
12
|
*/
|
14
13
|
export declare class UsageV2Producer {
|
15
14
|
private kafkaProducer;
|
16
15
|
private topic;
|
17
16
|
constructor(config: {
|
17
|
+
/**
|
18
|
+
* Shared KafkaProducer instance.
|
19
|
+
*/
|
20
|
+
kafkaProducer: KafkaProducer;
|
21
|
+
/**
|
22
|
+
* The product where usage is coming from.
|
23
|
+
*/
|
24
|
+
source: UsageV2Source;
|
25
|
+
} | {
|
18
26
|
/**
|
19
27
|
* A descriptive name for your service. Example: "storage-server"
|
20
28
|
*/
|
21
29
|
producerName: string;
|
22
30
|
/**
|
23
31
|
* A comma-separated list of `host[:port]` Kafka servers.
|
32
|
+
* @deprecated: Instantiate and pass in `kafkaProducer` instead.
|
24
33
|
*/
|
25
34
|
kafkaServers: string;
|
26
35
|
/**
|
@@ -40,10 +49,5 @@ export declare class UsageV2Producer {
|
|
40
49
|
* @param events
|
41
50
|
*/
|
42
51
|
sendEvents(events: UsageV2Event[]): Promise<void>;
|
43
|
-
/**
|
44
|
-
* Disconnects UsageV2Producer.
|
45
|
-
* Useful when shutting down the service to flush in-flight events.
|
46
|
-
*/
|
47
|
-
disconnect(): Promise<void>;
|
48
52
|
}
|
49
53
|
//# sourceMappingURL=usageV2.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"usageV2.d.ts","sourceRoot":"","sources":["../../../src/node/usageV2.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"usageV2.d.ts","sourceRoot":"","sources":["../../../src/node/usageV2.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,KAAK,CAAS;gBAGpB,MAAM,EACF;QACE;;WAEG;QACH,aAAa,EAAE,aAAa,CAAC;QAC7B;;WAEG;QACH,MAAM,EAAE,aAAa,CAAC;KACvB,GACD;QACE;;WAEG;QACH,YAAY,EAAE,MAAM,CAAC;QACrB;;;WAGG;QACH,YAAY,EAAE,MAAM,CAAC;QACrB;;WAEG;QACH,MAAM,EAAE,aAAa,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB;IAeP;;;;;;;;OAQG;IACG,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBxD"}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import type { KafkaProducer } from "./kafka.js";
|
2
|
+
interface WebhookEvent extends Record<string, unknown> {
|
3
|
+
id?: `evt_${string}`;
|
4
|
+
teamId: string;
|
5
|
+
projectId?: string;
|
6
|
+
createdAt?: Date;
|
7
|
+
/**
|
8
|
+
* This should match your model defined in api-server.
|
9
|
+
*/
|
10
|
+
payload: Record<string, unknown>;
|
11
|
+
}
|
12
|
+
/**
|
13
|
+
* Creates a producer for webhook events.
|
14
|
+
*
|
15
|
+
* Example:
|
16
|
+
* ```ts
|
17
|
+
* const kafkaProducer = new KafkaProducer({...});
|
18
|
+
* const webhookProducer = new WebhookEventProducer({ kafkaProducer });
|
19
|
+
* await webhookProducer.sendEvents("your.topic.name", events);
|
20
|
+
* ```
|
21
|
+
*/
|
22
|
+
export declare class WebhookEventProducer {
|
23
|
+
private kafkaProducer;
|
24
|
+
constructor(config: {
|
25
|
+
kafkaProducer: KafkaProducer;
|
26
|
+
});
|
27
|
+
/**
|
28
|
+
* Emit a webhook event.
|
29
|
+
* This method may throw. To call this non-blocking:
|
30
|
+
* ```ts
|
31
|
+
* void webhookProducer.sendEvents(events).catch((e) => console.error(e))
|
32
|
+
* ```
|
33
|
+
*/
|
34
|
+
sendEvents(topic: string, events: WebhookEvent[]): Promise<void>;
|
35
|
+
}
|
36
|
+
export {};
|
37
|
+
//# sourceMappingURL=webhookProducer.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"webhookProducer.d.ts","sourceRoot":"","sources":["../../../src/node/webhookProducer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,YAAa,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD,EAAE,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,MAAM,EAAE;QAAE,aAAa,EAAE,aAAa,CAAA;KAAE;IAIpD;;;;;;OAMG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBvE"}
|
package/package.json
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
},
|
6
6
|
"dependencies": {
|
7
7
|
"@confluentinc/kafka-javascript": "1.3.2",
|
8
|
+
"@paralleldrive/cuid2": "^2.2.2",
|
8
9
|
"aws4fetch": "1.0.20",
|
9
10
|
"zod": "3.25.62"
|
10
11
|
},
|
11
12
|
"devDependencies": {
|
12
|
-
"@biomejs/biome": "2.0.
|
13
|
+
"@biomejs/biome": "2.0.4",
|
13
14
|
"@cloudflare/workers-types": "4.20250612.0",
|
14
15
|
"@types/node": "22.14.1",
|
15
16
|
"@vitest/coverage-v8": "3.2.3",
|
@@ -56,7 +57,7 @@
|
|
56
57
|
}
|
57
58
|
},
|
58
59
|
"typings": "dist/types/index.d.ts",
|
59
|
-
"version": "0.
|
60
|
+
"version": "0.10.0-nightly-c5f9921dc9cf6c62d754f12ce6171d95bd87a590-20250625053652",
|
60
61
|
"scripts": {
|
61
62
|
"build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm",
|
62
63
|
"build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json",
|