@lssm/lib.jobs 0.0.0-canary-20251217060834 → 0.0.0-canary-20251217062943
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/contracts/dist/capabilities/openbanking.js +1 -0
- package/dist/contracts/dist/client/index.js +1 -0
- package/dist/contracts/dist/client/react/feature-render.js +1 -0
- package/dist/contracts/dist/client/react/form-render.js +1 -0
- package/dist/contracts/dist/client/react/index.js +1 -0
- package/dist/contracts/dist/contract-registry/index.js +1 -0
- package/dist/contracts/dist/contract-registry/schemas.js +1 -0
- package/dist/contracts/dist/docs/PUBLISHING.docblock.js +76 -0
- package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +350 -0
- package/dist/contracts/dist/docs/index.js +1 -0
- package/dist/contracts/dist/docs/presentations.js +1 -0
- package/dist/contracts/dist/docs/registry.js +1 -0
- package/dist/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +383 -0
- package/dist/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +68 -0
- package/dist/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +140 -0
- package/dist/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +86 -0
- package/dist/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +58 -0
- package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +38 -0
- package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +213 -0
- package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js +289 -0
- package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/schema/README.docblock.js +262 -0
- package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +57 -0
- package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +63 -0
- package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +36 -0
- package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +20 -0
- package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js +65 -0
- package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js +41 -0
- package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js +122 -0
- package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js +1 -0
- package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js +68 -0
- package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js +1 -0
- package/dist/contracts/dist/events.js +1 -0
- package/dist/contracts/dist/experiments/evaluator.js +1 -0
- package/dist/contracts/dist/index.js +1 -0
- package/dist/contracts/dist/install.js +1 -0
- package/dist/contracts/dist/integrations/contracts.js +1 -0
- package/dist/contracts/dist/integrations/index.js +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/balances.js +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/index.js +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js +1 -0
- package/dist/contracts/dist/integrations/openbanking/models.js +1 -0
- package/dist/contracts/dist/integrations/openbanking/telemetry.js +1 -0
- package/dist/contracts/dist/integrations/providers/elevenlabs.js +1 -0
- package/dist/contracts/dist/integrations/providers/gcs-storage.js +1 -0
- package/dist/contracts/dist/integrations/providers/gmail.js +1 -0
- package/dist/contracts/dist/integrations/providers/google-calendar.js +1 -0
- package/dist/contracts/dist/integrations/providers/index.js +1 -0
- package/dist/contracts/dist/integrations/providers/mistral.js +1 -0
- package/dist/contracts/dist/integrations/providers/postmark.js +1 -0
- package/dist/contracts/dist/integrations/providers/powens.js +1 -0
- package/dist/contracts/dist/integrations/providers/qdrant.js +1 -0
- package/dist/contracts/dist/integrations/providers/registry.js +1 -0
- package/dist/contracts/dist/integrations/providers/stripe.js +1 -0
- package/dist/contracts/dist/integrations/providers/twilio-sms.js +1 -0
- package/dist/contracts/dist/jobs/queue.js +1 -0
- package/dist/contracts/dist/jsonschema.js +1 -0
- package/dist/contracts/dist/knowledge/contracts.js +1 -0
- package/dist/contracts/dist/knowledge/index.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/email-threads.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/financial-docs.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/financial-overview.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/index.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/product-canon.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/support-faq.js +1 -0
- package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js +1 -0
- package/dist/contracts/dist/llm/exporters.js +1 -0
- package/dist/contracts/dist/llm/index.js +1 -0
- package/dist/contracts/dist/llm/prompts.js +1 -0
- package/dist/contracts/dist/onboarding-base.js +1 -0
- package/dist/contracts/dist/openapi.js +1 -0
- package/dist/contracts/dist/ownership.js +1 -0
- package/dist/contracts/dist/presentations.js +1 -0
- package/dist/contracts/dist/presentations.v2.js +1 -0
- package/dist/contracts/dist/prompt.js +1 -0
- package/dist/contracts/dist/promptRegistry.js +1 -0
- package/dist/contracts/dist/regenerator/index.js +1 -0
- package/dist/contracts/dist/regenerator/service.js +1 -0
- package/dist/contracts/dist/registry.js +1 -0
- package/dist/contracts/dist/resources.js +1 -0
- package/dist/contracts/dist/schema/dist/EnumType.js +1 -0
- package/dist/contracts/dist/schema/dist/FieldType.js +1 -0
- package/dist/contracts/dist/schema/dist/ScalarTypeEnum.js +1 -0
- package/dist/contracts/dist/schema/dist/SchemaModel.js +1 -0
- package/dist/contracts/dist/schema/dist/entity/defineEntity.js +1 -0
- package/dist/contracts/dist/schema/dist/entity/index.js +1 -0
- package/dist/contracts/dist/schema/dist/entity/types.js +1 -0
- package/dist/contracts/dist/schema/dist/index.js +1 -0
- package/dist/contracts/dist/server/graphql-pothos.js +1 -0
- package/dist/contracts/dist/server/index.js +1 -0
- package/dist/contracts/dist/server/mcp/createMcpServer.js +1 -0
- package/dist/contracts/dist/server/mcp/registerPresentations.js +1 -0
- package/dist/contracts/dist/server/mcp/registerPrompts.js +1 -0
- package/dist/contracts/dist/server/mcp/registerResources.js +1 -0
- package/dist/contracts/dist/server/mcp/registerTools.js +1 -0
- package/dist/contracts/dist/server/provider-mcp.js +1 -0
- package/dist/contracts/dist/server/rest-elysia.js +1 -0
- package/dist/contracts/dist/server/rest-express.js +1 -0
- package/dist/contracts/dist/server/rest-generic.js +1 -0
- package/dist/contracts/dist/server/rest-next-app.js +1 -0
- package/dist/contracts/dist/server/rest-next-pages.js +1 -0
- package/dist/contracts/dist/spec.js +1 -0
- package/dist/contracts/dist/telemetry/index.js +1 -0
- package/dist/contracts/dist/telemetry/tracker.js +1 -0
- package/dist/contracts/dist/tests/index.js +1 -0
- package/dist/contracts/dist/tests/runner.js +1 -0
- package/dist/contracts/dist/workflow/index.js +1 -0
- package/dist/contracts/dist/workflow/runner.js +1 -0
- package/dist/contracts/index.d.ts +138 -138
- package/dist/contracts/index.js +1 -1
- package/dist/entities/index.d.ts +116 -116
- package/dist/entities/index.js +1 -1
- package/dist/events.js +1 -1
- package/dist/index.js +1 -1
- package/dist/queue/gcp-cloud-tasks.js +1 -1
- package/dist/queue/gcp-pubsub.js +1 -1
- package/dist/queue/index.js +1 -1
- package/dist/queue/memory-queue.js +1 -1
- package/dist/queue/scaleway-sqs-queue.js +1 -1
- package/dist/queue/types.js +1 -1
- package/dist/schema/dist/EnumType.js +1 -0
- package/dist/schema/dist/FieldType.js +1 -0
- package/dist/schema/dist/ScalarTypeEnum.js +1 -0
- package/dist/schema/dist/SchemaModel.js +1 -0
- package/dist/schema/dist/entity/defineEntity.js +1 -0
- package/dist/schema/dist/entity/index.js +1 -0
- package/dist/schema/dist/entity/types.js +1 -0
- package/dist/schema/dist/index.js +1 -0
- package/package.json +6 -6
package/dist/contracts/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as e}from"../schema/dist/ScalarTypeEnum.js";import{n as t}from"../schema/dist/SchemaModel.js";import"../schema/dist/index.js";import{n,t as r}from"./dist/spec.js";import"./dist/index.js";const i=[`platform.jobs`],a=t({name:`Job`,description:`Represents a background job`,fields:{id:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},version:{type:e.Int_unsecure(),isOptional:!1},payload:{type:e.JSON(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},priority:{type:e.Int_unsecure(),isOptional:!1},attempts:{type:e.Int_unsecure(),isOptional:!1},maxRetries:{type:e.Int_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!0},startedAt:{type:e.DateTime(),isOptional:!0},completedAt:{type:e.DateTime(),isOptional:!0},lastError:{type:e.String_unsecure(),isOptional:!0}}}),o=t({name:`ScheduledJob`,description:`Represents a scheduled/recurring job`,fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},cronExpression:{type:e.String_unsecure(),isOptional:!1},timezone:{type:e.String_unsecure(),isOptional:!1},jobType:{type:e.String_unsecure(),isOptional:!1},enabled:{type:e.Boolean(),isOptional:!1},lastRunAt:{type:e.DateTime(),isOptional:!0},nextRunAt:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),s=t({name:`QueueStats`,description:`Job queue statistics`,fields:{pending:{type:e.Int_unsecure(),isOptional:!1},running:{type:e.Int_unsecure(),isOptional:!1},completed:{type:e.Int_unsecure(),isOptional:!1},failed:{type:e.Int_unsecure(),isOptional:!1},deadLetter:{type:e.Int_unsecure(),isOptional:!1}}}),c=t({name:`EnqueueJobInput`,description:`Input for enqueuing a new job`,fields:{type:{type:e.String_unsecure(),isOptional:!1},payload:{type:e.JSON(),isOptional:!1},delaySeconds:{type:e.Int_unsecure(),isOptional:!0},dedupeKey:{type:e.String_unsecure(),isOptional:!0},maxRetries:{type:e.Int_unsecure(),isOptional:!0},priority:{type:e.Int_unsecure(),isOptional:!0},timeoutMs:{type:e.Int_unsecure(),isOptional:!0}}}),l=t({name:`GetJobInput`,description:`Input for getting a job by ID`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1}}}),u=t({name:`CancelJobInput`,description:`Input for cancelling a job`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1}}}),d=t({name:`CancelJobOutput`,description:`Output for cancel job operation`,fields:{success:{type:e.Boolean(),isOptional:!1}}}),f=t({name:`CreateScheduledJobInput`,description:`Input for creating a scheduled job`,fields:{name:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},cronExpression:{type:e.String_unsecure(),isOptional:!1},timezone:{type:e.String_unsecure(),isOptional:!0},jobType:{type:e.String_unsecure(),isOptional:!1},payload:{type:e.JSON(),isOptional:!0},maxRetries:{type:e.Int_unsecure(),isOptional:!0},enabled:{type:e.Boolean(),isOptional:!0}}}),p=t({name:`ListScheduledJobsOutput`,description:`Output for listing scheduled jobs`,fields:{schedules:{type:o,isArray:!0,isOptional:!1}}}),m=t({name:`ToggleScheduledJobInput`,description:`Input for toggling a scheduled job`,fields:{name:{type:e.String_unsecure(),isOptional:!1},enabled:{type:e.Boolean(),isOptional:!1}}}),h=t({name:`JobEnqueuedPayload`,description:`Payload for job.enqueued event`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},priority:{type:e.Int_unsecure(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!0},tenantId:{type:e.String_unsecure(),isOptional:!0},enqueuedAt:{type:e.DateTime(),isOptional:!1}}}),g=t({name:`JobCancelledPayload`,description:`Payload for job.cancelled event`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1}}}),_=r({meta:{name:`jobs.enqueue`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`enqueue`],description:`Enqueue a background job for async processing.`,goal:`Allow services to offload work to background processing.`,context:`Called by any service that needs async processing.`},io:{input:c,output:a},policy:{auth:`user`},sideEffects:{emits:[{name:`job.enqueued`,version:1,when:`Job is enqueued`,payload:h}]}}),v=n({meta:{name:`jobs.get`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`get`],description:`Get a job by ID.`,goal:`Check job status and result.`,context:`Called to poll job status or retrieve results.`},io:{input:l,output:a},policy:{auth:`user`}}),y=r({meta:{name:`jobs.cancel`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`cancel`],description:`Cancel a pending job.`,goal:`Allow cancellation of jobs that are no longer needed.`,context:`Only pending jobs can be cancelled.`},io:{input:u,output:d,errors:{JOB_NOT_FOUND:{description:`Job does not exist`,http:404,gqlCode:`JOB_NOT_FOUND`,when:`Job ID is invalid`},JOB_NOT_PENDING:{description:`Job is not in pending state`,http:409,gqlCode:`JOB_NOT_PENDING`,when:`Job has already started or completed`}}},policy:{auth:`user`},sideEffects:{emits:[{name:`job.cancelled`,version:1,when:`Job is cancelled`,payload:g}]}}),b=n({meta:{name:`jobs.stats`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`stats`,`admin`],description:`Get job queue statistics.`,goal:`Monitor queue health and backlog.`,context:`Admin dashboard monitoring.`},io:{input:null,output:s},policy:{auth:`admin`}}),x=r({meta:{name:`jobs.schedule.create`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`schedule`,`create`],description:`Create a scheduled/recurring job.`,goal:`Set up recurring background tasks.`,context:`Admin configuration for periodic tasks.`},io:{input:f,output:o},policy:{auth:`admin`}}),S=n({meta:{name:`jobs.schedule.list`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`schedule`,`list`],description:`List all scheduled jobs.`,goal:`View configured recurring tasks.`,context:`Admin dashboard.`},io:{input:null,output:p},policy:{auth:`admin`}}),C=r({meta:{name:`jobs.schedule.toggle`,version:1,stability:`stable`,owners:[...i],tags:[`jobs`,`schedule`,`toggle`],description:`Enable or disable a scheduled job.`,goal:`Control when recurring tasks run.`,context:`Admin control over scheduled tasks.`},io:{input:m,output:o},policy:{auth:`admin`}});export{y as CancelJobContract,x as CreateScheduledJobContract,_ as EnqueueJobContract,v as GetJobContract,b as GetQueueStatsContract,a as JobModel,S as ListScheduledJobsContract,s as QueueStatsModel,o as ScheduledJobModel,C as ToggleScheduledJobContract};
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _lssm_lib_schema95 from "@lssm/lib.schema";
|
|
2
2
|
import { ModuleSchemaContribution } from "@lssm/lib.schema";
|
|
3
3
|
|
|
4
4
|
//#region src/entities/index.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Job status enum.
|
|
7
7
|
*/
|
|
8
|
-
declare const JobStatusEnum:
|
|
8
|
+
declare const JobStatusEnum: _lssm_lib_schema95.EntityEnumDef;
|
|
9
9
|
/**
|
|
10
10
|
* Job entity - represents a single job execution.
|
|
11
11
|
*/
|
|
12
|
-
declare const JobEntity:
|
|
13
|
-
id:
|
|
14
|
-
type:
|
|
15
|
-
version:
|
|
16
|
-
payload:
|
|
17
|
-
status:
|
|
18
|
-
priority:
|
|
19
|
-
attempts:
|
|
20
|
-
maxRetries:
|
|
21
|
-
lastError:
|
|
22
|
-
lastErrorStack:
|
|
23
|
-
scheduledAt:
|
|
24
|
-
startedAt:
|
|
25
|
-
completedAt:
|
|
26
|
-
timeoutAt:
|
|
27
|
-
dedupeKey:
|
|
28
|
-
tenantId:
|
|
29
|
-
userId:
|
|
30
|
-
traceId:
|
|
31
|
-
metadata:
|
|
32
|
-
result:
|
|
33
|
-
createdAt:
|
|
34
|
-
updatedAt:
|
|
35
|
-
scheduledJob:
|
|
36
|
-
scheduledJobId:
|
|
37
|
-
executions:
|
|
12
|
+
declare const JobEntity: _lssm_lib_schema95.EntitySpec<{
|
|
13
|
+
id: _lssm_lib_schema95.EntityScalarField;
|
|
14
|
+
type: _lssm_lib_schema95.EntityScalarField;
|
|
15
|
+
version: _lssm_lib_schema95.EntityScalarField;
|
|
16
|
+
payload: _lssm_lib_schema95.EntityScalarField;
|
|
17
|
+
status: _lssm_lib_schema95.EntityEnumField;
|
|
18
|
+
priority: _lssm_lib_schema95.EntityScalarField;
|
|
19
|
+
attempts: _lssm_lib_schema95.EntityScalarField;
|
|
20
|
+
maxRetries: _lssm_lib_schema95.EntityScalarField;
|
|
21
|
+
lastError: _lssm_lib_schema95.EntityScalarField;
|
|
22
|
+
lastErrorStack: _lssm_lib_schema95.EntityScalarField;
|
|
23
|
+
scheduledAt: _lssm_lib_schema95.EntityScalarField;
|
|
24
|
+
startedAt: _lssm_lib_schema95.EntityScalarField;
|
|
25
|
+
completedAt: _lssm_lib_schema95.EntityScalarField;
|
|
26
|
+
timeoutAt: _lssm_lib_schema95.EntityScalarField;
|
|
27
|
+
dedupeKey: _lssm_lib_schema95.EntityScalarField;
|
|
28
|
+
tenantId: _lssm_lib_schema95.EntityScalarField;
|
|
29
|
+
userId: _lssm_lib_schema95.EntityScalarField;
|
|
30
|
+
traceId: _lssm_lib_schema95.EntityScalarField;
|
|
31
|
+
metadata: _lssm_lib_schema95.EntityScalarField;
|
|
32
|
+
result: _lssm_lib_schema95.EntityScalarField;
|
|
33
|
+
createdAt: _lssm_lib_schema95.EntityScalarField;
|
|
34
|
+
updatedAt: _lssm_lib_schema95.EntityScalarField;
|
|
35
|
+
scheduledJob: _lssm_lib_schema95.EntityRelationField;
|
|
36
|
+
scheduledJobId: _lssm_lib_schema95.EntityScalarField;
|
|
37
|
+
executions: _lssm_lib_schema95.EntityRelationField;
|
|
38
38
|
}>;
|
|
39
39
|
/**
|
|
40
40
|
* ScheduledJob entity - recurring job definitions.
|
|
41
41
|
*/
|
|
42
|
-
declare const ScheduledJobEntity:
|
|
43
|
-
id:
|
|
44
|
-
name:
|
|
45
|
-
description:
|
|
46
|
-
cronExpression:
|
|
47
|
-
timezone:
|
|
48
|
-
jobType:
|
|
49
|
-
jobVersion:
|
|
50
|
-
payload:
|
|
51
|
-
maxRetries:
|
|
52
|
-
timeoutMs:
|
|
53
|
-
enabled:
|
|
54
|
-
lastRunAt:
|
|
55
|
-
nextRunAt:
|
|
56
|
-
tenantId:
|
|
57
|
-
createdAt:
|
|
58
|
-
updatedAt:
|
|
59
|
-
jobs:
|
|
42
|
+
declare const ScheduledJobEntity: _lssm_lib_schema95.EntitySpec<{
|
|
43
|
+
id: _lssm_lib_schema95.EntityScalarField;
|
|
44
|
+
name: _lssm_lib_schema95.EntityScalarField;
|
|
45
|
+
description: _lssm_lib_schema95.EntityScalarField;
|
|
46
|
+
cronExpression: _lssm_lib_schema95.EntityScalarField;
|
|
47
|
+
timezone: _lssm_lib_schema95.EntityScalarField;
|
|
48
|
+
jobType: _lssm_lib_schema95.EntityScalarField;
|
|
49
|
+
jobVersion: _lssm_lib_schema95.EntityScalarField;
|
|
50
|
+
payload: _lssm_lib_schema95.EntityScalarField;
|
|
51
|
+
maxRetries: _lssm_lib_schema95.EntityScalarField;
|
|
52
|
+
timeoutMs: _lssm_lib_schema95.EntityScalarField;
|
|
53
|
+
enabled: _lssm_lib_schema95.EntityScalarField;
|
|
54
|
+
lastRunAt: _lssm_lib_schema95.EntityScalarField;
|
|
55
|
+
nextRunAt: _lssm_lib_schema95.EntityScalarField;
|
|
56
|
+
tenantId: _lssm_lib_schema95.EntityScalarField;
|
|
57
|
+
createdAt: _lssm_lib_schema95.EntityScalarField;
|
|
58
|
+
updatedAt: _lssm_lib_schema95.EntityScalarField;
|
|
59
|
+
jobs: _lssm_lib_schema95.EntityRelationField;
|
|
60
60
|
}>;
|
|
61
61
|
/**
|
|
62
62
|
* JobExecution entity - individual execution attempts.
|
|
63
63
|
*/
|
|
64
|
-
declare const JobExecutionEntity:
|
|
65
|
-
id:
|
|
66
|
-
jobId:
|
|
67
|
-
attemptNumber:
|
|
68
|
-
startedAt:
|
|
69
|
-
completedAt:
|
|
70
|
-
durationMs:
|
|
71
|
-
success:
|
|
72
|
-
error:
|
|
73
|
-
errorStack:
|
|
74
|
-
result:
|
|
75
|
-
workerId:
|
|
76
|
-
job:
|
|
64
|
+
declare const JobExecutionEntity: _lssm_lib_schema95.EntitySpec<{
|
|
65
|
+
id: _lssm_lib_schema95.EntityScalarField;
|
|
66
|
+
jobId: _lssm_lib_schema95.EntityScalarField;
|
|
67
|
+
attemptNumber: _lssm_lib_schema95.EntityScalarField;
|
|
68
|
+
startedAt: _lssm_lib_schema95.EntityScalarField;
|
|
69
|
+
completedAt: _lssm_lib_schema95.EntityScalarField;
|
|
70
|
+
durationMs: _lssm_lib_schema95.EntityScalarField;
|
|
71
|
+
success: _lssm_lib_schema95.EntityScalarField;
|
|
72
|
+
error: _lssm_lib_schema95.EntityScalarField;
|
|
73
|
+
errorStack: _lssm_lib_schema95.EntityScalarField;
|
|
74
|
+
result: _lssm_lib_schema95.EntityScalarField;
|
|
75
|
+
workerId: _lssm_lib_schema95.EntityScalarField;
|
|
76
|
+
job: _lssm_lib_schema95.EntityRelationField;
|
|
77
77
|
}>;
|
|
78
78
|
/**
|
|
79
79
|
* All job entities for schema composition.
|
|
80
80
|
*/
|
|
81
|
-
declare const jobEntities: (
|
|
82
|
-
id:
|
|
83
|
-
type:
|
|
84
|
-
version:
|
|
85
|
-
payload:
|
|
86
|
-
status:
|
|
87
|
-
priority:
|
|
88
|
-
attempts:
|
|
89
|
-
maxRetries:
|
|
90
|
-
lastError:
|
|
91
|
-
lastErrorStack:
|
|
92
|
-
scheduledAt:
|
|
93
|
-
startedAt:
|
|
94
|
-
completedAt:
|
|
95
|
-
timeoutAt:
|
|
96
|
-
dedupeKey:
|
|
97
|
-
tenantId:
|
|
98
|
-
userId:
|
|
99
|
-
traceId:
|
|
100
|
-
metadata:
|
|
101
|
-
result:
|
|
102
|
-
createdAt:
|
|
103
|
-
updatedAt:
|
|
104
|
-
scheduledJob:
|
|
105
|
-
scheduledJobId:
|
|
106
|
-
executions:
|
|
107
|
-
}> |
|
|
108
|
-
id:
|
|
109
|
-
name:
|
|
110
|
-
description:
|
|
111
|
-
cronExpression:
|
|
112
|
-
timezone:
|
|
113
|
-
jobType:
|
|
114
|
-
jobVersion:
|
|
115
|
-
payload:
|
|
116
|
-
maxRetries:
|
|
117
|
-
timeoutMs:
|
|
118
|
-
enabled:
|
|
119
|
-
lastRunAt:
|
|
120
|
-
nextRunAt:
|
|
121
|
-
tenantId:
|
|
122
|
-
createdAt:
|
|
123
|
-
updatedAt:
|
|
124
|
-
jobs:
|
|
125
|
-
}> |
|
|
126
|
-
id:
|
|
127
|
-
jobId:
|
|
128
|
-
attemptNumber:
|
|
129
|
-
startedAt:
|
|
130
|
-
completedAt:
|
|
131
|
-
durationMs:
|
|
132
|
-
success:
|
|
133
|
-
error:
|
|
134
|
-
errorStack:
|
|
135
|
-
result:
|
|
136
|
-
workerId:
|
|
137
|
-
job:
|
|
81
|
+
declare const jobEntities: (_lssm_lib_schema95.EntitySpec<{
|
|
82
|
+
id: _lssm_lib_schema95.EntityScalarField;
|
|
83
|
+
type: _lssm_lib_schema95.EntityScalarField;
|
|
84
|
+
version: _lssm_lib_schema95.EntityScalarField;
|
|
85
|
+
payload: _lssm_lib_schema95.EntityScalarField;
|
|
86
|
+
status: _lssm_lib_schema95.EntityEnumField;
|
|
87
|
+
priority: _lssm_lib_schema95.EntityScalarField;
|
|
88
|
+
attempts: _lssm_lib_schema95.EntityScalarField;
|
|
89
|
+
maxRetries: _lssm_lib_schema95.EntityScalarField;
|
|
90
|
+
lastError: _lssm_lib_schema95.EntityScalarField;
|
|
91
|
+
lastErrorStack: _lssm_lib_schema95.EntityScalarField;
|
|
92
|
+
scheduledAt: _lssm_lib_schema95.EntityScalarField;
|
|
93
|
+
startedAt: _lssm_lib_schema95.EntityScalarField;
|
|
94
|
+
completedAt: _lssm_lib_schema95.EntityScalarField;
|
|
95
|
+
timeoutAt: _lssm_lib_schema95.EntityScalarField;
|
|
96
|
+
dedupeKey: _lssm_lib_schema95.EntityScalarField;
|
|
97
|
+
tenantId: _lssm_lib_schema95.EntityScalarField;
|
|
98
|
+
userId: _lssm_lib_schema95.EntityScalarField;
|
|
99
|
+
traceId: _lssm_lib_schema95.EntityScalarField;
|
|
100
|
+
metadata: _lssm_lib_schema95.EntityScalarField;
|
|
101
|
+
result: _lssm_lib_schema95.EntityScalarField;
|
|
102
|
+
createdAt: _lssm_lib_schema95.EntityScalarField;
|
|
103
|
+
updatedAt: _lssm_lib_schema95.EntityScalarField;
|
|
104
|
+
scheduledJob: _lssm_lib_schema95.EntityRelationField;
|
|
105
|
+
scheduledJobId: _lssm_lib_schema95.EntityScalarField;
|
|
106
|
+
executions: _lssm_lib_schema95.EntityRelationField;
|
|
107
|
+
}> | _lssm_lib_schema95.EntitySpec<{
|
|
108
|
+
id: _lssm_lib_schema95.EntityScalarField;
|
|
109
|
+
name: _lssm_lib_schema95.EntityScalarField;
|
|
110
|
+
description: _lssm_lib_schema95.EntityScalarField;
|
|
111
|
+
cronExpression: _lssm_lib_schema95.EntityScalarField;
|
|
112
|
+
timezone: _lssm_lib_schema95.EntityScalarField;
|
|
113
|
+
jobType: _lssm_lib_schema95.EntityScalarField;
|
|
114
|
+
jobVersion: _lssm_lib_schema95.EntityScalarField;
|
|
115
|
+
payload: _lssm_lib_schema95.EntityScalarField;
|
|
116
|
+
maxRetries: _lssm_lib_schema95.EntityScalarField;
|
|
117
|
+
timeoutMs: _lssm_lib_schema95.EntityScalarField;
|
|
118
|
+
enabled: _lssm_lib_schema95.EntityScalarField;
|
|
119
|
+
lastRunAt: _lssm_lib_schema95.EntityScalarField;
|
|
120
|
+
nextRunAt: _lssm_lib_schema95.EntityScalarField;
|
|
121
|
+
tenantId: _lssm_lib_schema95.EntityScalarField;
|
|
122
|
+
createdAt: _lssm_lib_schema95.EntityScalarField;
|
|
123
|
+
updatedAt: _lssm_lib_schema95.EntityScalarField;
|
|
124
|
+
jobs: _lssm_lib_schema95.EntityRelationField;
|
|
125
|
+
}> | _lssm_lib_schema95.EntitySpec<{
|
|
126
|
+
id: _lssm_lib_schema95.EntityScalarField;
|
|
127
|
+
jobId: _lssm_lib_schema95.EntityScalarField;
|
|
128
|
+
attemptNumber: _lssm_lib_schema95.EntityScalarField;
|
|
129
|
+
startedAt: _lssm_lib_schema95.EntityScalarField;
|
|
130
|
+
completedAt: _lssm_lib_schema95.EntityScalarField;
|
|
131
|
+
durationMs: _lssm_lib_schema95.EntityScalarField;
|
|
132
|
+
success: _lssm_lib_schema95.EntityScalarField;
|
|
133
|
+
error: _lssm_lib_schema95.EntityScalarField;
|
|
134
|
+
errorStack: _lssm_lib_schema95.EntityScalarField;
|
|
135
|
+
result: _lssm_lib_schema95.EntityScalarField;
|
|
136
|
+
workerId: _lssm_lib_schema95.EntityScalarField;
|
|
137
|
+
job: _lssm_lib_schema95.EntityRelationField;
|
|
138
138
|
}>)[];
|
|
139
139
|
/**
|
|
140
140
|
* Module schema contribution for jobs.
|
package/dist/entities/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"../schema/dist/entity/defineEntity.js";import"../schema/dist/index.js";const i=t({name:`JobStatus`,values:[`PENDING`,`RUNNING`,`COMPLETED`,`FAILED`,`CANCELLED`,`DEAD_LETTER`],schema:`lssm_jobs`,description:`Status of a background job.`}),a=r({name:`Job`,description:`A background job for async processing.`,schema:`lssm_jobs`,map:`job`,fields:{id:n.id({description:`Unique job identifier`}),type:n.string({description:`Job type identifier`}),version:n.int({default:1,description:`Job type version`}),payload:n.json({description:`Job payload data`}),status:n.enum(`JobStatus`,{default:`PENDING`}),priority:n.int({default:0,description:`Higher = more urgent`}),attempts:n.int({default:0,description:`Number of execution attempts`}),maxRetries:n.int({default:3,description:`Maximum retry attempts`}),lastError:n.string({isOptional:!0,description:`Last error message`}),lastErrorStack:n.string({isOptional:!0,description:`Last error stack trace`}),scheduledAt:n.dateTime({isOptional:!0,description:`When job should be processed`}),startedAt:n.dateTime({isOptional:!0,description:`When processing started`}),completedAt:n.dateTime({isOptional:!0,description:`When processing completed`}),timeoutAt:n.dateTime({isOptional:!0,description:`Job timeout deadline`}),dedupeKey:n.string({isOptional:!0,description:`Key for deduplication`}),tenantId:n.string({isOptional:!0,description:`Tenant/org context`}),userId:n.string({isOptional:!0,description:`User who enqueued`}),traceId:n.string({isOptional:!0,description:`Distributed trace ID`}),metadata:n.json({isOptional:!0,description:`Additional metadata`}),result:n.json({isOptional:!0,description:`Job result data`}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),scheduledJob:n.belongsTo(`ScheduledJob`,[`scheduledJobId`],[`id`]),scheduledJobId:n.string({isOptional:!0}),executions:n.hasMany(`JobExecution`)},indexes:[e.on([`status`,`scheduledAt`]),e.on([`type`,`status`]),e.on([`tenantId`,`status`]),e.unique([`dedupeKey`],{name:`job_dedupe_key_unique`})],enums:[i]}),o=r({name:`ScheduledJob`,description:`A scheduled/recurring job definition.`,schema:`lssm_jobs`,map:`scheduled_job`,fields:{id:n.id(),name:n.string({isUnique:!0,description:`Unique schedule name`}),description:n.string({isOptional:!0}),cronExpression:n.string({description:`Cron expression for scheduling`}),timezone:n.string({default:`"UTC"`,description:`Timezone for cron evaluation`}),jobType:n.string({description:`Job type to create`}),jobVersion:n.int({default:1}),payload:n.json({isOptional:!0,description:`Default payload for created jobs`}),maxRetries:n.int({default:3}),timeoutMs:n.int({isOptional:!0,description:`Job timeout in milliseconds`}),enabled:n.boolean({default:!0}),lastRunAt:n.dateTime({isOptional:!0}),nextRunAt:n.dateTime({isOptional:!0}),tenantId:n.string({isOptional:!0}),createdAt:n.createdAt(),updatedAt:n.updatedAt(),jobs:n.hasMany(`Job`)},indexes:[e.on([`enabled`,`nextRunAt`])]}),s=r({name:`JobExecution`,description:`A single execution attempt of a job.`,schema:`lssm_jobs`,map:`job_execution`,fields:{id:n.id(),jobId:n.foreignKey(),attemptNumber:n.int({description:`Which attempt this is`}),startedAt:n.dateTime(),completedAt:n.dateTime({isOptional:!0}),durationMs:n.int({isOptional:!0}),success:n.boolean({isOptional:!0}),error:n.string({isOptional:!0}),errorStack:n.string({isOptional:!0}),result:n.json({isOptional:!0}),workerId:n.string({isOptional:!0,description:`ID of worker that processed`}),job:n.belongsTo(`Job`,[`jobId`],[`id`],{onDelete:`Cascade`})},indexes:[e.on([`jobId`,`attemptNumber`])]}),c=[a,o,s],l={moduleId:`@lssm/lib.jobs`,entities:c,enums:[i]};export{a as JobEntity,s as JobExecutionEntity,i as JobStatusEnum,o as ScheduledJobEntity,c as jobEntities,l as jobsSchemaContribution};
|
package/dist/events.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as e}from"./schema/dist/ScalarTypeEnum.js";import{n as t}from"./schema/dist/SchemaModel.js";import"./schema/dist/index.js";import{e as n}from"./contracts/dist/events.js";import"./contracts/dist/index.js";const r=t({name:`JobEnqueuedEventPayload`,description:`Payload when a job is added to the queue`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},priority:{type:e.Int_unsecure(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!0},tenantId:{type:e.String_unsecure(),isOptional:!0},enqueuedAt:{type:e.DateTime(),isOptional:!1}}}),i=t({name:`JobStartedEventPayload`,description:`Payload when a job starts processing`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},attempt:{type:e.Int_unsecure(),isOptional:!1},startedAt:{type:e.DateTime(),isOptional:!1}}}),a=t({name:`JobCompletedEventPayload`,description:`Payload when a job completes successfully`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},attempt:{type:e.Int_unsecure(),isOptional:!1},durationMs:{type:e.Int_unsecure(),isOptional:!1},completedAt:{type:e.DateTime(),isOptional:!1}}}),o=t({name:`JobFailedEventPayload`,description:`Payload when a job attempt fails`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},attempt:{type:e.Int_unsecure(),isOptional:!1},error:{type:e.String_unsecure(),isOptional:!1},willRetry:{type:e.Boolean(),isOptional:!1},failedAt:{type:e.DateTime(),isOptional:!1}}}),s=t({name:`JobRetryingEventPayload`,description:`Payload when a job is scheduled for retry`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},attempt:{type:e.Int_unsecure(),isOptional:!1},nextAttemptAt:{type:e.DateTime(),isOptional:!1},backoffMs:{type:e.Int_unsecure(),isOptional:!1}}}),c=t({name:`JobDeadLetteredEventPayload`,description:`Payload when a job is moved to dead letter queue`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},attempts:{type:e.Int_unsecure(),isOptional:!1},lastError:{type:e.String_unsecure(),isOptional:!1},deadLetteredAt:{type:e.DateTime(),isOptional:!1}}}),l=t({name:`JobCancelledEventPayload`,description:`Payload when a job is cancelled`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},type:{type:e.String_unsecure(),isOptional:!1},cancelledBy:{type:e.String_unsecure(),isOptional:!0},cancelledAt:{type:e.DateTime(),isOptional:!1}}}),u=t({name:`ScheduledJobTriggeredEventPayload`,description:`Payload when a scheduled job is triggered`,fields:{scheduleName:{type:e.String_unsecure(),isOptional:!1},jobId:{type:e.String_unsecure(),isOptional:!1},jobType:{type:e.String_unsecure(),isOptional:!1},triggeredAt:{type:e.DateTime(),isOptional:!1},nextRunAt:{type:e.DateTime(),isOptional:!0}}}),d=n({name:`job.enqueued`,version:1,description:`A job has been added to the queue.`,payload:r}),f=n({name:`job.started`,version:1,description:`A job has started processing.`,payload:i}),p=n({name:`job.completed`,version:1,description:`A job has completed successfully.`,payload:a}),m=n({name:`job.failed`,version:1,description:`A job attempt has failed.`,payload:o}),h=n({name:`job.retrying`,version:1,description:`A job is being scheduled for retry.`,payload:s}),g=n({name:`job.dead_lettered`,version:1,description:`A job has exhausted all retries and moved to dead letter queue.`,payload:c}),_=n({name:`job.cancelled`,version:1,description:`A job has been cancelled.`,payload:l}),v=n({name:`scheduler.job_triggered`,version:1,description:`A scheduled job has been triggered.`,payload:u}),y={JobEnqueuedEvent:d,JobStartedEvent:f,JobCompletedEvent:p,JobFailedEvent:m,JobRetryingEvent:h,JobDeadLetteredEvent:g,JobCancelledEvent:_,ScheduledJobTriggeredEvent:v};export{_ as JobCancelledEvent,p as JobCompletedEvent,g as JobDeadLetteredEvent,d as JobEnqueuedEvent,y as JobEvents,m as JobFailedEvent,h as JobRetryingEvent,f as JobStartedEvent,v as ScheduledJobTriggeredEvent};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{JobCancelledEvent as e,JobCompletedEvent as t,JobDeadLetteredEvent as n,JobEnqueuedEvent as r,JobEvents as i,JobFailedEvent as a,JobRetryingEvent as o,JobStartedEvent as s,ScheduledJobTriggeredEvent as c}from"./events.js";import{JobEntity as l,JobExecutionEntity as u,JobStatusEnum as d,ScheduledJobEntity as f,jobEntities as p,jobsSchemaContribution as m}from"./entities/index.js";import{e as h,n as g,t as _}from"./contracts/dist/jobs/queue.js";import{MemoryJobQueue as v}from"./queue/memory-queue.js";import{ScalewaySqsJobQueue as y}from"./queue/scaleway-sqs-queue.js";import{GcpCloudTasksQueue as b}from"./queue/gcp-cloud-tasks.js";import{GcpPubSubQueue as x}from"./queue/gcp-pubsub.js";import{registerDefinedJob as S}from"./queue/register-defined-job.js";import"./queue/index.js";import{PING_JOB_TYPE as C,PingPayloadSchema as w,pingJob as T}from"./handlers/ping-job.js";import{createGmailSyncHandler as E}from"./handlers/gmail-sync-handler.js";import{createStorageDocumentHandler as D}from"./handlers/storage-document-handler.js";import{registerAllJobs as O}from"./handlers/index.js";import{JobScheduler as k,createScheduler as A,defineSchedule as j}from"./scheduler/index.js";import{CancelJobContract as M,CreateScheduledJobContract as N,EnqueueJobContract as P,GetJobContract as F,GetQueueStatsContract as I,JobModel as L,ListScheduledJobsContract as R,QueueStatsModel as z,ScheduledJobModel as B,ToggleScheduledJobContract as V}from"./contracts/index.js";import{JobsFeature as H}from"./jobs.feature.js";export{M as CancelJobContract,N as CreateScheduledJobContract,h as DEFAULT_RETRY_POLICY,P as EnqueueJobContract,b as GcpCloudTasksQueue,x as GcpPubSubQueue,F as GetJobContract,I as GetQueueStatsContract,e as JobCancelledEvent,t as JobCompletedEvent,n as JobDeadLetteredEvent,r as JobEnqueuedEvent,l as JobEntity,i as JobEvents,u as JobExecutionEntity,a as JobFailedEvent,L as JobModel,o as JobRetryingEvent,k as JobScheduler,s as JobStartedEvent,d as JobStatusEnum,H as JobsFeature,R as ListScheduledJobsContract,v as MemoryJobQueue,C as PING_JOB_TYPE,w as PingPayloadSchema,z as QueueStatsModel,y as ScalewaySqsJobQueue,f as ScheduledJobEntity,B as ScheduledJobModel,c as ScheduledJobTriggeredEvent,V as ToggleScheduledJobContract,_ as calculateBackoff,E as createGmailSyncHandler,A as createScheduler,D as createStorageDocumentHandler,g as defineJobType,j as defineSchedule,p as jobEntities,m as jobsSchemaContribution,T as pingJob,O as registerAllJobs,S as registerDefinedJob};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e}from"../contracts/dist/jobs/queue.js";import"./types.js";import{randomUUID as t}from"node:crypto";var n=class{handlers=new Map;constructor(e){this.options=e}async enqueue(n,r,i={}){let a=new Date,o=i.delaySeconds==null?void 0:{seconds:Math.floor(Date.now()/1e3)+i.delaySeconds},s=Buffer.from(JSON.stringify({id:t(),type:n,payload:r}),`utf-8`);return await this.options.client.createTask({parent:`projects/${this.options.projectId}/locations/${this.options.location}/queues/${this.options.queue}`,task:{httpRequest:{httpMethod:`POST`,url:this.options.resolveUrl(n),body:s,headers:{"Content-Type":`application/json`},oidcToken:this.options.serviceAccountEmail?{serviceAccountEmail:this.options.serviceAccountEmail}:void 0},scheduleTime:o}}),{id:t(),type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:a,updatedAt:a,scheduledAt:i.delaySeconds?new Date(a.getTime()+i.delaySeconds*1e3):a,dedupeKey:i.dedupeKey,tenantId:i.tenantId,userId:i.userId,traceId:i.traceId,metadata:i.metadata}}register(e,t){this.handlers.set(e,t)}start(){}async stop(){this.handlers.clear()}};export{n as GcpCloudTasksQueue};
|
package/dist/queue/gcp-pubsub.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e}from"../contracts/dist/jobs/queue.js";import"./types.js";import{randomUUID as t}from"node:crypto";var n=class{handlers=new Map;constructor(e){this.options=e}async enqueue(n,r,i={}){let a=new Date;return await this.options.client.topic(this.options.topicName).publishMessage({data:Buffer.from(JSON.stringify({id:t(),type:n,payload:r}),`utf-8`)}),{id:t(),type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:a,updatedAt:a,scheduledAt:i.delaySeconds?new Date(a.getTime()+i.delaySeconds*1e3):a,dedupeKey:i.dedupeKey,tenantId:i.tenantId,userId:i.userId,traceId:i.traceId,metadata:i.metadata}}register(e,t){this.handlers.set(e,t)}start(){}async stop(){this.handlers.clear()}};export{n as GcpPubSubQueue};
|
package/dist/queue/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e,n as t,t as n}from"../contracts/dist/jobs/queue.js";import"./types.js";import{MemoryJobQueue as r}from"./memory-queue.js";import{ScalewaySqsJobQueue as i}from"./scaleway-sqs-queue.js";import{GcpCloudTasksQueue as a}from"./gcp-cloud-tasks.js";import{GcpPubSubQueue as o}from"./gcp-pubsub.js";import{registerDefinedJob as s}from"./register-defined-job.js";export{e as DEFAULT_RETRY_POLICY,a as GcpCloudTasksQueue,o as GcpPubSubQueue,r as MemoryJobQueue,i as ScalewaySqsJobQueue,n as calculateBackoff,t as defineJobType,s as registerDefinedJob};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e,t}from"../contracts/dist/jobs/queue.js";import"./types.js";import{randomUUID as n}from"node:crypto";var r=class{jobs=new Map;handlers=new Map;timer;activeCount=0;pollIntervalMs;concurrency;retryPolicy;constructor(t={}){this.pollIntervalMs=t.pollIntervalMs??200,this.concurrency=t.concurrency??5,this.retryPolicy=t.retryPolicy??e}async enqueue(e,t,r={}){if(r.dedupeKey){let e=Array.from(this.jobs.values()).find(e=>e.dedupeKey===r.dedupeKey&&e.status===`pending`);if(e)return e}let i=new Date,a=r.delaySeconds?new Date(i.getTime()+r.delaySeconds*1e3):i,o={id:n(),type:e,version:1,payload:t,status:`pending`,priority:r.priority??0,attempts:0,maxRetries:r.maxRetries??this.retryPolicy.maxRetries,createdAt:i,updatedAt:i,scheduledAt:a,dedupeKey:r.dedupeKey,tenantId:r.tenantId,userId:r.userId,traceId:r.traceId,metadata:r.metadata};return r.timeoutMs&&(o.timeoutAt=new Date(i.getTime()+r.timeoutMs)),this.jobs.set(o.id,o),o}register(e,t){this.handlers.set(e,t)}start(){this.timer||=setInterval(()=>{this.processNext()},this.pollIntervalMs)}async stop(){for(this.timer&&=(clearInterval(this.timer),void 0);this.activeCount>0;)await new Promise(e=>setTimeout(e,50))}async getJob(e){return this.jobs.get(e)??null}async cancelJob(e){let t=this.jobs.get(e);return!t||t.status!==`pending`?!1:(t.status=`cancelled`,t.updatedAt=new Date,!0)}async getStats(){let e={pending:0,running:0,completed:0,failed:0,deadLetter:0};for(let t of this.jobs.values())switch(t.status){case`pending`:e.pending++;break;case`running`:e.running++;break;case`completed`:e.completed++;break;case`failed`:e.failed++;break;case`dead_letter`:e.deadLetter++;break}return e}async processNext(){if(this.activeCount>=this.concurrency)return;let e=new Date,n=Array.from(this.jobs.values()).filter(t=>t.status===`pending`&&(!t.scheduledAt||t.scheduledAt<=e)).sort((e,t)=>e.priority===t.priority?(e.scheduledAt?.getTime()??0)-(t.scheduledAt?.getTime()??0):t.priority-e.priority)[0];if(!n)return;let r=this.handlers.get(n.type);if(r){this.activeCount++,n.status=`running`,n.startedAt=new Date,n.updatedAt=new Date,n.attempts+=1;try{let e=await r(n);n.status=`completed`,n.completedAt=new Date,n.result=e}catch(e){if(n.lastError=e instanceof Error?e.message:`Unknown error`,n.attempts>=n.maxRetries)n.status=`dead_letter`;else{let e=t(n.attempts,this.retryPolicy);n.status=`pending`,n.scheduledAt=new Date(Date.now()+e)}}finally{n.updatedAt=new Date,this.activeCount--}}}};export{r as MemoryJobQueue};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e}from"../contracts/dist/jobs/queue.js";import"./types.js";import{randomUUID as t}from"node:crypto";import{DeleteMessageCommand as n,ReceiveMessageCommand as r,SQSClient as i,SendMessageCommand as a}from"@aws-sdk/client-sqs";var o=class{sqs;queueUrl;waitTimeSeconds;maxNumberOfMessages;visibilityTimeoutSeconds;handlers=new Map;logger;running=!1;constructor(e){this.logger=e.logger;let t=e.credentials?.accessKeyId??process.env.SCALEWAY_ACCESS_KEY_QUEUE,n=e.credentials?.secretAccessKey??process.env.SCALEWAY_SECRET_KEY_QUEUE;if(!t||!n)throw Error(`Missing SCALEWAY_ACCESS_KEY_QUEUE / SCALEWAY_SECRET_KEY_QUEUE in env`);this.sqs=new i({region:e.region??process.env.SCALEWAY_REGION??`par`,endpoint:e.endpoint??`https://sqs.mnq.fr-par.scaleway.com`,credentials:{accessKeyId:t,secretAccessKey:n}}),this.queueUrl=e.queueUrl,this.waitTimeSeconds=e.waitTimeSeconds??20,this.maxNumberOfMessages=e.maxNumberOfMessages??5,this.visibilityTimeoutSeconds=e.visibilityTimeoutSeconds??60}async enqueue(n,r,i={}){let o=t(),s=new Date,c=i.delaySeconds?new Date(s.getTime()+i.delaySeconds*1e3):s,l={id:o,type:n,payload:r};return await this.sqs.send(new a({QueueUrl:this.queueUrl,MessageBody:JSON.stringify(l),DelaySeconds:i.delaySeconds??0})),{id:o,type:n,version:1,payload:r,status:`pending`,priority:i.priority??0,attempts:0,maxRetries:i.maxRetries??e.maxRetries,createdAt:s,updatedAt:s,scheduledAt:c,dedupeKey:i.dedupeKey,tenantId:i.tenantId,userId:i.userId,traceId:i.traceId,metadata:i.metadata}}register(e,t){if(this.handlers.has(e))throw Error(`Handler already registered for job type "${e}"`);this.handlers.set(e,t)}start(){this.running||(this.running=!0,this.pollLoop().catch(e=>{this.logger?.error?.(`jobs.queue.scaleway_sqs.poll_loop_fatal`,{error:e instanceof Error?e.message:String(e)}),this.running=!1}))}async stop(){this.running=!1}async pollLoop(){for(this.logger?.info?.(`jobs.queue.scaleway_sqs.started`,{queueUrl:this.queueUrl});this.running;)try{let t=(await this.sqs.send(new r({QueueUrl:this.queueUrl,MaxNumberOfMessages:this.maxNumberOfMessages,WaitTimeSeconds:this.waitTimeSeconds,VisibilityTimeout:this.visibilityTimeoutSeconds,MessageSystemAttributeNames:[`ApproximateReceiveCount`]}))).Messages??[];if(t.length===0)continue;for(let n of t){if(!n.Body||!n.ReceiptHandle){this.logger?.warn?.(`jobs.queue.scaleway_sqs.invalid_message`,{messageId:n.MessageId,reason:`missing_body_or_receipt`});continue}let t;try{t=JSON.parse(n.Body)}catch(e){this.logger?.warn?.(`jobs.queue.scaleway_sqs.parse_failed`,{messageId:n.MessageId,error:e instanceof Error?e.message:String(e)}),await this.deleteMessage(n.ReceiptHandle);continue}let r=this.handlers.get(t.type);if(!r){this.logger?.warn?.(`jobs.queue.scaleway_sqs.missing_handler`,{jobType:t.type,messageId:n.MessageId}),await this.deleteMessage(n.ReceiptHandle);continue}let i=new Date,a=parseInt(n.Attributes?.ApproximateReceiveCount??`1`,10),o={id:t.id,type:t.type,version:1,payload:t.payload,status:`pending`,priority:0,attempts:a,maxRetries:e.maxRetries,createdAt:i,updatedAt:i};o.status=`running`,o.updatedAt=new Date;try{await r(o),o.status=`completed`,o.updatedAt=new Date,await this.deleteMessage(n.ReceiptHandle)}catch(e){o.status=`failed`,o.lastError=e instanceof Error?e.message:`Unknown job error`,o.updatedAt=new Date,this.logger?.error?.(`jobs.queue.scaleway_sqs.job_failed`,{jobType:o.type,jobId:o.id,error:e instanceof Error?e.message:String(e)})}}}catch(e){this.logger?.error?.(`jobs.queue.scaleway_sqs.poll_error`,{error:e instanceof Error?e.message:String(e)}),await this.sleep(5e3)}this.logger?.info?.(`jobs.queue.scaleway_sqs.stopped`,{queueUrl:this.queueUrl})}async deleteMessage(e){try{await this.sqs.send(new n({QueueUrl:this.queueUrl,ReceiptHandle:e}))}catch(e){this.logger?.warn?.(`jobs.queue.scaleway_sqs.delete_failed`,{error:e instanceof Error?e.message:String(e)})}}async sleep(e){await new Promise(t=>setTimeout(t,e))}};export{o as ScalewaySqsJobQueue};
|
package/dist/queue/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{e,n as t,t as n}from"../contracts/dist/jobs/queue.js";export{e as DEFAULT_RETRY_POLICY,n as calculateBackoff,t as defineJobType};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"zod";import"graphql";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"zod";import{GraphQLScalarType as e}from"graphql";var t=class extends e{zodSchema;jsonSchemaDef;constructor(e){super(e),this.zodSchema=e.zod,this.jsonSchemaDef=e.jsonSchema}getZod(){return this.zodSchema}getPothos(){return this}getJson(){return typeof this.jsonSchemaDef==`function`?this.jsonSchemaDef():this.jsonSchemaDef}getJsonSchemaDef(){return this.jsonSchemaDef}getJsonSchema(){let e=t=>{let n=typeof t==`function`?t():t;if(Array.isArray(n))return n.map(t=>e(t));if(n&&typeof n==`object`){let t={};for(let[r,i]of Object.entries(n))t[r]=e(i);return t}return n};return e(this.getJson())}};export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./FieldType.js";import*as t from"zod";import{Kind as n}from"graphql";const r=/^[A-Za-z]{2}(?:-[A-Za-z0-9]{2,8})*$/,i=/^(?:UTC|[A-Za-z_]+\/[A-Za-z_]+)$/,a=/^[+]?\d[\d\s().-]{3,}$/,o=/^[A-Z]{3}$/,s=/^[A-Z]{2}$/,c=-180,l={String_unsecure:()=>new e({name:`String_unsecure`,description:`Unvalidated string scalar`,zod:t.string(),parseValue:e=>t.string().parse(e),serialize:e=>String(e),parseLiteral:e=>{if(e.kind!==n.STRING)throw TypeError(`Invalid literal`);return e.value},jsonSchema:{type:`string`}}),Int_unsecure:()=>new e({name:`Int_unsecure`,description:`Unvalidated integer scalar`,zod:t.number().int(),parseValue:e=>{let n=typeof e==`number`?e:Number(e);return t.number().int().parse(n)},serialize:e=>Math.trunc(typeof e==`number`?e:Number(e)),parseLiteral:e=>{if(e.kind!==n.INT)throw TypeError(`Invalid literal`);return Number(e.value)},jsonSchema:{type:`integer`}}),Float_unsecure:()=>new e({name:`Float_unsecure`,description:`Unvalidated float scalar`,zod:t.number(),parseValue:e=>{let n=typeof e==`number`?e:Number(e);return t.number().parse(n)},serialize:e=>Number(e),parseLiteral:e=>{if(e.kind!==n.FLOAT&&e.kind!==n.INT)throw TypeError(`Invalid literal`);return Number(e.value)},jsonSchema:{type:`number`}}),Boolean:()=>new e({name:`Boolean`,description:`Unvalidated boolean scalar`,zod:t.boolean(),parseValue:e=>t.coerce.boolean().parse(e),serialize:e=>!!e,parseLiteral:e=>{if(e.kind!==n.BOOLEAN)throw TypeError(`Invalid literal`);return e.value},jsonSchema:{type:`boolean`}}),ID:()=>new e({name:`ID`,description:`Unvalidated id scalar`,zod:t.string(),parseValue:e=>t.string().parse(e),serialize:e=>String(e),parseLiteral:e=>{if(e.kind!==n.STRING)throw TypeError(`Invalid literal`);return e.value},jsonSchema:{type:`string`}}),JSON:()=>new e({name:`JSON`,zod:t.any(),parseValue:e=>e,serialize:e=>e,jsonSchema:{}}),JSONObject:()=>new e({name:`JSONObject`,zod:t.record(t.string(),t.any()),parseValue:e=>t.record(t.string(),t.any()).parse(e),serialize:e=>e??{},jsonSchema:{type:`object`}}),Date:()=>new e({name:`Date`,zod:t.date(),parseValue:e=>e instanceof Date?e:new Date(String(e)),serialize:e=>e instanceof Date?e.toISOString().split(`T`)[0]:String(e),jsonSchema:{type:`string`,format:`date`}}),DateTime:()=>new e({name:`DateTime`,zod:t.date(),parseValue:e=>e instanceof Date?e:new Date(String(e)),serialize:e=>e instanceof Date?e.toISOString():String(e),jsonSchema:{type:`string`,format:`date-time`}}),Time:()=>new e({name:`Time`,zod:t.string().regex(/^\d{2}:\d{2}(:\d{2})?$/),parseValue:e=>t.string().regex(/^\d{2}:\d{2}(:\d{2})?$/).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:`^\\d{2}:\\d{2}(:\\d{2})?$`}}),EmailAddress:()=>new e({name:`EmailAddress`,zod:t.string().email(),parseValue:e=>t.string().email().parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,format:`email`}}),URL:()=>new e({name:`URL`,zod:t.string().url(),parseValue:e=>t.string().url().parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,format:`uri`}}),PhoneNumber:()=>new e({name:`PhoneNumber`,zod:t.string().regex(a),parseValue:e=>t.string().regex(a).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:a.source}}),NonEmptyString:()=>new e({name:`NonEmptyString`,zod:t.string().min(1),parseValue:e=>t.string().min(1).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,minLength:1}}),Locale:()=>new e({name:`Locale`,zod:t.string().regex(r),parseValue:e=>t.string().regex(r).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:r.source}}),TimeZone:()=>new e({name:`TimeZone`,zod:t.string().regex(i),parseValue:e=>t.string().regex(i).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:i.source}}),Latitude:()=>new e({name:`Latitude`,zod:t.number().min(-90).max(90),parseValue:e=>t.coerce.number().min(-90).max(90).parse(e),serialize:e=>Number(e),jsonSchema:{type:`number`,minimum:-90,maximum:90}}),Longitude:()=>new e({name:`Longitude`,zod:t.number().min(c).max(180),parseValue:e=>t.coerce.number().min(c).max(180).parse(e),serialize:e=>Number(e),jsonSchema:{type:`number`,minimum:c,maximum:180}}),Currency:()=>new e({name:`Currency`,zod:t.string().regex(o),parseValue:e=>t.string().regex(o).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:o.source}}),CountryCode:()=>new e({name:`CountryCode`,zod:t.string().regex(s),parseValue:e=>t.string().regex(s).parse(e),serialize:e=>String(e),jsonSchema:{type:`string`,pattern:s.source}})};export{l};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./EnumType.js";import"./FieldType.js";import*as e from"zod";var t=class{constructor(e){this.config=e}getZod(){let t=Object.entries(this.config.fields).reduce((t,[n,r])=>{let i=r.type.getZod(),a=r.isArray?e.array(i):i;return t[n]=r.isOptional?a.optional():a,t},{});return e.object(t)}getPothosInput(){return this.config.name}};const n=e=>new t(e);export{n,t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import*as e from"zod";function t(e){return e}function n(e){return e}const r={string(e){return{kind:`scalar`,type:`String`,...e}},int(e){return{kind:`scalar`,type:`Int`,...e}},float(e){return{kind:`scalar`,type:`Float`,...e}},boolean(e){return{kind:`scalar`,type:`Boolean`,...e}},dateTime(e){return{kind:`scalar`,type:`DateTime`,...e}},json(e){return{kind:`scalar`,type:`Json`,...e}},bigInt(e){return{kind:`scalar`,type:`BigInt`,...e}},decimal(e){return{kind:`scalar`,type:`Decimal`,...e}},bytes(e){return{kind:`scalar`,type:`Bytes`,...e}},id(e){return{kind:`scalar`,type:`String`,isId:!0,default:`cuid()`,...e}},uuid(e){return{kind:`scalar`,type:`String`,isId:!0,default:`uuid()`,...e}},autoIncrement(e){return{kind:`scalar`,type:`Int`,isId:!0,default:`autoincrement()`,...e}},createdAt(e){return{kind:`scalar`,type:`DateTime`,default:`now()`,...e}},updatedAt(e){return{kind:`scalar`,type:`DateTime`,updatedAt:!0,...e}},email(t){return{kind:`scalar`,type:`String`,zod:e.email(),...t}},url(t){return{kind:`scalar`,type:`String`,zod:e.url(),...t}},enum(e,t){return{kind:`enum`,enumName:e,...t}},inlineEnum(e,t,n){return{kind:`enum`,enumName:e,values:t,...n}},hasOne(e,t){return{kind:`relation`,type:`hasOne`,target:e,...t}},hasMany(e,t){return{kind:`relation`,type:`hasMany`,target:e,...t}},belongsTo(e,t,n,r){return{kind:`relation`,type:`belongsTo`,target:e,fields:t,references:n,...r}},foreignKey(e){return{kind:`scalar`,type:`String`,...e}}},i={on(e,t){return{fields:e,...t}},unique(e,t){return{fields:e,unique:!0,...t}},compound(e,t,n){return{fields:e,sort:t,...n}}};export{i,n,r,t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./defineEntity.js";import"./types.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"zod";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./EnumType.js";import{t as e}from"./FieldType.js";import{l as t}from"./ScalarTypeEnum.js";import{n,t as r}from"./SchemaModel.js";import{i,n as a,r as o,t as s}from"./entity/defineEntity.js";import"./entity/index.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/lib.jobs",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251217062943",
|
|
4
4
|
"description": "Background jobs and scheduler module for ContractSpec applications",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -18,16 +18,16 @@
|
|
|
18
18
|
"lint:check": "eslint src"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@lssm/lib.schema": "0.0.0-canary-
|
|
22
|
-
"@lssm/lib.contracts": "0.0.0-canary-
|
|
23
|
-
"@lssm/lib.logger": "0.0.0-canary-
|
|
21
|
+
"@lssm/lib.schema": "0.0.0-canary-20251217062943",
|
|
22
|
+
"@lssm/lib.contracts": "0.0.0-canary-20251217062943",
|
|
23
|
+
"@lssm/lib.logger": "0.0.0-canary-20251217062943",
|
|
24
24
|
"@aws-sdk/client-sqs": "^3.948.0",
|
|
25
25
|
"zod": "^4.1.13",
|
|
26
26
|
"cron-parser": "^5.4.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"@lssm/tool.typescript": "0.0.0-canary-
|
|
30
|
-
"@lssm/tool.tsdown": "0.0.0-canary-
|
|
29
|
+
"@lssm/tool.typescript": "0.0.0-canary-20251217062943",
|
|
30
|
+
"@lssm/tool.tsdown": "0.0.0-canary-20251217062943",
|
|
31
31
|
"typescript": "^5.9.3"
|
|
32
32
|
},
|
|
33
33
|
"exports": {
|