@yglin/tw-env-records 0.0.2 → 0.0.4

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/lib/client.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { AskAi, AskAiData, AskAiQuery, AskAiPatch, AskAiRequest, AskAiRespo
7
7
  import './services/tag/tag.shared';
8
8
  export type { Tag, TagData, TagQuery, TagPatch } from './services/tag/tag.shared';
9
9
  import './services/meta/meta.shared';
10
- export type { Meta, MetaData, MetaQuery, MetaPatch, ServerInfo, YearlyStatistics, PerCountyStatistics, TagsTopN, PeopleTopN, TagsSimilarityConfigs } from './services/meta/meta.shared';
10
+ export type { Meta, MetaData, MetaQuery, MetaPatch, ServerInfo, YearlyStatistics, PerCountyStatistics, TagsTopN, PeopleTopN, TagsSimilarityConfigs, DatabaseStatistics } from './services/meta/meta.shared';
11
11
  import './services/person/person.shared';
12
12
  export type { Person, PersonData, PersonQuery, PersonPatch } from './services/person/person.shared';
13
13
  import './services/place-names/place-names.shared';
@@ -106,36 +106,84 @@ export declare const configurationSchema: import("@sinclair/typebox").TIntersect
106
106
  apiKey: import("@sinclair/typebox").TString<string>;
107
107
  }>;
108
108
  gemini: import("@sinclair/typebox").TObject<{
109
- api01: import("@sinclair/typebox").TObject<{
110
- model: import("@sinclair/typebox").TString<string>;
111
- apiKey01: import("@sinclair/typebox").TString<string>;
112
- }>;
113
- api02: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
114
- model: import("@sinclair/typebox").TString<string>;
115
- apiKey02: import("@sinclair/typebox").TString<string>;
116
- }>>;
109
+ apiKey: import("@sinclair/typebox").TString<string>;
110
+ model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
117
111
  }>;
118
112
  }>;
119
113
  services: import("@sinclair/typebox").TObject<{
120
114
  askAi: import("@sinclair/typebox").TObject<{
115
+ ai_model: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
116
+ ai_api_key: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
121
117
  recordsLimit: import("@sinclair/typebox").TNumber;
122
118
  }>;
123
119
  }>;
124
- crawler: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
125
- enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
126
- schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
127
- timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
128
- internalSecret: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
129
- }>>;
130
- analyzer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
131
- enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
132
- schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
133
- timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
134
- }>>;
135
- audit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
136
- enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
137
- schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
138
- timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
120
+ jobs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
121
+ crawler: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
122
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
123
+ schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
124
+ timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
125
+ internalSecret: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
126
+ }>>;
127
+ crawlerBatch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
128
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
129
+ timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
130
+ schedules: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
131
+ submit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
132
+ process: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
133
+ cleanup: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
134
+ }>>;
135
+ batch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
136
+ use_file_input: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
137
+ max_requests_per_batch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
138
+ requests_per_batch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
139
+ display_name_prefix: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
140
+ }>>;
141
+ processing: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
142
+ max_retry_attempts: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
143
+ retry_interval_ms: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
144
+ }>>;
145
+ cleanup: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
146
+ cleanup_after_days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
147
+ keep_failed_jobs_days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
148
+ }>>;
149
+ internalSecret: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
150
+ }>>;
151
+ analyzer: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
152
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
153
+ schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
154
+ timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
155
+ internalSecret: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
156
+ }>>;
157
+ audit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
158
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
159
+ schedule: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
160
+ timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
161
+ internalSecret: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
162
+ }>>;
163
+ auditBatch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
164
+ enabled: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
165
+ timezone: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
166
+ schedules: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
167
+ submit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
168
+ process: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
169
+ cleanup: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
170
+ }>>;
171
+ batch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
172
+ use_file_input: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
173
+ max_requests_per_batch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
174
+ requests_per_batch: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
175
+ display_name_prefix: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
176
+ }>>;
177
+ processing: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
178
+ max_retry_attempts: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
179
+ retry_interval_ms: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
180
+ }>>;
181
+ cleanup: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
182
+ cleanup_after_days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
183
+ keep_failed_jobs_days: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
184
+ }>>;
185
+ internalSecret: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString<string>>;
186
+ }>>;
139
187
  }>>;
