From a0cad51ba56eb2b83f4d5beac78999342f5e21ff Mon Sep 17 00:00:00 2001 From: Devyash Saini Date: Tue, 26 May 2026 19:21:40 +0530 Subject: [PATCH 1/2] fix(proto): correct buf config + submodule for eventId/idempotencyKey --- bun.lock | 2 +- packages/scrawn/package.json | 2 +- packages/scrawn/proto | 2 +- packages/scrawn/scripts/cleanup-grpc-js.cjs | 10 +-- packages/scrawn/src/gen/event/v1/event.ts | 80 ++++++++++++++++++++- 5 files changed, 87 insertions(+), 9 deletions(-) diff --git a/bun.lock b/bun.lock index cc22f10..a90755e 100644 --- a/bun.lock +++ b/bun.lock @@ -25,7 +25,7 @@ "name": "@scrawn/core", "version": "0.0.7", "dependencies": { - "@bufbuild/protobuf": "^2.12.0", + "@bufbuild/protobuf": "2.12.0", "@grpc/grpc-js": "^1.13.1", "chalk": "^5.6.2", "pino": "^10.1.0", diff --git a/packages/scrawn/package.json b/packages/scrawn/package.json index 0ece5a9..addae63 100644 --- a/packages/scrawn/package.json +++ b/packages/scrawn/package.json @@ -21,7 +21,7 @@ "proto:push": "cd proto && git add . && git commit -s -m \"$1\" && git push && cd .." }, "dependencies": { - "@bufbuild/protobuf": "^2.12.0", + "@bufbuild/protobuf": "2.12.0", "@grpc/grpc-js": "^1.13.1", "chalk": "^5.6.2", "pino": "^10.1.0", diff --git a/packages/scrawn/proto b/packages/scrawn/proto index b6880b6..574d8eb 160000 --- a/packages/scrawn/proto +++ b/packages/scrawn/proto @@ -1 +1 @@ -Subproject commit b6880b6999a918162b218b3eece3a9746242d4ed +Subproject commit 574d8ebd8df04cab520032dd846acd0fa81a2985 diff --git a/packages/scrawn/scripts/cleanup-grpc-js.cjs b/packages/scrawn/scripts/cleanup-grpc-js.cjs index c418440..068114b 100644 --- a/packages/scrawn/scripts/cleanup-grpc-js.cjs +++ b/packages/scrawn/scripts/cleanup-grpc-js.cjs @@ -3,17 +3,19 @@ const path = require("path"); const genRoot = path.join(__dirname, "..", "src", "gen"); -function deleteGrpcJs(dirPath) { +const removeSuffixes = ["_grpc_pb.js", "_pb.d.ts"]; + +function clean(dirPath) { for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) { const fullPath = path.join(dirPath, entry.name); if (entry.isDirectory()) { - deleteGrpcJs(fullPath); - } else if (entry.name.endsWith("_grpc_pb.js")) { + clean(fullPath); + } else if (removeSuffixes.some((s) => entry.name.endsWith(s))) { fs.rmSync(fullPath, { force: true }); } } } if (fs.existsSync(genRoot)) { - deleteGrpcJs(genRoot); + clean(genRoot); } diff --git a/packages/scrawn/src/gen/event/v1/event.ts b/packages/scrawn/src/gen/event/v1/event.ts index 9b3cc5f..6aecbd3 100644 --- a/packages/scrawn/src/gen/event/v1/event.ts +++ b/packages/scrawn/src/gen/event/v1/event.ts @@ -105,6 +105,8 @@ export interface RegisterEventRequest { type: EventType; userId: string; reportedTimestamp: number; + eventId: string; + idempotencyKey: string; basicUsage?: BasicUsage | undefined; } @@ -127,6 +129,8 @@ export interface StreamEventRequest { type: EventType; userId: string; reportedTimestamp: number; + eventId: string; + idempotencyKey: string; basicUsage?: BasicUsage | undefined; aiTokenUsage?: AITokenUsage | undefined; } @@ -164,7 +168,7 @@ export interface StreamEventResponse { } function createBaseRegisterEventRequest(): RegisterEventRequest { - return { type: 0, userId: "", reportedTimestamp: 0, basicUsage: undefined }; + return { type: 0, userId: "", reportedTimestamp: 0, eventId: "", idempotencyKey: "", basicUsage: undefined }; } export const RegisterEventRequest: MessageFns = { @@ -178,6 +182,12 @@ export const RegisterEventRequest: MessageFns = { if (message.reportedTimestamp !== 0) { writer.uint32(24).int32(message.reportedTimestamp); } + if (message.eventId !== "") { + writer.uint32(42).string(message.eventId); + } + if (message.idempotencyKey !== "") { + writer.uint32(50).string(message.idempotencyKey); + } if (message.basicUsage !== undefined) { BasicUsage.encode(message.basicUsage, writer.uint32(34).fork()).join(); } @@ -215,6 +225,22 @@ export const RegisterEventRequest: MessageFns = { message.reportedTimestamp = reader.int32(); continue; } + case 5: { + if (tag !== 42) { + break; + } + + message.eventId = reader.string(); + continue; + } + case 6: { + if (tag !== 50) { + break; + } + + message.idempotencyKey = reader.string(); + continue; + } case 4: { if (tag !== 34) { break; @@ -237,6 +263,8 @@ export const RegisterEventRequest: MessageFns = { type: isSet(object.type) ? eventTypeFromJSON(object.type) : 0, userId: isSet(object.userId) ? globalThis.String(object.userId) : "", reportedTimestamp: isSet(object.reportedTimestamp) ? globalThis.Number(object.reportedTimestamp) : 0, + eventId: isSet(object.eventId) ? globalThis.String(object.eventId) : "", + idempotencyKey: isSet(object.idempotencyKey) ? globalThis.String(object.idempotencyKey) : "", basicUsage: isSet(object.basicUsage) ? BasicUsage.fromJSON(object.basicUsage) : undefined, }; }, @@ -252,6 +280,12 @@ export const RegisterEventRequest: MessageFns = { if (message.reportedTimestamp !== 0) { obj.reportedTimestamp = Math.round(message.reportedTimestamp); } + if (message.eventId !== "") { + obj.eventId = message.eventId; + } + if (message.idempotencyKey !== "") { + obj.idempotencyKey = message.idempotencyKey; + } if (message.basicUsage !== undefined) { obj.basicUsage = BasicUsage.toJSON(message.basicUsage); } @@ -266,6 +300,8 @@ export const RegisterEventRequest: MessageFns = { message.type = object.type ?? 0; message.userId = object.userId ?? ""; message.reportedTimestamp = object.reportedTimestamp ?? 0; + message.eventId = object.eventId ?? ""; + message.idempotencyKey = object.idempotencyKey ?? ""; message.basicUsage = (object.basicUsage !== undefined && object.basicUsage !== null) ? BasicUsage.fromPartial(object.basicUsage) : undefined; @@ -456,7 +492,15 @@ export const RegisterEventResponse: MessageFns = { }; function createBaseStreamEventRequest(): StreamEventRequest { - return { type: 0, userId: "", reportedTimestamp: 0, basicUsage: undefined, aiTokenUsage: undefined }; + return { + type: 0, + userId: "", + reportedTimestamp: 0, + eventId: "", + idempotencyKey: "", + basicUsage: undefined, + aiTokenUsage: undefined, + }; } export const StreamEventRequest: MessageFns = { @@ -470,6 +514,12 @@ export const StreamEventRequest: MessageFns = { if (message.reportedTimestamp !== 0) { writer.uint32(24).int32(message.reportedTimestamp); } + if (message.eventId !== "") { + writer.uint32(50).string(message.eventId); + } + if (message.idempotencyKey !== "") { + writer.uint32(58).string(message.idempotencyKey); + } if (message.basicUsage !== undefined) { BasicUsage.encode(message.basicUsage, writer.uint32(34).fork()).join(); } @@ -510,6 +560,22 @@ export const StreamEventRequest: MessageFns = { message.reportedTimestamp = reader.int32(); continue; } + case 6: { + if (tag !== 50) { + break; + } + + message.eventId = reader.string(); + continue; + } + case 7: { + if (tag !== 58) { + break; + } + + message.idempotencyKey = reader.string(); + continue; + } case 4: { if (tag !== 34) { break; @@ -540,6 +606,8 @@ export const StreamEventRequest: MessageFns = { type: isSet(object.type) ? eventTypeFromJSON(object.type) : 0, userId: isSet(object.userId) ? globalThis.String(object.userId) : "", reportedTimestamp: isSet(object.reportedTimestamp) ? globalThis.Number(object.reportedTimestamp) : 0, + eventId: isSet(object.eventId) ? globalThis.String(object.eventId) : "", + idempotencyKey: isSet(object.idempotencyKey) ? globalThis.String(object.idempotencyKey) : "", basicUsage: isSet(object.basicUsage) ? BasicUsage.fromJSON(object.basicUsage) : undefined, aiTokenUsage: isSet(object.aiTokenUsage) ? AITokenUsage.fromJSON(object.aiTokenUsage) : undefined, }; @@ -556,6 +624,12 @@ export const StreamEventRequest: MessageFns = { if (message.reportedTimestamp !== 0) { obj.reportedTimestamp = Math.round(message.reportedTimestamp); } + if (message.eventId !== "") { + obj.eventId = message.eventId; + } + if (message.idempotencyKey !== "") { + obj.idempotencyKey = message.idempotencyKey; + } if (message.basicUsage !== undefined) { obj.basicUsage = BasicUsage.toJSON(message.basicUsage); } @@ -573,6 +647,8 @@ export const StreamEventRequest: MessageFns = { message.type = object.type ?? 0; message.userId = object.userId ?? ""; message.reportedTimestamp = object.reportedTimestamp ?? 0; + message.eventId = object.eventId ?? ""; + message.idempotencyKey = object.idempotencyKey ?? ""; message.basicUsage = (object.basicUsage !== undefined && object.basicUsage !== null) ? BasicUsage.fromPartial(object.basicUsage) : undefined; From 115000692fdfe5ccdaa82c3ca5fcff3e84abb474 Mon Sep 17 00:00:00 2001 From: Devyash Saini Date: Tue, 26 May 2026 19:23:36 +0530 Subject: [PATCH 2/2] chore: release Signed-off-by: Devyash Saini --- .changeset/tired-suns-battle.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/tired-suns-battle.md diff --git a/.changeset/tired-suns-battle.md b/.changeset/tired-suns-battle.md new file mode 100644 index 0000000..07099e6 --- /dev/null +++ b/.changeset/tired-suns-battle.md @@ -0,0 +1,6 @@ +--- +"@scrawn/analytics": patch +"@scrawn/core": patch +--- + +feat: migrate proto to ts-proto/@bufbuild/protobuf, add retry mechanism