batchwork 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/batch.d.ts +27 -0
  4. package/dist/batch.d.ts.map +1 -0
  5. package/dist/body.d.ts +18 -0
  6. package/dist/body.d.ts.map +1 -0
  7. package/dist/chunk-ab2d71gk.js +325 -0
  8. package/dist/chunk-ab2d71gk.js.map +12 -0
  9. package/dist/chunk-kv3847wy.js +1048 -0
  10. package/dist/chunk-kv3847wy.js.map +24 -0
  11. package/dist/chunk-v0bahtg2.js +7 -0
  12. package/dist/chunk-v0bahtg2.js.map +9 -0
  13. package/dist/chunk-zp2cxkyb.js +226 -0
  14. package/dist/chunk-zp2cxkyb.js.map +13 -0
  15. package/dist/errors.d.ts +16 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/http.d.ts +5 -0
  18. package/dist/http.d.ts.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +30 -0
  22. package/dist/index.js.map +9 -0
  23. package/dist/job.d.ts +31 -0
  24. package/dist/job.d.ts.map +1 -0
  25. package/dist/jsonl.d.ts +17 -0
  26. package/dist/jsonl.d.ts.map +1 -0
  27. package/dist/model.d.ts +32 -0
  28. package/dist/model.d.ts.map +1 -0
  29. package/dist/next/index.d.ts +59 -0
  30. package/dist/next/index.d.ts.map +1 -0
  31. package/dist/next/index.js +61 -0
  32. package/dist/next/index.js.map +10 -0
  33. package/dist/postgres/batch-store.d.ts +19 -0
  34. package/dist/postgres/batch-store.d.ts.map +1 -0
  35. package/dist/postgres/index.d.ts +6 -0
  36. package/dist/postgres/index.d.ts.map +1 -0
  37. package/dist/postgres/index.js +101 -0
  38. package/dist/postgres/index.js.map +12 -0
  39. package/dist/postgres/migrate.d.ts +15 -0
  40. package/dist/postgres/migrate.d.ts.map +1 -0
  41. package/dist/postgres/types.d.ts +26 -0
  42. package/dist/postgres/types.d.ts.map +1 -0
  43. package/dist/providers/adapter.d.ts +24 -0
  44. package/dist/providers/adapter.d.ts.map +1 -0
  45. package/dist/providers/anthropic.d.ts +3 -0
  46. package/dist/providers/anthropic.d.ts.map +1 -0
  47. package/dist/providers/google.d.ts +8 -0
  48. package/dist/providers/google.d.ts.map +1 -0
  49. package/dist/providers/groq.d.ts +8 -0
  50. package/dist/providers/groq.d.ts.map +1 -0
  51. package/dist/providers/index.d.ts +5 -0
  52. package/dist/providers/index.d.ts.map +1 -0
  53. package/dist/providers/mistral.d.ts +8 -0
  54. package/dist/providers/mistral.d.ts.map +1 -0
  55. package/dist/providers/openai-compatible.d.ts +41 -0
  56. package/dist/providers/openai-compatible.d.ts.map +1 -0
  57. package/dist/providers/openai.d.ts +7 -0
  58. package/dist/providers/openai.d.ts.map +1 -0
  59. package/dist/providers/shared.d.ts +23 -0
  60. package/dist/providers/shared.d.ts.map +1 -0
  61. package/dist/providers/together.d.ts +8 -0
  62. package/dist/providers/together.d.ts.map +1 -0
  63. package/dist/providers/xai.d.ts +8 -0
  64. package/dist/providers/xai.d.ts.map +1 -0
  65. package/dist/redis/batch-store.d.ts +15 -0
  66. package/dist/redis/batch-store.d.ts.map +1 -0
  67. package/dist/redis/index.d.ts +4 -0
  68. package/dist/redis/index.d.ts.map +1 -0
  69. package/dist/redis/index.js +55 -0
  70. package/dist/redis/index.js.map +11 -0
  71. package/dist/redis/types.d.ts +19 -0
  72. package/dist/redis/types.d.ts.map +1 -0
  73. package/dist/server/events.d.ts +5 -0
  74. package/dist/server/events.d.ts.map +1 -0
  75. package/dist/server/index.d.ts +7 -0
  76. package/dist/server/index.d.ts.map +1 -0
  77. package/dist/server/index.js +19 -0
  78. package/dist/server/index.js.map +9 -0
  79. package/dist/server/poller.d.ts +60 -0
  80. package/dist/server/poller.d.ts.map +1 -0
  81. package/dist/server/signing.d.ts +20 -0
  82. package/dist/server/signing.d.ts.map +1 -0
  83. package/dist/server/store.d.ts +4 -0
  84. package/dist/server/store.d.ts.map +1 -0
  85. package/dist/server/types.d.ts +37 -0
  86. package/dist/server/types.d.ts.map +1 -0
  87. package/dist/types.d.ts +118 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/util.d.ts +10 -0
  90. package/dist/util.d.ts.map +1 -0
  91. package/package.json +119 -7
