@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ossy/platform",
3
- "version": "1.24.2",
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.25.2",
27
- "@ossy/sdk": "^1.25.2",
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": "6e44e53bf3c9b5c14c5bc2b0a02e60a590389b55"
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: null }))
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: null }))
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
  )