@ossy/platform 1.24.2 → 1.25.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/package.json +4 -4
- package/src/server.js +9 -0
- package/src/tasks/task-service.js +22 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ossy/platform",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.0",
|
|
4
4
|
"description": "Ossy application server runtime",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"author": "Ossy <yourfriends@ossy.se> (https://ossy.se)",
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@ossy/router": "^1.
|
|
27
|
-
"@ossy/sdk": "^1.
|
|
26
|
+
"@ossy/router": "^1.26.0",
|
|
27
|
+
"@ossy/sdk": "^1.26.0",
|
|
28
28
|
"cookie-parser": "^1.4.7",
|
|
29
29
|
"dotenv": ">=16.0.0 <18.0.0",
|
|
30
30
|
"express": ">=5.0.0 <6.0.0",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"src",
|
|
36
36
|
"Dockerfile"
|
|
37
37
|
],
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "40e96d148d991ef4ad60fe9090f19b836ff8eb00"
|
|
39
39
|
}
|
package/src/server.js
CHANGED
|
@@ -6,6 +6,7 @@ import morgan from 'morgan'
|
|
|
6
6
|
import { Router as OssyRouter } from '@ossy/router'
|
|
7
7
|
import cookieParser from 'cookie-parser'
|
|
8
8
|
import { ProxyInternal } from './proxy-internal.js'
|
|
9
|
+
import { SDK } from '@ossy/sdk'
|
|
9
10
|
import { TaskService } from './tasks/task-service.js'
|
|
10
11
|
import { ChangeStream } from './tasks/change-stream.js'
|
|
11
12
|
|
|
@@ -99,6 +100,14 @@ export async function startServer (options = {}) {
|
|
|
99
100
|
console.error(`[@ossy/platform][server] Failed to load task "${task.id}":`, err.message)
|
|
100
101
|
}
|
|
101
102
|
}
|
|
103
|
+
|
|
104
|
+
// Register the SDK so all tasks receive it as `sdk`.
|
|
105
|
+
// Priority: explicit options.sdk → SDK.of() from env vars → null (direct-DB fallback in tasks).
|
|
106
|
+
const botSdk = (process.env.API_URL && process.env.OSSY_API_KEY)
|
|
107
|
+
? SDK.of({ apiUrl: process.env.API_URL, authorization: process.env.OSSY_API_KEY })
|
|
108
|
+
: null
|
|
109
|
+
TaskService.setSdk(options.sdk ?? botSdk)
|
|
110
|
+
|
|
102
111
|
TaskService.startScheduler()
|
|
103
112
|
|
|
104
113
|
if (process.env.DB_URL) {
|
|
@@ -13,6 +13,23 @@ export class TaskService {
|
|
|
13
13
|
/** @type {ReturnType<typeof setInterval> | null} */
|
|
14
14
|
static _schedulerInterval = null
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Global SDK instance injected at server startup. Tasks receive this as `sdk`
|
|
18
|
+
* unless a per-call override is supplied to `dispatch`.
|
|
19
|
+
* Set via `TaskService.setSdk(sdk)`.
|
|
20
|
+
* @type {import('@ossy/sdk').SDK | null}
|
|
21
|
+
*/
|
|
22
|
+
static _sdk = null
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Register the SDK instance that every task will receive as `sdk`.
|
|
26
|
+
* Call this once during application startup before ChangeStream / scheduler begin.
|
|
27
|
+
* @param {import('@ossy/sdk').SDK | null} sdk
|
|
28
|
+
*/
|
|
29
|
+
static setSdk(sdk) {
|
|
30
|
+
TaskService._sdk = sdk
|
|
31
|
+
}
|
|
32
|
+
|
|
16
33
|
/**
|
|
17
34
|
* Register a task module to be dispatched on matching events
|
|
18
35
|
* and/or on a cron schedule.
|
|
@@ -43,9 +60,11 @@ export class TaskService {
|
|
|
43
60
|
* registered tasks whose triggers match.
|
|
44
61
|
* @param {object} event - The eventstore fullDocument.
|
|
45
62
|
*/
|
|
46
|
-
static dispatch(event) {
|
|
63
|
+
static dispatch(event, { sdk } = {}) {
|
|
47
64
|
if (!event) return
|
|
48
65
|
|
|
66
|
+
const effectiveSdk = sdk ?? TaskService._sdk
|
|
67
|
+
|
|
49
68
|
for (const { metadata, handler } of TaskService._tasks) {
|
|
50
69
|
const triggers = metadata.triggers ?? []
|
|
51
70
|
const matched = triggers.some(trigger => TaskService._matchesTrigger(trigger, event))
|
|
@@ -55,7 +74,7 @@ export class TaskService {
|
|
|
55
74
|
console.log(`[TaskService] Dispatching task "${metadata.id}"`)
|
|
56
75
|
|
|
57
76
|
Promise.resolve()
|
|
58
|
-
.then(() => handler({ event, sdk:
|
|
77
|
+
.then(() => handler({ event, sdk: effectiveSdk }))
|
|
59
78
|
.catch(error =>
|
|
60
79
|
console.error(`[TaskService] Task "${metadata.id}" failed`, error),
|
|
61
80
|
)
|
|
@@ -85,7 +104,7 @@ export class TaskService {
|
|
|
85
104
|
console.log(`[TaskService] Schedule fired for task "${metadata.id}"`)
|
|
86
105
|
|
|
87
106
|
Promise.resolve()
|
|
88
|
-
.then(() => handler({ event: { type: 'scheduled', taskId: metadata.id }, sdk:
|
|
107
|
+
.then(() => handler({ event: { type: 'scheduled', taskId: metadata.id }, sdk: TaskService._sdk }))
|
|
89
108
|
.catch(error =>
|
|
90
109
|
console.error(`[TaskService] Scheduled task "${metadata.id}" failed`, error),
|
|
91
110
|
)
|