diff --git a/examples/ai-token-stream-expr-usage.ts b/examples/ai-token-stream-expr-usage.ts index 34e55b2..6316c55 100644 --- a/examples/ai-token-stream-expr-usage.ts +++ b/examples/ai-token-stream-expr-usage.ts @@ -1,9 +1,16 @@ -import { type AITokenUsagePayload, mul, inputTokens, outputTokens } from "@scrawn/core"; +import { + type AITokenUsagePayload, + mul, + inputTokens, + outputTokens, +} from "@scrawn/core"; import { biller } from "./scrawn/biller.ts"; import { config } from "dotenv"; config({ path: ".env.local" }); -async function* tokenUsageFromAIStream(): AsyncGenerator> { +async function* tokenUsageFromAIStream(): AsyncGenerator< + AITokenUsagePayload<"PREMIUM_CALL" | "EXTRA_FEE"> +> { const userId = "c0971bcb-b901-4c3e-a191-c9a97871c39f"; yield { @@ -12,7 +19,9 @@ async function* tokenUsageFromAIStream(): AsyncGenerator f.name === name)) continue; + if (fields.some((f) => f.name === name)) continue; const tsType = type === "number" ? "number" : "string"; fields.push({ name, type: tsType, protoName: name }); } @@ -41,8 +50,14 @@ function parseQueryFields(): { sdkCall: FieldEntry[]; aiToken: FieldEntry[]; pay // Map fields to specific groups based on what we know: // Common fields across all event types const common: FieldEntry[] = [ - ...fields.filter(f => - ["eventId", "eventType", "userId", "reportedTimestamp", "ingestedTimestamp"].includes(f.name) + ...fields.filter((f) => + [ + "eventId", + "eventType", + "userId", + "reportedTimestamp", + "ingestedTimestamp", + ].includes(f.name) ), // apiKeyId returned by backend but missing from proto EventRow — TODO: add to proto { name: "apiKeyId", type: "string", protoName: "api_key_id" }, @@ -52,7 +67,7 @@ function parseQueryFields(): { sdkCall: FieldEntry[]; aiToken: FieldEntry[]; pay ...common, { name: "basicUsageType", type: "string", protoName: "basic_usage_type" }, { name: "debitAmount", type: "number", protoName: "debit_amount" }, - ...fields.filter(f => f.name === "metadata"), + ...fields.filter((f) => f.name === "metadata"), ]; const aiToken: FieldEntry[] = [ @@ -60,10 +75,23 @@ function parseQueryFields(): { sdkCall: FieldEntry[]; aiToken: FieldEntry[]; pay { name: "model", type: "string", protoName: "model" }, { name: "inputTokens", type: "number", protoName: "input_tokens" }, { name: "outputTokens", type: "number", protoName: "output_tokens" }, - { name: "inputDebitAmount", type: "number", protoName: "input_debit_amount" }, - { name: "outputDebitAmount", type: "number", protoName: "output_debit_amount" }, - ...fields.filter(f => - ["provider", "inputCacheTokens", "inputCacheDebitAmount", "metadata"].includes(f.name) + { + name: "inputDebitAmount", + type: "number", + protoName: "input_debit_amount", + }, + { + name: "outputDebitAmount", + type: "number", + protoName: "output_debit_amount", + }, + ...fields.filter((f) => + [ + "provider", + "inputCacheTokens", + "inputCacheDebitAmount", + "metadata", + ].includes(f.name) ), ]; @@ -83,10 +111,13 @@ function parseTableName(enumName: string): string { } function parseDataFields(): Record { - const src = fs.readFileSync(path.join(GEN_DIR, "data", "v1", "data.ts"), "utf-8"); + const src = fs.readFileSync( + path.join(GEN_DIR, "data", "v1", "data.ts"), + "utf-8" + ); const tableFields: Record = {}; - + // Find all Field enums const enumRe = /export enum (\w+Field) \{\s*([^}]+)\s*\}/gs; let m: RegExpExecArray | null; @@ -101,7 +132,7 @@ function parseDataFields(): Record { while ((mm = memberRe.exec(body)) !== null) { const protoMember = mm[1]; if (protoMember.endsWith("_UNSPECIFIED")) continue; - + // Strip prefix: USERS_LAST_BILLED_TIMESTAMP → last_billed_timestamp const prefix = tableName.toUpperCase() + "_"; const stripped = protoMember.startsWith(prefix) @@ -122,7 +153,10 @@ function parseDataFields(): Record { // ── Generate output ── -function generateFieldsFile(fields: Record, fileName: string): void { +function generateFieldsFile( + fields: Record, + fileName: string +): void { const lines: string[] = [ "// AUTO-GENERATED by scripts/gen-fields.ts — do not edit", 'import { FieldRef } from "../fieldRef.js";', @@ -153,7 +187,7 @@ generateFieldsFile( aiToken: queryFields.aiToken, payment: queryFields.payment, }, - "query/fields.ts", + "query/fields.ts" ); const dataFields = parseDataFields(); diff --git a/packages/analytics/src/analytics.ts b/packages/analytics/src/analytics.ts index e6e1f07..0317205 100644 --- a/packages/analytics/src/analytics.ts +++ b/packages/analytics/src/analytics.ts @@ -91,6 +91,3 @@ export class Analytics { }; } } - - - diff --git a/packages/analytics/src/data/base.ts b/packages/analytics/src/data/base.ts index 93ba42f..3ab09aa 100644 --- a/packages/analytics/src/data/base.ts +++ b/packages/analytics/src/data/base.ts @@ -10,7 +10,7 @@ export abstract class BaseDataBuilder { constructor( public readonly fields: TFields, - public readonly tableName: string, + public readonly tableName: string ) {} where(filter: FilterCondition | FilterGroup): this { @@ -46,12 +46,18 @@ export abstract class BaseDataBuilder { }; } - protected unwrap(res: { columns?: string[]; rows?: Array<{ values?: string[] }>; total?: number }): DataQueryResult { + protected unwrap(res: { + columns?: string[]; + rows?: Array<{ values?: string[] }>; + total?: number; + }): DataQueryResult { const cols = res.columns ?? []; const rows = (res.rows ?? []).map((r) => { const vals = r.values ?? []; const obj: Record = {}; - cols.forEach((c, i) => { obj[c] = vals[i] ?? ""; }); + cols.forEach((c, i) => { + obj[c] = vals[i] ?? ""; + }); return obj as unknown as InferRow; }); return { columns: cols, rows, total: res.total ?? 0 }; @@ -59,6 +65,3 @@ export abstract class BaseDataBuilder { abstract execute(): Promise>; } - - - diff --git a/packages/analytics/src/data/tables.ts b/packages/analytics/src/data/tables.ts index e62d5ed..74276b6 100644 --- a/packages/analytics/src/data/tables.ts +++ b/packages/analytics/src/data/tables.ts @@ -44,13 +44,20 @@ export class TagsBuilder extends BaseDataBuilder { } } -export class ExpressionsBuilder extends BaseDataBuilder { +export class ExpressionsBuilder extends BaseDataBuilder< + typeof expressionsFields +> { constructor(private grpc: GrpcClient, private apiKey: string) { super(expressionsFields, "expressions"); } async execute(): Promise> { const params = this.buildParams(); - const res = await callDataQuery(this.grpc, this.apiKey, "expressions", params); + const res = await callDataQuery( + this.grpc, + this.apiKey, + "expressions", + params + ); return this.unwrap(res); } } diff --git a/packages/analytics/src/fieldRef.ts b/packages/analytics/src/fieldRef.ts index dd5fac5..5e29676 100644 --- a/packages/analytics/src/fieldRef.ts +++ b/packages/analytics/src/fieldRef.ts @@ -18,6 +18,3 @@ export class FieldRef { export type InferRow = { [K in keyof TFields]: TFields[K] extends FieldRef ? V : never; }; - - - diff --git a/packages/analytics/src/grpc/client.ts b/packages/analytics/src/grpc/client.ts index 62faef9..61ff97b 100644 --- a/packages/analytics/src/grpc/client.ts +++ b/packages/analytics/src/grpc/client.ts @@ -1,8 +1,6 @@ import type { GrpcClient } from "@scrawn/core"; -import { - QueryServiceClient, -} from "@scrawn/core"; +import { QueryServiceClient } from "@scrawn/core"; import type { QueryEventsRequest, QueryEventsResponse, @@ -12,9 +10,7 @@ import type { QueryGroupBy as GroupBy, } from "@scrawn/core"; -import { - DataQueryServiceClient, -} from "@scrawn/core"; +import { DataQueryServiceClient } from "@scrawn/core"; import type { QueryRequest, QueryResponse, @@ -31,9 +27,20 @@ import type { function opQuery(op: string): number { switch (op) { - case "EQ": return 1; case "GT": return 2; case "GTE": return 3; - case "LT": return 4; case "LTE": return 5; case "NEQ": return 6; - default: return 0; + case "EQ": + return 1; + case "GT": + return 2; + case "GTE": + return 3; + case "LT": + return 4; + case "LTE": + return 5; + case "NEQ": + return 6; + default: + return 0; } } @@ -64,12 +71,21 @@ function buildDataGroup(group: FilterGroup): DFilterGroup { export async function callEventQuery( grpc: GrpcClient, apiKey: string, - params: { where?: FilterGroup; aggregation?: AggType; groupBy?: string; limit?: number; offset?: number }, + params: { + where?: FilterGroup; + aggregation?: AggType; + groupBy?: string; + limit?: number; + offset?: number; + } ): Promise { const req: QueryEventsRequest = { where: params.where ? buildQueryGroup(params.where) : undefined, aggregation: params.aggregation - ? { type: params.aggregation.type === "SUM" ? 1 : 2, field: params.aggregation.field ?? "" } + ? { + type: params.aggregation.type === "SUM" ? 1 : 2, + field: params.aggregation.field ?? "", + } : undefined, groupBy: params.groupBy ? { field: params.groupBy } : undefined, limit: params.limit ?? 100, @@ -88,15 +104,21 @@ export async function callDataQuery( grpc: GrpcClient, apiKey: string, tableName: string, - params: { where?: FilterGroup; limit?: number; offset?: number; orderBy?: OrderByType[] }, + params: { + where?: FilterGroup; + limit?: number; + offset?: number; + orderBy?: OrderByType[]; + } ): Promise { const req: QueryRequest = { table: tableName, where: params.where ? buildDataGroup(params.where) : undefined, - orderBy: params.orderBy?.map((o) => ({ - field: o.field, - descending: o.descending, - })) ?? [], + orderBy: + params.orderBy?.map((o) => ({ + field: o.field, + descending: o.descending, + })) ?? [], limit: params.limit ?? 100, offset: params.offset ?? 0, }; diff --git a/packages/analytics/src/index.ts b/packages/analytics/src/index.ts index 563e194..0ed4485 100644 --- a/packages/analytics/src/index.ts +++ b/packages/analytics/src/index.ts @@ -5,8 +5,19 @@ export { FieldRef } from "./fieldRef.js"; export type { InferRow } from "./fieldRef.js"; export { - eq, neq, gt, gte, lt, lte, contains, - and, or, asc, desc, sum, count, + eq, + neq, + gt, + gte, + lt, + lte, + contains, + and, + or, + asc, + desc, + sum, + count, } from "./operators.js"; export type { @@ -17,8 +28,10 @@ export type { QueryOperator, } from "./operators.js"; -export type { EventRow, AggregationRow, EventListResult, EventAggResult } from "./query/types.js"; +export type { + EventRow, + AggregationRow, + EventListResult, + EventAggResult, +} from "./query/types.js"; export type { DataQueryResult } from "./data/types.js"; - - - diff --git a/packages/analytics/src/operators.ts b/packages/analytics/src/operators.ts index 36bf433..48d7eb9 100644 --- a/packages/analytics/src/operators.ts +++ b/packages/analytics/src/operators.ts @@ -1,6 +1,13 @@ import type { FieldRef } from "./fieldRef.js"; -export type QueryOperator = "EQ" | "GT" | "GTE" | "LT" | "LTE" | "NEQ" | "CONTAINS"; +export type QueryOperator = + | "EQ" + | "GT" + | "GTE" + | "LT" + | "LTE" + | "NEQ" + | "CONTAINS"; export interface FilterCondition { field: string; @@ -26,7 +33,11 @@ export interface Aggregation { // ---- comparison operators ---- -function condition(field: FieldRef, operator: QueryOperator, value: T): FilterCondition { +function condition( + field: FieldRef, + operator: QueryOperator, + value: T +): FilterCondition { return { field: field.name, operator, value: String(value) }; } @@ -97,6 +108,3 @@ export function sum(field: FieldRef): Aggregation { export function count(): Aggregation { return { type: "COUNT" }; } - - - diff --git a/packages/analytics/src/query/base.ts b/packages/analytics/src/query/base.ts index 28b03c7..e94924f 100644 --- a/packages/analytics/src/query/base.ts +++ b/packages/analytics/src/query/base.ts @@ -23,9 +23,13 @@ export abstract class BaseEventBuilder { public readonly fields: TFields, eventType: string, private grpc: GrpcClient, - private apiKey: string, + private apiKey: string ) { - this._eventTypeFilter = { field: "eventType", operator: "EQ", value: eventType }; + this._eventTypeFilter = { + field: "eventType", + operator: "EQ", + value: eventType, + }; } where(filter: FilterCondition | FilterGroup): this { @@ -77,10 +81,19 @@ export abstract class BaseEventBuilder { }; } - async execute(): Promise { + async execute(): Promise< + TAgg extends true ? EventAggResult : EventListResult + > { const params = this.buildParams(); const res = await callEventQuery(this.grpc, this.apiKey, params); - if (this._aggregation) return { rows: res.aggRows ?? [], total: res.total ?? 0 } as EventAggResult as TAgg extends true ? EventAggResult : never; - return { rows: res.rows ?? [], total: res.total ?? 0 } as EventListResult as TAgg extends true ? never : EventListResult; + if (this._aggregation) + return { + rows: res.aggRows ?? [], + total: res.total ?? 0, + } as EventAggResult as TAgg extends true ? EventAggResult : never; + return { + rows: res.rows ?? [], + total: res.total ?? 0, + } as EventListResult as TAgg extends true ? never : EventListResult; } } diff --git a/packages/scrawn/.fallowrc.json b/packages/scrawn/.fallowrc.json index 3ae8c25..bc46e81 100644 --- a/packages/scrawn/.fallowrc.json +++ b/packages/scrawn/.fallowrc.json @@ -1,6 +1,3 @@ { - "ignoreDependencies": [ - "grpc-tools", - "ts-protoc-gen" - ] + "ignoreDependencies": ["grpc-tools", "ts-protoc-gen"] } diff --git a/packages/scrawn/src/core/errors/index.ts b/packages/scrawn/src/core/errors/index.ts index 1ae2033..761ec62 100644 --- a/packages/scrawn/src/core/errors/index.ts +++ b/packages/scrawn/src/core/errors/index.ts @@ -292,13 +292,18 @@ export class ScrawnConfigError extends ScrawnError { * * @internal */ -export function convertGrpcError(error: unknown, requestId?: string): ScrawnError { - const message = error instanceof Error ? error.message : "Unknown error occurred"; - +export function convertGrpcError( + error: unknown, + requestId?: string +): ScrawnError { + const message = + error instanceof Error ? error.message : "Unknown error occurred"; + // Handle @grpc/grpc-js ServiceError if (error && typeof error === "object" && "code" in error) { const code = (error as { code: number }).code; - const details = "details" in error ? (error as { details: string }).details : undefined; + const details = + "details" in error ? (error as { details: string }).details : undefined; const fullMessage = details ? `${message}: ${details}` : message; // @grpc/grpc-js status codes: https://grpc.github.io/grpc/core/md_status_codes.html diff --git a/packages/scrawn/src/core/grpc/callContext.ts b/packages/scrawn/src/core/grpc/callContext.ts index de7356c..e746ad5 100644 --- a/packages/scrawn/src/core/grpc/callContext.ts +++ b/packages/scrawn/src/core/grpc/callContext.ts @@ -1,7 +1,9 @@ import * as grpc from "@grpc/grpc-js"; import { ScrawnLogger } from "../../utils/logger.js"; -export class GrpcCallContext { +export class GrpcCallContext< + C extends { new (...args: any[]): any; serviceName: string } +> { public readonly ClientConstructor: C; public readonly methodName: string; public readonly target: string; @@ -47,13 +49,17 @@ export class GrpcCallContext): grpc.Client; + new ( + address: string, + credentials: grpc.ChannelCredentials, + options?: Partial + ): grpc.Client; service: object; serviceName: string; }; @@ -36,7 +40,9 @@ export class GrpcClient { : grpc.credentials.createInsecure()); log.info( - `Initialized gRPC client for ${target} (${options?.secure ? "secure" : "insecure"})` + `Initialized gRPC client for ${target} (${ + options?.secure ? "secure" : "insecure" + })` ); } @@ -45,7 +51,13 @@ export class GrpcClient { method: string ): RequestBuilder { return new RequestBuilder( - new GrpcCallContext(this.target, this.credentials, client, method, "RequestBuilder") + new GrpcCallContext( + this.target, + this.credentials, + client, + method, + "RequestBuilder" + ) ); } @@ -54,7 +66,13 @@ export class GrpcClient { method: string ): StreamRequestBuilder { return new StreamRequestBuilder( - new GrpcCallContext(this.target, this.credentials, client, method, "StreamRequestBuilder") + new GrpcCallContext( + this.target, + this.credentials, + client, + method, + "StreamRequestBuilder" + ) ); } diff --git a/packages/scrawn/src/core/grpc/requestBuilder.ts b/packages/scrawn/src/core/grpc/requestBuilder.ts index 9731349..e0f4686 100644 --- a/packages/scrawn/src/core/grpc/requestBuilder.ts +++ b/packages/scrawn/src/core/grpc/requestBuilder.ts @@ -2,7 +2,9 @@ import * as grpc from "@grpc/grpc-js"; import type { GrpcCallOptions } from "./types.js"; import type { GrpcCallContext } from "./callContext.js"; -export class RequestBuilder { +export class RequestBuilder< + C extends { new (...args: any[]): any; serviceName: string } +> { private readonly ctx: GrpcCallContext; private payload: unknown; private hasPayload = false; @@ -37,7 +39,9 @@ export class RequestBuilder(): Promise { if (!this.hasPayload) { - throw new Error("Cannot make request without payload. Call addPayload() first."); + throw new Error( + "Cannot make request without payload. Call addPayload() first." + ); } this.ctx.logCallStart(); diff --git a/packages/scrawn/src/core/grpc/streamRequestBuilder.ts b/packages/scrawn/src/core/grpc/streamRequestBuilder.ts index 54b7e5c..bac9d2c 100644 --- a/packages/scrawn/src/core/grpc/streamRequestBuilder.ts +++ b/packages/scrawn/src/core/grpc/streamRequestBuilder.ts @@ -2,7 +2,9 @@ import * as grpc from "@grpc/grpc-js"; import type { GrpcCallOptions } from "./types.js"; import type { GrpcCallContext } from "./callContext.js"; -export class StreamRequestBuilder { +export class StreamRequestBuilder< + C extends { new (...args: any[]): any; serviceName: string } +> { private readonly ctx: GrpcCallContext; private hasSent = false; private options: GrpcCallOptions = {}; @@ -24,7 +26,9 @@ export class StreamRequestBuilder(items: AsyncIterable): Promise { + async stream( + items: AsyncIterable + ): Promise { if (this.hasSent) { throw new Error("Stream has already been sent for this request"); } diff --git a/packages/scrawn/src/core/pricing/builders.ts b/packages/scrawn/src/core/pricing/builders.ts index db6c054..d4c3606 100644 --- a/packages/scrawn/src/core/pricing/builders.ts +++ b/packages/scrawn/src/core/pricing/builders.ts @@ -31,7 +31,9 @@ import { validateExpr } from "./validate.js"; * Convert an ExprInput (PriceExpr or number) to a PriceExpr. * Numbers are wrapped as AmountExpr (cents). */ -function toExpr(input: ExprInput): PriceExpr { +function toExpr( + input: ExprInput +): PriceExpr { if (typeof input === "number") { return { kind: "amount", value: input } as const; } @@ -74,7 +76,9 @@ export function tag(name: T): TagExpr { * const sum = add(100, 200, tag('BONUS')); * ``` */ -export function add(...args: ExprInput[]): OpExpr { +export function add( + ...args: ExprInput[] +): OpExpr { const expr: OpExpr = { kind: "op", op: "ADD", @@ -98,7 +102,9 @@ export function add(...args: ExprInput[]): OpExpr< * const diff = sub(tag('TOTAL'), 50); * ``` */ -export function sub(...args: ExprInput[]): OpExpr { +export function sub( + ...args: ExprInput[] +): OpExpr { const expr: OpExpr = { kind: "op", op: "SUB", @@ -122,7 +128,9 @@ export function sub(...args: ExprInput[]): OpExpr< * const product = mul(tag('PER_TOKEN'), 100); * ``` */ -export function mul(...args: ExprInput[]): OpExpr { +export function mul( + ...args: ExprInput[] +): OpExpr { const expr: OpExpr = { kind: "op", op: "MUL", @@ -149,7 +157,9 @@ export function mul(...args: ExprInput[]): OpExpr< * const half = div(tag('TOTAL'), 2); * ``` */ -export function div(...args: ExprInput[]): OpExpr { +export function div( + ...args: ExprInput[] +): OpExpr { const expr: OpExpr = { kind: "op", op: "DIV", diff --git a/packages/scrawn/src/core/pricing/index.ts b/packages/scrawn/src/core/pricing/index.ts index 0b1c687..0c2bf22 100644 --- a/packages/scrawn/src/core/pricing/index.ts +++ b/packages/scrawn/src/core/pricing/index.ts @@ -37,7 +37,17 @@ export type { } from "./types.js"; // Export builder functions -export { tag, add, sub, mul, div, amount, inputTokens, outputTokens, expr } from "./builders.js"; +export { + tag, + add, + sub, + mul, + div, + amount, + inputTokens, + outputTokens, + expr, +} from "./builders.js"; // Export serialization export { serializeExpr, prettyPrintExpr } from "./serialize.js"; diff --git a/packages/scrawn/src/core/pricing/resolve.ts b/packages/scrawn/src/core/pricing/resolve.ts index 4bc9bfd..2304b80 100644 --- a/packages/scrawn/src/core/pricing/resolve.ts +++ b/packages/scrawn/src/core/pricing/resolve.ts @@ -38,14 +38,23 @@ export interface TokenContext { * // resolved is: mul(tag('INPUT_RATE'), 150) * ``` */ -export function resolveTokens(expr: PriceExpr, context: TokenContext): PriceExpr { +export function resolveTokens( + expr: PriceExpr, + context: TokenContext +): PriceExpr { switch (expr.kind) { case "inputTokens": { - const resolved: AmountExpr = { kind: "amount", value: context.inputTokens }; + const resolved: AmountExpr = { + kind: "amount", + value: context.inputTokens, + }; return resolved; } case "outputTokens": { - const resolved: AmountExpr = { kind: "amount", value: context.outputTokens }; + const resolved: AmountExpr = { + kind: "amount", + value: context.outputTokens, + }; return resolved; } case "op": { diff --git a/packages/scrawn/src/core/pricing/serialize.ts b/packages/scrawn/src/core/pricing/serialize.ts index 2189870..8c12b00 100644 --- a/packages/scrawn/src/core/pricing/serialize.ts +++ b/packages/scrawn/src/core/pricing/serialize.ts @@ -104,7 +104,10 @@ function serializeOp(expr: OpExpr): string { * // ) * ``` */ -export function prettyPrintExpr(expr: PriceExpr, indent: number = 2): string { +export function prettyPrintExpr( + expr: PriceExpr, + indent: number = 2 +): string { return prettyPrintInternal(expr, 0, indent); } diff --git a/packages/scrawn/src/core/pricing/types.ts b/packages/scrawn/src/core/pricing/types.ts index 9339c68..cb4bf96 100644 --- a/packages/scrawn/src/core/pricing/types.ts +++ b/packages/scrawn/src/core/pricing/types.ts @@ -133,4 +133,7 @@ export type PriceExpr = * * @typeParam TTag - The tag name type flowing through the expression tree */ -export type ExprInput = PriceExpr | ScrawnExpr | number; +export type ExprInput = + | PriceExpr + | ScrawnExpr + | number; diff --git a/packages/scrawn/src/core/pricing/validate.ts b/packages/scrawn/src/core/pricing/validate.ts index ce0a84d..bf21c24 100644 --- a/packages/scrawn/src/core/pricing/validate.ts +++ b/packages/scrawn/src/core/pricing/validate.ts @@ -122,7 +122,9 @@ function validateOp(expr: OpExpr): void { // Must have at least 2 arguments if (args.length < 2) { throw new PricingExpressionError( - `Operation ${op.toLowerCase()} requires at least 2 arguments, got: ${args.length}` + `Operation ${op.toLowerCase()} requires at least 2 arguments, got: ${ + args.length + }` ); } diff --git a/packages/scrawn/src/core/scrawn.ts b/packages/scrawn/src/core/scrawn.ts index 4714c5d..7e041e9 100644 --- a/packages/scrawn/src/core/scrawn.ts +++ b/packages/scrawn/src/core/scrawn.ts @@ -53,7 +53,12 @@ import { isScrawnError, isRetryableError, } from "./errors/index.js"; -import { serializeExpr, resolveTokens, prettyPrintExpr, tag as _tag } from "./pricing/index.js"; +import { + serializeExpr, + resolveTokens, + prettyPrintExpr, + tag as _tag, +} from "./pricing/index.js"; import { ScrawnConfig } from "../config.js"; import { randomUUID } from "node:crypto"; @@ -82,7 +87,10 @@ const log = new ScrawnLogger("Scrawn"); * // biller.basicUsageEventConsumer({ userId: 'u123', debitTag: 'UNKNOWN' }); // Type error! * ``` */ -export class Scrawn { +export class Scrawn< + TTags extends string = string, + TExprs extends string = string +> { /** Map of authentication method names to their implementations */ private authMethods = new Map>(); @@ -181,10 +189,10 @@ export class Scrawn - this.consumeEvent(validationResult.data, "api", "RAW", eventId, idempotencyKey); + this.consumeEvent( + validationResult.data, + "api", + "RAW", + eventId, + idempotencyKey + ); try { await attempt(); @@ -570,7 +584,9 @@ export class Scrawn( config: ScrawnInitConfig & { tags: TTags; expressions: TExprs } ): Scrawn; +export function createScrawn(config: ScrawnInitConfig): Scrawn; export function createScrawn( - config: ScrawnInitConfig -): Scrawn; -export function createScrawn( - config: ScrawnInitConfig & { tags?: readonly string[]; expressions?: readonly string[] } + config: ScrawnInitConfig & { + tags?: readonly string[]; + expressions?: readonly string[]; + } ): Scrawn { return new Scrawn({ apiKey: config.apiKey as AllCredentials["apiKey"], diff --git a/packages/scrawn/src/core/types/event.ts b/packages/scrawn/src/core/types/event.ts index 5cbe2be..191fb33 100644 --- a/packages/scrawn/src/core/types/event.ts +++ b/packages/scrawn/src/core/types/event.ts @@ -7,7 +7,14 @@ import { isValidExpr, containsTokenExpr } from "../pricing/validate.js"; * Valid expression kinds including token placeholders. * Used for AI token usage payloads where token placeholders are allowed. */ -const ALL_EXPR_KINDS = ["amount", "tag", "op", "inputTokens", "outputTokens", "exprRef"]; +const ALL_EXPR_KINDS = [ + "amount", + "tag", + "op", + "inputTokens", + "outputTokens", + "exprRef", +]; /** * Custom zod schema for PriceExpr validation (allows token placeholders). diff --git a/packages/scrawn/src/gen/auth/v1/auth.ts b/packages/scrawn/src/gen/auth/v1/auth.ts index e6a895c..f6b1946 100644 --- a/packages/scrawn/src/gen/auth/v1/auth.ts +++ b/packages/scrawn/src/gen/auth/v1/auth.ts @@ -40,7 +40,10 @@ function createBaseCreateAPIKeyRequest(): CreateAPIKeyRequest { } export const CreateAPIKeyRequest: MessageFns = { - encode(message: CreateAPIKeyRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: CreateAPIKeyRequest, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.name !== "") { writer.uint32(10).string(message.name); } @@ -50,8 +53,12 @@ export const CreateAPIKeyRequest: MessageFns = { return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): CreateAPIKeyRequest { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): CreateAPIKeyRequest { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseCreateAPIKeyRequest(); while (reader.pos < end) { @@ -85,7 +92,9 @@ export const CreateAPIKeyRequest: MessageFns = { fromJSON(object: any): CreateAPIKeyRequest { return { name: isSet(object.name) ? globalThis.String(object.name) : "", - expiresIn: isSet(object.expiresIn) ? globalThis.Number(object.expiresIn) : 0, + expiresIn: isSet(object.expiresIn) + ? globalThis.Number(object.expiresIn) + : 0, }; }, @@ -100,10 +109,14 @@ export const CreateAPIKeyRequest: MessageFns = { return obj; }, - create, I>>(base?: I): CreateAPIKeyRequest { + create, I>>( + base?: I + ): CreateAPIKeyRequest { return CreateAPIKeyRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): CreateAPIKeyRequest { + fromPartial, I>>( + object: I + ): CreateAPIKeyRequest { const message = createBaseCreateAPIKeyRequest(); message.name = object.name ?? ""; message.expiresIn = object.expiresIn ?? 0; @@ -116,7 +129,10 @@ function createBaseCreateAPIKeyResponse(): CreateAPIKeyResponse { } export const CreateAPIKeyResponse: MessageFns = { - encode(message: CreateAPIKeyResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: CreateAPIKeyResponse, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.apiKeyId !== "") { writer.uint32(10).string(message.apiKeyId); } @@ -135,8 +151,12 @@ export const CreateAPIKeyResponse: MessageFns = { return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): CreateAPIKeyResponse { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): CreateAPIKeyResponse { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseCreateAPIKeyResponse(); while (reader.pos < end) { @@ -193,11 +213,17 @@ export const CreateAPIKeyResponse: MessageFns = { fromJSON(object: any): CreateAPIKeyResponse { return { - apiKeyId: isSet(object.apiKeyId) ? globalThis.String(object.apiKeyId) : "", + apiKeyId: isSet(object.apiKeyId) + ? globalThis.String(object.apiKeyId) + : "", apiKey: isSet(object.apiKey) ? globalThis.String(object.apiKey) : "", name: isSet(object.name) ? globalThis.String(object.name) : "", - createdAt: isSet(object.createdAt) ? globalThis.String(object.createdAt) : "", - expiresAt: isSet(object.expiresAt) ? globalThis.String(object.expiresAt) : "", + createdAt: isSet(object.createdAt) + ? globalThis.String(object.createdAt) + : "", + expiresAt: isSet(object.expiresAt) + ? globalThis.String(object.expiresAt) + : "", }; }, @@ -221,10 +247,14 @@ export const CreateAPIKeyResponse: MessageFns = { return obj; }, - create, I>>(base?: I): CreateAPIKeyResponse { + create, I>>( + base?: I + ): CreateAPIKeyResponse { return CreateAPIKeyResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): CreateAPIKeyResponse { + fromPartial, I>>( + object: I + ): CreateAPIKeyResponse { const message = createBaseCreateAPIKeyResponse(); message.apiKeyId = object.apiKeyId ?? ""; message.apiKey = object.apiKey ?? ""; @@ -242,11 +272,14 @@ export const AuthServiceService = { path: "/auth.v1.AuthService/CreateAPIKey" as const, requestStream: false as const, responseStream: false as const, - requestSerialize: (value: CreateAPIKeyRequest): Buffer => Buffer.from(CreateAPIKeyRequest.encode(value).finish()), - requestDeserialize: (value: Buffer): CreateAPIKeyRequest => CreateAPIKeyRequest.decode(value), + requestSerialize: (value: CreateAPIKeyRequest): Buffer => + Buffer.from(CreateAPIKeyRequest.encode(value).finish()), + requestDeserialize: (value: Buffer): CreateAPIKeyRequest => + CreateAPIKeyRequest.decode(value), responseSerialize: (value: CreateAPIKeyResponse): Buffer => Buffer.from(CreateAPIKeyResponse.encode(value).finish()), - responseDeserialize: (value: Buffer): CreateAPIKeyResponse => CreateAPIKeyResponse.decode(value), + responseDeserialize: (value: Buffer): CreateAPIKeyResponse => + CreateAPIKeyResponse.decode(value), }, } as const; @@ -259,38 +292,68 @@ export interface AuthServiceClient extends Client { /** CreateAPIKey creates a new API key for the authenticated user */ createApiKey( request: CreateAPIKeyRequest, - callback: (error: ServiceError | null, response: CreateAPIKeyResponse) => void, + callback: ( + error: ServiceError | null, + response: CreateAPIKeyResponse + ) => void ): ClientUnaryCall; createApiKey( request: CreateAPIKeyRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: CreateAPIKeyResponse) => void, + callback: ( + error: ServiceError | null, + response: CreateAPIKeyResponse + ) => void ): ClientUnaryCall; createApiKey( request: CreateAPIKeyRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: CreateAPIKeyResponse) => void, + callback: ( + error: ServiceError | null, + response: CreateAPIKeyResponse + ) => void ): ClientUnaryCall; } -export const AuthServiceClient = makeGenericClientConstructor(AuthServiceService, "auth.v1.AuthService") as unknown as { - new (address: string, credentials: ChannelCredentials, options?: Partial): AuthServiceClient; +export const AuthServiceClient = makeGenericClientConstructor( + AuthServiceService, + "auth.v1.AuthService" +) as unknown as { + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial + ): AuthServiceClient; service: typeof AuthServiceService; serviceName: string; }; -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - -export type DeepPartial = T extends Builtin ? T - : T extends globalThis.Array ? globalThis.Array> - : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; + +export type DeepPartial = T extends Builtin + ? T + : T extends globalThis.Array + ? globalThis.Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function longToNumber(int64: { toString(): string }): number { const num = globalThis.Number(int64.toString()); diff --git a/packages/scrawn/src/gen/data/v1/data.ts b/packages/scrawn/src/gen/data/v1/data.ts index 2ec799a..85a5bde 100644 --- a/packages/scrawn/src/gen/data/v1/data.ts +++ b/packages/scrawn/src/gen/data/v1/data.ts @@ -424,7 +424,10 @@ function createBaseFilterCondition(): FilterCondition { } export const FilterCondition: MessageFns = { - encode(message: FilterCondition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: FilterCondition, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.field !== "") { writer.uint32(10).string(message.field); } @@ -438,7 +441,8 @@ export const FilterCondition: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): FilterCondition { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseFilterCondition(); while (reader.pos < end) { @@ -499,10 +503,14 @@ export const FilterCondition: MessageFns = { return obj; }, - create, I>>(base?: I): FilterCondition { + create, I>>( + base?: I + ): FilterCondition { return FilterCondition.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): FilterCondition { + fromPartial, I>>( + object: I + ): FilterCondition { const message = createBaseFilterCondition(); message.field = object.field ?? ""; message.operator = object.operator ?? 0; @@ -516,7 +524,10 @@ function createBaseFilterGroup(): FilterGroup { } export const FilterGroup: MessageFns = { - encode(message: FilterGroup, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: FilterGroup, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.logical !== 0) { writer.uint32(8).int32(message.logical); } @@ -530,7 +541,8 @@ export const FilterGroup: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): FilterGroup { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseFilterGroup(); while (reader.pos < end) { @@ -549,7 +561,9 @@ export const FilterGroup: MessageFns = { break; } - message.conditions.push(FilterCondition.decode(reader, reader.uint32())); + message.conditions.push( + FilterCondition.decode(reader, reader.uint32()) + ); continue; } case 3: { @@ -571,11 +585,15 @@ export const FilterGroup: MessageFns = { fromJSON(object: any): FilterGroup { return { - logical: isSet(object.logical) ? logicalOperatorFromJSON(object.logical) : 0, + logical: isSet(object.logical) + ? logicalOperatorFromJSON(object.logical) + : 0, conditions: globalThis.Array.isArray(object?.conditions) ? object.conditions.map((e: any) => FilterCondition.fromJSON(e)) : [], - groups: globalThis.Array.isArray(object?.groups) ? object.groups.map((e: any) => FilterGroup.fromJSON(e)) : [], + groups: globalThis.Array.isArray(object?.groups) + ? object.groups.map((e: any) => FilterGroup.fromJSON(e)) + : [], }; }, @@ -596,11 +614,15 @@ export const FilterGroup: MessageFns = { create, I>>(base?: I): FilterGroup { return FilterGroup.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): FilterGroup { + fromPartial, I>>( + object: I + ): FilterGroup { const message = createBaseFilterGroup(); message.logical = object.logical ?? 0; - message.conditions = object.conditions?.map((e) => FilterCondition.fromPartial(e)) || []; - message.groups = object.groups?.map((e) => FilterGroup.fromPartial(e)) || []; + message.conditions = + object.conditions?.map((e) => FilterCondition.fromPartial(e)) || []; + message.groups = + object.groups?.map((e) => FilterGroup.fromPartial(e)) || []; return message; }, }; @@ -610,7 +632,10 @@ function createBaseOrderBy(): OrderBy { } export const OrderBy: MessageFns = { - encode(message: OrderBy, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: OrderBy, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.field !== "") { writer.uint32(10).string(message.field); } @@ -621,7 +646,8 @@ export const OrderBy: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): OrderBy { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseOrderBy(); while (reader.pos < end) { @@ -655,7 +681,9 @@ export const OrderBy: MessageFns = { fromJSON(object: any): OrderBy { return { field: isSet(object.field) ? globalThis.String(object.field) : "", - descending: isSet(object.descending) ? globalThis.Boolean(object.descending) : false, + descending: isSet(object.descending) + ? globalThis.Boolean(object.descending) + : false, }; }, @@ -686,7 +714,10 @@ function createBaseQueryRequest(): QueryRequest { } export const QueryRequest: MessageFns = { - encode(message: QueryRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: QueryRequest, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.table !== "") { writer.uint32(10).string(message.table); } @@ -706,7 +737,8 @@ export const QueryRequest: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): QueryRequest { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseQueryRequest(); while (reader.pos < end) { @@ -764,7 +796,9 @@ export const QueryRequest: MessageFns = { fromJSON(object: any): QueryRequest { return { table: isSet(object.table) ? globalThis.String(object.table) : "", - where: isSet(object.where) ? FilterGroup.fromJSON(object.where) : undefined, + where: isSet(object.where) + ? FilterGroup.fromJSON(object.where) + : undefined, orderBy: globalThis.Array.isArray(object?.orderBy) ? object.orderBy.map((e: any) => OrderBy.fromJSON(e)) : globalThis.Array.isArray(object?.order_by) @@ -795,15 +829,20 @@ export const QueryRequest: MessageFns = { return obj; }, - create, I>>(base?: I): QueryRequest { + create, I>>( + base?: I + ): QueryRequest { return QueryRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): QueryRequest { + fromPartial, I>>( + object: I + ): QueryRequest { const message = createBaseQueryRequest(); message.table = object.table ?? ""; - message.where = (object.where !== undefined && object.where !== null) - ? FilterGroup.fromPartial(object.where) - : undefined; + message.where = + object.where !== undefined && object.where !== null + ? FilterGroup.fromPartial(object.where) + : undefined; message.orderBy = object.orderBy?.map((e) => OrderBy.fromPartial(e)) || []; message.limit = object.limit ?? 0; message.offset = object.offset ?? 0; @@ -816,7 +855,10 @@ function createBaseQueryResponse(): QueryResponse { } export const QueryResponse: MessageFns = { - encode(message: QueryResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: QueryResponse, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { for (const v of message.columns) { writer.uint32(10).string(v!); } @@ -830,7 +872,8 @@ export const QueryResponse: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): QueryResponse { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseQueryResponse(); while (reader.pos < end) { @@ -871,8 +914,12 @@ export const QueryResponse: MessageFns = { fromJSON(object: any): QueryResponse { return { - columns: globalThis.Array.isArray(object?.columns) ? object.columns.map((e: any) => globalThis.String(e)) : [], - rows: globalThis.Array.isArray(object?.rows) ? object.rows.map((e: any) => Row.fromJSON(e)) : [], + columns: globalThis.Array.isArray(object?.columns) + ? object.columns.map((e: any) => globalThis.String(e)) + : [], + rows: globalThis.Array.isArray(object?.rows) + ? object.rows.map((e: any) => Row.fromJSON(e)) + : [], total: isSet(object.total) ? globalThis.Number(object.total) : 0, }; }, @@ -891,10 +938,14 @@ export const QueryResponse: MessageFns = { return obj; }, - create, I>>(base?: I): QueryResponse { + create, I>>( + base?: I + ): QueryResponse { return QueryResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): QueryResponse { + fromPartial, I>>( + object: I + ): QueryResponse { const message = createBaseQueryResponse(); message.columns = object.columns?.map((e) => e) || []; message.rows = object.rows?.map((e) => Row.fromPartial(e)) || []; @@ -908,7 +959,10 @@ function createBaseRow(): Row { } export const Row: MessageFns = { - encode(message: Row, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: Row, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { for (const v of message.values) { writer.uint32(10).string(v!); } @@ -916,7 +970,8 @@ export const Row: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): Row { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseRow(); while (reader.pos < end) { @@ -941,7 +996,9 @@ export const Row: MessageFns = { fromJSON(object: any): Row { return { - values: globalThis.Array.isArray(object?.values) ? object.values.map((e: any) => globalThis.String(e)) : [], + values: globalThis.Array.isArray(object?.values) + ? object.values.map((e: any) => globalThis.String(e)) + : [], }; }, @@ -969,10 +1026,14 @@ export const DataQueryServiceService = { path: "/data.v1.DataQueryService/Query" as const, requestStream: false as const, responseStream: false as const, - requestSerialize: (value: QueryRequest): Buffer => Buffer.from(QueryRequest.encode(value).finish()), - requestDeserialize: (value: Buffer): QueryRequest => QueryRequest.decode(value), - responseSerialize: (value: QueryResponse): Buffer => Buffer.from(QueryResponse.encode(value).finish()), - responseDeserialize: (value: Buffer): QueryResponse => QueryResponse.decode(value), + requestSerialize: (value: QueryRequest): Buffer => + Buffer.from(QueryRequest.encode(value).finish()), + requestDeserialize: (value: Buffer): QueryRequest => + QueryRequest.decode(value), + responseSerialize: (value: QueryResponse): Buffer => + Buffer.from(QueryResponse.encode(value).finish()), + responseDeserialize: (value: Buffer): QueryResponse => + QueryResponse.decode(value), }, } as const; @@ -983,41 +1044,59 @@ export interface DataQueryServiceServer extends UntypedServiceImplementation { export interface DataQueryServiceClient extends Client { query( request: QueryRequest, - callback: (error: ServiceError | null, response: QueryResponse) => void, + callback: (error: ServiceError | null, response: QueryResponse) => void ): ClientUnaryCall; query( request: QueryRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: QueryResponse) => void, + callback: (error: ServiceError | null, response: QueryResponse) => void ): ClientUnaryCall; query( request: QueryRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: QueryResponse) => void, + callback: (error: ServiceError | null, response: QueryResponse) => void ): ClientUnaryCall; } export const DataQueryServiceClient = makeGenericClientConstructor( DataQueryServiceService, - "data.v1.DataQueryService", + "data.v1.DataQueryService" ) as unknown as { - new (address: string, credentials: ChannelCredentials, options?: Partial): DataQueryServiceClient; + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial + ): DataQueryServiceClient; service: typeof DataQueryServiceService; serviceName: string; }; -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - -export type DeepPartial = T extends Builtin ? T - : T extends globalThis.Array ? globalThis.Array> - : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; + +export type DeepPartial = T extends Builtin + ? T + : T extends globalThis.Array + ? globalThis.Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function isSet(value: any): boolean { return value !== null && value !== undefined; diff --git a/packages/scrawn/src/gen/event/v1/event.ts b/packages/scrawn/src/gen/event/v1/event.ts index 6aecbd3..5f59bdd 100644 --- a/packages/scrawn/src/gen/event/v1/event.ts +++ b/packages/scrawn/src/gen/event/v1/event.ts @@ -113,9 +113,7 @@ export interface RegisterEventRequest { export interface BasicUsage { basicUsageType: BasicUsageType; amount?: number | undefined; - tag?: - | string - | undefined; + tag?: string | undefined; /** Pricing expression (e.g., "add(mul(tag('PREMIUM'),3),250)") */ expr?: string | undefined; metadata?: string | undefined; @@ -140,23 +138,17 @@ export interface AITokenUsage { inputTokens: number; outputTokens: number; inputAmount?: number | undefined; - inputTag?: - | string - | undefined; + inputTag?: string | undefined; /** Pricing expression for input tokens */ inputExpr?: string | undefined; outputAmount?: number | undefined; - outputTag?: - | string - | undefined; + outputTag?: string | undefined; /** Pricing expression for output tokens */ outputExpr?: string | undefined; provider?: string | undefined; inputCacheTokens: number; inputCacheAmount?: number | undefined; - inputCacheTag?: - | string - | undefined; + inputCacheTag?: string | undefined; /** Pricing expression for input cache tokens */ inputCacheExpr?: string | undefined; metadata?: string | undefined; @@ -168,11 +160,21 @@ export interface StreamEventResponse { } function createBaseRegisterEventRequest(): RegisterEventRequest { - return { type: 0, userId: "", reportedTimestamp: 0, eventId: "", idempotencyKey: "", basicUsage: undefined }; + return { + type: 0, + userId: "", + reportedTimestamp: 0, + eventId: "", + idempotencyKey: "", + basicUsage: undefined, + }; } export const RegisterEventRequest: MessageFns = { - encode(message: RegisterEventRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: RegisterEventRequest, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.type !== 0) { writer.uint32(8).int32(message.type); } @@ -194,8 +196,12 @@ export const RegisterEventRequest: MessageFns = { return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): RegisterEventRequest { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): RegisterEventRequest { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseRegisterEventRequest(); while (reader.pos < end) { @@ -262,10 +268,16 @@ export const RegisterEventRequest: MessageFns = { return { 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, + 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, + idempotencyKey: isSet(object.idempotencyKey) + ? globalThis.String(object.idempotencyKey) + : "", + basicUsage: isSet(object.basicUsage) + ? BasicUsage.fromJSON(object.basicUsage) + : undefined, }; }, @@ -292,29 +304,43 @@ export const RegisterEventRequest: MessageFns = { return obj; }, - create, I>>(base?: I): RegisterEventRequest { + create, I>>( + base?: I + ): RegisterEventRequest { return RegisterEventRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): RegisterEventRequest { + fromPartial, I>>( + object: I + ): RegisterEventRequest { const message = createBaseRegisterEventRequest(); 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; + message.basicUsage = + object.basicUsage !== undefined && object.basicUsage !== null + ? BasicUsage.fromPartial(object.basicUsage) + : undefined; return message; }, }; function createBaseBasicUsage(): BasicUsage { - return { basicUsageType: 0, amount: undefined, tag: undefined, expr: undefined, metadata: undefined }; + return { + basicUsageType: 0, + amount: undefined, + tag: undefined, + expr: undefined, + metadata: undefined, + }; } export const BasicUsage: MessageFns = { - encode(message: BasicUsage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: BasicUsage, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.basicUsageType !== 0) { writer.uint32(8).int32(message.basicUsageType); } @@ -334,7 +360,8 @@ export const BasicUsage: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): BasicUsage { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseBasicUsage(); while (reader.pos < end) { @@ -391,11 +418,17 @@ export const BasicUsage: MessageFns = { fromJSON(object: any): BasicUsage { return { - basicUsageType: isSet(object.basicUsageType) ? basicUsageTypeFromJSON(object.basicUsageType) : 0, - amount: isSet(object.amount) ? globalThis.Number(object.amount) : undefined, + basicUsageType: isSet(object.basicUsageType) + ? basicUsageTypeFromJSON(object.basicUsageType) + : 0, + amount: isSet(object.amount) + ? globalThis.Number(object.amount) + : undefined, tag: isSet(object.tag) ? globalThis.String(object.tag) : undefined, expr: isSet(object.expr) ? globalThis.String(object.expr) : undefined, - metadata: isSet(object.metadata) ? globalThis.String(object.metadata) : undefined, + metadata: isSet(object.metadata) + ? globalThis.String(object.metadata) + : undefined, }; }, @@ -422,7 +455,9 @@ export const BasicUsage: MessageFns = { create, I>>(base?: I): BasicUsage { return BasicUsage.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): BasicUsage { + fromPartial, I>>( + object: I + ): BasicUsage { const message = createBaseBasicUsage(); message.basicUsageType = object.basicUsageType ?? 0; message.amount = object.amount ?? undefined; @@ -438,15 +473,22 @@ function createBaseRegisterEventResponse(): RegisterEventResponse { } export const RegisterEventResponse: MessageFns = { - encode(message: RegisterEventResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: RegisterEventResponse, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.random !== "") { writer.uint32(10).string(message.random); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): RegisterEventResponse { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): RegisterEventResponse { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseRegisterEventResponse(); while (reader.pos < end) { @@ -470,7 +512,9 @@ export const RegisterEventResponse: MessageFns = { }, fromJSON(object: any): RegisterEventResponse { - return { random: isSet(object.random) ? globalThis.String(object.random) : "" }; + return { + random: isSet(object.random) ? globalThis.String(object.random) : "", + }; }, toJSON(message: RegisterEventResponse): unknown { @@ -481,10 +525,14 @@ export const RegisterEventResponse: MessageFns = { return obj; }, - create, I>>(base?: I): RegisterEventResponse { + create, I>>( + base?: I + ): RegisterEventResponse { return RegisterEventResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): RegisterEventResponse { + fromPartial, I>>( + object: I + ): RegisterEventResponse { const message = createBaseRegisterEventResponse(); message.random = object.random ?? ""; return message; @@ -504,7 +552,10 @@ function createBaseStreamEventRequest(): StreamEventRequest { } export const StreamEventRequest: MessageFns = { - encode(message: StreamEventRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: StreamEventRequest, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.type !== 0) { writer.uint32(8).int32(message.type); } @@ -524,13 +575,20 @@ export const StreamEventRequest: MessageFns = { BasicUsage.encode(message.basicUsage, writer.uint32(34).fork()).join(); } if (message.aiTokenUsage !== undefined) { - AITokenUsage.encode(message.aiTokenUsage, writer.uint32(42).fork()).join(); + AITokenUsage.encode( + message.aiTokenUsage, + writer.uint32(42).fork() + ).join(); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): StreamEventRequest { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): StreamEventRequest { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseStreamEventRequest(); while (reader.pos < end) { @@ -605,11 +663,19 @@ export const StreamEventRequest: MessageFns = { return { 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, + 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, + 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, }; }, @@ -639,22 +705,28 @@ export const StreamEventRequest: MessageFns = { return obj; }, - create, I>>(base?: I): StreamEventRequest { + create, I>>( + base?: I + ): StreamEventRequest { return StreamEventRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): StreamEventRequest { + fromPartial, I>>( + object: I + ): StreamEventRequest { const message = createBaseStreamEventRequest(); 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; - message.aiTokenUsage = (object.aiTokenUsage !== undefined && object.aiTokenUsage !== null) - ? AITokenUsage.fromPartial(object.aiTokenUsage) - : undefined; + message.basicUsage = + object.basicUsage !== undefined && object.basicUsage !== null + ? BasicUsage.fromPartial(object.basicUsage) + : undefined; + message.aiTokenUsage = + object.aiTokenUsage !== undefined && object.aiTokenUsage !== null + ? AITokenUsage.fromPartial(object.aiTokenUsage) + : undefined; return message; }, }; @@ -680,7 +752,10 @@ function createBaseAITokenUsage(): AITokenUsage { } export const AITokenUsage: MessageFns = { - encode(message: AITokenUsage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: AITokenUsage, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.model !== "") { writer.uint32(10).string(message.model); } @@ -730,7 +805,8 @@ export const AITokenUsage: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): AITokenUsage { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseAITokenUsage(); while (reader.pos < end) { @@ -868,20 +944,48 @@ export const AITokenUsage: MessageFns = { fromJSON(object: any): AITokenUsage { return { model: isSet(object.model) ? globalThis.String(object.model) : "", - inputTokens: isSet(object.inputTokens) ? globalThis.Number(object.inputTokens) : 0, - outputTokens: isSet(object.outputTokens) ? globalThis.Number(object.outputTokens) : 0, - inputAmount: isSet(object.inputAmount) ? globalThis.Number(object.inputAmount) : undefined, - inputTag: isSet(object.inputTag) ? globalThis.String(object.inputTag) : undefined, - inputExpr: isSet(object.inputExpr) ? globalThis.String(object.inputExpr) : undefined, - outputAmount: isSet(object.outputAmount) ? globalThis.Number(object.outputAmount) : undefined, - outputTag: isSet(object.outputTag) ? globalThis.String(object.outputTag) : undefined, - outputExpr: isSet(object.outputExpr) ? globalThis.String(object.outputExpr) : undefined, - provider: isSet(object.provider) ? globalThis.String(object.provider) : undefined, - inputCacheTokens: isSet(object.inputCacheTokens) ? globalThis.Number(object.inputCacheTokens) : 0, - inputCacheAmount: isSet(object.inputCacheAmount) ? globalThis.Number(object.inputCacheAmount) : undefined, - inputCacheTag: isSet(object.inputCacheTag) ? globalThis.String(object.inputCacheTag) : undefined, - inputCacheExpr: isSet(object.inputCacheExpr) ? globalThis.String(object.inputCacheExpr) : undefined, - metadata: isSet(object.metadata) ? globalThis.String(object.metadata) : undefined, + inputTokens: isSet(object.inputTokens) + ? globalThis.Number(object.inputTokens) + : 0, + outputTokens: isSet(object.outputTokens) + ? globalThis.Number(object.outputTokens) + : 0, + inputAmount: isSet(object.inputAmount) + ? globalThis.Number(object.inputAmount) + : undefined, + inputTag: isSet(object.inputTag) + ? globalThis.String(object.inputTag) + : undefined, + inputExpr: isSet(object.inputExpr) + ? globalThis.String(object.inputExpr) + : undefined, + outputAmount: isSet(object.outputAmount) + ? globalThis.Number(object.outputAmount) + : undefined, + outputTag: isSet(object.outputTag) + ? globalThis.String(object.outputTag) + : undefined, + outputExpr: isSet(object.outputExpr) + ? globalThis.String(object.outputExpr) + : undefined, + provider: isSet(object.provider) + ? globalThis.String(object.provider) + : undefined, + inputCacheTokens: isSet(object.inputCacheTokens) + ? globalThis.Number(object.inputCacheTokens) + : 0, + inputCacheAmount: isSet(object.inputCacheAmount) + ? globalThis.Number(object.inputCacheAmount) + : undefined, + inputCacheTag: isSet(object.inputCacheTag) + ? globalThis.String(object.inputCacheTag) + : undefined, + inputCacheExpr: isSet(object.inputCacheExpr) + ? globalThis.String(object.inputCacheExpr) + : undefined, + metadata: isSet(object.metadata) + ? globalThis.String(object.metadata) + : undefined, }; }, @@ -935,10 +1039,14 @@ export const AITokenUsage: MessageFns = { return obj; }, - create, I>>(base?: I): AITokenUsage { + create, I>>( + base?: I + ): AITokenUsage { return AITokenUsage.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): AITokenUsage { + fromPartial, I>>( + object: I + ): AITokenUsage { const message = createBaseAITokenUsage(); message.model = object.model ?? ""; message.inputTokens = object.inputTokens ?? 0; @@ -964,7 +1072,10 @@ function createBaseStreamEventResponse(): StreamEventResponse { } export const StreamEventResponse: MessageFns = { - encode(message: StreamEventResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: StreamEventResponse, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.eventsProcessed !== 0) { writer.uint32(8).int32(message.eventsProcessed); } @@ -974,8 +1085,12 @@ export const StreamEventResponse: MessageFns = { return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): StreamEventResponse { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): StreamEventResponse { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseStreamEventResponse(); while (reader.pos < end) { @@ -1008,7 +1123,9 @@ export const StreamEventResponse: MessageFns = { fromJSON(object: any): StreamEventResponse { return { - eventsProcessed: isSet(object.eventsProcessed) ? globalThis.Number(object.eventsProcessed) : 0, + eventsProcessed: isSet(object.eventsProcessed) + ? globalThis.Number(object.eventsProcessed) + : 0, message: isSet(object.message) ? globalThis.String(object.message) : "", }; }, @@ -1024,10 +1141,14 @@ export const StreamEventResponse: MessageFns = { return obj; }, - create, I>>(base?: I): StreamEventResponse { + create, I>>( + base?: I + ): StreamEventResponse { return StreamEventResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): StreamEventResponse { + fromPartial, I>>( + object: I + ): StreamEventResponse { const message = createBaseStreamEventResponse(); message.eventsProcessed = object.eventsProcessed ?? 0; message.message = object.message ?? ""; @@ -1042,21 +1163,28 @@ export const EventServiceService = { path: "/event.v1.EventService/RegisterEvent" as const, requestStream: false as const, responseStream: false as const, - requestSerialize: (value: RegisterEventRequest): Buffer => Buffer.from(RegisterEventRequest.encode(value).finish()), - requestDeserialize: (value: Buffer): RegisterEventRequest => RegisterEventRequest.decode(value), + requestSerialize: (value: RegisterEventRequest): Buffer => + Buffer.from(RegisterEventRequest.encode(value).finish()), + requestDeserialize: (value: Buffer): RegisterEventRequest => + RegisterEventRequest.decode(value), responseSerialize: (value: RegisterEventResponse): Buffer => Buffer.from(RegisterEventResponse.encode(value).finish()), - responseDeserialize: (value: Buffer): RegisterEventResponse => RegisterEventResponse.decode(value), + responseDeserialize: (value: Buffer): RegisterEventResponse => + RegisterEventResponse.decode(value), }, /** StreamEvents streams events from client to server (e.g., AI token usage) */ streamEvents: { path: "/event.v1.EventService/StreamEvents" as const, requestStream: true as const, responseStream: false as const, - requestSerialize: (value: StreamEventRequest): Buffer => Buffer.from(StreamEventRequest.encode(value).finish()), - requestDeserialize: (value: Buffer): StreamEventRequest => StreamEventRequest.decode(value), - responseSerialize: (value: StreamEventResponse): Buffer => Buffer.from(StreamEventResponse.encode(value).finish()), - responseDeserialize: (value: Buffer): StreamEventResponse => StreamEventResponse.decode(value), + requestSerialize: (value: StreamEventRequest): Buffer => + Buffer.from(StreamEventRequest.encode(value).finish()), + requestDeserialize: (value: Buffer): StreamEventRequest => + StreamEventRequest.decode(value), + responseSerialize: (value: StreamEventResponse): Buffer => + Buffer.from(StreamEventResponse.encode(value).finish()), + responseDeserialize: (value: Buffer): StreamEventResponse => + StreamEventResponse.decode(value), }, } as const; @@ -1064,65 +1192,107 @@ export interface EventServiceServer extends UntypedServiceImplementation { /** RegisterEvent registers an event as being done by a user */ registerEvent: handleUnaryCall; /** StreamEvents streams events from client to server (e.g., AI token usage) */ - streamEvents: handleClientStreamingCall; + streamEvents: handleClientStreamingCall< + StreamEventRequest, + StreamEventResponse + >; } export interface EventServiceClient extends Client { /** RegisterEvent registers an event as being done by a user */ registerEvent( request: RegisterEventRequest, - callback: (error: ServiceError | null, response: RegisterEventResponse) => void, + callback: ( + error: ServiceError | null, + response: RegisterEventResponse + ) => void ): ClientUnaryCall; registerEvent( request: RegisterEventRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: RegisterEventResponse) => void, + callback: ( + error: ServiceError | null, + response: RegisterEventResponse + ) => void ): ClientUnaryCall; registerEvent( request: RegisterEventRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: RegisterEventResponse) => void, + callback: ( + error: ServiceError | null, + response: RegisterEventResponse + ) => void ): ClientUnaryCall; /** StreamEvents streams events from client to server (e.g., AI token usage) */ streamEvents( - callback: (error: ServiceError | null, response: StreamEventResponse) => void, + callback: ( + error: ServiceError | null, + response: StreamEventResponse + ) => void ): ClientWritableStream; streamEvents( metadata: Metadata, - callback: (error: ServiceError | null, response: StreamEventResponse) => void, + callback: ( + error: ServiceError | null, + response: StreamEventResponse + ) => void ): ClientWritableStream; streamEvents( options: Partial, - callback: (error: ServiceError | null, response: StreamEventResponse) => void, + callback: ( + error: ServiceError | null, + response: StreamEventResponse + ) => void ): ClientWritableStream; streamEvents( metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: StreamEventResponse) => void, + callback: ( + error: ServiceError | null, + response: StreamEventResponse + ) => void ): ClientWritableStream; } export const EventServiceClient = makeGenericClientConstructor( EventServiceService, - "event.v1.EventService", + "event.v1.EventService" ) as unknown as { - new (address: string, credentials: ChannelCredentials, options?: Partial): EventServiceClient; + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial + ): EventServiceClient; service: typeof EventServiceService; serviceName: string; }; -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - -export type DeepPartial = T extends Builtin ? T - : T extends globalThis.Array ? globalThis.Array> - : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; + +export type DeepPartial = T extends Builtin + ? T + : T extends globalThis.Array + ? globalThis.Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function isSet(value: any): boolean { return value !== null && value !== undefined; diff --git a/packages/scrawn/src/gen/payment/v1/payment.ts b/packages/scrawn/src/gen/payment/v1/payment.ts index fe935bb..9428117 100644 --- a/packages/scrawn/src/gen/payment/v1/payment.ts +++ b/packages/scrawn/src/gen/payment/v1/payment.ts @@ -33,117 +33,147 @@ function createBaseCreateCheckoutLinkRequest(): CreateCheckoutLinkRequest { return { userId: "" }; } -export const CreateCheckoutLinkRequest: MessageFns = { - encode(message: CreateCheckoutLinkRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.userId !== "") { - writer.uint32(10).string(message.userId); - } - return writer; - }, +export const CreateCheckoutLinkRequest: MessageFns = + { + encode( + message: CreateCheckoutLinkRequest, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { + if (message.userId !== "") { + writer.uint32(10).string(message.userId); + } + return writer; + }, - decode(input: BinaryReader | Uint8Array, length?: number): CreateCheckoutLinkRequest { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); - const end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseCreateCheckoutLinkRequest(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (tag !== 10) { - break; - } + decode( + input: BinaryReader | Uint8Array, + length?: number + ): CreateCheckoutLinkRequest { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCreateCheckoutLinkRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 10) { + break; + } - message.userId = reader.string(); - continue; + message.userId = reader.string(); + continue; + } } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skip(tag & 7); } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skip(tag & 7); - } - return message; - }, + return message; + }, - fromJSON(object: any): CreateCheckoutLinkRequest { - return { userId: isSet(object.userId) ? globalThis.String(object.userId) : "" }; - }, + fromJSON(object: any): CreateCheckoutLinkRequest { + return { + userId: isSet(object.userId) ? globalThis.String(object.userId) : "", + }; + }, - toJSON(message: CreateCheckoutLinkRequest): unknown { - const obj: any = {}; - if (message.userId !== "") { - obj.userId = message.userId; - } - return obj; - }, + toJSON(message: CreateCheckoutLinkRequest): unknown { + const obj: any = {}; + if (message.userId !== "") { + obj.userId = message.userId; + } + return obj; + }, - create, I>>(base?: I): CreateCheckoutLinkRequest { - return CreateCheckoutLinkRequest.fromPartial(base ?? ({} as any)); - }, - fromPartial, I>>(object: I): CreateCheckoutLinkRequest { - const message = createBaseCreateCheckoutLinkRequest(); - message.userId = object.userId ?? ""; - return message; - }, -}; + create, I>>( + base?: I + ): CreateCheckoutLinkRequest { + return CreateCheckoutLinkRequest.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>( + object: I + ): CreateCheckoutLinkRequest { + const message = createBaseCreateCheckoutLinkRequest(); + message.userId = object.userId ?? ""; + return message; + }, + }; function createBaseCreateCheckoutLinkResponse(): CreateCheckoutLinkResponse { return { checkoutLink: "" }; } -export const CreateCheckoutLinkResponse: MessageFns = { - encode(message: CreateCheckoutLinkResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.checkoutLink !== "") { - writer.uint32(10).string(message.checkoutLink); - } - return writer; - }, +export const CreateCheckoutLinkResponse: MessageFns = + { + encode( + message: CreateCheckoutLinkResponse, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { + if (message.checkoutLink !== "") { + writer.uint32(10).string(message.checkoutLink); + } + return writer; + }, - decode(input: BinaryReader | Uint8Array, length?: number): CreateCheckoutLinkResponse { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); - const end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseCreateCheckoutLinkResponse(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (tag !== 10) { - break; - } + decode( + input: BinaryReader | Uint8Array, + length?: number + ): CreateCheckoutLinkResponse { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCreateCheckoutLinkResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 10) { + break; + } - message.checkoutLink = reader.string(); - continue; + message.checkoutLink = reader.string(); + continue; + } } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skip(tag & 7); } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skip(tag & 7); - } - return message; - }, + return message; + }, - fromJSON(object: any): CreateCheckoutLinkResponse { - return { checkoutLink: isSet(object.checkoutLink) ? globalThis.String(object.checkoutLink) : "" }; - }, + fromJSON(object: any): CreateCheckoutLinkResponse { + return { + checkoutLink: isSet(object.checkoutLink) + ? globalThis.String(object.checkoutLink) + : "", + }; + }, - toJSON(message: CreateCheckoutLinkResponse): unknown { - const obj: any = {}; - if (message.checkoutLink !== "") { - obj.checkoutLink = message.checkoutLink; - } - return obj; - }, + toJSON(message: CreateCheckoutLinkResponse): unknown { + const obj: any = {}; + if (message.checkoutLink !== "") { + obj.checkoutLink = message.checkoutLink; + } + return obj; + }, - create, I>>(base?: I): CreateCheckoutLinkResponse { - return CreateCheckoutLinkResponse.fromPartial(base ?? ({} as any)); - }, - fromPartial, I>>(object: I): CreateCheckoutLinkResponse { - const message = createBaseCreateCheckoutLinkResponse(); - message.checkoutLink = object.checkoutLink ?? ""; - return message; - }, -}; + create, I>>( + base?: I + ): CreateCheckoutLinkResponse { + return CreateCheckoutLinkResponse.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>( + object: I + ): CreateCheckoutLinkResponse { + const message = createBaseCreateCheckoutLinkResponse(); + message.checkoutLink = object.checkoutLink ?? ""; + return message; + }, + }; export type PaymentServiceService = typeof PaymentServiceService; export const PaymentServiceService = { @@ -154,57 +184,89 @@ export const PaymentServiceService = { responseStream: false as const, requestSerialize: (value: CreateCheckoutLinkRequest): Buffer => Buffer.from(CreateCheckoutLinkRequest.encode(value).finish()), - requestDeserialize: (value: Buffer): CreateCheckoutLinkRequest => CreateCheckoutLinkRequest.decode(value), + requestDeserialize: (value: Buffer): CreateCheckoutLinkRequest => + CreateCheckoutLinkRequest.decode(value), responseSerialize: (value: CreateCheckoutLinkResponse): Buffer => Buffer.from(CreateCheckoutLinkResponse.encode(value).finish()), - responseDeserialize: (value: Buffer): CreateCheckoutLinkResponse => CreateCheckoutLinkResponse.decode(value), + responseDeserialize: (value: Buffer): CreateCheckoutLinkResponse => + CreateCheckoutLinkResponse.decode(value), }, } as const; export interface PaymentServiceServer extends UntypedServiceImplementation { /** CreateCheckoutLink creates a checkout link for the given user */ - createCheckoutLink: handleUnaryCall; + createCheckoutLink: handleUnaryCall< + CreateCheckoutLinkRequest, + CreateCheckoutLinkResponse + >; } export interface PaymentServiceClient extends Client { /** CreateCheckoutLink creates a checkout link for the given user */ createCheckoutLink( request: CreateCheckoutLinkRequest, - callback: (error: ServiceError | null, response: CreateCheckoutLinkResponse) => void, + callback: ( + error: ServiceError | null, + response: CreateCheckoutLinkResponse + ) => void ): ClientUnaryCall; createCheckoutLink( request: CreateCheckoutLinkRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: CreateCheckoutLinkResponse) => void, + callback: ( + error: ServiceError | null, + response: CreateCheckoutLinkResponse + ) => void ): ClientUnaryCall; createCheckoutLink( request: CreateCheckoutLinkRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: CreateCheckoutLinkResponse) => void, + callback: ( + error: ServiceError | null, + response: CreateCheckoutLinkResponse + ) => void ): ClientUnaryCall; } export const PaymentServiceClient = makeGenericClientConstructor( PaymentServiceService, - "payment.v1.PaymentService", + "payment.v1.PaymentService" ) as unknown as { - new (address: string, credentials: ChannelCredentials, options?: Partial): PaymentServiceClient; + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial + ): PaymentServiceClient; service: typeof PaymentServiceService; serviceName: string; }; -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; -export type DeepPartial = T extends Builtin ? T - : T extends globalThis.Array ? globalThis.Array> - : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +export type DeepPartial = T extends Builtin + ? T + : T extends globalThis.Array + ? globalThis.Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function isSet(value: any): boolean { return value !== null && value !== undefined; diff --git a/packages/scrawn/src/gen/query/v1/query.ts b/packages/scrawn/src/gen/query/v1/query.ts index b875fc5..743ff5e 100644 --- a/packages/scrawn/src/gen/query/v1/query.ts +++ b/packages/scrawn/src/gen/query/v1/query.ts @@ -475,7 +475,10 @@ function createBaseFilterCondition(): FilterCondition { } export const FilterCondition: MessageFns = { - encode(message: FilterCondition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: FilterCondition, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.field !== "") { writer.uint32(10).string(message.field); } @@ -489,7 +492,8 @@ export const FilterCondition: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): FilterCondition { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseFilterCondition(); while (reader.pos < end) { @@ -550,10 +554,14 @@ export const FilterCondition: MessageFns = { return obj; }, - create, I>>(base?: I): FilterCondition { + create, I>>( + base?: I + ): FilterCondition { return FilterCondition.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): FilterCondition { + fromPartial, I>>( + object: I + ): FilterCondition { const message = createBaseFilterCondition(); message.field = object.field ?? ""; message.operator = object.operator ?? 0; @@ -567,7 +575,10 @@ function createBaseFilterGroup(): FilterGroup { } export const FilterGroup: MessageFns = { - encode(message: FilterGroup, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: FilterGroup, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.logical !== 0) { writer.uint32(8).int32(message.logical); } @@ -581,7 +592,8 @@ export const FilterGroup: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): FilterGroup { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseFilterGroup(); while (reader.pos < end) { @@ -600,7 +612,9 @@ export const FilterGroup: MessageFns = { break; } - message.conditions.push(FilterCondition.decode(reader, reader.uint32())); + message.conditions.push( + FilterCondition.decode(reader, reader.uint32()) + ); continue; } case 3: { @@ -622,11 +636,15 @@ export const FilterGroup: MessageFns = { fromJSON(object: any): FilterGroup { return { - logical: isSet(object.logical) ? logicalOperatorFromJSON(object.logical) : 0, + logical: isSet(object.logical) + ? logicalOperatorFromJSON(object.logical) + : 0, conditions: globalThis.Array.isArray(object?.conditions) ? object.conditions.map((e: any) => FilterCondition.fromJSON(e)) : [], - groups: globalThis.Array.isArray(object?.groups) ? object.groups.map((e: any) => FilterGroup.fromJSON(e)) : [], + groups: globalThis.Array.isArray(object?.groups) + ? object.groups.map((e: any) => FilterGroup.fromJSON(e)) + : [], }; }, @@ -647,11 +665,15 @@ export const FilterGroup: MessageFns = { create, I>>(base?: I): FilterGroup { return FilterGroup.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): FilterGroup { + fromPartial, I>>( + object: I + ): FilterGroup { const message = createBaseFilterGroup(); message.logical = object.logical ?? 0; - message.conditions = object.conditions?.map((e) => FilterCondition.fromPartial(e)) || []; - message.groups = object.groups?.map((e) => FilterGroup.fromPartial(e)) || []; + message.conditions = + object.conditions?.map((e) => FilterCondition.fromPartial(e)) || []; + message.groups = + object.groups?.map((e) => FilterGroup.fromPartial(e)) || []; return message; }, }; @@ -661,7 +683,10 @@ function createBaseAggregation(): Aggregation { } export const Aggregation: MessageFns = { - encode(message: Aggregation, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: Aggregation, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.type !== 0) { writer.uint32(8).int32(message.type); } @@ -672,7 +697,8 @@ export const Aggregation: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): Aggregation { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseAggregation(); while (reader.pos < end) { @@ -724,7 +750,9 @@ export const Aggregation: MessageFns = { create, I>>(base?: I): Aggregation { return Aggregation.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): Aggregation { + fromPartial, I>>( + object: I + ): Aggregation { const message = createBaseAggregation(); message.type = object.type ?? 0; message.field = object.field ?? ""; @@ -737,7 +765,10 @@ function createBaseGroupBy(): GroupBy { } export const GroupBy: MessageFns = { - encode(message: GroupBy, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: GroupBy, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.field !== "") { writer.uint32(10).string(message.field); } @@ -745,7 +776,8 @@ export const GroupBy: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): GroupBy { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGroupBy(); while (reader.pos < end) { @@ -769,7 +801,9 @@ export const GroupBy: MessageFns = { }, fromJSON(object: any): GroupBy { - return { field: isSet(object.field) ? globalThis.String(object.field) : "" }; + return { + field: isSet(object.field) ? globalThis.String(object.field) : "", + }; }, toJSON(message: GroupBy): unknown { @@ -791,11 +825,20 @@ export const GroupBy: MessageFns = { }; function createBaseQueryEventsRequest(): QueryEventsRequest { - return { where: undefined, aggregation: undefined, groupBy: undefined, limit: 0, offset: 0 }; + return { + where: undefined, + aggregation: undefined, + groupBy: undefined, + limit: 0, + offset: 0, + }; } export const QueryEventsRequest: MessageFns = { - encode(message: QueryEventsRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: QueryEventsRequest, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.where !== undefined) { FilterGroup.encode(message.where, writer.uint32(10).fork()).join(); } @@ -814,8 +857,12 @@ export const QueryEventsRequest: MessageFns = { return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): QueryEventsRequest { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): QueryEventsRequest { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseQueryEventsRequest(); while (reader.pos < end) { @@ -872,8 +919,12 @@ export const QueryEventsRequest: MessageFns = { fromJSON(object: any): QueryEventsRequest { return { - where: isSet(object.where) ? FilterGroup.fromJSON(object.where) : undefined, - aggregation: isSet(object.aggregation) ? Aggregation.fromJSON(object.aggregation) : undefined, + where: isSet(object.where) + ? FilterGroup.fromJSON(object.where) + : undefined, + aggregation: isSet(object.aggregation) + ? Aggregation.fromJSON(object.aggregation) + : undefined, groupBy: isSet(object.groupBy) ? GroupBy.fromJSON(object.groupBy) : isSet(object.group_by) @@ -904,20 +955,27 @@ export const QueryEventsRequest: MessageFns = { return obj; }, - create, I>>(base?: I): QueryEventsRequest { + create, I>>( + base?: I + ): QueryEventsRequest { return QueryEventsRequest.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): QueryEventsRequest { + fromPartial, I>>( + object: I + ): QueryEventsRequest { const message = createBaseQueryEventsRequest(); - message.where = (object.where !== undefined && object.where !== null) - ? FilterGroup.fromPartial(object.where) - : undefined; - message.aggregation = (object.aggregation !== undefined && object.aggregation !== null) - ? Aggregation.fromPartial(object.aggregation) - : undefined; - message.groupBy = (object.groupBy !== undefined && object.groupBy !== null) - ? GroupBy.fromPartial(object.groupBy) - : undefined; + message.where = + object.where !== undefined && object.where !== null + ? FilterGroup.fromPartial(object.where) + : undefined; + message.aggregation = + object.aggregation !== undefined && object.aggregation !== null + ? Aggregation.fromPartial(object.aggregation) + : undefined; + message.groupBy = + object.groupBy !== undefined && object.groupBy !== null + ? GroupBy.fromPartial(object.groupBy) + : undefined; message.limit = object.limit ?? 0; message.offset = object.offset ?? 0; return message; @@ -946,7 +1004,10 @@ function createBaseEventRow(): EventRow { } export const EventRow: MessageFns = { - encode(message: EventRow, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: EventRow, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.eventId !== "") { writer.uint32(10).string(message.eventId); } @@ -999,7 +1060,8 @@ export const EventRow: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): EventRow { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseEventRow(); while (reader.pos < end) { @@ -1200,7 +1262,9 @@ export const EventRow: MessageFns = { : isSet(object.output_debit_amount) ? globalThis.Number(object.output_debit_amount) : undefined, - provider: isSet(object.provider) ? globalThis.String(object.provider) : undefined, + provider: isSet(object.provider) + ? globalThis.String(object.provider) + : undefined, inputCacheTokens: isSet(object.inputCacheTokens) ? globalThis.Number(object.inputCacheTokens) : isSet(object.input_cache_tokens) @@ -1211,7 +1275,9 @@ export const EventRow: MessageFns = { : isSet(object.input_cache_debit_amount) ? globalThis.Number(object.input_cache_debit_amount) : undefined, - metadata: isSet(object.metadata) ? globalThis.String(object.metadata) : undefined, + metadata: isSet(object.metadata) + ? globalThis.String(object.metadata) + : undefined, }; }, @@ -1298,7 +1364,10 @@ function createBaseAggregationRow(): AggregationRow { } export const AggregationRow: MessageFns = { - encode(message: AggregationRow, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: AggregationRow, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { if (message.groupValue !== undefined) { writer.uint32(10).string(message.groupValue); } @@ -1309,7 +1378,8 @@ export const AggregationRow: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): AggregationRow { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseAggregationRow(); while (reader.pos < end) { @@ -1366,10 +1436,14 @@ export const AggregationRow: MessageFns = { return obj; }, - create, I>>(base?: I): AggregationRow { + create, I>>( + base?: I + ): AggregationRow { return AggregationRow.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): AggregationRow { + fromPartial, I>>( + object: I + ): AggregationRow { const message = createBaseAggregationRow(); message.groupValue = object.groupValue ?? undefined; message.aggValue = object.aggValue ?? ""; @@ -1382,7 +1456,10 @@ function createBaseQueryEventsResponse(): QueryEventsResponse { } export const QueryEventsResponse: MessageFns = { - encode(message: QueryEventsResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + encode( + message: QueryEventsResponse, + writer: BinaryWriter = new BinaryWriter() + ): BinaryWriter { for (const v of message.rows) { EventRow.encode(v!, writer.uint32(10).fork()).join(); } @@ -1395,8 +1472,12 @@ export const QueryEventsResponse: MessageFns = { return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): QueryEventsResponse { - const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + decode( + input: BinaryReader | Uint8Array, + length?: number + ): QueryEventsResponse { + const reader = + input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseQueryEventsResponse(); while (reader.pos < end) { @@ -1437,7 +1518,9 @@ export const QueryEventsResponse: MessageFns = { fromJSON(object: any): QueryEventsResponse { return { - rows: globalThis.Array.isArray(object?.rows) ? object.rows.map((e: any) => EventRow.fromJSON(e)) : [], + rows: globalThis.Array.isArray(object?.rows) + ? object.rows.map((e: any) => EventRow.fromJSON(e)) + : [], aggRows: globalThis.Array.isArray(object?.aggRows) ? object.aggRows.map((e: any) => AggregationRow.fromJSON(e)) : globalThis.Array.isArray(object?.agg_rows) @@ -1461,13 +1544,18 @@ export const QueryEventsResponse: MessageFns = { return obj; }, - create, I>>(base?: I): QueryEventsResponse { + create, I>>( + base?: I + ): QueryEventsResponse { return QueryEventsResponse.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): QueryEventsResponse { + fromPartial, I>>( + object: I + ): QueryEventsResponse { const message = createBaseQueryEventsResponse(); message.rows = object.rows?.map((e) => EventRow.fromPartial(e)) || []; - message.aggRows = object.aggRows?.map((e) => AggregationRow.fromPartial(e)) || []; + message.aggRows = + object.aggRows?.map((e) => AggregationRow.fromPartial(e)) || []; message.total = object.total ?? 0; return message; }, @@ -1479,10 +1567,14 @@ export const QueryServiceService = { path: "/query.v1.QueryService/QueryEvents" as const, requestStream: false as const, responseStream: false as const, - requestSerialize: (value: QueryEventsRequest): Buffer => Buffer.from(QueryEventsRequest.encode(value).finish()), - requestDeserialize: (value: Buffer): QueryEventsRequest => QueryEventsRequest.decode(value), - responseSerialize: (value: QueryEventsResponse): Buffer => Buffer.from(QueryEventsResponse.encode(value).finish()), - responseDeserialize: (value: Buffer): QueryEventsResponse => QueryEventsResponse.decode(value), + requestSerialize: (value: QueryEventsRequest): Buffer => + Buffer.from(QueryEventsRequest.encode(value).finish()), + requestDeserialize: (value: Buffer): QueryEventsRequest => + QueryEventsRequest.decode(value), + responseSerialize: (value: QueryEventsResponse): Buffer => + Buffer.from(QueryEventsResponse.encode(value).finish()), + responseDeserialize: (value: Buffer): QueryEventsResponse => + QueryEventsResponse.decode(value), }, } as const; @@ -1493,41 +1585,68 @@ export interface QueryServiceServer extends UntypedServiceImplementation { export interface QueryServiceClient extends Client { queryEvents( request: QueryEventsRequest, - callback: (error: ServiceError | null, response: QueryEventsResponse) => void, + callback: ( + error: ServiceError | null, + response: QueryEventsResponse + ) => void ): ClientUnaryCall; queryEvents( request: QueryEventsRequest, metadata: Metadata, - callback: (error: ServiceError | null, response: QueryEventsResponse) => void, + callback: ( + error: ServiceError | null, + response: QueryEventsResponse + ) => void ): ClientUnaryCall; queryEvents( request: QueryEventsRequest, metadata: Metadata, options: Partial, - callback: (error: ServiceError | null, response: QueryEventsResponse) => void, + callback: ( + error: ServiceError | null, + response: QueryEventsResponse + ) => void ): ClientUnaryCall; } export const QueryServiceClient = makeGenericClientConstructor( QueryServiceService, - "query.v1.QueryService", + "query.v1.QueryService" ) as unknown as { - new (address: string, credentials: ChannelCredentials, options?: Partial): QueryServiceClient; + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial + ): QueryServiceClient; service: typeof QueryServiceService; serviceName: string; }; -type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; - -export type DeepPartial = T extends Builtin ? T - : T extends globalThis.Array ? globalThis.Array> - : T extends ReadonlyArray ? ReadonlyArray> - : T extends {} ? { [K in keyof T]?: DeepPartial } +type Builtin = + | Date + | Function + | Uint8Array + | string + | number + | boolean + | undefined; + +export type DeepPartial = T extends Builtin + ? T + : T extends globalThis.Array + ? globalThis.Array> + : T extends ReadonlyArray + ? ReadonlyArray> + : T extends {} + ? { [K in keyof T]?: DeepPartial } : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin ? P - : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; +export type Exact = P extends Builtin + ? P + : P & { [K in keyof P]: Exact } & { + [K in Exclude>]: never; + }; function longToNumber(int64: { toString(): string }): number { const num = globalThis.Number(int64.toString()); diff --git a/packages/scrawn/src/index.ts b/packages/scrawn/src/index.ts index 42a024d..ef994f3 100644 --- a/packages/scrawn/src/index.ts +++ b/packages/scrawn/src/index.ts @@ -15,21 +15,48 @@ export * from "./core/pricing/index.js"; export { matchPath } from "./utils/pathMatcher.js"; // Export generated types for advanced usage -export { EventServiceClient, EventType, BasicUsageType } from "./gen/event/v1/event.js"; +export { + EventServiceClient, + EventType, + BasicUsageType, +} from "./gen/event/v1/event.js"; export type { - StreamEventResponse, RegisterEventRequest, RegisterEventResponse, StreamEventRequest, - BasicUsage, AITokenUsage, + StreamEventResponse, + RegisterEventRequest, + RegisterEventResponse, + StreamEventRequest, + BasicUsage, + AITokenUsage, } from "./gen/event/v1/event.js"; -export type { CreateAPIKeyRequest, CreateAPIKeyResponse } from "./gen/auth/v1/auth.js"; -export { PaymentServiceClient, CreateCheckoutLinkRequest, CreateCheckoutLinkResponse } from "./gen/payment/v1/payment.js"; +export type { + CreateAPIKeyRequest, + CreateAPIKeyResponse, +} from "./gen/auth/v1/auth.js"; +export { + PaymentServiceClient, + CreateCheckoutLinkRequest, + CreateCheckoutLinkResponse, +} from "./gen/payment/v1/payment.js"; export { QueryServiceClient } from "./gen/query/v1/query.js"; export type { - QueryEventsRequest, QueryEventsResponse, EventRow, AggregationRow, - FilterCondition as QueryFilterCondition, FilterGroup as QueryFilterGroup, - Aggregation as QueryAggregation, GroupBy as QueryGroupBy, + QueryEventsRequest, + QueryEventsResponse, + EventRow, + AggregationRow, + FilterCondition as QueryFilterCondition, + FilterGroup as QueryFilterGroup, + Aggregation as QueryAggregation, + GroupBy as QueryGroupBy, } from "./gen/query/v1/query.js"; export { DataQueryServiceClient } from "./gen/data/v1/data.js"; -export type { QueryRequest, QueryResponse, Row, FilterCondition as DataFilterCondition, FilterGroup as DataFilterGroup, OrderBy as DataOrderBy } from "./gen/data/v1/data.js"; +export type { + QueryRequest, + QueryResponse, + Row, + FilterCondition as DataFilterCondition, + FilterGroup as DataFilterGroup, + OrderBy as DataOrderBy, +} from "./gen/data/v1/data.js"; // Export central configuration export { ScrawnConfig, scrawnConfig } from "./config.js"; diff --git a/packages/scrawn/src/utils/logger.ts b/packages/scrawn/src/utils/logger.ts index bf329db..8c3f283 100644 --- a/packages/scrawn/src/utils/logger.ts +++ b/packages/scrawn/src/utils/logger.ts @@ -24,7 +24,9 @@ export class ScrawnLogger { constructor(private context: string = "Scrawn") {} private log(level: LogLevel, message: string, ...args: any[]) { - const timestamp = `[${new Date().toLocaleTimeString("en-IN", { timeZone: "Asia/Kolkata" })}]`; + const timestamp = `[${new Date().toLocaleTimeString("en-IN", { + timeZone: "Asia/Kolkata", + })}]`; const prefix = `[${this.context}]`; let colorizedPrefix: string; diff --git a/packages/scrawn/tests/unit/grpc/requestBuilder.test.ts b/packages/scrawn/tests/unit/grpc/requestBuilder.test.ts index ba9c595..9c400fd 100644 --- a/packages/scrawn/tests/unit/grpc/requestBuilder.test.ts +++ b/packages/scrawn/tests/unit/grpc/requestBuilder.test.ts @@ -25,7 +25,10 @@ class FakePaymentClient { request: unknown, metadata: grpc.Metadata, _options: grpc.CallOptions, - callback: (error: grpc.ServiceError | null, response: FakePaymentResponse) => void + callback: ( + error: grpc.ServiceError | null, + response: FakePaymentResponse + ) => void ): void { FakePaymentClient.lastCall = { request, @@ -67,7 +70,9 @@ describe("RequestBuilder", () => { "RequestBuilder" ); - await expect(new RequestBuilder(ctx).request()).rejects.toThrow("addPayload"); + await expect(new RequestBuilder(ctx).request()).rejects.toThrow( + "addPayload" + ); }); it("prevents payload from being set twice", () => { diff --git a/packages/scrawn/tests/unit/scrawn/middleware.test.ts b/packages/scrawn/tests/unit/scrawn/middleware.test.ts index aeff533..969957d 100644 --- a/packages/scrawn/tests/unit/scrawn/middleware.test.ts +++ b/packages/scrawn/tests/unit/scrawn/middleware.test.ts @@ -1,6 +1,9 @@ import { afterEach, describe, expect, it, vi } from "vitest"; import { Scrawn } from "../../../src/core/scrawn.js"; -import { ScrawnError, ScrawnValidationError } from "../../../src/core/errors/index.js"; +import { + ScrawnError, + ScrawnValidationError, +} from "../../../src/core/errors/index.js"; const validKey = "scrn_live_1234567890abcdef1234567890abcdef"; @@ -12,7 +15,11 @@ const addPayloadMock = vi.fn(function (this: unknown, _payload: unknown) { return this; }); -const addMetadataMock = vi.fn(function (this: unknown, _key: string, _value: string) { +const addMetadataMock = vi.fn(function ( + this: unknown, + _key: string, + _value: string +) { return this; }); let requestError: Error | null = null; diff --git a/packages/scrawn/tests/unit/scrawn/scrawn.test.ts b/packages/scrawn/tests/unit/scrawn/scrawn.test.ts index 651e092..c0c105e 100644 --- a/packages/scrawn/tests/unit/scrawn/scrawn.test.ts +++ b/packages/scrawn/tests/unit/scrawn/scrawn.test.ts @@ -13,7 +13,11 @@ const addPayloadMock = vi.fn(function (this: unknown, payload: unknown) { requestMock(payload); return this; }); -const addMetadataMock = vi.fn(function (this: unknown, _key: string, _value: string) { +const addMetadataMock = vi.fn(function ( + this: unknown, + _key: string, + _value: string +) { return this; }); const unaryResponseMock = vi.fn(); diff --git a/packages/scrawn/tests/unit/types/aiTokenUsagePayload.test.ts b/packages/scrawn/tests/unit/types/aiTokenUsagePayload.test.ts index 64a27c8..cfda619 100644 --- a/packages/scrawn/tests/unit/types/aiTokenUsagePayload.test.ts +++ b/packages/scrawn/tests/unit/types/aiTokenUsagePayload.test.ts @@ -1,6 +1,12 @@ import { describe, expect, it } from "vitest"; import { AITokenUsagePayloadSchema } from "../../../src/core/types/event.js"; -import { mul, tag, add, inputTokens, outputTokens } from "../../../src/core/pricing/index.js"; +import { + mul, + tag, + add, + inputTokens, + outputTokens, +} from "../../../src/core/pricing/index.js"; describe("AITokenUsagePayloadSchema", () => { describe("valid payloads", () => { diff --git a/packages/scrawn/tests/unit/types/eventPayload.test.ts b/packages/scrawn/tests/unit/types/eventPayload.test.ts index 9e43cbf..7b64a4e 100644 --- a/packages/scrawn/tests/unit/types/eventPayload.test.ts +++ b/packages/scrawn/tests/unit/types/eventPayload.test.ts @@ -1,6 +1,12 @@ import { describe, expect, it } from "vitest"; import { EventPayloadSchema } from "../../../src/core/types/event.js"; -import { add, mul, tag, inputTokens, outputTokens } from "../../../src/core/pricing/index.js"; +import { + add, + mul, + tag, + inputTokens, + outputTokens, +} from "../../../src/core/pricing/index.js"; describe("EventPayloadSchema", () => { it("accepts payloads with debitAmount", () => { diff --git a/packages/scrawn/vitest.config.ts b/packages/scrawn/vitest.config.ts index 0428803..8fb6156 100644 --- a/packages/scrawn/vitest.config.ts +++ b/packages/scrawn/vitest.config.ts @@ -4,7 +4,10 @@ import path from "path"; export default defineConfig({ resolve: { alias: { - "@bufbuild/protobuf/wire": path.resolve(__dirname, "../../node_modules/@bufbuild/protobuf/dist/esm/wire/index.js"), + "@bufbuild/protobuf/wire": path.resolve( + __dirname, + "../../node_modules/@bufbuild/protobuf/dist/esm/wire/index.js" + ), }, }, test: {