@hazeljs/pdf-to-audio 0.8.2 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/job-store.d.ts +27 -0
- package/dist/job-store.d.ts.map +1 -0
- package/dist/job-store.js +78 -0
- package/dist/job-store.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory job store for async PDF-to-audio conversion.
|
|
3
|
+
* Jobs expire after 1 hour to avoid unbounded memory growth.
|
|
4
|
+
*/
|
|
5
|
+
export type JobStatus = 'pending' | 'processing' | 'completed' | 'failed';
|
|
6
|
+
export interface PdfToAudioJob {
|
|
7
|
+
id: string;
|
|
8
|
+
status: JobStatus;
|
|
9
|
+
progress: number;
|
|
10
|
+
totalChunks?: number;
|
|
11
|
+
completedChunks?: number;
|
|
12
|
+
result?: Buffer;
|
|
13
|
+
error?: string;
|
|
14
|
+
createdAt: number;
|
|
15
|
+
completedAt?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class PdfToAudioJobStore {
|
|
18
|
+
private jobs;
|
|
19
|
+
create(): string;
|
|
20
|
+
get(jobId: string): PdfToAudioJob | undefined;
|
|
21
|
+
updateProgress(jobId: string, completedChunks: number, totalChunks: number): void;
|
|
22
|
+
setCompleted(jobId: string, result: Buffer): void;
|
|
23
|
+
setFailed(jobId: string, error: string): void;
|
|
24
|
+
/** Remove expired jobs (call periodically if needed) */
|
|
25
|
+
prune(): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=job-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-store.d.ts","sourceRoot":"","sources":["../src/job-store.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,qBACa,kBAAkB;IAC7B,OAAO,CAAC,IAAI,CAAoC;IAEhD,MAAM,IAAI,MAAM;IAWhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAU7C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAYjF,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUjD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS7C,wDAAwD;IACxD,KAAK,IAAI,IAAI;CAQd"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.PdfToAudioJobStore = void 0;
|
|
10
|
+
const core_1 = require("@hazeljs/core");
|
|
11
|
+
const JOB_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
12
|
+
let PdfToAudioJobStore = class PdfToAudioJobStore {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.jobs = new Map();
|
|
15
|
+
}
|
|
16
|
+
create() {
|
|
17
|
+
const id = `pdf2a-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
|
|
18
|
+
this.jobs.set(id, {
|
|
19
|
+
id,
|
|
20
|
+
status: 'pending',
|
|
21
|
+
progress: 0,
|
|
22
|
+
createdAt: Date.now(),
|
|
23
|
+
});
|
|
24
|
+
return id;
|
|
25
|
+
}
|
|
26
|
+
get(jobId) {
|
|
27
|
+
const job = this.jobs.get(jobId);
|
|
28
|
+
if (!job)
|
|
29
|
+
return undefined;
|
|
30
|
+
if (Date.now() - job.createdAt > JOB_TTL_MS) {
|
|
31
|
+
this.jobs.delete(jobId);
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return job;
|
|
35
|
+
}
|
|
36
|
+
updateProgress(jobId, completedChunks, totalChunks) {
|
|
37
|
+
const job = this.jobs.get(jobId);
|
|
38
|
+
if (job) {
|
|
39
|
+
if (job.status === 'pending' && totalChunks > 0) {
|
|
40
|
+
job.status = 'processing';
|
|
41
|
+
}
|
|
42
|
+
job.completedChunks = completedChunks;
|
|
43
|
+
job.totalChunks = totalChunks;
|
|
44
|
+
job.progress = totalChunks > 0 ? Math.round((completedChunks / totalChunks) * 100) : 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
setCompleted(jobId, result) {
|
|
48
|
+
const job = this.jobs.get(jobId);
|
|
49
|
+
if (job) {
|
|
50
|
+
job.status = 'completed';
|
|
51
|
+
job.progress = 100;
|
|
52
|
+
job.result = result;
|
|
53
|
+
job.completedAt = Date.now();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
setFailed(jobId, error) {
|
|
57
|
+
const job = this.jobs.get(jobId);
|
|
58
|
+
if (job) {
|
|
59
|
+
job.status = 'failed';
|
|
60
|
+
job.error = error;
|
|
61
|
+
job.completedAt = Date.now();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/** Remove expired jobs (call periodically if needed) */
|
|
65
|
+
prune() {
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
for (const [id, job] of this.jobs) {
|
|
68
|
+
if (now - job.createdAt > JOB_TTL_MS) {
|
|
69
|
+
this.jobs.delete(id);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
exports.PdfToAudioJobStore = PdfToAudioJobStore;
|
|
75
|
+
exports.PdfToAudioJobStore = PdfToAudioJobStore = __decorate([
|
|
76
|
+
(0, core_1.Injectable)()
|
|
77
|
+
], PdfToAudioJobStore);
|
|
78
|
+
//# sourceMappingURL=job-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-store.js","sourceRoot":"","sources":["../src/job-store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hazeljs/pdf-to-audio",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.5",
|
|
4
4
|
"description": "Convert PDF documents to audio using TTS - PDF text extraction, chunking, and OpenAI TTS",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,13 +34,13 @@
|
|
|
34
34
|
"reflect-metadata": "^0.2.2"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@hazeljs/ai": "^0.8.
|
|
38
|
-
"@hazeljs/core": "^0.8.
|
|
39
|
-
"@hazeljs/queue": "^0.8.
|
|
40
|
-
"@hazeljs/rag": "^0.8.
|
|
37
|
+
"@hazeljs/ai": "^0.8.5",
|
|
38
|
+
"@hazeljs/core": "^0.8.5",
|
|
39
|
+
"@hazeljs/queue": "^0.8.5",
|
|
40
|
+
"@hazeljs/rag": "^0.8.5"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@hazeljs/queue": "^0.8.
|
|
43
|
+
"@hazeljs/queue": "^0.8.5",
|
|
44
44
|
"@types/jest": "^29.5.14",
|
|
45
45
|
"@types/node": "^20.19.39",
|
|
46
46
|
"@types/pdf-parse": "^1.1.5",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"url": "https://github.com/hazel-js/hazeljs.git",
|
|
57
57
|
"directory": "packages/pdf-to-audio"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "17874837994b8ce260f70ae09d2fe58d5606d18a"
|
|
60
60
|
}
|