@@ -2,89 +2,95 @@ import { dirname, resolve } from "node:path"
22import { fileURLToPath } from "node:url"
33import type { DBResource } from "@solstatus/common/infra"
44import type { InfraMetadata } from "@solstatus/common/utils/types"
5- import alchemy , { type } from "alchemy"
6- import { DurableObjectNamespace , Worker } from "alchemy/cloudflare"
7- import type { MonitorExec , MonitorTrigger , MonitorTriggerRPC } from "../src/index"
5+ import * as Cloudflare from "alchemy/Cloudflare"
6+ import * as Effect from "effect/Effect"
87
9- export async function createApi (
8+ const __filename = fileURLToPath ( import . meta. url )
9+ const __dirname = dirname ( __filename )
10+
11+ export function createApi (
1012 resPrefix : string ,
1113 stage : string ,
1214 db : DBResource ,
1315 cloudflareAccountId : string ,
1416) {
15- const infraMetadata = {
16- cloudflareAccountId : cloudflareAccountId ,
17- monitorExecName : ` ${ resPrefix } -monitor-exec` ,
18- monitorTriggerName : `${ resPrefix } -monitor-trigger ` ,
19- }
20-
21- const monitorExecWorker = await createMonitorExecWorker ( infraMetadata , stage , db )
22- const monitorTriggerWorker = await createMonitorTriggerWorker (
23- infraMetadata ,
24- db ,
25- monitorExecWorker ,
26- )
27-
28- return {
29- monitorExecWorker ,
30- monitorTriggerWorker ,
31- }
17+ return Effect . gen ( function * ( ) {
18+ const infraMetadata = {
19+ cloudflareAccountId ,
20+ monitorExecName : `${ resPrefix } -monitor-exec ` ,
21+ monitorTriggerName : ` ${ resPrefix } -monitor-trigger` ,
22+ }
23+ const monitorExecWorker = yield * createMonitorExecWorker ( infraMetadata , stage , db )
24+ const monitorTriggerWorker = yield * createMonitorTriggerWorker (
25+ infraMetadata ,
26+ db ,
27+ monitorExecWorker ,
28+ )
29+ return {
30+ monitorExecWorker ,
31+ monitorTriggerWorker ,
32+ }
33+ } )
3234}
3335
34- async function createMonitorExecWorker (
36+ export function createMonitorExecWorker (
3537 infraMetadata : InfraMetadata ,
3638 stage : string ,
3739 db : DBResource ,
3840) {
39- const __filename = fileURLToPath ( import . meta. url )
40- const __dirname = dirname ( __filename )
4141 const entrypoint = resolve ( __dirname , "../src/monitor-exec.ts" )
42-
43- return await Worker ( infraMetadata . monitorExecName , {
42+ return Cloudflare . Worker ( "monitor-exec" , {
4443 name : infraMetadata . monitorExecName ,
45- adopt : true ,
46- entrypoint : entrypoint ,
47- rpc : type < MonitorExec > ,
48- bindings : {
44+ main : entrypoint ,
45+ compatibility : {
46+ date : "2026-07-21" ,
47+ flags : [ "nodejs_compat" ] ,
48+ } ,
49+ observability : {
50+ enabled : true ,
51+ } ,
52+ env : {
4953 DB : db ,
50- OPSGENIE_API_KEY : alchemy . secret ( process . env . OPSGENIE_API_KEY || "" ) ,
54+ OPSGENIE_API_KEY : process . env . OPSGENIE_API_KEY || "" ,
5155 APP_ENV : stage ,
5256 MONITOR_EXEC_NAME : infraMetadata . monitorExecName ,
5357 MONITOR_TRIGGER_NAME : infraMetadata . monitorTriggerName ,
5458 CLOUDFLARE_ACCOUNT_ID : infraMetadata . cloudflareAccountId ,
5559 } ,
5660 } )
5761}
58- export type MonitorExecWorkerResource = Awaited < ReturnType < typeof createMonitorExecWorker > >
5962
60- async function createMonitorTriggerWorker (
63+ export function createMonitorTriggerWorker (
6164 infraMetadata : InfraMetadata ,
6265 db : DBResource ,
63- monitorExecWorker : MonitorExecWorkerResource ,
66+ monitorExecWorker : Effect . Success < ReturnType < typeof createMonitorExecWorker > > ,
6467) {
65- const __filename = fileURLToPath ( import . meta. url )
66- const __dirname = dirname ( __filename )
6768 const entrypoint = resolve ( __dirname , "../src/monitor-trigger.ts" )
68-
69- return await Worker ( infraMetadata . monitorTriggerName , {
69+ const monitorTriggerDo = Cloudflare . DurableObject ( "monitor-trigger-do" , {
70+ className : "MonitorTrigger" ,
71+ } )
72+ return Cloudflare . Worker ( "monitor-trigger" , {
7073 name : infraMetadata . monitorTriggerName ,
71- adopt : true ,
72- entrypoint : entrypoint ,
73- rpc : type < MonitorTriggerRPC > ,
74- bindings : {
74+ main : entrypoint ,
75+ compatibility : {
76+ date : "2026-07-21" ,
77+ flags : [ "nodejs_compat" ] ,
78+ } ,
79+ observability : {
80+ enabled : true ,
81+ } ,
82+ env : {
7583 DB : db ,
7684 MONITOR_EXEC : monitorExecWorker ,
77- MONITOR_TRIGGER : new DurableObjectNamespace < MonitorTrigger > (
78- `${ infraMetadata . monitorTriggerName } -do` ,
79- {
80- className : "MonitorTrigger" ,
81- sqlite : true ,
82- } ,
83- ) ,
85+ MONITOR_TRIGGER : monitorTriggerDo ,
8486 MONITOR_EXEC_NAME : infraMetadata . monitorExecName ,
8587 MONITOR_TRIGGER_NAME : infraMetadata . monitorTriggerName ,
8688 CLOUDFLARE_ACCOUNT_ID : infraMetadata . cloudflareAccountId ,
8789 } ,
8890 } )
8991}
90- export type MonitorTriggerWorkerResource = Awaited < ReturnType < typeof createMonitorTriggerWorker > >
92+
93+ export type MonitorExecWorkerResource = Effect . Success < ReturnType < typeof createMonitorExecWorker > >
94+ export type MonitorTriggerWorkerResource = Effect . Success <
95+ ReturnType < typeof createMonitorTriggerWorker >
96+ >
0 commit comments