@dual-os/sdk 0.0.0-stage → 0.8.0-next.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.
Files changed (214) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +19 -2
  3. package/dist/Action.d.ts +201 -0
  4. package/dist/Action.d.ts.map +1 -0
  5. package/dist/Action.js +172 -0
  6. package/dist/Action.js.map +1 -0
  7. package/dist/AgentChannel.d.ts +1717 -0
  8. package/dist/AgentChannel.d.ts.map +1 -0
  9. package/dist/AgentChannel.js +708 -0
  10. package/dist/AgentChannel.js.map +1 -0
  11. package/dist/AgentChannelConformance.d.ts +1543 -0
  12. package/dist/AgentChannelConformance.d.ts.map +1 -0
  13. package/dist/AgentChannelConformance.js +163 -0
  14. package/dist/AgentChannelConformance.js.map +1 -0
  15. package/dist/AgentChannelRuntime.d.ts +78 -0
  16. package/dist/AgentChannelRuntime.d.ts.map +1 -0
  17. package/dist/AgentChannelRuntime.js +270 -0
  18. package/dist/AgentChannelRuntime.js.map +1 -0
  19. package/dist/AiProvider.d.ts +132 -0
  20. package/dist/AiProvider.d.ts.map +1 -0
  21. package/dist/AiProvider.js +100 -0
  22. package/dist/AiProvider.js.map +1 -0
  23. package/dist/AuthMethod.d.ts +381 -0
  24. package/dist/AuthMethod.d.ts.map +1 -0
  25. package/dist/AuthMethod.js +225 -0
  26. package/dist/AuthMethod.js.map +1 -0
  27. package/dist/AuthMethodBinding.d.ts +77 -0
  28. package/dist/AuthMethodBinding.d.ts.map +1 -0
  29. package/dist/AuthMethodBinding.js +31 -0
  30. package/dist/AuthMethodBinding.js.map +1 -0
  31. package/dist/AuthMethodExecution.d.ts +223 -0
  32. package/dist/AuthMethodExecution.d.ts.map +1 -0
  33. package/dist/AuthMethodExecution.js +277 -0
  34. package/dist/AuthMethodExecution.js.map +1 -0
  35. package/dist/ConnectionResolver.d.ts +219 -0
  36. package/dist/ConnectionResolver.d.ts.map +1 -0
  37. package/dist/ConnectionResolver.js +153 -0
  38. package/dist/ConnectionResolver.js.map +1 -0
  39. package/dist/DefinitionError.d.ts +67 -0
  40. package/dist/DefinitionError.d.ts.map +1 -0
  41. package/dist/DefinitionError.js +82 -0
  42. package/dist/DefinitionError.js.map +1 -0
  43. package/dist/DualRegistry.d.ts +71 -0
  44. package/dist/DualRegistry.d.ts.map +1 -0
  45. package/dist/DualRegistry.js +96 -0
  46. package/dist/DualRegistry.js.map +1 -0
  47. package/dist/DualRuntime.d.ts +279 -0
  48. package/dist/DualRuntime.d.ts.map +1 -0
  49. package/dist/DualRuntime.js +311 -0
  50. package/dist/DualRuntime.js.map +1 -0
  51. package/dist/Files.d.ts +80 -0
  52. package/dist/Files.d.ts.map +1 -0
  53. package/dist/Files.js +66 -0
  54. package/dist/Files.js.map +1 -0
  55. package/dist/Group.d.ts +106 -0
  56. package/dist/Group.d.ts.map +1 -0
  57. package/dist/Group.js +86 -0
  58. package/dist/Group.js.map +1 -0
  59. package/dist/Http.d.ts +342 -0
  60. package/dist/Http.d.ts.map +1 -0
  61. package/dist/Http.js +677 -0
  62. package/dist/Http.js.map +1 -0
  63. package/dist/Mcp.d.ts +109 -0
  64. package/dist/Mcp.d.ts.map +1 -0
  65. package/dist/Mcp.js +176 -0
  66. package/dist/Mcp.js.map +1 -0
  67. package/dist/OAuth2TokenRefresher.d.ts +18 -0
  68. package/dist/OAuth2TokenRefresher.d.ts.map +1 -0
  69. package/dist/OAuth2TokenRefresher.js +19 -0
  70. package/dist/OAuth2TokenRefresher.js.map +1 -0
  71. package/dist/OAuthFlow.d.ts +71 -0
  72. package/dist/OAuthFlow.d.ts.map +1 -0
  73. package/dist/OAuthFlow.js +488 -0
  74. package/dist/OAuthFlow.js.map +1 -0
  75. package/dist/Plugin.d.ts +383 -0
  76. package/dist/Plugin.d.ts.map +1 -0
  77. package/dist/Plugin.js +249 -0
  78. package/dist/Plugin.js.map +1 -0
  79. package/dist/PluginRuntime.d.ts +3186 -0
  80. package/dist/PluginRuntime.d.ts.map +1 -0
  81. package/dist/PluginRuntime.js +331 -0
  82. package/dist/PluginRuntime.js.map +1 -0
  83. package/dist/Runner.d.ts +1 -0
  84. package/dist/Runner.js +124 -0
  85. package/dist/Runner.js.map +1 -0
  86. package/dist/ToolFile.d.ts +23 -0
  87. package/dist/ToolFile.d.ts.map +1 -0
  88. package/dist/ToolFile.js +33 -0
  89. package/dist/ToolFile.js.map +1 -0
  90. package/dist/Trigger.d.ts +358 -0
  91. package/dist/Trigger.d.ts.map +1 -0
  92. package/dist/Trigger.js +287 -0
  93. package/dist/Trigger.js.map +1 -0
  94. package/dist/_virtual/_rolldown/runtime.js +13 -0
  95. package/dist/index.d.ts +24 -0
  96. package/dist/index.js +24 -0
  97. package/dist/internal/auth-context.d.ts +23 -0
  98. package/dist/internal/auth-context.d.ts.map +1 -0
  99. package/dist/internal/auth-context.js +1 -0
  100. package/dist/internal/auth-execution.d.ts +27 -0
  101. package/dist/internal/auth-execution.d.ts.map +1 -0
  102. package/dist/internal/auth-execution.js +66 -0
  103. package/dist/internal/auth-execution.js.map +1 -0
  104. package/dist/internal/auth-runtime.d.ts +5 -0
  105. package/dist/internal/auth-runtime.d.ts.map +1 -0
  106. package/dist/internal/auth-runtime.js +16 -0
  107. package/dist/internal/auth-runtime.js.map +1 -0
  108. package/dist/internal/capabilities.d.ts +24 -0
  109. package/dist/internal/capabilities.d.ts.map +1 -0
  110. package/dist/internal/capabilities.js +22 -0
  111. package/dist/internal/capabilities.js.map +1 -0
  112. package/dist/internal/children.d.ts +34 -0
  113. package/dist/internal/children.d.ts.map +1 -0
  114. package/dist/internal/children.js +53 -0
  115. package/dist/internal/children.js.map +1 -0
  116. package/dist/internal/collection-utils.d.ts +4 -0
  117. package/dist/internal/collection-utils.d.ts.map +1 -0
  118. package/dist/internal/collection-utils.js +6 -0
  119. package/dist/internal/collection-utils.js.map +1 -0
  120. package/dist/internal/dual/actions.d.ts +33 -0
  121. package/dist/internal/dual/actions.d.ts.map +1 -0
  122. package/dist/internal/dual/actions.js +26 -0
  123. package/dist/internal/dual/actions.js.map +1 -0
  124. package/dist/internal/dual/invoke.d.ts +63 -0
  125. package/dist/internal/dual/invoke.d.ts.map +1 -0
  126. package/dist/internal/dual/invoke.js +75 -0
  127. package/dist/internal/dual/invoke.js.map +1 -0
  128. package/dist/internal/dual/registry.d.ts +125 -0
  129. package/dist/internal/dual/registry.d.ts.map +1 -0
  130. package/dist/internal/dual/registry.js +172 -0
  131. package/dist/internal/dual/registry.js.map +1 -0
  132. package/dist/internal/dual/triggers.d.ts +29 -0
  133. package/dist/internal/dual/triggers.d.ts.map +1 -0
  134. package/dist/internal/dual/triggers.js +26 -0
  135. package/dist/internal/dual/triggers.js.map +1 -0
  136. package/dist/internal/handler-context.d.ts +9 -0
  137. package/dist/internal/handler-context.d.ts.map +1 -0
  138. package/dist/internal/handler-context.js +31 -0
  139. package/dist/internal/handler-context.js.map +1 -0
  140. package/dist/internal/identifier.d.ts +6 -0
  141. package/dist/internal/identifier.d.ts.map +1 -0
  142. package/dist/internal/identifier.js +28 -0
  143. package/dist/internal/identifier.js.map +1 -0
  144. package/dist/internal/plugin-handlers.d.ts +38 -0
  145. package/dist/internal/plugin-handlers.d.ts.map +1 -0
  146. package/dist/internal/plugin-handlers.js +52 -0
  147. package/dist/internal/plugin-handlers.js.map +1 -0
  148. package/dist/internal/proto.d.ts +7 -0
  149. package/dist/internal/proto.d.ts.map +1 -0
  150. package/dist/internal/proto.js +10 -0
  151. package/dist/internal/proto.js.map +1 -0
  152. package/dist/internal/schema-runtime.d.ts +6 -0
  153. package/dist/internal/schema-runtime.d.ts.map +1 -0
  154. package/dist/internal/schema-runtime.js +10 -0
  155. package/dist/internal/schema-runtime.js.map +1 -0
  156. package/dist/internal/trigger-runtime-shared.d.ts +41 -0
  157. package/dist/internal/trigger-runtime-shared.d.ts.map +1 -0
  158. package/dist/internal/trigger-runtime-shared.js +132 -0
  159. package/dist/internal/trigger-runtime-shared.js.map +1 -0
  160. package/dist/internal/trigger-runtime.d.ts +12 -0
  161. package/dist/internal/trigger-runtime.d.ts.map +1 -0
  162. package/dist/internal/trigger-runtime.js +95 -0
  163. package/dist/internal/trigger-runtime.js.map +1 -0
  164. package/dist/internal/types.d.ts +7 -0
  165. package/dist/internal/types.d.ts.map +1 -0
  166. package/dist/internal/types.js +1 -0
  167. package/dist/remote-runtime.d.ts +585 -0
  168. package/dist/remote-runtime.d.ts.map +1 -0
  169. package/dist/remote-runtime.js +367 -0
  170. package/dist/remote-runtime.js.map +1 -0
  171. package/package.json +55 -4
  172. package/src/Action.ts +370 -0
  173. package/src/AgentChannel.ts +860 -0
  174. package/src/AgentChannelConformance.ts +124 -0
  175. package/src/AgentChannelRuntime.ts +616 -0
  176. package/src/AiProvider.ts +255 -0
  177. package/src/AuthMethod.ts +954 -0
  178. package/src/AuthMethodBinding.ts +112 -0
  179. package/src/AuthMethodExecution.ts +542 -0
  180. package/src/ConnectionResolver.ts +265 -0
  181. package/src/DefinitionError.ts +115 -0
  182. package/src/DualRegistry.ts +152 -0
  183. package/src/DualRuntime.ts +1081 -0
  184. package/src/Files.ts +89 -0
  185. package/src/Group.ts +292 -0
  186. package/src/Http.ts +1205 -0
  187. package/src/Mcp.ts +299 -0
  188. package/src/OAuth2TokenRefresher.ts +22 -0
  189. package/src/OAuthFlow.ts +874 -0
  190. package/src/Plugin.ts +912 -0
  191. package/src/PluginRuntime.ts +414 -0
  192. package/src/Runner.ts +248 -0
  193. package/src/ToolFile.ts +28 -0
  194. package/src/Trigger.ts +722 -0
  195. package/src/index.ts +158 -0
  196. package/src/internal/auth-context.ts +27 -0
  197. package/src/internal/auth-execution.ts +241 -0
  198. package/src/internal/auth-runtime.ts +20 -0
  199. package/src/internal/capabilities.ts +55 -0
  200. package/src/internal/children.ts +126 -0
  201. package/src/internal/collection-utils.ts +8 -0
  202. package/src/internal/dual/actions.ts +116 -0
  203. package/src/internal/dual/invoke.ts +307 -0
  204. package/src/internal/dual/registry.ts +340 -0
  205. package/src/internal/dual/triggers.ts +128 -0
  206. package/src/internal/handler-context.ts +57 -0
  207. package/src/internal/identifier.ts +27 -0
  208. package/src/internal/plugin-handlers.ts +146 -0
  209. package/src/internal/proto.ts +8 -0
  210. package/src/internal/schema-runtime.ts +15 -0
  211. package/src/internal/trigger-runtime-shared.ts +449 -0
  212. package/src/internal/trigger-runtime.ts +223 -0
  213. package/src/internal/types.ts +12 -0
  214. package/src/remote-runtime.ts +469 -0