140
188
  }>]>;
141
189
  export type ApplicationConfiguration = Static<typeof configurationSchema>;
@@ -0,0 +1,2 @@
1
+ import { Application } from '../declarations';
2
+ export declare const analyzerEndpoints: (app: Application) => void;
@@ -0,0 +1,2 @@
1
+ import { Application } from '../declarations';
2
+ export declare const auditBatchEndpoints: (app: Application) => void;
@@ -0,0 +1,2 @@
1
+ import { Application } from '../declarations';
2
+ export declare const crawlerBatchEndpoints: (app: Application) => void;
@@ -1,2 +1,2 @@
1
- import { Application } from "../declarations";
1
+ import { Application } from '../declarations';
2
2
  export declare const crawlerEndpoints: (app: Application) => void;
@@ -0,0 +1,16 @@
1
+ import { Application } from '../declarations';
2
+ import { type IGeminiClient } from './gemini-client-factory';
3
+ export interface ProcessStats {
4
+ processed: number;
5
+ recordsUpdated: number;
6
+ recordsSkipped: number;
7
+ errors: number;
8
+ }
9
+ /**
10
+ * Download and parse results from a completed batch job
11
+ */
12
+ export declare function downloadAndParseResults(client: IGeminiClient, jobName: string, isFileResult: boolean, resultFileName?: string): Promise<any[]>;
13
+ /**
14
+ * Process all pending audit batch jobs
15
+ */
16
+ export declare function processPendingBatches(app: Application): Promise<ProcessStats>;
@@ -0,0 +1,38 @@
1
+ export type BatchAuditStats = {
2
+ submitted?: number;
3
+ processed?: number;
4
+ recordsQueued?: number;
5
+ recordsUpdated?: number;
6
+ recordsSkipped?: number;
7
+ cleanedUp?: number;
8
+ errors?: number;
9
+ };
10
+ export type BatchAuditState = {
11
+ submitRunning: boolean;
12
+ processRunning: boolean;
13
+ lastSubmitAt?: string;
14
+ lastProcessAt?: string;
15
+ lastCleanupAt?: string;
16
+ lastSubmitDurationMs?: number;
17
+ lastProcessDurationMs?: number;
18
+ lastSubmitResult?: BatchAuditStats;
19
+ lastProcessResult?: BatchAuditStats;
20
+ lastError?: string;
21
+ pendingJobs?: number;
22
+ runningJobs?: number;
23
+ succeededJobs?: number;
24
+ };
25
+ export declare function getBatchAuditState(): BatchAuditState;
26
+ export declare function startSubmit(): void;
27
+ export declare function finishSubmit(result: BatchAuditStats, durationMs: number): void;
28
+ export declare function failSubmit(error: unknown, durationMs: number): void;
29
+ export declare function startProcess(): void;
30
+ export declare function finishProcess(result: BatchAuditStats, durationMs: number): void;
31
+ export declare function failProcess(error: unknown, durationMs: number): void;
32
+ export declare function updateJobCounts(pending: number, running: number, succeeded: number): void;
33
+ export declare function updateCleanupTime(): void;
34
+ /**
35
+ * Reset state for testing purposes
36
+ * WARNING: Only use in tests!
37
+ */
38
+ export declare function resetStateForTesting(): void;
@@ -0,0 +1,21 @@
1
+ import { Application } from '../declarations';
2
+ export interface SubmitStats {
3
+ submitted: number;
4
+ recordsQueued: number;
5
+ jobNames: string[];
6
+ }
7
+ /**
8
+ * Build the audit prompt for a single record
9
+ */
10
+ export declare function buildAuditPrompt(record: any): string;
11
+ /**
12
+ * Create a batch request object for audit
13
+ */
14
+ /**
15
+ * Create a batch request object for audit
16
+ */
17
+ export declare function createBatchRequest(prompt: string, recordId: number): any;
18
+ /**
19
+ * Submit a new audit batch job
20
+ */
21
+ export declare function submitAuditBatch(app: Application): Promise<SubmitStats>;
@@ -0,0 +1,36 @@
1
+ import { Application } from '../declarations';
2
+ import { type SubmitStats } from './audit-batch-submit';
3
+ import { type ProcessStats } from './audit-batch-process';
4
+ export interface CleanupStats {
5
+ removed: number;
6
+ }
7
+ export interface CycleStats {
8
+ submit: SubmitStats;
9
+ process: ProcessStats;
10
+ cleanup: CleanupStats;
11
+ }
12
+ /**
13
+ * Submit phase: Create and submit new audit batch jobs
14
+ */
15
+ export declare function submitPhase(app: Application): Promise<SubmitStats>;
16
+ /**
17
+ * Process phase: Poll and process completed audit batch jobs
18
+ */
19
+ export declare function processPhase(app: Application): Promise<ProcessStats>;
20
+ /**
21
+ * Cleanup phase: Remove old completed/failed batch jobs
22
+ */
23
+ export declare function cleanupPhase(app: Application): Promise<CleanupStats>;
24
+ /**
25
+ * Get current status of audit batch jobs
26
+ */
27
+ export declare function getAuditBatchStatus(app: Application): Promise<{
28
+ pending: number;
29
+ running: number;
30
+ succeeded: number;
31
+ failed: number;
32
+ }>;
33
+ /**
34
+ * Run a complete audit batch cycle (submit + process + cleanup)
35
+ */
36
+ export declare function runAuditBatchCycle(app: Application): Promise<CycleStats>;
@@ -0,0 +1,19 @@
1
+ import { Application } from '../declarations';
2
+ import { type IGeminiClient } from './gemini-client-factory';
3
+ export interface ProcessStats {
4
+ processed: number;
5
+ recordsExtracted: number;
6
+ duplicateCheckJobsCreated: number;
7
+ recordsCreated: number;
8
+ recordsUpdated: number;
9
+ duplicatesChecked: number;
10
+ errors: number;
11
+ }
12
+ /**
13
+ * Download and parse results from a completed batch job
14
+ */
15
+ export declare function downloadAndParseResults(client: IGeminiClient, jobName: string, isFileResult: boolean, resultFileName?: string): Promise<any[]>;
16
+ /**
17
+ * Process all pending batch jobs
18
+ */
19
+ export declare function processPendingBatches(app: Application): Promise<ProcessStats>;
@@ -0,0 +1,39 @@
1
+ export type BatchCrawlerStats = {
2
+ submitted?: number;
3
+ processed?: number;
4
+ recordsExtracted?: number;
5
+ recordsCreated?: number;
6
+ recordsUpdated?: number;
7
+ duplicatesChecked?: number;
8
+ cleanedUp?: number;
9
+ errors?: number;
10
+ };
11
+ export type BatchCrawlerState = {
12
+ submitRunning: boolean;
13
+ processRunning: boolean;
14
+ lastSubmitAt?: string;
15
+ lastProcessAt?: string;
16
+ lastCleanupAt?: string;
17
+ lastSubmitDurationMs?: number;
18
+ lastProcessDurationMs?: number;
19
+ lastSubmitResult?: BatchCrawlerStats;
20
+ lastProcessResult?: BatchCrawlerStats;
21
+ lastError?: string;
22
+ pendingJobs?: number;
23
+ runningJobs?: number;
24
+ succeededJobs?: number;
25
+ };
26
+ export declare function getBatchCrawlerState(): BatchCrawlerState;
27
+ export declare function startSubmit(): void;
28
+ export declare function finishSubmit(result: BatchCrawlerStats, durationMs: number): void;
29
+ export declare function failSubmit(error: unknown, durationMs: number): void;
30
+ export declare function startProcess(): void;
31
+ export declare function finishProcess(result: BatchCrawlerStats, durationMs: number): void;
32
+ export declare function failProcess(error: unknown, durationMs: number): void;
33
+ export declare function updateJobCounts(pending: number, running: number, succeeded: number): void;
34
+ export declare function updateCleanupTime(): void;
35
+ /**
36
+ * Reset state for testing purposes
37
+ * WARNING: Only use in tests!
38
+ */
39
+ export declare function resetStateForTesting(): void;
@@ -0,0 +1,18 @@
1
+ import { Application } from '../declarations';
2
+ export interface SubmitStats {
3
+ submitted: number;
4
+ jobNames: string[];
5
+ }
6
+ /**
7
+ * Build the crawl prompt for batch request
8
+ * Reuses the same prompt logic as the synchronous crawler
9
+ */
10
+ export declare function buildCrawlPrompt(schema: any): string;
11
+ /**
12
+ * Create a batch request object
13
+ */
14
+ export declare function createBatchRequest(prompt: string, config: any): any;
15
+ /**
16
+ * Submit a new crawl batch job
17
+ */
18
+ export declare function submitCrawlBatch(app: Application): Promise<SubmitStats>;
@@ -0,0 +1,52 @@
1
+ import { Application } from '../declarations';
2
+ import { SubmitStats } from './crawler-batch-submit';
3
+ import { ProcessStats } from './crawler-batch-process';
4
+ import { getBatchCrawlerState, BatchCrawlerState } from './crawler-batch-state';
5
+ export interface CycleStats {
6
+ submitted: number;
7
+ processed: number;
8
+ recordsExtracted: number;
9
+ recordsCreated: number;
10
+ recordsUpdated: number;
11
+ duplicatesChecked: number;
12
+ cleanedUp: number;
13
+ errors: number;
14
+ }
15
+ export interface CleanupStats {
16
+ cleanedUp: number;
17
+ }
18
+ export type { SubmitStats } from './crawler-batch-submit';
19
+ export type { ProcessStats } from './crawler-batch-process';
20
+ export interface BatchStatus {
21
+ id: number;
22
+ job_name: string;
23
+ job_type: string;
24
+ status: string;
25
+ model: string;
26
+ request_count: number;
27
+ created_at: string;
28
+ updated_at: string;
29
+ completed_at?: string;
30
+ error_message?: string;
31
+ }
32
+ /**
33
+ * Submit phase - create and submit new batch jobs
34
+ */
35
+ export declare function submitPhase(app: Application): Promise<SubmitStats>;
36
+ /**
37
+ * Process phase - poll and process completed batch jobs
38
+ */
39
+ export declare function processPhase(app: Application): Promise<ProcessStats>;
40
+ /**
41
+ * Cleanup phase - remove old completed jobs
42
+ */
43
+ export declare function cleanupPhase(app: Application): Promise<CleanupStats>;
44
+ /**
45
+ * Get status of all batch jobs
46
+ */
47
+ export declare function getBatchStatus(app: Application): Promise<BatchStatus[]>;
48
+ /**
49
+ * Run full batch crawl cycle (submit → process → cleanup)
50
+ */
51
+ export declare function runBatchCrawlCycle(app: Application): Promise<CycleStats>;
52
+ export { getBatchCrawlerState, BatchCrawlerState };
@@ -1,4 +1,4 @@
1
- import { CrawlStats } from "./crawler";
1
+ import { CrawlStats } from './crawler';
2
2
  export type CrawlerState = {
3
3
  running: boolean;
4
4
  lastRunAt?: string;
@@ -10,3 +10,8 @@ export declare function getCrawlerState(): CrawlerState;
10
10
  export declare function startRun(): void;
11
11
  export declare function finishRun(result: CrawlStats, durationMs: number): void;
12
12
  export declare function failRun(error: unknown, durationMs: number): void;
13
+ /**
14
+ * Reset state for testing purposes
15
+ * WARNING: Only use in tests!
16
+ */
17
+ export declare function resetStateForTesting(): void;
@@ -1,4 +1,4 @@
1
- import { Application } from "../declarations";
1
+ import { Application } from '../declarations';
2
2
  export type CrawlStats = {
3
3
  created: number;
4
4
  updated: number;
@@ -0,0 +1,75 @@
1
+ import { Application } from '../declarations';
2
+ export interface IGeminiClient {
3
+ models: {
4
+ generateContent: (params: any) => Promise<any>;
5
+ };
6
+ batches: {
7
+ create: (params: any) => Promise<any>;
8
+ get: (params: any) => Promise<any>;
9
+ list: (params?: any) => Promise<any>;
10
+ };
11
+ files: {
12
+ download: (params: any) => Promise<void>;
13
+ };
14
+ }
15
+ /**
16
+ * Default configuration applied to all Gemini requests
17
+ * Includes Google Search grounding tool
18
+ */
19
+ export declare const GEMINI_DEFAULT_CONFIG: {
20
+ tools: {
21
+ googleSearch: {};
22
+ }[];
23
+ };
24
+ /**
25
+ * Default Gemini model
26
+ */
27
+ export declare const DEFAULT_GEMINI_MODEL = "gemini-2.5-flash";
28
+ declare class GeminiClientFactory {
29
+ private instance;
30
+ private mockInstance;
31
+ private model;
32
+ /**
33
+ * Initialize the Gemini client from application configuration
34
+ * Call this once at application startup
35
+ */
36
+ initialize(app: Application): void;
37
+ /**
38
+ * Get the singleton Gemini client instance
39
+ * Throws error if not initialized
40
+ */
41
+ getClient(): IGeminiClient;
42
+ /**
43
+ * Get the configured model name
44
+ */
45
+ getModel(): string;
46
+ /**
47
+ * Get default configuration with Google Search grounding
48
+ * Use this in all generateContent calls
49
+ */
50
+ getDefaultConfig(): typeof GEMINI_DEFAULT_CONFIG;
51
+ /**
52
+ * Set a mock client for testing
53
+ * WARNING: Only use in tests!
54
+ */
55
+ setMockClient(mockClient: IGeminiClient | null): void;
56
+ /**
57
+ * Set mock model for testing
58
+ * WARNING: Only use in tests!
59
+ */
60
+ setMockModel(model: string): void;
61
+ /**
62
+ * Reset the factory (for testing)
63
+ * WARNING: Only use in tests!
64
+ */
65
+ resetForTesting(): void;
66
+ /**
67
+ * Check if client is initialized
68
+ */
69
+ isInitialized(): boolean;
70
+ }
71
+ export declare const geminiClientFactory: GeminiClientFactory;
72
+ export declare function getGeminiClient(): IGeminiClient;
73
+ export declare function getGeminiModel(): string;
74
+ export declare function getGeminiConfig(): typeof GEMINI_DEFAULT_CONFIG;
75
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { Params } from '@feathersjs/feathers';
2
+ import { KnexService } from '@feathersjs/knex';
3
+ import type { KnexAdapterParams, KnexAdapterOptions } from '@feathersjs/knex';
4
+ import type { Application } from '../../declarations';
5
+ import type { BatchJobs, BatchJobsData, BatchJobsPatch, BatchJobsQuery } from './batch-jobs.schema';
6
+ export type { BatchJobs, BatchJobsData, BatchJobsPatch, BatchJobsQuery };
7
+ export interface BatchJobsParams extends KnexAdapterParams<BatchJobsQuery> {
8
+ }
9
+ export declare class BatchJobsService<ServiceParams extends Params = BatchJobsParams> extends KnexService<BatchJobs, BatchJobsData, BatchJobsParams, BatchJobsPatch> {
10
+ findPending(): Promise<BatchJobs[]>;
11
+ markCompleted(id: number, resultData: Partial<BatchJobs>): Promise<BatchJobs>;
12
+ markFailed(id: number, error: string): Promise<BatchJobs>;
13
+ cleanupOld(daysOld: number): Promise<number>;
14
+ }
15
+ export declare const getOptions: (app: Application) => KnexAdapterOptions;
@@ -0,0 +1,11 @@
1
+ import type { Application } from '../../declarations';
2
+ import { BatchJobsService } from './batch-jobs.class';
3
+ import { batchJobsPath } from './batch-jobs.shared';
4
+ export * from './batch-jobs.class';
5
+ export * from './batch-jobs.schema';
6
+ export declare const batchJobs: (app: Application) => void;
7
+ declare module '../../declarations' {
8
+ interface ServiceTypes {
9
+ [batchJobsPath]: BatchJobsService;
10
+ }
11
+ }