@@ -0,0 +1,8 @@
1
+ import type { BatchAdapter } from "./adapter";
2
+ /**
3
+ * xAI (Grok) batch adapter. Uses xAI's OpenAI-compatible file-upload path
4
+ * (`/v1/files` + `/v1/batches` with `input_file_id`), but its status, paginated
5
+ * `/results`, and `:cancel` shapes are proprietary.
6
+ */
7
+ export declare const xaiAdapter: BatchAdapter;
8
+ //# sourceMappingURL=xai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.d.ts","sourceRoot":"","sources":["../../src/providers/xai.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,WAAW,CAAC;AAyK3D;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,YAMxB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { BatchStore } from "../server/types";
2
+ import type { RedisStoreOptions } from "./types";
3
+ /** Options for {@link createRedisStore}. */
4
+ export type RedisBatchStoreOptions = RedisStoreOptions;
5
+ /**
6
+ * A Redis-backed {@link BatchStore} for the poller, over `@upstash/redis`. Each
7
+ * tracked batch is a JSON value at `{prefix}:batch:{id}`, with a set index at
8
+ * `{prefix}:batches` so `list` can enumerate them.
9
+ *
10
+ * @example
11
+ * import { Redis } from "@upstash/redis";
12
+ * const store = createRedisStore({ redis: Redis.fromEnv() });
13
+ */
14
+ export declare const createRedisStore: (options: RedisBatchStoreOptions) => BatchStore;
15
+ //# sourceMappingURL=batch-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-store.d.ts","sourceRoot":"","sources":["../../src/redis/batch-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,4CAA4C;AAC5C,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CAAC;AAEvD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,YAClB,sBAAsB,KAC9B,UAsCF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createRedisStore } from "./batch-store";
2
+ export type { RedisBatchStoreOptions } from "./batch-store";
3
+ export { DEFAULT_PREFIX, type RedisClient, type RedisStoreOptions, } from "./types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,55 @@
1
+ import"../chunk-v0bahtg2.js";
2
+
3
+ // src/redis/types.ts
4
+ var DEFAULT_PREFIX = "batchwork";
5
+ var coerce = (value) => {
6
+ if (value === null || value === undefined) {
7
+ return null;
8
+ }
9
+ return typeof value === "string" ? JSON.parse(value) : value;
10
+ };
11
+
12
+ // src/redis/batch-store.ts
13
+ var createRedisStore = (options) => {
14
+ const { redis } = options;
15
+ const prefix = options.prefix ?? DEFAULT_PREFIX;
16
+ const batchKey = (id) => `${prefix}:batch:${id}`;
17
+ const indexKey = `${prefix}:batches`;
18
+ return {
19
+ delete: async (id) => {
20
+ await redis.del(batchKey(id));
21
+ await redis.srem(indexKey, id);
22
+ },
23
+ get: async (id) => coerce(await redis.get(batchKey(id))),
24
+ list: async (filter) => {
25
+ const ids = await redis.smembers(indexKey);
26
+ if (ids.length === 0) {
27
+ return [];
28
+ }
29
+ const raws = await redis.mget(...ids.map(batchKey));
30
+ const records = [];
31
+ for (const raw of raws) {
32
+ const record = coerce(raw);
33
+ if (record) {
34
+ records.push(record);
35
+ }
36
+ }
37
+ if (filter?.delivered === undefined) {
38
+ return records;
39
+ }
40
+ const { delivered } = filter;
41
+ return records.filter((record) => record.deliveredAt !== undefined === delivered);
42
+ },
43
+ set: async (record) => {
44
+ await redis.set(batchKey(record.id), JSON.stringify(record));
45
+ await redis.sadd(indexKey, record.id);
46
+ }
47
+ };
48
+ };
49
+ export {
50
+ createRedisStore,
51
+ DEFAULT_PREFIX
52
+ };
53
+
54
+ //# debugId=80E91990D446837F64756E2164756E21
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/redis/types.ts", "../src/redis/batch-store.ts"],
4
+ "sourcesContent": [
5
+ "import type { Redis } from \"@upstash/redis\";\n\n/** The Upstash Redis client batchwork's adapters drive. */\nexport type RedisClient = Redis;\n\n/** Options for the Redis-backed batch store. */\nexport interface RedisStoreOptions {\n /** A connected `@upstash/redis` client. */\n redis: Redis;\n /** Key namespace, so one Redis can back many apps. Defaults to `batchwork`. */\n prefix?: string;\n}\n\nexport const DEFAULT_PREFIX = \"batchwork\";\n\n/**\n * Read a stored value back into a record. `@upstash/redis` may or may not\n * auto-deserialize depending on the client's config, and values returned from\n * Lua (`eval`) are always raw strings — so tolerate both an object and a JSON\n * string, and treat a missing key as `null`.\n */\nexport const coerce = <T>(value: unknown): T | null => {\n if (value === null || value === undefined) {\n return null;\n }\n return (typeof value === \"string\" ? JSON.parse(value) : value) as T;\n};\n",
6
+ "import type { BatchStore, TrackedBatch } from \"../server/types\";\nimport { coerce, DEFAULT_PREFIX } from \"./types\";\nimport type { RedisStoreOptions } from \"./types\";\n\n/** Options for {@link createRedisStore}. */\nexport type RedisBatchStoreOptions = RedisStoreOptions;\n\n/**\n * A Redis-backed {@link BatchStore} for the poller, over `@upstash/redis`. Each\n * tracked batch is a JSON value at `{prefix}:batch:{id}`, with a set index at\n * `{prefix}:batches` so `list` can enumerate them.\n *\n * @example\n * import { Redis } from \"@upstash/redis\";\n * const store = createRedisStore({ redis: Redis.fromEnv() });\n */\nexport const createRedisStore = (\n options: RedisBatchStoreOptions\n): BatchStore => {\n const { redis } = options;\n const prefix = options.prefix ?? DEFAULT_PREFIX;\n const batchKey = (id: string): string => `${prefix}:batch:${id}`;\n const indexKey = `${prefix}:batches`;\n\n return {\n delete: async (id) => {\n await redis.del(batchKey(id));\n await redis.srem(indexKey, id);\n },\n get: async (id) => coerce<TrackedBatch>(await redis.get(batchKey(id))),\n list: async (filter) => {\n const ids = await redis.smembers(indexKey);\n if (ids.length === 0) {\n return [];\n }\n const raws = await redis.mget<unknown[]>(...ids.map(batchKey));\n const records: TrackedBatch[] = [];\n for (const raw of raws) {\n const record = coerce<TrackedBatch>(raw);\n if (record) {\n records.push(record);\n }\n }\n if (filter?.delivered === undefined) {\n return records;\n }\n const { delivered } = filter;\n return records.filter(\n (record) => (record.deliveredAt !== undefined) === delivered\n );\n },\n set: async (record) => {\n await redis.set(batchKey(record.id), JSON.stringify(record));\n await redis.sadd(indexKey, record.id);\n },\n };\n};\n"
7
+ ],
8
+ "mappings": ";;;AAaO,IAAM,iBAAiB;AAQvB,IAAM,SAAS,CAAI,UAA6B;AAAA,EACrD,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC,OAAO;AAAA,EACT;AAAA,EACA,OAAQ,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAAA;;;ACTnD,IAAM,mBAAmB,CAC9B,YACe;AAAA,EACf,QAAQ,UAAU;AAAA,EAClB,MAAM,SAAS,QAAQ,UAAU;AAAA,EACjC,MAAM,WAAW,CAAC,OAAuB,GAAG,gBAAgB;AAAA,EAC5D,MAAM,WAAW,GAAG;AAAA,EAEpB,OAAO;AAAA,IACL,QAAQ,OAAO,OAAO;AAAA,MACpB,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;AAAA,MAC5B,MAAM,MAAM,KAAK,UAAU,EAAE;AAAA;AAAA,IAE/B,KAAK,OAAO,OAAO,OAAqB,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;AAAA,IACrE,MAAM,OAAO,WAAW;AAAA,MACtB,MAAM,MAAM,MAAM,MAAM,SAAS,QAAQ;AAAA,MACzC,IAAI,IAAI,WAAW,GAAG;AAAA,QACpB,OAAO,CAAC;AAAA,MACV;AAAA,MACA,MAAM,OAAO,MAAM,MAAM,KAAgB,GAAG,IAAI,IAAI,QAAQ,CAAC;AAAA,MAC7D,MAAM,UAA0B,CAAC;AAAA,MACjC,WAAW,OAAO,MAAM;AAAA,QACtB,MAAM,SAAS,OAAqB,GAAG;AAAA,QACvC,IAAI,QAAQ;AAAA,UACV,QAAQ,KAAK,MAAM;AAAA,QACrB;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,cAAc,WAAW;AAAA,QACnC,OAAO;AAAA,MACT;AAAA,MACA,QAAQ,cAAc;AAAA,MACtB,OAAO,QAAQ,OACb,CAAC,WAAY,OAAO,gBAAgB,cAAe,SACrD;AAAA;AAAA,IAEF,KAAK,OAAO,WAAW;AAAA,MACrB,MAAM,MAAM,IAAI,SAAS,OAAO,EAAE,GAAG,KAAK,UAAU,MAAM,CAAC;AAAA,MAC3D,MAAM,MAAM,KAAK,UAAU,OAAO,EAAE;AAAA;AAAA,EAExC;AAAA;",
9
+ "debugId": "80E91990D446837F64756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,19 @@
1
+ import type { Redis } from "@upstash/redis";
2
+ /** The Upstash Redis client batchwork's adapters drive. */
3
+ export type RedisClient = Redis;
4
+ /** Options for the Redis-backed batch store. */
5
+ export interface RedisStoreOptions {
6
+ /** A connected `@upstash/redis` client. */
7
+ redis: Redis;
8
+ /** Key namespace, so one Redis can back many apps. Defaults to `batchwork`. */
9
+ prefix?: string;
10
+ }
11
+ export declare const DEFAULT_PREFIX = "batchwork";
12
+ /**
13
+ * Read a stored value back into a record. `@upstash/redis` may or may not
14
+ * auto-deserialize depending on the client's config, and values returned from
15
+ * Lua (`eval`) are always raw strings — so tolerate both an object and a JSON
16
+ * string, and treat a missing key as `null`.
17
+ */
18
+ export declare const coerce: <T>(value: unknown) => T | null;
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/redis/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC;AAEhC,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,KAAK,EAAE,KAAK,CAAC;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,cAAc,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,OAAO,KAAG,CAAC,GAAG,IAK9C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { BatchProvider, BatchSnapshot } from "../types";
2
+ import type { BatchWebhookEvent } from "./types";
3
+ /** Map a terminal snapshot to the unified webhook event batchwork delivers. */
4
+ export declare const toEvent: (provider: BatchProvider, snapshot: BatchSnapshot) => BatchWebhookEvent;
5
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/server/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAe,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAyB,MAAM,SAAS,CAAC;AASxE,+EAA+E;AAC/E,eAAO,MAAM,OAAO,aACR,aAAa,YACb,aAAa,KACtB,iBAOD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { createBatchPoller } from "./poller";
2
+ export type { BatchPoller, BatchPollerOptions, CompletionSink, CredentialResolver, OpenAIWebhookOptions, TickResult, TrackOptions, TrackTarget, } from "./poller";
3
+ export { signWebhook, verifyBatchWebhook, verifyWebhook } from "./signing";
4
+ export type { VerifiedWebhook } from "./signing";
5
+ export { createMemoryStore } from "./store";
6
+ export type { BatchStore, BatchWebhookEvent, BatchWebhookEventType, TrackedBatch, } from "./types";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,GACb,MAAM,SAAS,CAAC"}
@@ -0,0 +1,19 @@
1
+ import {
2
+ createBatchPoller,
3
+ createMemoryStore,
4
+ signWebhook,
5
+ verifyBatchWebhook,
6
+ verifyWebhook
7
+ } from "../chunk-zp2cxkyb.js";
8
+ import"../chunk-kv3847wy.js";
9
+ import"../chunk-v0bahtg2.js";
10
+ export {
11
+ verifyWebhook,
12
+ verifyBatchWebhook,
13
+ signWebhook,
14
+ createMemoryStore,
15
+ createBatchPoller
16
+ };
17
+
18
+ //# debugId=C585C9F747001A8C64756E2164756E21
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "C585C9F747001A8C64756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,60 @@
1
+ import type { BatchProvider, BatchSnapshot, BatchStatus, ProviderCredentials } from "../types";
2
+ import type { BatchStore, TrackedBatch } from "./types";
3
+ /** Credentials for polling: a fixed config, or one resolved per provider. */
4
+ export type CredentialResolver = ProviderCredentials | ((provider: BatchProvider) => ProviderCredentials);
5
+ /**
6
+ * Handles a batch reaching a terminal status. Replaces the default signed
7
+ * webhook delivery — e.g. to invoke a callback instead (see `batchwork/next`).
8
+ */
9
+ export type CompletionSink = (record: TrackedBatch, snapshot: BatchSnapshot) => Promise<void>;
10
+ export interface BatchPollerOptions {
11
+ store: BatchStore;
12
+ /** Falls back to provider env vars (e.g. `OPENAI_API_KEY`) when omitted. */
13
+ credentials?: CredentialResolver;
14
+ /** Replaces signed-webhook delivery when a batch finishes. */
15
+ onComplete?: CompletionSink;
16
+ /**
17
+ * Called when processing a single batch throws during `tick`. When provided,
18
+ * the tick reports the error and continues to the next batch; when omitted,
19
+ * the error propagates out of `tick`.
20
+ */
21
+ onError?: (record: TrackedBatch, error: unknown) => void;
22
+ }
23
+ export interface TrackTarget {
24
+ id: string;
25
+ provider: BatchProvider;
26
+ status?: BatchStatus;
27
+ }
28
+ export interface TrackOptions {
29
+ /** Where to POST the completion webhook. Omit for callback-based delivery. */
30
+ webhookUrl?: string;
31
+ /** Signs the outbound webhook (Standard Webhooks HMAC) when provided. */
32
+ secret?: string;
33
+ }
34
+ export interface TickResult {
35
+ checked: number;
36
+ delivered: string[];
37
+ /** Batches whose processing threw this tick (only when `onError` is set). */
38
+ failed?: {
39
+ id: string;
40
+ error: string;
41
+ }[];
42
+ }
43
+ export interface OpenAIWebhookOptions {
44
+ /** The OpenAI webhook signing secret (`whsec_…`). */
45
+ signingSecret: string;
46
+ }
47
+ export interface BatchPoller {
48
+ track: (target: TrackTarget, options: TrackOptions) => Promise<TrackedBatch>;
49
+ tick: () => Promise<TickResult>;
50
+ deliver: (record: TrackedBatch, snapshot: BatchSnapshot) => Promise<void>;
51
+ openaiWebhookHandler: (options: OpenAIWebhookOptions) => (request: Request) => Promise<Response>;
52
+ }
53
+ /**
54
+ * Create a managed poller: register submitted batches with `track`, then run
55
+ * `tick` on a schedule (cron) to poll open batches and deliver one unified,
56
+ * signed webhook per batch when it finishes. For OpenAI, mount
57
+ * `openaiWebhookHandler` to skip polling and react to native webhooks instead.
58
+ */
59
+ export declare const createBatchPoller: (options: BatchPollerOptions) => BatchPoller;
60
+ //# sourceMappingURL=poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../src/server/poller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD,6EAA6E;AAC7E,MAAM,MAAM,kBAAkB,GAC1B,mBAAmB,GACnB,CAAC,CAAC,QAAQ,EAAE,aAAa,KAAK,mBAAmB,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,aAAa,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,UAAU,CAAC;IAClB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7E,IAAI,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,oBAAoB,EAAE,CACpB,OAAO,EAAE,oBAAoB,KAC1B,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C;AAoCD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,YAAa,kBAAkB,KAAG,WA2H/D,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { BatchWebhookEvent } from "./types";
2
+ /** Build Standard Webhooks signature headers for an outbound delivery. */
3
+ export declare const signWebhook: (secret: string, id: string, body: string, timestampSeconds: number) => Promise<Record<string, string>>;
4
+ export interface VerifiedWebhook {
5
+ id: string;
6
+ timestamp: number;
7
+ body: string;
8
+ }
9
+ /**
10
+ * Verify a Standard Webhooks-signed request and return its raw body. Throws if
11
+ * headers are missing, the timestamp is outside tolerance, or no signature
12
+ * matches. Consumes the request body.
13
+ */
14
+ export declare const verifyWebhook: (request: Request, secret: string) => Promise<VerifiedWebhook>;
15
+ /**
16
+ * Verify and parse a batchwork webhook on your receiving endpoint. Returns the
17
+ * unified {@link BatchWebhookEvent}.
18
+ */
19
+ export declare const verifyBatchWebhook: (request: Request, secret: string) => Promise<BatchWebhookEvent>;
20
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/server/signing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA8DjD,0EAA0E;AAC1E,eAAO,MAAM,WAAW,WACd,MAAM,MACV,MAAM,QACJ,MAAM,oBACM,MAAM,KACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQhC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,YACf,OAAO,UACR,MAAM,KACb,OAAO,CAAC,eAAe,CAsCzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YACpB,OAAO,UACR,MAAM,KACb,OAAO,CAAC,iBAAiB,CAG3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BatchStore } from "./types";
2
+ /** An in-memory `BatchStore`. Suitable for development and single-process use. */
3
+ export declare const createMemoryStore: () => BatchStore;
4
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AAExD,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,QAAO,UAwBpC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { BatchProvider, BatchRequestCounts, BatchStatus } from "../types";
2
+ /** The unified webhook event batchwork delivers when a batch finishes. */
3
+ export type BatchWebhookEventType = "batch.completed" | "batch.failed" | "batch.expired" | "batch.cancelled";
4
+ export interface BatchWebhookEvent {
5
+ type: BatchWebhookEventType;
6
+ id: string;
7
+ provider: BatchProvider;
8
+ requestCounts: BatchRequestCounts;
9
+ createdAt?: string;
10
+ completedAt?: string;
11
+ }
12
+ /** A batch being watched by the poller, plus its delivery target. */
13
+ export interface TrackedBatch {
14
+ id: string;
15
+ provider: BatchProvider;
16
+ /** Where to POST the completion webhook. Omitted for callback-based flows. */
17
+ webhookUrl?: string;
18
+ webhookSecret?: string;
19
+ status: BatchStatus;
20
+ createdAt: string;
21
+ /** Set once the completion webhook has been delivered. */
22
+ deliveredAt?: string;
23
+ }
24
+ /**
25
+ * Persistence for tracked batches. Implement against any KV/DB (Vercel KV,
26
+ * Upstash Redis, Cloudflare KV, Postgres). `createMemoryStore` is provided for
27
+ * development and single-process use.
28
+ */
29
+ export interface BatchStore {
30
+ get: (id: string) => Promise<TrackedBatch | null>;
31
+ set: (record: TrackedBatch) => Promise<void>;
32
+ delete: (id: string) => Promise<void>;
33
+ list: (filter?: {
34
+ delivered?: boolean;
35
+ }) => Promise<TrackedBatch[]>;
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE/E,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAC7B,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,iBAAiB,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,aAAa,EAAE,kBAAkB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,aAAa,CAAC;IACxB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAClD,GAAG,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACrE"}
@@ -0,0 +1,118 @@
1
+ import type { JSONValue, LanguageModel, ModelMessage, ToolChoice, ToolSet } from "ai";
2
+ /** Providers with a batch adapter. */
3
+ export type BatchProvider = "anthropic" | "google" | "groq" | "mistral" | "openai" | "together" | "xai";
4
+ /**
5
+ * Provider-specific options, forwarded verbatim into the underlying request
6
+ * body. Structurally identical to the AI SDK's `ProviderOptions`.
7
+ */
8
+ export type ProviderOptions = Record<string, Record<string, JSONValue>>;
9
+ /**
10
+ * Sampling and prompt-shaping fields shared with the AI SDK's `generateText`.
11
+ * Used both per request and as batch-wide defaults.
12
+ */
13
+ export interface BatchRequestSettings {
14
+ frequencyPenalty?: number;
15
+ maxOutputTokens?: number;
16
+ presencePenalty?: number;
17
+ providerOptions?: ProviderOptions;
18
+ seed?: number;
19
+ stopSequences?: string[];
20
+ system?: string;
21
+ temperature?: number;
22
+ toolChoice?: ToolChoice<ToolSet>;
23
+ tools?: ToolSet;
24
+ topK?: number;
25
+ topP?: number;
26
+ }
27
+ /**
28
+ * A single request within a batch. Mirrors the AI SDK `generateText` input
29
+ * (minus `model`), plus a `customId` used to correlate the result.
30
+ */
31
+ export interface BatchRequest extends BatchRequestSettings {
32
+ /** Correlates this request to its result. Auto-generated when omitted. */
33
+ customId?: string;
34
+ messages?: ModelMessage[];
35
+ prompt?: string;
36
+ }
37
+ /** Defaults merged into every request; request-level values take precedence. */
38
+ export type BatchDefaults = BatchRequestSettings;
39
+ /** Normalized batch lifecycle status, unified across providers. */
40
+ export type BatchStatus = "validating" | "in_progress" | "finalizing" | "completed" | "failed" | "expired" | "cancelling" | "cancelled";
41
+ /** Normalized per-request tallies. `completed` = succeeded, `failed` = errored. */
42
+ export interface BatchRequestCounts {
43
+ canceled?: number;
44
+ completed: number;
45
+ expired?: number;
46
+ failed: number;
47
+ processing?: number;
48
+ total: number;
49
+ }
50
+ /** Outcome of a single request within a batch. */
51
+ export type BatchResultStatus = "succeeded" | "errored" | "expired" | "canceled";
52
+ export interface BatchUsage {
53
+ inputTokens?: number;
54
+ outputTokens?: number;
55
+ totalTokens?: number;
56
+ }
57
+ export interface BatchResultError {
58
+ code?: string | number;
59
+ message: string;
60
+ type?: string;
61
+ }
62
+ /** A normalized result line, correlated by `customId`. */
63
+ export interface BatchResult {
64
+ customId: string;
65
+ /** Normalized error, present when `status` is `"errored"`. */
66
+ error?: BatchResultError;
67
+ /** Raw provider response body (OpenAI `response.body` / Anthropic message). */
68
+ response?: unknown;
69
+ status: BatchResultStatus;
70
+ /** Normalized text output, when the request produced a message. */
71
+ text?: string;
72
+ usage?: BatchUsage;
73
+ }
74
+ /** A point-in-time, normalized view of a batch's status. */
75
+ export interface BatchSnapshot {
76
+ completedAt?: Date;
77
+ createdAt?: Date;
78
+ expiresAt?: Date;
79
+ id: string;
80
+ provider: BatchProvider;
81
+ /** Raw provider status object. */
82
+ raw: unknown;
83
+ requestCounts: BatchRequestCounts;
84
+ status: BatchStatus;
85
+ }
86
+ /** Provider credentials and connection config. Falls back to env when omitted. */
87
+ export interface ProviderCredentials {
88
+ apiKey?: string;
89
+ baseURL?: string;
90
+ /** Extra provider-level HTTP headers (e.g. beta flags). */
91
+ headers?: Record<string, string>;
92
+ }
93
+ /** Input to `batch()`. */
94
+ export interface BatchOptions extends ProviderCredentials {
95
+ defaults?: BatchDefaults;
96
+ metadata?: Record<string, string>;
97
+ model: LanguageModel;
98
+ requests: BatchRequest[];
99
+ }
100
+ /**
101
+ * Reference to an existing batch, used to rehydrate a handle. Identify the
102
+ * provider with either `model` or `provider` (e.g. from a webhook event).
103
+ */
104
+ export interface BatchRef extends ProviderCredentials {
105
+ id: string;
106
+ model?: LanguageModel;
107
+ provider?: BatchProvider;
108
+ }
109
+ export interface WaitOptions {
110
+ /** Invoked after every poll with the latest snapshot. */
111
+ onPoll?: (snapshot: BatchSnapshot) => void;
112
+ /** Delay between polls. Default 15000ms. */
113
+ pollIntervalMs?: number;
114
+ signal?: AbortSignal;
115
+ /** Give up after this long. Default: no timeout. */
116
+ timeoutMs?: number;
117
+ }
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /** Small, defensive helpers for reading loosely-typed provider JSON. */
2
+ export declare const asRecord: (value: unknown) => Record<string, unknown>;
3
+ export declare const asString: (value: unknown) => string | undefined;
4
+ export declare const asNumber: (value: unknown) => number | undefined;
5
+ export declare const asArray: (value: unknown) => unknown[];
6
+ /** Return a shallow copy of `obj` without `key`. */
7
+ export declare const omit: (obj: Record<string, unknown>, key: string) => Record<string, unknown>;
8
+ /** Coerce a provider timestamp (ISO string or unix seconds) to a `Date`. */
9
+ export declare const toDate: (value: unknown) => Date | undefined;
10
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAK/D,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,GAAG,SACJ,CAAC;AAEhD,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,GAAG,SACJ,CAAC;AAEhD,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,OAAO,EACb,CAAC;AAEpC,oDAAoD;AACpD,eAAO,MAAM,IAAI,QACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OACvB,MAAM,KACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAQxB,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,IAAI,GAAG,SAO9C,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,124 @@
1
1
  {
2
2
  "name": "batchwork",
3
- "version": "0.0.0",
4
- "description": "",
5
- "license": "ISC",
6
- "author": "",
7
- "type": "commonjs",
8
- "main": "index.js",
3
+ "version": "1.0.0",
4
+ "description": "Unified batch API for AI providers — low-cost LLM batch processing at scale.",
5
+ "keywords": [
6
+ "ai",
7
+ "ai-sdk",
8
+ "anthropic",
9
+ "batch",
10
+ "llm",
11
+ "openai",
12
+ "vercel"
13
+ ],
14
+ "homepage": "https://github.com/haydenbleasel/batchwork#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/haydenbleasel/batchwork/issues"
17
+ },
18
+ "license": "MIT",
19
+ "author": "Hayden Bleasel",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/haydenbleasel/batchwork.git",
23
+ "directory": "packages/batchwork"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "type": "module",
29
+ "main": "./dist/index.js",
30
+ "module": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js"
36
+ },
37
+ "./server": {
38
+ "types": "./dist/server/index.d.ts",
39
+ "import": "./dist/server/index.js"
40
+ },
41
+ "./next": {
42
+ "types": "./dist/next/index.d.ts",
43
+ "import": "./dist/next/index.js"
44
+ },
45
+ "./postgres": {
46
+ "types": "./dist/postgres/index.d.ts",
47
+ "import": "./dist/postgres/index.js"
48
+ },
49
+ "./redis": {
50
+ "types": "./dist/redis/index.d.ts",
51
+ "import": "./dist/redis/index.js"
52
+ }
53
+ },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
9
57
  "scripts": {
10
- "test": "echo \"Error: no test specified\" && exit 1"
58
+ "build": "bun run scripts/build.ts",
59
+ "dev": "bun run scripts/build.ts --watch",
60
+ "typecheck": "tsgo --noEmit && tsgo --noEmit -p tsconfig.bun.json",
61
+ "test": "bun test ./test",
62
+ "test:coverage": "bun test ./test --coverage",
63
+ "test:live": "bun test --env-file=.env.local ./live"
64
+ },
65
+ "dependencies": {
66
+ "ai": "^6.0.204"
67
+ },
68
+ "devDependencies": {
69
+ "@ai-sdk/anthropic": "^3.0.84",
70
+ "@ai-sdk/google": "^3.0.82",
71
+ "@ai-sdk/groq": "^3.0.41",
72
+ "@ai-sdk/mistral": "^3.0.39",
73
+ "@ai-sdk/openai": "^3.0.71",
74
+ "@ai-sdk/togetherai": "^2.0.55",
75
+ "@ai-sdk/xai": "^3.0.95",
76
+ "@electric-sql/pglite": "^0.5.2",
77
+ "@types/bun": "^1.3.14",
78
+ "@types/node": "^25.9.3",
79
+ "@types/pg": "^8.20.0",
80
+ "@typescript/native-preview": "^7.0.0-dev.20260613.1",
81
+ "@upstash/redis": "^1.38.0",
82
+ "pg": "^8.21.0",
83
+ "typescript": "^6.0.3"
84
+ },
85
+ "peerDependencies": {
86
+ "@ai-sdk/anthropic": ">=3",
87
+ "@ai-sdk/google": ">=3",
88
+ "@ai-sdk/groq": ">=3",
89
+ "@ai-sdk/mistral": ">=3",
90
+ "@ai-sdk/openai": ">=3",
91
+ "@ai-sdk/togetherai": ">=2",
92
+ "@ai-sdk/xai": ">=3",
93
+ "@upstash/redis": ">=1"
94
+ },
95
+ "peerDependenciesMeta": {
96
+ "@upstash/redis": {
97
+ "optional": true
98
+ },
99
+ "@ai-sdk/anthropic": {
100
+ "optional": true
101
+ },
102
+ "@ai-sdk/google": {
103
+ "optional": true
104
+ },
105
+ "@ai-sdk/groq": {
106
+ "optional": true
107
+ },
108
+ "@ai-sdk/mistral": {
109
+ "optional": true
110
+ },
111
+ "@ai-sdk/openai": {
112
+ "optional": true
113
+ },
114
+ "@ai-sdk/togetherai": {
115
+ "optional": true
116
+ },
117
+ "@ai-sdk/xai": {
118
+ "optional": true
119
+ }
120
+ },
121
+ "engines": {
122
+ "node": ">=20"
11
123
  }
12
124
  }