@queuebase/node 0.0.1

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.
@@ -0,0 +1,9 @@
1
+ import type { AnyJobDefinition, CallableJobRouter } from '@queuebase/core';
2
+ interface TransportConfig {
3
+ apiUrl: string;
4
+ apiKey?: string;
5
+ callbackUrl: string;
6
+ }
7
+ export declare function createClient<T extends Record<string, AnyJobDefinition>>(router: T, config: TransportConfig): CallableJobRouter<T>;
8
+ export {};
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAkB,MAAM,iBAAiB,CAAC;AAE3F,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACrE,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,eAAe,GACtB,iBAAiB,CAAC,CAAC,CAAC,CA0CtB"}
package/dist/client.js ADDED
@@ -0,0 +1,37 @@
1
+ export function createClient(router, config) {
2
+ const client = {};
3
+ for (const [name, definition] of Object.entries(router)) {
4
+ const jobDef = definition;
5
+ client[name] = {
6
+ enqueue: async (input, options) => {
7
+ const validatedInput = jobDef.input.parse(input);
8
+ const mergedOptions = {
9
+ ...jobDef.defaults,
10
+ ...options,
11
+ };
12
+ const response = await fetch(`${config.apiUrl}/jobs/enqueue`, {
13
+ method: 'POST',
14
+ headers: {
15
+ 'Content-Type': 'application/json',
16
+ ...(config.apiKey ? { Authorization: `Bearer ${config.apiKey}` } : {}),
17
+ },
18
+ body: JSON.stringify({
19
+ name,
20
+ payload: validatedInput,
21
+ callbackUrl: config.callbackUrl,
22
+ options: mergedOptions,
23
+ }),
24
+ });
25
+ if (!response.ok) {
26
+ const error = await response.text().catch(() => 'Unknown error');
27
+ throw new Error(`Failed to enqueue job: ${error}`);
28
+ }
29
+ const result = (await response.json());
30
+ return { jobId: result.jobId };
31
+ },
32
+ _def: jobDef,
33
+ };
34
+ }
35
+ return client;
36
+ }
37
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,YAAY,CAC1B,MAAS,EACT,MAAuB;IAEvB,MAAM,MAAM,GAAG,EAA0B,CAAC;IAE1C,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC;QAEzB,MAAkC,CAAC,IAAI,CAAC,GAAG;YAC1C,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,OAAwB,EAAE,EAAE;gBAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEjD,MAAM,aAAa,GAAG;oBACpB,GAAG,MAAM,CAAC,QAAQ;oBAClB,GAAG,OAAO;iBACX,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,eAAe,EAAE;oBAC5D,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACvE;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI;wBACJ,OAAO,EAAE,cAAc;wBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,OAAO,EAAE,aAAa;qBACvB,CAAC;iBACH,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;oBACjE,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACrD,CAAC;gBAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;gBAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,IAAI,EAAE,MAAM;SACb,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { QueuebaseConfig } from '@queuebase/core';
2
+ export declare function defineConfig(config: Partial<QueuebaseConfig>): QueuebaseConfig;
3
+ export declare function resolveConfig(config: QueuebaseConfig): QueuebaseConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAU9E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAYtE"}
package/dist/config.js ADDED
@@ -0,0 +1,24 @@
1
+ const DEFAULT_DEV_API_URL = 'http://localhost:3847';
2
+ const DEFAULT_PROD_API_URL = 'https://api.queuebase.io';
3
+ export function defineConfig(config) {
4
+ return {
5
+ jobsDir: config.jobsDir ?? './src/jobs',
6
+ callbackUrl: config.callbackUrl ?? process.env.QUEUEBASE_CALLBACK_URL,
7
+ apiKey: config.apiKey ?? process.env.QUEUEBASE_API_KEY,
8
+ apiUrl: config.apiUrl ??
9
+ process.env.QUEUEBASE_API_URL ??
10
+ (process.env.NODE_ENV === 'production' ? DEFAULT_PROD_API_URL : DEFAULT_DEV_API_URL),
11
+ };
12
+ }
13
+ export function resolveConfig(config) {
14
+ const isDev = process.env.NODE_ENV !== 'production';
15
+ return {
16
+ jobsDir: config.jobsDir,
17
+ callbackUrl: process.env.QUEUEBASE_CALLBACK_URL ?? config.callbackUrl,
18
+ apiKey: process.env.QUEUEBASE_API_KEY ?? config.apiKey,
19
+ apiUrl: process.env.QUEUEBASE_API_URL ??
20
+ config.apiUrl ??
21
+ (isDev ? DEFAULT_DEV_API_URL : DEFAULT_PROD_API_URL),
22
+ };
23
+ }
24
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAExD,MAAM,UAAU,YAAY,CAAC,MAAgC;IAC3D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,YAAY;QACvC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB;QACrE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACtD,MAAM,EACJ,MAAM,CAAC,MAAM;YACb,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7B,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAuB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAEpD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,MAAM,CAAC,WAAW;QACrE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,MAAM;QACtD,MAAM,EACJ,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC7B,MAAM,CAAC,MAAM;YACb,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC;KACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import { type AnyJobDefinition } from '@queuebase/core';
3
+ export declare function createNodeHandler(router: Record<string, AnyJobDefinition>, options?: {
4
+ webhookSecret?: string;
5
+ }): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
6
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,KAAK,gBAAgB,EAAuC,MAAM,iBAAiB,CAAC;AAuB7F,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAyB9D"}
@@ -0,0 +1,41 @@
1
+ import { WEBHOOK_HEADERS, processJobCallback } from '@queuebase/core';
2
+ function readBody(req) {
3
+ // Support pre-parsed raw body (e.g. express.raw())
4
+ const existing = req.body;
5
+ if (existing !== undefined) {
6
+ return Promise.resolve(typeof existing === 'string' ? existing : existing.toString('utf-8'));
7
+ }
8
+ if (req.readableEnded) {
9
+ return Promise.reject(new Error('Request body already consumed. Use express.raw() or avoid body-parsing middleware on this route.'));
10
+ }
11
+ return new Promise((resolve, reject) => {
12
+ const chunks = [];
13
+ req.on('data', (chunk) => chunks.push(chunk));
14
+ req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
15
+ req.on('error', reject);
16
+ });
17
+ }
18
+ export function createNodeHandler(router, options) {
19
+ return async (req, res) => {
20
+ if (req.method !== 'POST') {
21
+ res.writeHead(405, { 'Content-Type': 'text/plain' });
22
+ res.end('Method not allowed');
23
+ return;
24
+ }
25
+ let body;
26
+ try {
27
+ body = await readBody(req);
28
+ }
29
+ catch (error) {
30
+ const message = error instanceof Error ? error.message : 'Failed to read request body';
31
+ res.writeHead(400, { 'Content-Type': 'application/json' });
32
+ res.end(JSON.stringify({ success: false, error: message }));
33
+ return;
34
+ }
35
+ const signatureHeader = req.headers[WEBHOOK_HEADERS.SIGNATURE.toLowerCase()] ?? null;
36
+ const result = await processJobCallback(router, { body, signatureHeader }, options);
37
+ res.writeHead(result.status, { 'Content-Type': 'application/json' });
38
+ res.end(JSON.stringify(result.body));
39
+ };
40
+ }
41
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,SAAS,QAAQ,CAAC,GAAoB;IACpC,mDAAmD;IACnD,MAAM,QAAQ,GAAI,GAAoD,CAAC,IAAI,CAAC;IAC5E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAC9G,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAwC,EACxC,OAAoC;IAEpC,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;YACvF,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,CAAY,IAAI,IAAI,CAAC;QAEjG,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;QAEpF,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACrE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { job, createJobRouter } from '@queuebase/core';
2
+ export type { AnyJobDefinition, JobDefinition, JobContext, JobRouter, EnqueueOptions, InferJobInput, InferJobOutput, HandlerRequest, HandlerResponse, } from '@queuebase/core';
3
+ export { processJobCallback } from '@queuebase/core';
4
+ export { defineConfig, resolveConfig } from './config.js';
5
+ export { createClient } from './client.js';
6
+ export { createNodeHandler } from './handler.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,SAAS,EACT,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ // Re-export core primitives
2
+ export { job, createJobRouter } from '@queuebase/core';
3
+ // Core handler (for custom adapters)
4
+ export { processJobCallback } from '@queuebase/core';
5
+ // Config
6
+ export { defineConfig, resolveConfig } from './config.js';
7
+ // Client
8
+ export { createClient } from './client.js';
9
+ // Node.js handler
10
+ export { createNodeHandler } from './handler.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAavD,qCAAqC;AACrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE1D,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,kBAAkB;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@queuebase/node",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "types": "./dist/index.d.ts",
8
+ "import": "./dist/index.js"
9
+ },
10
+ "./handler": {
11
+ "types": "./dist/handler.d.ts",
12
+ "import": "./dist/handler.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "dependencies": {
22
+ "zod": "^3.24.1",
23
+ "@queuebase/core": "0.0.1"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.10.5",
27
+ "typescript": "^5.7.2",
28
+ "vitest": "^2.1.8",
29
+ "@queuebase/tsconfig": "0.0.0"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc -b",
33
+ "dev": "tsc -b --watch",
34
+ "clean": "rm -rf dist .turbo *.tsbuildinfo",
35
+ "typecheck": "tsc --noEmit",
36
+ "lint": "biome lint ./src",
37
+ "lint:fix": "biome lint --write ./src",
38
+ "test": "vitest run --passWithNoTests",
39
+ "test:watch": "vitest"
40
+ }
41
+ }