@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
@@ -0,0 +1,223 @@
1
+ import "./AuthMethodExecution.js";
2
+ import { Any, AuthMethodHookError, Display, ExpectedOAuth2MethodError, HookContext, Input, InputSchema, Material, MaterialSchema, OAuth2RefreshTokenUnavailableError, OAuth2TokenResponse, RefreshContext, Requirements, Setup, SetupSchema, TestResult, Value, ValueSchema } from "./AuthMethod.js";
3
+ import { Effect, Schema } from "effect";
4
+ declare namespace AuthMethodExecution_d_exports {
5
+ export { AuthMethodExecution_d_exports as AuthMethodExecution, JsonRequest, decodeInput, decodeMaterial, decodeSetup, decodeValue, display, executeJson, prepare, prepareDecoded, prepareOAuth2Tokens, prepareUnknown, refreshDecoded, refreshUnknown, resolve, resolveDecoded, resolveUnknown, test };
6
+ }
7
+ type SetupRequirements<Method extends Any> = SetupSchema<Method> extends Schema.Top ? Schema.Codec.DecodingServices<SetupSchema<Method>> : never;
8
+ type InputRequirements<Method extends Any> = InputSchema<Method> extends Schema.Top ? Schema.Codec.DecodingServices<InputSchema<Method>> : never;
9
+ type MaterialRequirements<Method extends Any> = Schema.Codec.DecodingServices<MaterialSchema<Method>>;
10
+ type ValueRequirements<Method extends Any> = Schema.Codec.DecodingServices<ValueSchema<Method>>;
11
+ /**
12
+ * Decode a runtime auth value using the selected method schema.
13
+ *
14
+ * @since 0.0.0
15
+ * @category constructors
16
+ */
17
+ export declare const decodeValue: <Method extends Any>(method: Method, value: unknown) => Effect.Effect<Value<Method>, Schema.SchemaError, ValueRequirements<Method>>;
18
+ /**
19
+ * Decode organization/admin-level setup for a method, if it declares one.
20
+ *
21
+ * @since 0.0.0
22
+ * @category constructors
23
+ */
24
+ export declare const decodeSetup: <Method extends Any>(method: Method, setup: unknown) => Effect.Effect<Setup<Method>, Schema.SchemaError, SetupRequirements<Method>>;
25
+ /**
26
+ * Decode submitted setup input using the method input schema, if any.
27
+ *
28
+ * @since 0.0.0
29
+ * @category constructors
30
+ */
31
+ export declare const decodeInput: <Method extends Any>(method: Method, input: unknown) => Effect.Effect<Input<Method>, Schema.SchemaError, InputRequirements<Method>>;
32
+ /**
33
+ * Decode encrypted stored material using the method material schema.
34
+ *
35
+ * @since 0.0.0
36
+ * @category constructors
37
+ */
38
+ export declare const decodeMaterial: <Method extends Any>(method: Method, material: unknown) => Effect.Effect<Material<Method>, Schema.SchemaError, MaterialRequirements<Method>>;
39
+ /**
40
+ * Prepare already-decoded setup input into encrypted stored material.
41
+ *
42
+ * @since 0.0.0
43
+ * @category constructors
44
+ */
45
+ export declare const prepareDecoded: <Method extends Any>(method: Method, input: Input<Method>, context?: HookContext<Setup<Method>>) => Effect.Effect<Material<Method>, Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | Requirements<Method>>;
46
+ /**
47
+ * Decode and prepare submitted setup input into encrypted stored material.
48
+ *
49
+ * @since 0.0.0
50
+ * @category constructors
51
+ */
52
+ export declare const prepareUnknown: <Method extends Any>(method: Method, input: unknown, context?: HookContext<Setup<Method>>) => Effect.Effect<Material<Method>, Schema.SchemaError | AuthMethodHookError, InputRequirements<Method> | MaterialRequirements<Method> | Requirements<Method>>;
53
+ /**
54
+ * Decode and prepare submitted setup input into encrypted stored material.
55
+ *
56
+ * @since 0.0.0
57
+ * @category constructors
58
+ */
59
+ export declare const prepare: <Method extends Any>(method: Method, input: unknown, context?: HookContext<Setup<Method>>) => Effect.Effect<Material<Method>, Schema.SchemaError | AuthMethodHookError, InputRequirements<Method> | MaterialRequirements<Method> | Requirements<Method>>;
60
+ /**
61
+ * Refresh already-decoded stored material when the auth method supports it.
62
+ *
63
+ * A result of `undefined` means the material is still usable and should not be
64
+ * persisted again.
65
+ *
66
+ * @since 0.0.0
67
+ * @category constructors
68
+ */
69
+ export declare const refreshDecoded: <Method extends Any>(method: Method, material: Material<Method>, context: RefreshContext<Setup<Method>>) => Effect.Effect<Material<Method> | undefined, ExpectedOAuth2MethodError | OAuth2RefreshTokenUnavailableError | Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | Requirements<Method>>;
70
+ /**
71
+ * Decode stored material and run the auth method refresh hook, if any.
72
+ *
73
+ * @since 0.0.0
74
+ * @category constructors
75
+ */
76
+ export declare const refreshUnknown: <Method extends Any>(method: Method, material: unknown, context: RefreshContext<Setup<Method>>) => Effect.Effect<Material<Method> | undefined, ExpectedOAuth2MethodError | OAuth2RefreshTokenUnavailableError | Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | Requirements<Method>>;
77
+ /**
78
+ * Prepare normalized OAuth2 token exchange output into encrypted stored material.
79
+ *
80
+ * OAuth2 has no frontend-submitted setup input. The platform owns redirect,
81
+ * callback, state/PKCE, and token exchange, then calls this helper at the
82
+ * token-response boundary.
83
+ *
84
+ * @since 0.0.0
85
+ * @category constructors
86
+ */
87
+ export declare const prepareOAuth2Tokens: <Method extends Any>(method: Method, tokens: OAuth2TokenResponse, context?: HookContext<Setup<Method>>) => Effect.Effect<Material<Method>, ExpectedOAuth2MethodError | Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | Requirements<Method>>;
88
+ /**
89
+ * Resolve already-decoded stored material into the runtime value handlers receive.
90
+ *
91
+ * @since 0.0.0
92
+ * @category constructors
93
+ */
94
+ export declare const resolveDecoded: <Method extends Any>(method: Method, material: Material<Method>, context?: HookContext<Setup<Method>>) => Effect.Effect<Value<Method>, Schema.SchemaError | AuthMethodHookError, ValueRequirements<Method> | Requirements<Method>>;
95
+ /**
96
+ * Decode stored material and resolve it into the runtime value handlers receive.
97
+ *
98
+ * @since 0.0.0
99
+ * @category constructors
100
+ */
101
+ export declare const resolve: <Method extends Any>(method: Method, material: unknown, context?: HookContext<Setup<Method>>) => Effect.Effect<Value<Method>, Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | ValueRequirements<Method> | Requirements<Method>>;
102
+ /**
103
+ * Resolve untrusted persisted material into the runtime value handlers receive.
104
+ *
105
+ * This is the persistence-boundary variant of {@link resolve}: callers can pass
106
+ * raw JSON from storage and the method material schema is decoded before any
107
+ * provider hook runs.
108
+ *
109
+ * @since 0.0.0
110
+ * @category constructors
111
+ */
112
+ export declare const resolveUnknown: typeof resolve;
113
+ /** Operation-specific authentication data for isolated execution. */
114
+ export type JsonRequest = typeof JsonRequest.Type;
115
+ export declare const JsonRequest: Schema.Union<readonly [Schema.TaggedStruct<"decodeSetup", {
116
+ authMethodId: Schema.NonEmptyString;
117
+ providerId: Schema.NonEmptyString;
118
+ setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
119
+ }>, Schema.TaggedStruct<"prepare", {
120
+ readonly authMethodId: Schema.NonEmptyString;
121
+ readonly providerId: Schema.NonEmptyString;
122
+ readonly setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
123
+ readonly input: Schema.Codec<Schema.Json, Schema.Json, never, never>;
124
+ }>, Schema.TaggedStruct<"prepareOAuth2Tokens", {
125
+ readonly authMethodId: Schema.NonEmptyString;
126
+ readonly providerId: Schema.NonEmptyString;
127
+ readonly setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
128
+ readonly tokens: Schema.Struct<{
129
+ readonly accessToken: Schema.String;
130
+ readonly expiresAt: Schema.optionalKey<Schema.Number>;
131
+ readonly expiresIn: Schema.optionalKey<Schema.Number>;
132
+ readonly raw: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
133
+ readonly refreshToken: Schema.optionalKey<Schema.String>;
134
+ readonly scope: Schema.optionalKey<Schema.String>;
135
+ readonly tokenType: Schema.optionalKey<Schema.String>;
136
+ }>;
137
+ }>, Schema.TaggedStruct<"refresh", {
138
+ readonly authMethodId: Schema.NonEmptyString;
139
+ readonly providerId: Schema.NonEmptyString;
140
+ readonly setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
141
+ readonly material: Schema.Codec<Schema.Json, Schema.Json, never, never>;
142
+ readonly minValidityMs: Schema.Finite;
143
+ readonly now: Schema.Finite;
144
+ readonly reason: Schema.Literals<readonly ["before-use", "forced"]>;
145
+ }>, Schema.TaggedStruct<"resolve", {
146
+ readonly authMethodId: Schema.NonEmptyString;
147
+ readonly providerId: Schema.NonEmptyString;
148
+ readonly setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
149
+ readonly material: Schema.Codec<Schema.Json, Schema.Json, never, never>;
150
+ }>, Schema.TaggedStruct<"display", {
151
+ readonly authMethodId: Schema.NonEmptyString;
152
+ readonly providerId: Schema.NonEmptyString;
153
+ readonly setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
154
+ readonly material: Schema.Codec<Schema.Json, Schema.Json, never, never>;
155
+ }>, Schema.TaggedStruct<"test", {
156
+ readonly authMethodId: Schema.NonEmptyString;
157
+ readonly providerId: Schema.NonEmptyString;
158
+ readonly setup: Schema.optionalKey<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
159
+ readonly material: Schema.Codec<Schema.Json, Schema.Json, never, never>;
160
+ }>]>;
161
+ /** Decode canonical JSON once; executable hooks and codecs stay in the guest. */
162
+ export declare const executeJson: (method: Any, request: {
163
+ readonly _tag: "decodeSetup";
164
+ readonly authMethodId: string;
165
+ readonly providerId: string;
166
+ readonly setup?: Schema.Json;
167
+ } | {
168
+ readonly _tag: "display";
169
+ readonly authMethodId: string;
170
+ readonly providerId: string;
171
+ readonly setup?: Schema.Json;
172
+ readonly material: Schema.Json;
173
+ } | {
174
+ readonly _tag: "prepare";
175
+ readonly authMethodId: string;
176
+ readonly providerId: string;
177
+ readonly setup?: Schema.Json;
178
+ readonly input: Schema.Json;
179
+ } | {
180
+ readonly _tag: "prepareOAuth2Tokens";
181
+ readonly authMethodId: string;
182
+ readonly providerId: string;
183
+ readonly setup?: Schema.Json;
184
+ readonly tokens: {
185
+ readonly accessToken: string;
186
+ readonly expiresAt?: number;
187
+ readonly expiresIn?: number;
188
+ readonly raw: {
189
+ readonly [x: string]: Schema.Json;
190
+ };
191
+ readonly refreshToken?: string;
192
+ readonly scope?: string;
193
+ readonly tokenType?: string;
194
+ };
195
+ } | {
196
+ readonly _tag: "refresh";
197
+ readonly authMethodId: string;
198
+ readonly providerId: string;
199
+ readonly setup?: Schema.Json;
200
+ readonly material: Schema.Json;
201
+ readonly minValidityMs: number;
202
+ readonly now: number;
203
+ readonly reason: "before-use" | "forced";
204
+ } | {
205
+ readonly _tag: "resolve";
206
+ readonly authMethodId: string;
207
+ readonly providerId: string;
208
+ readonly setup?: Schema.Json;
209
+ readonly material: Schema.Json;
210
+ } | {
211
+ readonly _tag: "test";
212
+ readonly authMethodId: string;
213
+ readonly providerId: string;
214
+ readonly setup?: Schema.Json;
215
+ readonly material: Schema.Json;
216
+ }) => Effect.Effect<Display | TestResult | Schema.Json | undefined, AuthMethodHookError | ExpectedOAuth2MethodError | OAuth2RefreshTokenUnavailableError | Schema.SchemaError, any>;
217
+ /** @since 0.0.0 @category constructors */
218
+ export declare const display: <Method extends Any>(method: Method, material: Material<Method>, context?: HookContext<Setup<Method>>) => Effect.Effect<Display | undefined, Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | Requirements<Method>>;
219
+ /** @since 0.0.0 @category constructors */
220
+ export declare const test: <Method extends Any>(method: Method, material: Material<Method>, context?: HookContext<Setup<Method>>) => Effect.Effect<TestResult, Schema.SchemaError | AuthMethodHookError, MaterialRequirements<Method> | Requirements<Method>>;
221
+ //#endregion
222
+ export { AuthMethodExecution_d_exports as AuthMethodExecution, AuthMethodExecution_d_exports };
223
+ //# sourceMappingURL=AuthMethodExecution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthMethodExecution.d.ts","names":["AuthMethod.Any","AuthMethod.SetupSchema","AuthMethod.InputSchema","AuthMethod.MaterialSchema","AuthMethod.ValueSchema","AuthMethod.Value","AuthMethod.Setup","AuthMethod.Input","AuthMethod.Material","AuthMethod.HookContext","AuthMethod.AuthMethodHookError","AuthMethod.Requirements","AuthMethod.RefreshContext","AuthMethod.ExpectedOAuth2MethodError","AuthMethod.OAuth2RefreshTokenUnavailableError","AuthMethod.OAuth2TokenResponse","AuthMethod.Display","AuthMethod.TestResult"],"sources":["../src/AuthMethodExecution.ts"],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { Service } from "./OAuth2TokenRefresher.js";
3
+ import "./AuthMethodExecution.js";
4
+ import { AuthMethodHookError, ExpectedOAuth2MethodError, OAuth2RefreshTokenUnavailableError } from "./AuthMethod.js";
5
+ import { Effect, Schema } from "effect";
6
+ //#region src/AuthMethodExecution.ts
7
+ /**
8
+ * Credential decoding, hook execution, material refresh, and value resolution.
9
+ *
10
+ * @since 0.0.0
11
+ */
12
+ var AuthMethodExecution_exports = /* @__PURE__ */ __exportAll({
13
+ AuthMethodExecution: () => AuthMethodExecution_exports,
14
+ JsonRequest: () => JsonRequest,
15
+ decodeInput: () => decodeInput,
16
+ decodeMaterial: () => decodeMaterial,
17
+ decodeSetup: () => decodeSetup,
18
+ decodeValue: () => decodeValue,
19
+ display: () => display,
20
+ executeJson: () => executeJson,
21
+ prepare: () => prepare,
22
+ prepareDecoded: () => prepareDecoded,
23
+ prepareOAuth2Tokens: () => prepareOAuth2Tokens,
24
+ prepareUnknown: () => prepareUnknown,
25
+ refreshDecoded: () => refreshDecoded,
26
+ refreshUnknown: () => refreshUnknown,
27
+ resolve: () => resolve,
28
+ resolveDecoded: () => resolveDecoded,
29
+ resolveUnknown: () => resolveUnknown,
30
+ test: () => test
31
+ });
32
+ const hookError = (methodIdentifier, operation, cause) => new AuthMethodHookError({
33
+ cause,
34
+ methodIdentifier,
35
+ operation
36
+ });
37
+ const runHook = (methodIdentifier, operation, hook) => Effect.try({
38
+ catch: (cause) => hookError(methodIdentifier, operation, cause),
39
+ try: hook
40
+ }).pipe(Effect.flatMap((result) => toEffect(result).pipe(Effect.mapError((cause) => hookError(methodIdentifier, operation, cause)))));
41
+ const toEffect = (value) => Effect.isEffect(value) ? value : Effect.succeed(value);
42
+ const hookContext = (context) => context ?? { setup: void 0 };
43
+ const toImpl = (method) => method;
44
+ /**
45
+ * Decode a runtime auth value using the selected method schema.
46
+ *
47
+ * @since 0.0.0
48
+ * @category constructors
49
+ */
50
+ const decodeValue = (method, value) => Schema.decodeUnknownEffect(toImpl(method).schema)(value);
51
+ /**
52
+ * Decode organization/admin-level setup for a method, if it declares one.
53
+ *
54
+ * @since 0.0.0
55
+ * @category constructors
56
+ */
57
+ const decodeSetup = (method, setup) => {
58
+ const impl = toImpl(method);
59
+ return impl.setup === void 0 ? Effect.void : Schema.decodeUnknownEffect(impl.setup)(setup);
60
+ };
61
+ /**
62
+ * Decode submitted setup input using the method input schema, if any.
63
+ *
64
+ * @since 0.0.0
65
+ * @category constructors
66
+ */
67
+ const decodeInput = (method, input) => {
68
+ const impl = toImpl(method);
69
+ return impl.input === void 0 ? Effect.void : Schema.decodeUnknownEffect(impl.input)(input);
70
+ };
71
+ /**
72
+ * Decode encrypted stored material using the method material schema.
73
+ *
74
+ * @since 0.0.0
75
+ * @category constructors
76
+ */
77
+ const decodeMaterial = (method, material) => Schema.decodeUnknownEffect(toImpl(method).material)(material);
78
+ /**
79
+ * Prepare already-decoded setup input into encrypted stored material.
80
+ *
81
+ * @since 0.0.0
82
+ * @category constructors
83
+ */
84
+ const prepareDecoded = (method, input, context) => {
85
+ const impl = toImpl(method);
86
+ const prepare = impl.prepare;
87
+ if (prepare === void 0) return impl.input === impl.material ? Effect.succeed(input) : Schema.decodeUnknownEffect(impl.material)(input);
88
+ return runHook(impl.identifier, "prepare", () => prepare(input, hookContext(context))).pipe(Effect.flatMap((material) => Schema.decodeUnknownEffect(impl.material)(material)));
89
+ };
90
+ /**
91
+ * Decode and prepare submitted setup input into encrypted stored material.
92
+ *
93
+ * @since 0.0.0
94
+ * @category constructors
95
+ */
96
+ const prepareUnknown = (method, input, context) => decodeInput(method, input).pipe(Effect.flatMap((decodedInput) => prepareDecoded(method, decodedInput, context)));
97
+ const oauth2ExpiresAt = (material) => typeof material === "object" && material !== null && "expiresAt" in material ? typeof material.expiresAt === "number" ? material.expiresAt : void 0 : void 0;
98
+ const oauth2RefreshToken = (material) => typeof material === "object" && material !== null && "refreshToken" in material ? typeof material.refreshToken === "string" && material.refreshToken.trim() !== "" ? material.refreshToken : void 0 : void 0;
99
+ const refreshOAuth2Decoded = Effect.fn("AuthMethod.refreshOAuth2Decoded")(function* (method, material, context) {
100
+ if (context.reason === "before-use" && (oauth2ExpiresAt(material) ?? Number.NEGATIVE_INFINITY) > context.now + context.minValidityMs) return;
101
+ const refreshToken = oauth2RefreshToken(material);
102
+ if (refreshToken === void 0) return yield* new OAuth2RefreshTokenUnavailableError({ methodIdentifier: method.identifier });
103
+ const refresher = yield* Service;
104
+ const tokens = yield* runHook(method.identifier, "oauth2TokenRefresh", () => refresher.refresh({
105
+ method,
106
+ refreshToken,
107
+ setup: context.setup
108
+ }));
109
+ return yield* prepareOAuth2Tokens(method, tokens, { setup: context.setup });
110
+ });
111
+ /**
112
+ * Decode and prepare submitted setup input into encrypted stored material.
113
+ *
114
+ * @since 0.0.0
115
+ * @category constructors
116
+ */
117
+ const prepare = prepareUnknown;
118
+ /**
119
+ * Refresh already-decoded stored material when the auth method supports it.
120
+ *
121
+ * A result of `undefined` means the material is still usable and should not be
122
+ * persisted again.
123
+ *
124
+ * @since 0.0.0
125
+ * @category constructors
126
+ */
127
+ const refreshDecoded = (method, material, context) => {
128
+ const impl = toImpl(method);
129
+ if (impl.oauth2 !== void 0) return refreshOAuth2Decoded(method, material, context);
130
+ const refresh = impl.refresh;
131
+ if (refresh === void 0) return Effect.void;
132
+ return runHook(impl.identifier, "refresh", () => refresh(material, context)).pipe(Effect.flatMap((refreshed) => refreshed === void 0 ? Effect.void : Schema.decodeUnknownEffect(impl.material)(refreshed)));
133
+ };
134
+ /**
135
+ * Decode stored material and run the auth method refresh hook, if any.
136
+ *
137
+ * @since 0.0.0
138
+ * @category constructors
139
+ */
140
+ const refreshUnknown = (method, material, context) => decodeMaterial(method, material).pipe(Effect.flatMap((decodedMaterial) => refreshDecoded(method, decodedMaterial, context)));
141
+ /**
142
+ * Prepare normalized OAuth2 token exchange output into encrypted stored material.
143
+ *
144
+ * OAuth2 has no frontend-submitted setup input. The platform owns redirect,
145
+ * callback, state/PKCE, and token exchange, then calls this helper at the
146
+ * token-response boundary.
147
+ *
148
+ * @since 0.0.0
149
+ * @category constructors
150
+ */
151
+ const prepareOAuth2Tokens = (method, tokens, context) => {
152
+ const impl = toImpl(method);
153
+ if (impl.oauth2 === void 0) return Effect.fail(new ExpectedOAuth2MethodError({ methodIdentifier: impl.identifier }));
154
+ const fromTokens = impl.oauth2.fromTokens;
155
+ return (fromTokens === void 0 ? Effect.succeed(tokens) : runHook(impl.identifier, "prepareOAuth2Tokens", () => fromTokens(tokens, hookContext(context)))).pipe(Effect.flatMap((value) => Schema.decodeUnknownEffect(impl.material)(value)));
156
+ };
157
+ /**
158
+ * Resolve already-decoded stored material into the runtime value handlers receive.
159
+ *
160
+ * @since 0.0.0
161
+ * @category constructors
162
+ */
163
+ const resolveDecoded = (method, material, context) => {
164
+ const impl = toImpl(method);
165
+ const resolve = impl.resolve;
166
+ if (resolve === void 0) return impl.material === impl.value ? Effect.succeed(material) : Schema.decodeUnknownEffect(impl.schema)(material);
167
+ return runHook(impl.identifier, "resolve", () => resolve(material, hookContext(context))).pipe(Effect.flatMap((value) => Schema.decodeUnknownEffect(impl.schema)(value)));
168
+ };
169
+ /**
170
+ * Decode stored material and resolve it into the runtime value handlers receive.
171
+ *
172
+ * @since 0.0.0
173
+ * @category constructors
174
+ */
175
+ const resolve = (method, material, context) => decodeMaterial(method, material).pipe(Effect.flatMap((decodedMaterial) => resolveDecoded(method, decodedMaterial, context)));
176
+ /**
177
+ * Resolve untrusted persisted material into the runtime value handlers receive.
178
+ *
179
+ * This is the persistence-boundary variant of {@link resolve}: callers can pass
180
+ * raw JSON from storage and the method material schema is decoded before any
181
+ * provider hook runs.
182
+ *
183
+ * @since 0.0.0
184
+ * @category constructors
185
+ */
186
+ const resolveUnknown = resolve;
187
+ const jsonAuth = {
188
+ authMethodId: Schema.NonEmptyString,
189
+ providerId: Schema.NonEmptyString,
190
+ setup: Schema.optionalKey(Schema.Json)
191
+ };
192
+ const JsonRequest = Schema.Union([
193
+ Schema.TaggedStruct("decodeSetup", jsonAuth),
194
+ Schema.TaggedStruct("prepare", {
195
+ ...jsonAuth,
196
+ input: Schema.Json
197
+ }),
198
+ Schema.TaggedStruct("prepareOAuth2Tokens", {
199
+ ...jsonAuth,
200
+ tokens: Schema.Struct({
201
+ accessToken: Schema.String,
202
+ expiresAt: Schema.optionalKey(Schema.Number),
203
+ expiresIn: Schema.optionalKey(Schema.Number),
204
+ raw: Schema.Record(Schema.String, Schema.Json),
205
+ refreshToken: Schema.optionalKey(Schema.String),
206
+ scope: Schema.optionalKey(Schema.String),
207
+ tokenType: Schema.optionalKey(Schema.String)
208
+ })
209
+ }),
210
+ Schema.TaggedStruct("refresh", {
211
+ ...jsonAuth,
212
+ material: Schema.Json,
213
+ minValidityMs: Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0)),
214
+ now: Schema.Finite,
215
+ reason: Schema.Literals(["before-use", "forced"])
216
+ }),
217
+ Schema.TaggedStruct("resolve", {
218
+ ...jsonAuth,
219
+ material: Schema.Json
220
+ }),
221
+ Schema.TaggedStruct("display", {
222
+ ...jsonAuth,
223
+ material: Schema.Json
224
+ }),
225
+ Schema.TaggedStruct("test", {
226
+ ...jsonAuth,
227
+ material: Schema.Json
228
+ })
229
+ ]);
230
+ /** Decode canonical JSON once; executable hooks and codecs stay in the guest. */
231
+ const executeJson = Effect.fn("AuthMethod.executeJson")(function* (method, request) {
232
+ const decode = (schema, value) => Schema.decodeUnknownEffect(Schema.toCodecJson(schema))(value);
233
+ const encode = (schema, value) => Schema.encodeEffect(Schema.toCodecJson(schema))(value);
234
+ const setup = method.setup === void 0 ? void 0 : yield* decode(method.setup, request.setup);
235
+ if (request._tag === "decodeSetup") return method.setup === void 0 ? void 0 : yield* encode(method.setup, setup);
236
+ if (request._tag === "prepare") {
237
+ const input = method.input === void 0 ? void 0 : yield* decode(method.input, request.input);
238
+ return yield* encode(method.material, yield* prepareDecoded(method, input, { setup }));
239
+ }
240
+ if (request._tag === "prepareOAuth2Tokens") return yield* encode(method.material, yield* prepareOAuth2Tokens(method, request.tokens, { setup }));
241
+ const material = yield* decode(method.material, request.material);
242
+ if (request._tag === "refresh") {
243
+ const refreshed = yield* refreshDecoded(method, material, {
244
+ ...request,
245
+ setup
246
+ });
247
+ return refreshed === void 0 ? void 0 : yield* encode(method.material, refreshed);
248
+ }
249
+ if (request._tag === "resolve") return {
250
+ methodId: method.identifier,
251
+ providerId: request.providerId,
252
+ value: yield* encode(method.value, yield* resolveDecoded(method, material, { setup }))
253
+ };
254
+ const impl = toImpl(method);
255
+ if (request._tag === "display") {
256
+ const hook = impl.display;
257
+ return hook === void 0 ? void 0 : yield* runHook(method.identifier, "display", () => hook(material, { setup }));
258
+ }
259
+ const hook = impl.test;
260
+ return hook === void 0 ? { ok: true } : yield* runHook(method.identifier, "test", () => hook(material, { setup }));
261
+ });
262
+ /** @since 0.0.0 @category constructors */
263
+ const display = (method, material, context) => {
264
+ const impl = toImpl(method);
265
+ const displayHook = impl.display;
266
+ return decodeMaterial(method, material).pipe(Effect.flatMap((decodedMaterial) => displayHook === void 0 ? Effect.void : runHook(impl.identifier, "display", () => displayHook(decodedMaterial, hookContext(context)))));
267
+ };
268
+ /** @since 0.0.0 @category constructors */
269
+ const test = (method, material, context) => {
270
+ const impl = toImpl(method);
271
+ const testHook = impl.test;
272
+ return decodeMaterial(method, material).pipe(Effect.flatMap((decodedMaterial) => testHook === void 0 ? Effect.succeed({ ok: true }) : runHook(impl.identifier, "test", () => testHook(decodedMaterial, hookContext(context)))));
273
+ };
274
+ //#endregion
275
+ export { AuthMethodExecution_exports as AuthMethodExecution, AuthMethodExecution_exports, JsonRequest, decodeInput, decodeMaterial, decodeSetup, decodeValue, display, executeJson, prepare, prepareDecoded, prepareOAuth2Tokens, prepareUnknown, refreshDecoded, refreshUnknown, resolve, resolveDecoded, resolveUnknown, test };
276
+
277
+ //# sourceMappingURL=AuthMethodExecution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthMethodExecution.js","names":["AuthMethod.AuthMethodHookError","AuthMethod.OAuth2RefreshTokenUnavailableError","OAuth2TokenRefresher.Service","AuthMethod.ExpectedOAuth2MethodError"],"sources":["../src/AuthMethodExecution.ts"],"sourcesContent":["/**\n * Credential decoding, hook execution, material refresh, and value resolution.\n *\n * @since 0.0.0\n */\nimport { Effect, Schema } from \"effect\";\n\nimport * as AuthMethod from \"./AuthMethod.ts\";\nimport { OAuth2TokenRefresher } from \"./OAuth2TokenRefresher.ts\";\n\nconst hookError = (\n methodIdentifier: string,\n operation: AuthMethod.AuthMethodHookOperation,\n cause: unknown,\n): AuthMethod.AuthMethodHookError =>\n new AuthMethod.AuthMethodHookError({ cause, methodIdentifier, operation });\n\nconst runHook = <A, R>(\n methodIdentifier: string,\n operation: AuthMethod.AuthMethodHookOperation,\n hook: () => AuthMethod.MaybeEffect<A, unknown, R>,\n): Effect.Effect<A, AuthMethod.AuthMethodHookError, R> =>\n Effect.try({ catch: cause => hookError(methodIdentifier, operation, cause), try: hook }).pipe(\n Effect.flatMap(result =>\n toEffect(result).pipe(\n Effect.mapError(cause => hookError(methodIdentifier, operation, cause)),\n ),\n ),\n );\n\nconst toEffect = <Value, Error, Requirements>(\n value: AuthMethod.MaybeEffect<Value, Error, Requirements>,\n): Effect.Effect<Value, Error, Requirements> =>\n Effect.isEffect(value) ? value : Effect.succeed(value);\n\nconst hookContext = (\n context: AuthMethod.HookContext<unknown> | undefined,\n): AuthMethod.HookContext<unknown> => context ?? { setup: undefined };\n\n/**\n * Erased runtime view of an auth method.\n *\n * Execution helpers implement against this view and re-expose precise\n * per-method types through their public signatures; the single `as never`\n * closing each implementation is the contained boundary between the two.\n */\ninterface AnyImpl {\n readonly identifier: string;\n readonly kind: AuthMethod.AuthMethodKind;\n readonly setup: Schema.Top | undefined;\n readonly input: Schema.Top | undefined;\n readonly material: Schema.Top;\n readonly value: Schema.Top;\n readonly schema: Schema.Top;\n readonly prepare: AuthMethod.PrepareHook<unknown, unknown, unknown, unknown, unknown> | undefined;\n readonly refresh: AuthMethod.RefreshHook<unknown, unknown, unknown, unknown> | undefined;\n readonly resolve: AuthMethod.ResolveHook<unknown, unknown, unknown, unknown, unknown> | undefined;\n readonly display: AuthMethod.DisplayHook<unknown, unknown, unknown, unknown> | undefined;\n readonly test: AuthMethod.TestHook<unknown, unknown, unknown, unknown> | undefined;\n readonly oauth2: AuthMethod.OAuth2Setup<Schema.Top, unknown, unknown> | undefined;\n}\n\nconst toImpl = (method: AuthMethod.Any): AnyImpl => method as AnyImpl;\n\ntype SetupRequirements<Method extends AuthMethod.Any> =\n AuthMethod.SetupSchema<Method> extends Schema.Top\n ? Schema.Codec.DecodingServices<AuthMethod.SetupSchema<Method>>\n : never;\n\ntype InputRequirements<Method extends AuthMethod.Any> =\n AuthMethod.InputSchema<Method> extends Schema.Top\n ? Schema.Codec.DecodingServices<AuthMethod.InputSchema<Method>>\n : never;\n\ntype MaterialRequirements<Method extends AuthMethod.Any> = Schema.Codec.DecodingServices<\n AuthMethod.MaterialSchema<Method>\n>;\n\ntype ValueRequirements<Method extends AuthMethod.Any> = Schema.Codec.DecodingServices<\n AuthMethod.ValueSchema<Method>\n>;\n\n/**\n * Decode a runtime auth value using the selected method schema.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const decodeValue: <Method extends AuthMethod.Any>(\n method: Method,\n value: unknown,\n) => Effect.Effect<AuthMethod.Value<Method>, Schema.SchemaError, ValueRequirements<Method>> = (\n method,\n value,\n) => Schema.decodeUnknownEffect(toImpl(method).schema)(value) as never;\n\n/**\n * Decode organization/admin-level setup for a method, if it declares one.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const decodeSetup: <Method extends AuthMethod.Any>(\n method: Method,\n setup: unknown,\n) => Effect.Effect<AuthMethod.Setup<Method>, Schema.SchemaError, SetupRequirements<Method>> = (\n method,\n setup,\n) => {\n const impl = toImpl(method);\n return (\n impl.setup === undefined ? Effect.void : Schema.decodeUnknownEffect(impl.setup)(setup)\n ) as never;\n};\n\n/**\n * Decode submitted setup input using the method input schema, if any.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const decodeInput: <Method extends AuthMethod.Any>(\n method: Method,\n input: unknown,\n) => Effect.Effect<AuthMethod.Input<Method>, Schema.SchemaError, InputRequirements<Method>> = (\n method,\n input,\n) => {\n const impl = toImpl(method);\n return (\n impl.input === undefined ? Effect.void : Schema.decodeUnknownEffect(impl.input)(input)\n ) as never;\n};\n\n/**\n * Decode encrypted stored material using the method material schema.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const decodeMaterial: <Method extends AuthMethod.Any>(\n method: Method,\n material: unknown,\n) => Effect.Effect<\n AuthMethod.Material<Method>,\n Schema.SchemaError,\n MaterialRequirements<Method>\n> = (method, material) => Schema.decodeUnknownEffect(toImpl(method).material)(material) as never;\n\n/**\n * Prepare already-decoded setup input into encrypted stored material.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const prepareDecoded: <Method extends AuthMethod.Any>(\n method: Method,\n input: AuthMethod.Input<Method>,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Material<Method>,\n Schema.SchemaError | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, input, context) => {\n const impl = toImpl(method);\n const prepare = impl.prepare;\n\n if (prepare === undefined) {\n return (\n impl.input === impl.material\n ? Effect.succeed(input)\n : Schema.decodeUnknownEffect(impl.material)(input)\n ) as never;\n }\n\n return runHook(impl.identifier, \"prepare\", () => prepare(input, hookContext(context))).pipe(\n Effect.flatMap(material => Schema.decodeUnknownEffect(impl.material)(material)),\n ) as never;\n};\n\n/**\n * Decode and prepare submitted setup input into encrypted stored material.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const prepareUnknown: <Method extends AuthMethod.Any>(\n method: Method,\n input: unknown,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Material<Method>,\n Schema.SchemaError | AuthMethod.AuthMethodHookError,\n InputRequirements<Method> | MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, input, context) =>\n decodeInput(method, input).pipe(\n Effect.flatMap(decodedInput => prepareDecoded(method, decodedInput, context)),\n );\n\nconst oauth2ExpiresAt = (material: unknown): number | undefined =>\n typeof material === \"object\" && material !== null && \"expiresAt\" in material\n ? typeof (material as { readonly expiresAt?: unknown }).expiresAt === \"number\"\n ? (material as { readonly expiresAt: number }).expiresAt\n : undefined\n : undefined;\n\nconst oauth2RefreshToken = (material: unknown): string | undefined =>\n typeof material === \"object\" && material !== null && \"refreshToken\" in material\n ? typeof (material as { readonly refreshToken?: unknown }).refreshToken === \"string\" &&\n (material as { readonly refreshToken: string }).refreshToken.trim() !== \"\"\n ? (material as { readonly refreshToken: string }).refreshToken\n : undefined\n : undefined;\n\nconst refreshOAuth2Decoded = Effect.fn(\"AuthMethod.refreshOAuth2Decoded\")(function* (\n method: AuthMethod.Any,\n material: unknown,\n context: AuthMethod.RefreshContext<unknown>,\n) {\n if (\n context.reason === \"before-use\" &&\n (oauth2ExpiresAt(material) ?? Number.NEGATIVE_INFINITY) > context.now + context.minValidityMs\n ) {\n return undefined;\n }\n\n const refreshToken = oauth2RefreshToken(material);\n if (refreshToken === undefined) {\n return yield* new AuthMethod.OAuth2RefreshTokenUnavailableError({\n methodIdentifier: method.identifier,\n });\n }\n\n const refresher = yield* OAuth2TokenRefresher.Service;\n const tokens = yield* runHook(method.identifier, \"oauth2TokenRefresh\", () =>\n refresher.refresh({ method, refreshToken, setup: context.setup }),\n );\n return yield* prepareOAuth2Tokens(method, tokens, { setup: context.setup });\n});\n\n/**\n * Decode and prepare submitted setup input into encrypted stored material.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const prepare = prepareUnknown;\n\n/**\n * Refresh already-decoded stored material when the auth method supports it.\n *\n * A result of `undefined` means the material is still usable and should not be\n * persisted again.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const refreshDecoded: <Method extends AuthMethod.Any>(\n method: Method,\n material: AuthMethod.Material<Method>,\n context: AuthMethod.RefreshContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Material<Method> | undefined,\n | AuthMethod.ExpectedOAuth2MethodError\n | AuthMethod.OAuth2RefreshTokenUnavailableError\n | Schema.SchemaError\n | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, material, context) => {\n const impl = toImpl(method);\n\n if (impl.oauth2 !== undefined) {\n return refreshOAuth2Decoded(method, material, context) as never;\n }\n\n const refresh = impl.refresh;\n if (refresh === undefined) {\n return Effect.void as never;\n }\n\n return runHook(impl.identifier, \"refresh\", () => refresh(material, context)).pipe(\n Effect.flatMap(refreshed =>\n refreshed === undefined ? Effect.void : Schema.decodeUnknownEffect(impl.material)(refreshed),\n ),\n ) as never;\n};\n\n/**\n * Decode stored material and run the auth method refresh hook, if any.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const refreshUnknown: <Method extends AuthMethod.Any>(\n method: Method,\n material: unknown,\n context: AuthMethod.RefreshContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Material<Method> | undefined,\n | AuthMethod.ExpectedOAuth2MethodError\n | AuthMethod.OAuth2RefreshTokenUnavailableError\n | Schema.SchemaError\n | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, material, context) =>\n decodeMaterial(method, material).pipe(\n Effect.flatMap(decodedMaterial => refreshDecoded(method, decodedMaterial, context)),\n );\n\n/**\n * Prepare normalized OAuth2 token exchange output into encrypted stored material.\n *\n * OAuth2 has no frontend-submitted setup input. The platform owns redirect,\n * callback, state/PKCE, and token exchange, then calls this helper at the\n * token-response boundary.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const prepareOAuth2Tokens: <Method extends AuthMethod.Any>(\n method: Method,\n tokens: AuthMethod.OAuth2TokenResponse,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Material<Method>,\n AuthMethod.ExpectedOAuth2MethodError | Schema.SchemaError | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, tokens, context) => {\n const impl = toImpl(method);\n\n if (impl.oauth2 === undefined) {\n return Effect.fail(\n new AuthMethod.ExpectedOAuth2MethodError({ methodIdentifier: impl.identifier }),\n ) as never;\n }\n\n const fromTokens = impl.oauth2.fromTokens;\n const material: Effect.Effect<unknown, unknown, unknown> =\n fromTokens === undefined\n ? Effect.succeed(tokens)\n : runHook(impl.identifier, \"prepareOAuth2Tokens\", () =>\n fromTokens(tokens, hookContext(context)),\n );\n\n return material.pipe(\n Effect.flatMap(value => Schema.decodeUnknownEffect(impl.material)(value)),\n ) as never;\n};\n\n/**\n * Resolve already-decoded stored material into the runtime value handlers receive.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const resolveDecoded: <Method extends AuthMethod.Any>(\n method: Method,\n material: AuthMethod.Material<Method>,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Value<Method>,\n Schema.SchemaError | AuthMethod.AuthMethodHookError,\n ValueRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, material, context) => {\n const impl = toImpl(method);\n const resolve = impl.resolve;\n\n if (resolve === undefined) {\n return (\n impl.material === impl.value\n ? Effect.succeed(material)\n : Schema.decodeUnknownEffect(impl.schema)(material)\n ) as never;\n }\n\n return runHook(impl.identifier, \"resolve\", () => resolve(material, hookContext(context))).pipe(\n Effect.flatMap(value => Schema.decodeUnknownEffect(impl.schema)(value)),\n ) as never;\n};\n\n/**\n * Decode stored material and resolve it into the runtime value handlers receive.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const resolve: <Method extends AuthMethod.Any>(\n method: Method,\n material: unknown,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Value<Method>,\n Schema.SchemaError | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | ValueRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, material, context) =>\n decodeMaterial(method, material).pipe(\n Effect.flatMap(decodedMaterial => resolveDecoded(method, decodedMaterial, context)),\n );\n\n/**\n * Resolve untrusted persisted material into the runtime value handlers receive.\n *\n * This is the persistence-boundary variant of {@link resolve}: callers can pass\n * raw JSON from storage and the method material schema is decoded before any\n * provider hook runs.\n *\n * @since 0.0.0\n * @category constructors\n */\nexport const resolveUnknown: typeof resolve = resolve;\n\nconst jsonAuth = {\n authMethodId: Schema.NonEmptyString,\n providerId: Schema.NonEmptyString,\n setup: Schema.optionalKey(Schema.Json),\n};\n\n/** Operation-specific authentication data for isolated execution. */\nexport type JsonRequest = typeof JsonRequest.Type;\nexport const JsonRequest = Schema.Union([\n Schema.TaggedStruct(\"decodeSetup\", jsonAuth),\n Schema.TaggedStruct(\"prepare\", { ...jsonAuth, input: Schema.Json }),\n Schema.TaggedStruct(\"prepareOAuth2Tokens\", {\n ...jsonAuth,\n tokens: Schema.Struct({\n accessToken: Schema.String,\n expiresAt: Schema.optionalKey(Schema.Number),\n expiresIn: Schema.optionalKey(Schema.Number),\n raw: Schema.Record(Schema.String, Schema.Json),\n refreshToken: Schema.optionalKey(Schema.String),\n scope: Schema.optionalKey(Schema.String),\n tokenType: Schema.optionalKey(Schema.String),\n }),\n }),\n Schema.TaggedStruct(\"refresh\", {\n ...jsonAuth,\n material: Schema.Json,\n minValidityMs: Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0)),\n now: Schema.Finite,\n reason: Schema.Literals([\"before-use\", \"forced\"]),\n }),\n Schema.TaggedStruct(\"resolve\", { ...jsonAuth, material: Schema.Json }),\n Schema.TaggedStruct(\"display\", { ...jsonAuth, material: Schema.Json }),\n Schema.TaggedStruct(\"test\", { ...jsonAuth, material: Schema.Json }),\n]);\n\n/** Decode canonical JSON once; executable hooks and codecs stay in the guest. */\nexport const executeJson = Effect.fn(\"AuthMethod.executeJson\")(function* (\n method: AuthMethod.Any,\n request: JsonRequest,\n) {\n const decode = (schema: Schema.Top, value: unknown) =>\n Schema.decodeUnknownEffect(Schema.toCodecJson(schema))(value);\n const encode = (schema: Schema.Top, value: unknown) =>\n Schema.encodeEffect(Schema.toCodecJson(schema))(value);\n const setup = method.setup === undefined ? undefined : yield* decode(method.setup, request.setup);\n if (request._tag === \"decodeSetup\") {\n return method.setup === undefined ? undefined : yield* encode(method.setup, setup);\n }\n if (request._tag === \"prepare\") {\n const input =\n method.input === undefined ? undefined : yield* decode(method.input, request.input);\n return yield* encode(method.material, yield* prepareDecoded(method, input, { setup }));\n }\n if (request._tag === \"prepareOAuth2Tokens\") {\n return yield* encode(\n method.material,\n yield* prepareOAuth2Tokens(method, request.tokens, { setup }),\n );\n }\n const material = yield* decode(method.material, request.material);\n if (request._tag === \"refresh\") {\n const refreshed = yield* refreshDecoded(method, material, { ...request, setup });\n return refreshed === undefined ? undefined : yield* encode(method.material, refreshed);\n }\n if (request._tag === \"resolve\") {\n return {\n methodId: method.identifier,\n providerId: request.providerId,\n value: yield* encode(method.value, yield* resolveDecoded(method, material, { setup })),\n };\n }\n const impl = toImpl(method);\n if (request._tag === \"display\") {\n const hook = impl.display;\n return hook === undefined\n ? undefined\n : yield* runHook(method.identifier, \"display\", () => hook(material, { setup }));\n }\n const hook = impl.test;\n return hook === undefined\n ? { ok: true }\n : yield* runHook(method.identifier, \"test\", () => hook(material, { setup }));\n});\n\n/** @since 0.0.0 @category constructors */\nexport const display: <Method extends AuthMethod.Any>(\n method: Method,\n material: AuthMethod.Material<Method>,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.Display | undefined,\n Schema.SchemaError | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, material, context) => {\n const impl = toImpl(method);\n const displayHook = impl.display;\n\n return decodeMaterial(method, material).pipe(\n Effect.flatMap(decodedMaterial =>\n displayHook === undefined\n ? Effect.void\n : runHook(impl.identifier, \"display\", () =>\n displayHook(decodedMaterial, hookContext(context)),\n ),\n ),\n ) as never;\n};\n\n/** @since 0.0.0 @category constructors */\nexport const test: <Method extends AuthMethod.Any>(\n method: Method,\n material: AuthMethod.Material<Method>,\n context?: AuthMethod.HookContext<AuthMethod.Setup<Method>>,\n) => Effect.Effect<\n AuthMethod.TestResult,\n Schema.SchemaError | AuthMethod.AuthMethodHookError,\n MaterialRequirements<Method> | AuthMethod.Requirements<Method>\n> = (method, material, context) => {\n const impl = toImpl(method);\n const testHook = impl.test;\n\n return decodeMaterial(method, material).pipe(\n Effect.flatMap(decodedMaterial =>\n testHook === undefined\n ? Effect.succeed<AuthMethod.TestResult>({ ok: true })\n : runHook(impl.identifier, \"test\", () => testHook(decodedMaterial, hookContext(context))),\n ),\n ) as never;\n};\n\nexport * as AuthMethodExecution from \"./AuthMethodExecution.ts\";\n"],"mappings":"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"}