offcourse 0.0.1 → 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.
- package/.github/workflows/ci.yml +50 -0
- package/.husky/commit-msg +2 -0
- package/.husky/pre-commit +1 -0
- package/.husky/pre-push +3 -0
- package/.prettierrc +8 -0
- package/.release-it.json +23 -0
- package/ARCHITECTURE.md +233 -0
- package/CHANGELOG.md +78 -0
- package/README.md +256 -16
- package/commitlint.config.js +4 -0
- package/dist/ai/openRouter.d.ts +47 -0
- package/dist/ai/openRouter.d.ts.map +1 -0
- package/dist/ai/openRouter.js +116 -0
- package/dist/ai/openRouter.js.map +1 -0
- package/dist/ai/transcriptPolisher.d.ts +24 -0
- package/dist/ai/transcriptPolisher.d.ts.map +1 -0
- package/dist/ai/transcriptPolisher.js +89 -0
- package/dist/ai/transcriptPolisher.js.map +1 -0
- package/dist/cli/commands/config.d.ts +13 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +66 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/enrich.d.ts +14 -0
- package/dist/cli/commands/enrich.d.ts.map +1 -0
- package/dist/cli/commands/enrich.js +271 -0
- package/dist/cli/commands/enrich.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +11 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +365 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/login.d.ts +12 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +55 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/status.d.ts +15 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +118 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +16 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +922 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/syncGhl.d.ts +20 -0
- package/dist/cli/commands/syncGhl.d.ts.map +1 -0
- package/dist/cli/commands/syncGhl.js +483 -0
- package/dist/cli/commands/syncGhl.js.map +1 -0
- package/dist/cli/commands/syncHighLevel.d.ts +24 -0
- package/dist/cli/commands/syncHighLevel.d.ts.map +1 -0
- package/dist/cli/commands/syncHighLevel.js +483 -0
- package/dist/cli/commands/syncHighLevel.js.map +1 -0
- package/dist/cli/commands/syncHighLevel.test.d.ts +2 -0
- package/dist/cli/commands/syncHighLevel.test.d.ts.map +1 -0
- package/dist/cli/commands/syncHighLevel.test.js +102 -0
- package/dist/cli/commands/syncHighLevel.test.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +106 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/configManager.d.ts +31 -0
- package/dist/config/configManager.d.ts.map +1 -0
- package/dist/config/configManager.js +64 -0
- package/dist/config/configManager.js.map +1 -0
- package/dist/config/paths.d.ts +21 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +33 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/paths.test.d.ts +2 -0
- package/dist/config/paths.test.d.ts.map +1 -0
- package/dist/config/paths.test.js +70 -0
- package/dist/config/paths.test.js.map +1 -0
- package/dist/config/schema.d.ts +60 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +50 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/schema.test.d.ts +2 -0
- package/dist/config/schema.test.d.ts.map +1 -0
- package/dist/config/schema.test.js +151 -0
- package/dist/config/schema.test.js.map +1 -0
- package/dist/downloader/hlsDownloader.d.ts +58 -0
- package/dist/downloader/hlsDownloader.d.ts.map +1 -0
- package/dist/downloader/hlsDownloader.js +254 -0
- package/dist/downloader/hlsDownloader.js.map +1 -0
- package/dist/downloader/hlsDownloader.test.d.ts +2 -0
- package/dist/downloader/hlsDownloader.test.d.ts.map +1 -0
- package/dist/downloader/hlsDownloader.test.js +116 -0
- package/dist/downloader/hlsDownloader.test.js.map +1 -0
- package/dist/downloader/hlsValidator.d.ts +35 -0
- package/dist/downloader/hlsValidator.d.ts.map +1 -0
- package/dist/downloader/hlsValidator.js +148 -0
- package/dist/downloader/hlsValidator.js.map +1 -0
- package/dist/downloader/index.d.ts +26 -0
- package/dist/downloader/index.d.ts.map +1 -0
- package/dist/downloader/index.js +52 -0
- package/dist/downloader/index.js.map +1 -0
- package/dist/downloader/loomDownloader.d.ts +56 -0
- package/dist/downloader/loomDownloader.d.ts.map +1 -0
- package/dist/downloader/loomDownloader.js +559 -0
- package/dist/downloader/loomDownloader.js.map +1 -0
- package/dist/downloader/loomDownloader.test.d.ts +2 -0
- package/dist/downloader/loomDownloader.test.d.ts.map +1 -0
- package/dist/downloader/loomDownloader.test.js +36 -0
- package/dist/downloader/loomDownloader.test.js.map +1 -0
- package/dist/downloader/queue.d.ts +56 -0
- package/dist/downloader/queue.d.ts.map +1 -0
- package/dist/downloader/queue.js +88 -0
- package/dist/downloader/queue.js.map +1 -0
- package/dist/downloader/queue.test.d.ts +2 -0
- package/dist/downloader/queue.test.d.ts.map +1 -0
- package/dist/downloader/queue.test.js +158 -0
- package/dist/downloader/queue.test.js.map +1 -0
- package/dist/downloader/videoDownloader.d.ts +32 -0
- package/dist/downloader/videoDownloader.d.ts.map +1 -0
- package/dist/downloader/videoDownloader.js +173 -0
- package/dist/downloader/videoDownloader.js.map +1 -0
- package/dist/downloader/vimeoDownloader.d.ts +52 -0
- package/dist/downloader/vimeoDownloader.d.ts.map +1 -0
- package/dist/downloader/vimeoDownloader.js +565 -0
- package/dist/downloader/vimeoDownloader.js.map +1 -0
- package/dist/downloader/vimeoDownloader.test.d.ts +2 -0
- package/dist/downloader/vimeoDownloader.test.d.ts.map +1 -0
- package/dist/downloader/vimeoDownloader.test.js +51 -0
- package/dist/downloader/vimeoDownloader.test.js.map +1 -0
- package/dist/scraper/auth.d.ts +29 -0
- package/dist/scraper/auth.d.ts.map +1 -0
- package/dist/scraper/auth.js +115 -0
- package/dist/scraper/auth.js.map +1 -0
- package/dist/scraper/extractor.d.ts +49 -0
- package/dist/scraper/extractor.d.ts.map +1 -0
- package/dist/scraper/extractor.js +627 -0
- package/dist/scraper/extractor.js.map +1 -0
- package/dist/scraper/extractor.test.d.ts +2 -0
- package/dist/scraper/extractor.test.d.ts.map +1 -0
- package/dist/scraper/extractor.test.js +65 -0
- package/dist/scraper/extractor.test.js.map +1 -0
- package/dist/scraper/ghl/auth.d.ts +25 -0
- package/dist/scraper/ghl/auth.d.ts.map +1 -0
- package/dist/scraper/ghl/auth.js +187 -0
- package/dist/scraper/ghl/auth.js.map +1 -0
- package/dist/scraper/ghl/extractor.d.ts +96 -0
- package/dist/scraper/ghl/extractor.d.ts.map +1 -0
- package/dist/scraper/ghl/extractor.js +345 -0
- package/dist/scraper/ghl/extractor.js.map +1 -0
- package/dist/scraper/ghl/index.d.ts +4 -0
- package/dist/scraper/ghl/index.d.ts.map +1 -0
- package/dist/scraper/ghl/index.js +4 -0
- package/dist/scraper/ghl/index.js.map +1 -0
- package/dist/scraper/ghl/navigator.d.ts +93 -0
- package/dist/scraper/ghl/navigator.d.ts.map +1 -0
- package/dist/scraper/ghl/navigator.js +447 -0
- package/dist/scraper/ghl/navigator.js.map +1 -0
- package/dist/scraper/highlevel/auth.d.ts +25 -0
- package/dist/scraper/highlevel/auth.d.ts.map +1 -0
- package/dist/scraper/highlevel/auth.js +189 -0
- package/dist/scraper/highlevel/auth.js.map +1 -0
- package/dist/scraper/highlevel/extractor.d.ts +97 -0
- package/dist/scraper/highlevel/extractor.d.ts.map +1 -0
- package/dist/scraper/highlevel/extractor.js +386 -0
- package/dist/scraper/highlevel/extractor.js.map +1 -0
- package/dist/scraper/highlevel/extractor.test.d.ts +2 -0
- package/dist/scraper/highlevel/extractor.test.d.ts.map +1 -0
- package/dist/scraper/highlevel/extractor.test.js +101 -0
- package/dist/scraper/highlevel/extractor.test.js.map +1 -0
- package/dist/scraper/highlevel/index.d.ts +3 -0
- package/dist/scraper/highlevel/index.d.ts.map +1 -0
- package/dist/scraper/highlevel/index.js +3 -0
- package/dist/scraper/highlevel/index.js.map +1 -0
- package/dist/scraper/highlevel/navigator.d.ts +93 -0
- package/dist/scraper/highlevel/navigator.d.ts.map +1 -0
- package/dist/scraper/highlevel/navigator.js +492 -0
- package/dist/scraper/highlevel/navigator.js.map +1 -0
- package/dist/scraper/highlevel/navigator.test.d.ts +2 -0
- package/dist/scraper/highlevel/navigator.test.d.ts.map +1 -0
- package/dist/scraper/highlevel/navigator.test.js +78 -0
- package/dist/scraper/highlevel/navigator.test.js.map +1 -0
- package/dist/scraper/navigator.d.ts +65 -0
- package/dist/scraper/navigator.d.ts.map +1 -0
- package/dist/scraper/navigator.js +300 -0
- package/dist/scraper/navigator.js.map +1 -0
- package/dist/scraper/navigator.test.d.ts +2 -0
- package/dist/scraper/navigator.test.d.ts.map +1 -0
- package/dist/scraper/navigator.test.js +63 -0
- package/dist/scraper/navigator.test.js.map +1 -0
- package/dist/scraper/skoolApi.d.ts +17 -0
- package/dist/scraper/skoolApi.d.ts.map +1 -0
- package/dist/scraper/skoolApi.js +72 -0
- package/dist/scraper/skoolApi.js.map +1 -0
- package/dist/scraper/videoInterceptor.d.ts +19 -0
- package/dist/scraper/videoInterceptor.d.ts.map +1 -0
- package/dist/scraper/videoInterceptor.js +315 -0
- package/dist/scraper/videoInterceptor.js.map +1 -0
- package/dist/shared/auth.d.ts +58 -0
- package/dist/shared/auth.d.ts.map +1 -0
- package/dist/shared/auth.js +211 -0
- package/dist/shared/auth.js.map +1 -0
- package/dist/shared/fs.d.ts +31 -0
- package/dist/shared/fs.d.ts.map +1 -0
- package/dist/shared/fs.js +73 -0
- package/dist/shared/fs.js.map +1 -0
- package/dist/shared/http.d.ts +15 -0
- package/dist/shared/http.d.ts.map +1 -0
- package/dist/shared/http.js +31 -0
- package/dist/shared/http.js.map +1 -0
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/state/database.d.ts +245 -0
- package/dist/state/database.d.ts.map +1 -0
- package/dist/state/database.js +676 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/database.test.d.ts +2 -0
- package/dist/state/database.test.d.ts.map +1 -0
- package/dist/state/database.test.js +34 -0
- package/dist/state/database.test.js.map +1 -0
- package/dist/state/index.d.ts +2 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +2 -0
- package/dist/state/index.js.map +1 -0
- package/dist/storage/fileSystem.d.ts +56 -0
- package/dist/storage/fileSystem.d.ts.map +1 -0
- package/dist/storage/fileSystem.js +121 -0
- package/dist/storage/fileSystem.js.map +1 -0
- package/dist/transcription/whisperService.d.ts +27 -0
- package/dist/transcription/whisperService.d.ts.map +1 -0
- package/dist/transcription/whisperService.js +102 -0
- package/dist/transcription/whisperService.js.map +1 -0
- package/eslint.config.js +55 -0
- package/package.json +68 -11
- package/src/__fixtures__/highlevel-post-response.json +68 -0
- package/src/__fixtures__/hls-master-playlist.m3u8 +24 -0
- package/src/cli/commands/__snapshots__/syncHighLevel.test.ts.snap +38 -0
- package/src/cli/commands/config.ts +74 -0
- package/src/cli/commands/inspect.ts +441 -0
- package/src/cli/commands/login.ts +68 -0
- package/src/cli/commands/status.ts +147 -0
- package/src/cli/commands/sync.ts +1235 -0
- package/src/cli/commands/syncHighLevel.test.ts +144 -0
- package/src/cli/commands/syncHighLevel.ts +639 -0
- package/src/cli/index.ts +121 -0
- package/src/config/configManager.ts +75 -0
- package/src/config/paths.test.ts +83 -0
- package/src/config/paths.ts +36 -0
- package/src/config/schema.test.ts +173 -0
- package/src/config/schema.ts +65 -0
- package/src/downloader/hlsDownloader.test.ts +148 -0
- package/src/downloader/hlsDownloader.ts +327 -0
- package/src/downloader/hlsValidator.ts +196 -0
- package/src/downloader/index.ts +122 -0
- package/src/downloader/loomDownloader.test.ts +43 -0
- package/src/downloader/loomDownloader.ts +742 -0
- package/src/downloader/queue.test.ts +199 -0
- package/src/downloader/queue.ts +118 -0
- package/src/downloader/vimeoDownloader.test.ts +62 -0
- package/src/downloader/vimeoDownloader.ts +722 -0
- package/src/scraper/extractor.test.ts +124 -0
- package/src/scraper/extractor.ts +757 -0
- package/src/scraper/highlevel/__snapshots__/extractor.test.ts.snap +41 -0
- package/src/scraper/highlevel/extractor.test.ts +134 -0
- package/src/scraper/highlevel/extractor.ts +537 -0
- package/src/scraper/highlevel/index.ts +2 -0
- package/src/scraper/highlevel/navigator.test.ts +110 -0
- package/src/scraper/highlevel/navigator.ts +668 -0
- package/src/scraper/highlevel/schemas.ts +183 -0
- package/src/scraper/navigator.test.ts +122 -0
- package/src/scraper/navigator.ts +355 -0
- package/src/scraper/schemas.ts +177 -0
- package/src/scraper/videoInterceptor.ts +435 -0
- package/src/shared/auth.test.ts +58 -0
- package/src/shared/auth.ts +251 -0
- package/src/shared/firebase.ts +151 -0
- package/src/shared/fs.ts +80 -0
- package/src/shared/http.ts +34 -0
- package/src/shared/index.ts +6 -0
- package/src/shared/slug.ts +26 -0
- package/src/shared/url.test.ts +122 -0
- package/src/shared/url.ts +57 -0
- package/src/state/database.test.ts +49 -0
- package/src/state/database.ts +919 -0
- package/src/state/index.ts +14 -0
- package/src/storage/fileSystem.test.ts +64 -0
- package/src/storage/fileSystem.ts +175 -0
- package/tsconfig.json +28 -0
- package/vitest.config.ts +29 -0
- package/cli.js +0 -45
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile, unlink, access, stat } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Check if a file or directory exists.
|
|
5
|
+
*/
|
|
6
|
+
export async function pathExists(path) {
|
|
7
|
+
try {
|
|
8
|
+
await access(path);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Ensure a directory exists, creating it recursively if needed.
|
|
17
|
+
*/
|
|
18
|
+
export async function ensureDir(dir) {
|
|
19
|
+
await mkdir(dir, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Write a file, creating parent directories if needed.
|
|
23
|
+
*/
|
|
24
|
+
export async function outputFile(path, data) {
|
|
25
|
+
await ensureDir(dirname(path));
|
|
26
|
+
await writeFile(path, data, "utf-8");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Write JSON to a file, creating parent directories if needed.
|
|
30
|
+
*/
|
|
31
|
+
export async function outputJson(path, data) {
|
|
32
|
+
await outputFile(path, JSON.stringify(data, null, 2));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read and parse a JSON file.
|
|
36
|
+
* Returns null if file doesn't exist or can't be parsed.
|
|
37
|
+
*/
|
|
38
|
+
export async function readJson(path) {
|
|
39
|
+
try {
|
|
40
|
+
const content = await readFile(path, "utf-8");
|
|
41
|
+
return JSON.parse(content);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Remove a file if it exists.
|
|
49
|
+
*/
|
|
50
|
+
export async function removeFile(path) {
|
|
51
|
+
try {
|
|
52
|
+
await unlink(path);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get file size in bytes, or null if file doesn't exist.
|
|
61
|
+
*/
|
|
62
|
+
export async function getFileSize(path) {
|
|
63
|
+
try {
|
|
64
|
+
const stats = await stat(path);
|
|
65
|
+
return stats.size;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Re-export commonly used fs/promises functions
|
|
72
|
+
export { readFile, writeFile, mkdir, unlink, stat } from "node:fs/promises";
|
|
73
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/shared/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAAY;IACzD,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAAa;IAC1D,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAc,IAAY;IACtD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default User-Agent for HTTP requests.
|
|
3
|
+
* Mimics a standard Chrome browser on macOS.
|
|
4
|
+
*/
|
|
5
|
+
export declare const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
6
|
+
/**
|
|
7
|
+
* Pre-configured HTTP client with sensible defaults.
|
|
8
|
+
* Uses ky for automatic retries, better error handling, and cleaner API.
|
|
9
|
+
*/
|
|
10
|
+
export declare const http: import("ky").KyInstance;
|
|
11
|
+
/**
|
|
12
|
+
* HTTP client configured for JSON APIs.
|
|
13
|
+
*/
|
|
14
|
+
export declare const httpJson: import("ky").KyInstance;
|
|
15
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/shared/http.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,UAAU,0HACkG,CAAC;AAE1H;;;GAGG;AACH,eAAO,MAAM,IAAI,yBAWf,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,QAAQ,yBAInB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import ky from "ky";
|
|
2
|
+
/**
|
|
3
|
+
* Default User-Agent for HTTP requests.
|
|
4
|
+
* Mimics a standard Chrome browser on macOS.
|
|
5
|
+
*/
|
|
6
|
+
export const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
|
|
7
|
+
/**
|
|
8
|
+
* Pre-configured HTTP client with sensible defaults.
|
|
9
|
+
* Uses ky for automatic retries, better error handling, and cleaner API.
|
|
10
|
+
*/
|
|
11
|
+
export const http = ky.create({
|
|
12
|
+
headers: {
|
|
13
|
+
"User-Agent": USER_AGENT,
|
|
14
|
+
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
|
|
15
|
+
"Accept-Language": "en-US,en;q=0.5",
|
|
16
|
+
},
|
|
17
|
+
timeout: 30000,
|
|
18
|
+
retry: {
|
|
19
|
+
limit: 2,
|
|
20
|
+
statusCodes: [408, 413, 429, 500, 502, 503, 504],
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* HTTP client configured for JSON APIs.
|
|
25
|
+
*/
|
|
26
|
+
export const httpJson = http.extend({
|
|
27
|
+
headers: {
|
|
28
|
+
Accept: "application/json",
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/shared/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GACrB,uHAAuH,CAAC;AAE1H;;;GAGG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC;IAC5B,OAAO,EAAE;QACP,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,4EAA4E;QACpF,iBAAiB,EAAE,gBAAgB;KACpC;IACD,OAAO,EAAE,KAAK;IACd,KAAK,EAAE;QACL,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KACjD;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE;QACP,MAAM,EAAE,kBAAkB;KAC3B;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lesson sync status.
|
|
3
|
+
*/
|
|
4
|
+
export declare const LessonStatus: {
|
|
5
|
+
readonly PENDING: "pending";
|
|
6
|
+
readonly SCANNED: "scanned";
|
|
7
|
+
readonly VALIDATED: "validated";
|
|
8
|
+
readonly DOWNLOADED: "downloaded";
|
|
9
|
+
readonly ERROR: "error";
|
|
10
|
+
readonly SKIPPED: "skipped";
|
|
11
|
+
};
|
|
12
|
+
export type LessonStatusType = (typeof LessonStatus)[keyof typeof LessonStatus];
|
|
13
|
+
/**
|
|
14
|
+
* Video types supported by the tool.
|
|
15
|
+
*/
|
|
16
|
+
export declare const VideoType: {
|
|
17
|
+
readonly LOOM: "loom";
|
|
18
|
+
readonly VIMEO: "vimeo";
|
|
19
|
+
readonly YOUTUBE: "youtube";
|
|
20
|
+
readonly WISTIA: "wistia";
|
|
21
|
+
readonly NATIVE: "native";
|
|
22
|
+
readonly UNKNOWN: "unknown";
|
|
23
|
+
};
|
|
24
|
+
export type VideoTypeValue = (typeof VideoType)[keyof typeof VideoType];
|
|
25
|
+
/**
|
|
26
|
+
* Module record from database.
|
|
27
|
+
*/
|
|
28
|
+
export interface ModuleRecord {
|
|
29
|
+
id: number;
|
|
30
|
+
slug: string;
|
|
31
|
+
name: string;
|
|
32
|
+
position: number;
|
|
33
|
+
isLocked: boolean;
|
|
34
|
+
createdAt: string;
|
|
35
|
+
updatedAt: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Lesson record from database.
|
|
39
|
+
*/
|
|
40
|
+
export interface LessonRecord {
|
|
41
|
+
id: number;
|
|
42
|
+
moduleId: number;
|
|
43
|
+
slug: string;
|
|
44
|
+
name: string;
|
|
45
|
+
url: string;
|
|
46
|
+
position: number;
|
|
47
|
+
isLocked: boolean;
|
|
48
|
+
status: LessonStatusType;
|
|
49
|
+
videoType: VideoTypeValue | null;
|
|
50
|
+
videoUrl: string | null;
|
|
51
|
+
hlsUrl: string | null;
|
|
52
|
+
errorMessage: string | null;
|
|
53
|
+
errorCode: string | null;
|
|
54
|
+
retryCount: number;
|
|
55
|
+
lastScannedAt: string | null;
|
|
56
|
+
lastDownloadedAt: string | null;
|
|
57
|
+
videoFileSize: number | null;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
updatedAt: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Lesson with module info for display.
|
|
63
|
+
*/
|
|
64
|
+
export interface LessonWithModule extends LessonRecord {
|
|
65
|
+
moduleName: string;
|
|
66
|
+
moduleSlug: string;
|
|
67
|
+
modulePosition: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Course metadata stored in the database.
|
|
71
|
+
*/
|
|
72
|
+
export interface CourseMetadata {
|
|
73
|
+
name: string;
|
|
74
|
+
url: string;
|
|
75
|
+
lastSyncAt: string | null;
|
|
76
|
+
totalModules: number;
|
|
77
|
+
totalLessons: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get the database directory path.
|
|
81
|
+
*/
|
|
82
|
+
export declare function getDbDir(): string;
|
|
83
|
+
/**
|
|
84
|
+
* Get the database file path for a course.
|
|
85
|
+
*/
|
|
86
|
+
export declare function getDbPath(communitySlug: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Extract community slug from a Skool URL.
|
|
89
|
+
*/
|
|
90
|
+
export declare function extractCommunitySlug(url: string): string;
|
|
91
|
+
/**
|
|
92
|
+
* Database manager for course state persistence.
|
|
93
|
+
*/
|
|
94
|
+
export declare class CourseDatabase {
|
|
95
|
+
private db;
|
|
96
|
+
constructor(communitySlug: string);
|
|
97
|
+
/**
|
|
98
|
+
* Initialize database schema.
|
|
99
|
+
*/
|
|
100
|
+
private initSchema;
|
|
101
|
+
/**
|
|
102
|
+
* Run database migrations for schema updates.
|
|
103
|
+
*/
|
|
104
|
+
private runMigrations;
|
|
105
|
+
/**
|
|
106
|
+
* Close the database connection.
|
|
107
|
+
*/
|
|
108
|
+
close(): void;
|
|
109
|
+
/**
|
|
110
|
+
* Set a metadata value.
|
|
111
|
+
*/
|
|
112
|
+
setMetadata(key: string, value: string): void;
|
|
113
|
+
/**
|
|
114
|
+
* Get a metadata value.
|
|
115
|
+
*/
|
|
116
|
+
getMetadata(key: string): string | null;
|
|
117
|
+
/**
|
|
118
|
+
* Get all course metadata.
|
|
119
|
+
*/
|
|
120
|
+
getCourseMetadata(): CourseMetadata;
|
|
121
|
+
/**
|
|
122
|
+
* Update course metadata after sync.
|
|
123
|
+
*/
|
|
124
|
+
updateCourseMetadata(name: string, url: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* Upsert a module (insert or update).
|
|
127
|
+
*/
|
|
128
|
+
upsertModule(slug: string, name: string, position: number, isLocked?: boolean): ModuleRecord;
|
|
129
|
+
/**
|
|
130
|
+
* Get all modules.
|
|
131
|
+
*/
|
|
132
|
+
getModules(): ModuleRecord[];
|
|
133
|
+
/**
|
|
134
|
+
* Get module count.
|
|
135
|
+
*/
|
|
136
|
+
getModuleCount(): number;
|
|
137
|
+
/**
|
|
138
|
+
* Get module by slug.
|
|
139
|
+
*/
|
|
140
|
+
getModuleBySlug(slug: string): ModuleRecord | null;
|
|
141
|
+
private mapModuleRow;
|
|
142
|
+
/**
|
|
143
|
+
* Upsert a lesson (insert or update).
|
|
144
|
+
*/
|
|
145
|
+
upsertLesson(moduleId: number, slug: string, name: string, url: string, position: number, isLocked?: boolean): LessonRecord;
|
|
146
|
+
/**
|
|
147
|
+
* Update lesson scan results.
|
|
148
|
+
*/
|
|
149
|
+
updateLessonScan(lessonId: number, videoType: VideoTypeValue | null, videoUrl: string | null, hlsUrl: string | null, status: LessonStatusType, errorMessage?: string, errorCode?: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Mark lesson as downloaded.
|
|
152
|
+
*/
|
|
153
|
+
markLessonDownloaded(lessonId: number, fileSize?: number): void;
|
|
154
|
+
/**
|
|
155
|
+
* Mark lesson as error.
|
|
156
|
+
*/
|
|
157
|
+
markLessonError(lessonId: number, errorMessage: string, errorCode?: string): void;
|
|
158
|
+
/**
|
|
159
|
+
* Mark lesson as skipped (no video).
|
|
160
|
+
*/
|
|
161
|
+
markLessonSkipped(lessonId: number, reason?: string): void;
|
|
162
|
+
/**
|
|
163
|
+
* Update lesson video type.
|
|
164
|
+
*/
|
|
165
|
+
updateLessonVideoType(lessonId: number, videoType: string): void;
|
|
166
|
+
/**
|
|
167
|
+
* Increment retry count for a lesson.
|
|
168
|
+
*/
|
|
169
|
+
incrementRetryCount(lessonId: number): number;
|
|
170
|
+
/**
|
|
171
|
+
* Reset retry count for a lesson.
|
|
172
|
+
*/
|
|
173
|
+
resetRetryCount(lessonId: number): void;
|
|
174
|
+
/**
|
|
175
|
+
* Get lessons that failed but can still be retried (retry_count < maxRetries).
|
|
176
|
+
* Only returns retryable errors (not UNSUPPORTED_PROVIDER).
|
|
177
|
+
*/
|
|
178
|
+
getLessonsToRetry(maxRetries?: number): LessonWithModule[];
|
|
179
|
+
/**
|
|
180
|
+
* Mark a lesson for retry by setting it back to pending/validated status.
|
|
181
|
+
*/
|
|
182
|
+
queueForRetry(lessonId: number, targetStatus?: LessonStatusType): void;
|
|
183
|
+
/**
|
|
184
|
+
* Get all lessons.
|
|
185
|
+
*/
|
|
186
|
+
getLessons(): LessonRecord[];
|
|
187
|
+
/**
|
|
188
|
+
* Get lessons with module info.
|
|
189
|
+
*/
|
|
190
|
+
getLessonsWithModules(): LessonWithModule[];
|
|
191
|
+
/**
|
|
192
|
+
* Get lessons by status.
|
|
193
|
+
*/
|
|
194
|
+
getLessonsByStatus(status: LessonStatusType): LessonWithModule[];
|
|
195
|
+
/**
|
|
196
|
+
* Get lessons that need scanning (pending or never scanned).
|
|
197
|
+
*/
|
|
198
|
+
getLessonsToScan(): LessonWithModule[];
|
|
199
|
+
/**
|
|
200
|
+
* Get lessons that need validation (scanned but not validated, with video).
|
|
201
|
+
*/
|
|
202
|
+
getLessonsToValidate(): LessonWithModule[];
|
|
203
|
+
/**
|
|
204
|
+
* Get lessons that are ready for download (validated with HLS URL).
|
|
205
|
+
*/
|
|
206
|
+
getLessonsToDownload(): LessonWithModule[];
|
|
207
|
+
/**
|
|
208
|
+
* Get lesson count.
|
|
209
|
+
*/
|
|
210
|
+
getLessonCount(): number;
|
|
211
|
+
/**
|
|
212
|
+
* Get lesson by URL.
|
|
213
|
+
*/
|
|
214
|
+
getLessonByUrl(url: string): LessonRecord | null;
|
|
215
|
+
/**
|
|
216
|
+
* Get status summary.
|
|
217
|
+
*/
|
|
218
|
+
getStatusSummary(): Record<LessonStatusType, number> & {
|
|
219
|
+
locked: number;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Reset all error lessons to pending for retry.
|
|
223
|
+
*/
|
|
224
|
+
resetErrorLessons(): number;
|
|
225
|
+
/**
|
|
226
|
+
* Reset ALL lessons to pending (for --force full rescan).
|
|
227
|
+
* Preserves locked status.
|
|
228
|
+
*/
|
|
229
|
+
resetAllLessonsToPending(): number;
|
|
230
|
+
/**
|
|
231
|
+
* Reset error lessons to validated (for --resume --retry-errors).
|
|
232
|
+
* Only resets lessons that already have an HLS URL.
|
|
233
|
+
*/
|
|
234
|
+
resetErrorLessonsForResume(): number;
|
|
235
|
+
/**
|
|
236
|
+
* Get lessons by error code.
|
|
237
|
+
*/
|
|
238
|
+
getLessonsByErrorCode(errorCode: string): LessonWithModule[];
|
|
239
|
+
/**
|
|
240
|
+
* Get count of lessons grouped by video type.
|
|
241
|
+
*/
|
|
242
|
+
getVideoTypeSummary(): Record<string, number>;
|
|
243
|
+
private mapLessonRow;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/state/database.ts"],"names":[],"mappings":"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"}
|