package/src/Mcp.ts ADDED
@@ -0,0 +1,299 @@
1
+ /**
2
+ * A Model Context Protocol client over Streamable HTTP: the session generated plugins call tools
3
+ * through and the CLI lists them with.
4
+ *
5
+ * @since 0.0.0
6
+ */
7
+ import {
8
+ Array,
9
+ Boolean,
10
+ Effect,
11
+ MutableRef,
12
+ Number,
13
+ Option,
14
+ Ref,
15
+ Result,
16
+ Schema,
17
+ Stream,
18
+ String,
19
+ pipe,
20
+ } from "effect";
21
+ import type { Record } from "effect";
22
+
23
+ import * as Sse from "effect/encoding/Sse";
24
+ import { HttpClient, HttpClientRequest } from "effect/http";
25
+ import type { HttpClientResponse } from "effect/http";
26
+
27
+ /**
28
+ * A JSON-RPC error, SSE parsing error, or request that got no response.
29
+ *
30
+ * @since 0.0.0
31
+ * @category errors
32
+ */
33
+ export class McpError extends Schema.TaggedError<McpError>()("McpError", {
34
+ cause: Schema.optional(Schema.Defect()),
35
+ message: Schema.String,
36
+ }) {}
37
+
38
+ const protocolVersion = "2025-06-18";
39
+
40
+ /**
41
+ * A server's or client's name and version.
42
+ *
43
+ * @since 0.0.0
44
+ * @category schemas
45
+ */
46
+ export type Implementation = typeof Implementation.Type;
47
+ export const Implementation = Schema.Struct({
48
+ name: Schema.String,
49
+ title: Schema.optionalKey(Schema.String),
50
+ version: Schema.String,
51
+ });
52
+
53
+ /**
54
+ * A tool a server lists: its name, description and the JSON Schemas of its arguments and, when it
55
+ * declares one, its structured output.
56
+ *
57
+ * @since 0.0.0
58
+ * @category schemas
59
+ */
60
+ export type Tool = typeof Tool.Type;
61
+ export const Tool = Schema.Struct({
62
+ annotations: Schema.optionalKey(Schema.Struct({ title: Schema.optionalKey(Schema.String) })),
63
+ description: Schema.optionalKey(Schema.String),
64
+ inputSchema: Schema.Record(Schema.String, Schema.Unknown),
65
+ name: Schema.String,
66
+ outputSchema: Schema.optionalKey(Schema.Record(Schema.String, Schema.Unknown)),
67
+ title: Schema.optionalKey(Schema.String),
68
+ });
69
+
70
+ type ListToolsResult = typeof ListToolsResult.Type;
71
+ const ListToolsResult = Schema.Struct({
72
+ nextCursor: Schema.optionalKey(Schema.String),
73
+ tools: Schema.Array(Tool),
74
+ });
75
+
76
+ type ContentBlock = typeof ContentBlock.Type;
77
+ const ContentBlock = Schema.StructWithRest(
78
+ Schema.Struct({ text: Schema.optionalKey(Schema.String), type: Schema.String }),
79
+ [Schema.Record(Schema.String, Schema.Unknown)],
80
+ );
81
+
82
+ /**
83
+ * What a tool call returns: its content blocks and, when it declares an output schema, its
84
+ * structured content.
85
+ *
86
+ * @since 0.0.0
87
+ * @category schemas
88
+ */
89
+ export type CallToolResult = typeof CallToolResult.Type;
90
+ export const CallToolResult = Schema.Struct({
91
+ content: Schema.Array(ContentBlock),
92
+ isError: Schema.optionalKey(Schema.Boolean),
93
+ structuredContent: Schema.optionalKey(Schema.Unknown),
94
+ });
95
+
96
+ type InitializeResult = typeof InitializeResult.Type;
97
+ const InitializeResult = Schema.Struct({
98
+ protocolVersion: Schema.String,
99
+ serverInfo: Implementation,
100
+ });
101
+
102
+ type Message = typeof Message.Type;
103
+ const Message = Schema.Struct({
104
+ error: Schema.optionalKey(Schema.Struct({ message: Schema.String })),
105
+ id: Schema.optionalKey(Schema.Unknown),
106
+ result: Schema.optionalKey(Schema.Unknown),
107
+ });
108
+
109
+ const responseTo = Effect.fnUntraced(function* (
110
+ id: number,
111
+ method: string,
112
+ response: HttpClientResponse.HttpClientResponse,
113
+ ) {
114
+ const payloads = Boolean.match(
115
+ pipe(response.headers["content-type"] ?? "", String.startsWith("text/event-stream")),
116
+ {
117
+ onFalse: () => Stream.fromEffect(response.text),
118
+ onTrue: () =>
119
+ Stream.unwrap(
120
+ Effect.sync(() => {
121
+ const events = MutableRef.make(Array.empty<string>());
122
+ const parser = Sse.makeParser(event => {
123
+ if (event._tag === "Event") MutableRef.update(events, Array.append(event.data));
124
+ });
125
+ return pipe(
126
+ response.stream,
127
+ Stream.decodeText(),
128
+ Stream.mapEffect(chunk => {
129
+ const error = parser.feed(chunk);
130
+ if (error !== undefined) {
131
+ return Effect.fail(McpError.make({ cause: error, message: error.message }));
132
+ }
133
+ const ready = MutableRef.get(events);
134
+ MutableRef.set(events, Array.empty());
135
+ return Effect.succeed(ready);
136
+ }),
137
+ Stream.flatMap(Stream.fromIterable),
138
+ );
139
+ }),
140
+ ),
141
+ },
142
+ );
143
+ const found = yield* pipe(
144
+ payloads,
145
+ Stream.filterMap(payload =>
146
+ Result.fromOption(
147
+ Option.filter(
148
+ Schema.decodeOption(Schema.fromJsonString(Message))(payload),
149
+ message =>
150
+ message.id === id && (message.result !== undefined || message.error !== undefined),
151
+ ),
152
+ () => payload,
153
+ ),
154
+ ),
155
+ Stream.runHead,
156
+ );
157
+ return yield* Effect.fromOption(found, () =>
158
+ McpError.make({ message: `${method} got no response` }),
159
+ );
160
+ });
161
+
162
+ /**
163
+ * Opens a session with the server at `endpoint`: initializes it and returns its information and a
164
+ * `request` that sends one JSON-RPC request and returns its result. Closing the scope ends the
165
+ * session. `headers` carries the credentials the server asks for.
166
+ *
167
+ * @since 0.0.0
168
+ * @category constructors
169
+ */
170
+ export const connect = Effect.fn("Mcp.connect")(function* (
171
+ client: HttpClient.HttpClient,
172
+ endpoint: string,
173
+ headers: Record.ReadonlyRecord<string, string>,
174
+ ) {
175
+ const checked = HttpClient.filterStatusOk(client);
176
+ const post = Effect.fnUntraced(function* (
177
+ version: string,
178
+ session: Option.Option<string>,
179
+ body: Record.ReadonlyRecord<string, unknown>,
180
+ ) {
181
+ return yield* checked.execute(
182
+ pipe(
183
+ HttpClientRequest.post(endpoint),
184
+ HttpClientRequest.setHeaders({
185
+ ...headers,
186
+ accept: "application/json, text/event-stream",
187
+ "mcp-protocol-version": version,
188
+ ...Option.match(session, {
189
+ onNone: () => ({}),
190
+ onSome: id => ({ "mcp-session-id": id }),
191
+ }),
192
+ }),
193
+ HttpClientRequest.bodyJsonUnsafe({ jsonrpc: "2.0", ...body }),
194
+ ),
195
+ );
196
+ });
197
+ const call = Effect.fnUntraced(function* (
198
+ version: string,
199
+ session: Option.Option<string>,
200
+ id: number,
201
+ method: string,
202
+ params: Record.ReadonlyRecord<string, unknown>,
203
+ ) {
204
+ const response = yield* post(version, session, { id, method, params });
205
+ const message = yield* responseTo(id, method, response);
206
+ if (message.error !== undefined) {
207
+ return yield* McpError.make({ message: `${method}: ${message.error.message}` });
208
+ }
209
+ return {
210
+ result: message.result,
211
+ session: Option.orElse(
212
+ Option.fromNullishOr(response.headers["mcp-session-id"]),
213
+ () => session,
214
+ ),
215
+ };
216
+ });
217
+
218
+ const negotiatedVersion = yield* Ref.make(protocolVersion);
219
+ const initialized = yield* Effect.acquireRelease(
220
+ call(protocolVersion, Option.none(), 0, "initialize", {
221
+ capabilities: {},
222
+ clientInfo: { name: "dual", version: "1" },
223
+ protocolVersion,
224
+ }),
225
+ opened =>
226
+ Option.match(opened.session, {
227
+ onNone: () => Effect.void,
228
+ onSome: id =>
229
+ Effect.flatMap(Ref.get(negotiatedVersion), version =>
230
+ Effect.ignore(
231
+ client.execute(
232
+ pipe(
233
+ HttpClientRequest.delete(endpoint),
234
+ HttpClientRequest.setHeaders({
235
+ ...headers,
236
+ "mcp-protocol-version": version,
237
+ "mcp-session-id": id,
238
+ }),
239
+ ),
240
+ ),
241
+ ),
242
+ ),
243
+ }),
244
+ );
245
+ const server = yield* Schema.decodeUnknownEffect(InitializeResult)(initialized.result);
246
+ if (server.protocolVersion !== protocolVersion && server.protocolVersion !== "2025-03-26") {
247
+ return yield* McpError.make({
248
+ message: `Unsupported MCP protocol version ${server.protocolVersion}`,
249
+ });
250
+ }
251
+ yield* Ref.set(negotiatedVersion, server.protocolVersion);
252
+ yield* post(server.protocolVersion, initialized.session, { method: "notifications/initialized" });
253
+ const ids = yield* Ref.make(1);
254
+ const request = Effect.fn("Mcp.request")(function* (
255
+ method: string,
256
+ params: Record.ReadonlyRecord<string, unknown>,
257
+ ) {
258
+ const called = yield* call(
259
+ server.protocolVersion,
260
+ initialized.session,
261
+ yield* Ref.getAndUpdate(ids, Number.increment),
262
+ method,
263
+ params,
264
+ );
265
+ return called.result;
266
+ });
267
+ return { request, server: server.serverInfo };
268
+ });
269
+
270
+ /**
271
+ * Lists every tool of the server at `endpoint`, following its pages, in a session of its own.
272
+ *
273
+ * @since 0.0.0
274
+ * @category constructors
275
+ */
276
+ export const listTools = Effect.fn("Mcp.listTools")(function* (
277
+ client: HttpClient.HttpClient,
278
+ endpoint: string,
279
+ headers: Record.ReadonlyRecord<string, string>,
280
+ ) {
281
+ const session = yield* connect(client, endpoint, headers);
282
+ const tools = yield* Stream.runCollect(
283
+ Stream.paginate(
284
+ {},
285
+ Effect.fnUntraced(function* (params: { cursor?: string }) {
286
+ const page = yield* Schema.decodeUnknownEffect(ListToolsResult)(
287
+ yield* session.request("tools/list", params),
288
+ );
289
+ return [
290
+ page.tools,
291
+ Option.map(Option.fromUndefinedOr(page.nextCursor), cursor => ({ cursor })),
292
+ ] as const;
293
+ }),
294
+ ),
295
+ );
296
+ return { server: session.server, tools };
297
+ }, Effect.scoped);
298
+
299
+ export * as Mcp from "./Mcp.ts";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Host service that refreshes OAuth2 tokens for SDK auth execution.
3
+ *
4
+ * @since 0.0.0
5
+ */
6
+ import { Context, type Effect } from "effect";
7
+
8
+ import type * as AuthMethod from "./AuthMethod.ts";
9
+
10
+ /** @since 0.0.0 @category services */
11
+ export class Service extends Context.Service<
12
+ Service,
13
+ {
14
+ readonly refresh: (input: {
15
+ readonly method: AuthMethod.Any;
16
+ readonly setup: unknown;
17
+ readonly refreshToken: string;
18
+ }) => Effect.Effect<AuthMethod.OAuth2TokenResponse, unknown>;
19
+ }
20
+ >()("@dual-os/sdk/AuthMethod/OAuth2TokenRefresher") {}
21
+
22
+ export * as OAuth2TokenRefresher from "./OAuth2TokenRefresher.ts";