@@ -4,56 +4,54 @@ import { SyncEvent } from "@/sync"
44import { Effect , Layer , Scope , Context } from "effect"
55import { Config } from "../config"
66import { Flag } from "../flag/flag"
7- import { ShareNext } from "./share-next"
8-
9- export namespace SessionShare {
10- export interface Interface {
11- readonly create : ( input ?: Session . CreateInput ) => Effect . Effect < Session . Info >
12- readonly share : ( sessionID : SessionID ) => Effect . Effect < { url : string } , unknown >
13- readonly unshare : ( sessionID : SessionID ) => Effect . Effect < void , unknown >
14- }
15-
16- export class Service extends Context . Service < Service , Interface > ( ) ( "@opencode/SessionShare" ) { }
17-
18- export const layer = Layer . effect (
19- Service ,
20- Effect . gen ( function * ( ) {
21- const cfg = yield * Config . Service
22- const session = yield * Session . Service
23- const shareNext = yield * ShareNext . Service
24- const scope = yield * Scope . Scope
25-
26- const share = Effect . fn ( "SessionShare.share" ) ( function * ( sessionID : SessionID ) {
27- const conf = yield * cfg . get ( )
28- if ( conf . share === "disabled" ) throw new Error ( "Sharing is disabled in configuration" )
29- const result = yield * shareNext . create ( sessionID )
30- yield * Effect . sync ( ( ) =>
31- SyncEvent . run ( Session . Event . Updated , { sessionID, info : { share : { url : result . url } } } ) ,
32- )
33- return result
34- } )
35-
36- const unshare = Effect . fn ( "SessionShare.unshare" ) ( function * ( sessionID : SessionID ) {
37- yield * shareNext . remove ( sessionID )
38- yield * Effect . sync ( ( ) => SyncEvent . run ( Session . Event . Updated , { sessionID, info : { share : { url : null } } } ) )
39- } )
40-
41- const create = Effect . fn ( "SessionShare.create" ) ( function * ( input ?: Session . CreateInput ) {
42- const result = yield * session . create ( input )
43- if ( result . parentID ) return result
44- const conf = yield * cfg . get ( )
45- if ( ! ( Flag . OPENCODE_AUTO_SHARE || conf . share === "auto" ) ) return result
46- yield * share ( result . id ) . pipe ( Effect . ignore , Effect . forkIn ( scope ) )
47- return result
48- } )
49-
50- return Service . of ( { create, share, unshare } )
51- } ) ,
52- )
53-
54- export const defaultLayer = layer . pipe (
55- Layer . provide ( ShareNext . defaultLayer ) ,
56- Layer . provide ( Session . defaultLayer ) ,
57- Layer . provide ( Config . defaultLayer ) ,
58- )
7+ import { ShareNext } from "."
8+
9+ export interface Interface {
10+ readonly create : ( input ?: Session . CreateInput ) => Effect . Effect < Session . Info >
11+ readonly share : ( sessionID : SessionID ) => Effect . Effect < { url : string } , unknown >
12+ readonly unshare : ( sessionID : SessionID ) => Effect . Effect < void , unknown >
5913}
14+
15+ export class Service extends Context . Service < Service , Interface > ( ) ( "@opencode/SessionShare" ) { }
16+
17+ export const layer = Layer . effect (
18+ Service ,
19+ Effect . gen ( function * ( ) {
20+ const cfg = yield * Config . Service
21+ const session = yield * Session . Service
22+ const shareNext = yield * ShareNext . Service
23+ const scope = yield * Scope . Scope
24+
25+ const share = Effect . fn ( "SessionShare.share" ) ( function * ( sessionID : SessionID ) {
26+ const conf = yield * cfg . get ( )
27+ if ( conf . share === "disabled" ) throw new Error ( "Sharing is disabled in configuration" )
28+ const result = yield * shareNext . create ( sessionID )
29+ yield * Effect . sync ( ( ) =>
30+ SyncEvent . run ( Session . Event . Updated , { sessionID, info : { share : { url : result . url } } } ) ,
31+ )
32+ return result
33+ } )
34+
35+ const unshare = Effect . fn ( "SessionShare.unshare" ) ( function * ( sessionID : SessionID ) {
36+ yield * shareNext . remove ( sessionID )
37+ yield * Effect . sync ( ( ) => SyncEvent . run ( Session . Event . Updated , { sessionID, info : { share : { url : null } } } ) )
38+ } )
39+
40+ const create = Effect . fn ( "SessionShare.create" ) ( function * ( input ?: Session . CreateInput ) {
41+ const result = yield * session . create ( input )
42+ if ( result . parentID ) return result
43+ const conf = yield * cfg . get ( )
44+ if ( ! ( Flag . OPENCODE_AUTO_SHARE || conf . share === "auto" ) ) return result
45+ yield * share ( result . id ) . pipe ( Effect . ignore , Effect . forkIn ( scope ) )
46+ return result
47+ } )
48+
49+ return Service . of ( { create, share, unshare } )
50+ } ) ,
51+ )
52+
53+ export const defaultLayer = layer . pipe (
54+ Layer . provide ( ShareNext . defaultLayer ) ,
55+ Layer . provide ( Session . defaultLayer ) ,
56+ Layer . provide ( Config . defaultLayer ) ,
57+ )
0 commit comments