@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.
- package/LICENSE +4 -0
- package/README.md +19 -2
- package/dist/Action.d.ts +201 -0
- package/dist/Action.d.ts.map +1 -0
- package/dist/Action.js +172 -0
- package/dist/Action.js.map +1 -0
- package/dist/AgentChannel.d.ts +1717 -0
- package/dist/AgentChannel.d.ts.map +1 -0
- package/dist/AgentChannel.js +708 -0
- package/dist/AgentChannel.js.map +1 -0
- package/dist/AgentChannelConformance.d.ts +1543 -0
- package/dist/AgentChannelConformance.d.ts.map +1 -0
- package/dist/AgentChannelConformance.js +163 -0
- package/dist/AgentChannelConformance.js.map +1 -0
- package/dist/AgentChannelRuntime.d.ts +78 -0
- package/dist/AgentChannelRuntime.d.ts.map +1 -0
- package/dist/AgentChannelRuntime.js +270 -0
- package/dist/AgentChannelRuntime.js.map +1 -0
- package/dist/AiProvider.d.ts +132 -0
- package/dist/AiProvider.d.ts.map +1 -0
- package/dist/AiProvider.js +100 -0
- package/dist/AiProvider.js.map +1 -0
- package/dist/AuthMethod.d.ts +381 -0
- package/dist/AuthMethod.d.ts.map +1 -0
- package/dist/AuthMethod.js +225 -0
- package/dist/AuthMethod.js.map +1 -0
- package/dist/AuthMethodBinding.d.ts +77 -0
- package/dist/AuthMethodBinding.d.ts.map +1 -0
- package/dist/AuthMethodBinding.js +31 -0
- package/dist/AuthMethodBinding.js.map +1 -0
- package/dist/AuthMethodExecution.d.ts +223 -0
- package/dist/AuthMethodExecution.d.ts.map +1 -0
- package/dist/AuthMethodExecution.js +277 -0
- package/dist/AuthMethodExecution.js.map +1 -0
- package/dist/ConnectionResolver.d.ts +219 -0
- package/dist/ConnectionResolver.d.ts.map +1 -0
- package/dist/ConnectionResolver.js +153 -0
- package/dist/ConnectionResolver.js.map +1 -0
- package/dist/DefinitionError.d.ts +67 -0
- package/dist/DefinitionError.d.ts.map +1 -0
- package/dist/DefinitionError.js +82 -0
- package/dist/DefinitionError.js.map +1 -0
- package/dist/DualRegistry.d.ts +71 -0
- package/dist/DualRegistry.d.ts.map +1 -0
- package/dist/DualRegistry.js +96 -0
- package/dist/DualRegistry.js.map +1 -0
- package/dist/DualRuntime.d.ts +279 -0
- package/dist/DualRuntime.d.ts.map +1 -0
- package/dist/DualRuntime.js +311 -0
- package/dist/DualRuntime.js.map +1 -0
- package/dist/Files.d.ts +80 -0
- package/dist/Files.d.ts.map +1 -0
- package/dist/Files.js +66 -0
- package/dist/Files.js.map +1 -0
- package/dist/Group.d.ts +106 -0
- package/dist/Group.d.ts.map +1 -0
- package/dist/Group.js +86 -0
- package/dist/Group.js.map +1 -0
- package/dist/Http.d.ts +342 -0
- package/dist/Http.d.ts.map +1 -0
- package/dist/Http.js +677 -0
- package/dist/Http.js.map +1 -0
- package/dist/Mcp.d.ts +109 -0
- package/dist/Mcp.d.ts.map +1 -0
- package/dist/Mcp.js +176 -0
- package/dist/Mcp.js.map +1 -0
- package/dist/OAuth2TokenRefresher.d.ts +18 -0
- package/dist/OAuth2TokenRefresher.d.ts.map +1 -0
- package/dist/OAuth2TokenRefresher.js +19 -0
- package/dist/OAuth2TokenRefresher.js.map +1 -0
- package/dist/OAuthFlow.d.ts +71 -0
- package/dist/OAuthFlow.d.ts.map +1 -0
- package/dist/OAuthFlow.js +488 -0
- package/dist/OAuthFlow.js.map +1 -0
- package/dist/Plugin.d.ts +383 -0
- package/dist/Plugin.d.ts.map +1 -0
- package/dist/Plugin.js +249 -0
- package/dist/Plugin.js.map +1 -0
- package/dist/PluginRuntime.d.ts +3186 -0
- package/dist/PluginRuntime.d.ts.map +1 -0
- package/dist/PluginRuntime.js +331 -0
- package/dist/PluginRuntime.js.map +1 -0
- package/dist/Runner.d.ts +1 -0
- package/dist/Runner.js +124 -0
- package/dist/Runner.js.map +1 -0
- package/dist/ToolFile.d.ts +23 -0
- package/dist/ToolFile.d.ts.map +1 -0
- package/dist/ToolFile.js +33 -0
- package/dist/ToolFile.js.map +1 -0
- package/dist/Trigger.d.ts +358 -0
- package/dist/Trigger.d.ts.map +1 -0
- package/dist/Trigger.js +287 -0
- package/dist/Trigger.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +24 -0
- package/dist/internal/auth-context.d.ts +23 -0
- package/dist/internal/auth-context.d.ts.map +1 -0
- package/dist/internal/auth-context.js +1 -0
- package/dist/internal/auth-execution.d.ts +27 -0
- package/dist/internal/auth-execution.d.ts.map +1 -0
- package/dist/internal/auth-execution.js +66 -0
- package/dist/internal/auth-execution.js.map +1 -0
- package/dist/internal/auth-runtime.d.ts +5 -0
- package/dist/internal/auth-runtime.d.ts.map +1 -0
- package/dist/internal/auth-runtime.js +16 -0
- package/dist/internal/auth-runtime.js.map +1 -0
- package/dist/internal/capabilities.d.ts +24 -0
- package/dist/internal/capabilities.d.ts.map +1 -0
- package/dist/internal/capabilities.js +22 -0
- package/dist/internal/capabilities.js.map +1 -0
- package/dist/internal/children.d.ts +34 -0
- package/dist/internal/children.d.ts.map +1 -0
- package/dist/internal/children.js +53 -0
- package/dist/internal/children.js.map +1 -0
- package/dist/internal/collection-utils.d.ts +4 -0
- package/dist/internal/collection-utils.d.ts.map +1 -0
- package/dist/internal/collection-utils.js +6 -0
- package/dist/internal/collection-utils.js.map +1 -0
- package/dist/internal/dual/actions.d.ts +33 -0
- package/dist/internal/dual/actions.d.ts.map +1 -0
- package/dist/internal/dual/actions.js +26 -0
- package/dist/internal/dual/actions.js.map +1 -0
- package/dist/internal/dual/invoke.d.ts +63 -0
- package/dist/internal/dual/invoke.d.ts.map +1 -0
- package/dist/internal/dual/invoke.js +75 -0
- package/dist/internal/dual/invoke.js.map +1 -0
- package/dist/internal/dual/registry.d.ts +125 -0
- package/dist/internal/dual/registry.d.ts.map +1 -0
- package/dist/internal/dual/registry.js +172 -0
- package/dist/internal/dual/registry.js.map +1 -0
- package/dist/internal/dual/triggers.d.ts +29 -0
- package/dist/internal/dual/triggers.d.ts.map +1 -0
- package/dist/internal/dual/triggers.js +26 -0
- package/dist/internal/dual/triggers.js.map +1 -0
- package/dist/internal/handler-context.d.ts +9 -0
- package/dist/internal/handler-context.d.ts.map +1 -0
- package/dist/internal/handler-context.js +31 -0
- package/dist/internal/handler-context.js.map +1 -0
- package/dist/internal/identifier.d.ts +6 -0
- package/dist/internal/identifier.d.ts.map +1 -0
- package/dist/internal/identifier.js +28 -0
- package/dist/internal/identifier.js.map +1 -0
- package/dist/internal/plugin-handlers.d.ts +38 -0
- package/dist/internal/plugin-handlers.d.ts.map +1 -0
- package/dist/internal/plugin-handlers.js +52 -0
- package/dist/internal/plugin-handlers.js.map +1 -0
- package/dist/internal/proto.d.ts +7 -0
- package/dist/internal/proto.d.ts.map +1 -0
- package/dist/internal/proto.js +10 -0
- package/dist/internal/proto.js.map +1 -0
- package/dist/internal/schema-runtime.d.ts +6 -0
- package/dist/internal/schema-runtime.d.ts.map +1 -0
- package/dist/internal/schema-runtime.js +10 -0
- package/dist/internal/schema-runtime.js.map +1 -0
- package/dist/internal/trigger-runtime-shared.d.ts +41 -0
- package/dist/internal/trigger-runtime-shared.d.ts.map +1 -0
- package/dist/internal/trigger-runtime-shared.js +132 -0
- package/dist/internal/trigger-runtime-shared.js.map +1 -0
- package/dist/internal/trigger-runtime.d.ts +12 -0
- package/dist/internal/trigger-runtime.d.ts.map +1 -0
- package/dist/internal/trigger-runtime.js +95 -0
- package/dist/internal/trigger-runtime.js.map +1 -0
- package/dist/internal/types.d.ts +7 -0
- package/dist/internal/types.d.ts.map +1 -0
- package/dist/internal/types.js +1 -0
- package/dist/remote-runtime.d.ts +585 -0
- package/dist/remote-runtime.d.ts.map +1 -0
- package/dist/remote-runtime.js +367 -0
- package/dist/remote-runtime.js.map +1 -0
- package/package.json +55 -4
- package/src/Action.ts +370 -0
- package/src/AgentChannel.ts +860 -0
- package/src/AgentChannelConformance.ts +124 -0
- package/src/AgentChannelRuntime.ts +616 -0
- package/src/AiProvider.ts +255 -0
- package/src/AuthMethod.ts +954 -0
- package/src/AuthMethodBinding.ts +112 -0
- package/src/AuthMethodExecution.ts +542 -0
- package/src/ConnectionResolver.ts +265 -0
- package/src/DefinitionError.ts +115 -0
- package/src/DualRegistry.ts +152 -0
- package/src/DualRuntime.ts +1081 -0
- package/src/Files.ts +89 -0
- package/src/Group.ts +292 -0
- package/src/Http.ts +1205 -0
- package/src/Mcp.ts +299 -0
- package/src/OAuth2TokenRefresher.ts +22 -0
- package/src/OAuthFlow.ts +874 -0
- package/src/Plugin.ts +912 -0
- package/src/PluginRuntime.ts +414 -0
- package/src/Runner.ts +248 -0
- package/src/ToolFile.ts +28 -0
- package/src/Trigger.ts +722 -0
- package/src/index.ts +158 -0
- package/src/internal/auth-context.ts +27 -0
- package/src/internal/auth-execution.ts +241 -0
- package/src/internal/auth-runtime.ts +20 -0
- package/src/internal/capabilities.ts +55 -0
- package/src/internal/children.ts +126 -0
- package/src/internal/collection-utils.ts +8 -0
- package/src/internal/dual/actions.ts +116 -0
- package/src/internal/dual/invoke.ts +307 -0
- package/src/internal/dual/registry.ts +340 -0
- package/src/internal/dual/triggers.ts +128 -0
- package/src/internal/handler-context.ts +57 -0
- package/src/internal/identifier.ts +27 -0
- package/src/internal/plugin-handlers.ts +146 -0
- package/src/internal/proto.ts +8 -0
- package/src/internal/schema-runtime.ts +15 -0
- package/src/internal/trigger-runtime-shared.ts +449 -0
- package/src/internal/trigger-runtime.ts +223 -0
- package/src/internal/types.ts +12 -0
- 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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"}
|