@dainprotocol/service-sdk 2.0.53 → 2.0.54
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/README.md +78 -0
- package/dist/__tests__/api-sdk.test.d.ts +1 -0
- package/dist/__tests__/api-sdk.test.js +102 -0
- package/dist/__tests__/api-sdk.test.js.map +1 -0
- package/dist/__tests__/auth.test.d.ts +1 -0
- package/dist/__tests__/auth.test.js +110 -0
- package/dist/__tests__/auth.test.js.map +1 -0
- package/dist/__tests__/citations-plugin.test.d.ts +1 -0
- package/dist/__tests__/citations-plugin.test.js +491 -0
- package/dist/__tests__/citations-plugin.test.js.map +1 -0
- package/dist/__tests__/context-behavior.test.d.ts +1 -0
- package/dist/__tests__/context-behavior.test.js +290 -0
- package/dist/__tests__/context-behavior.test.js.map +1 -0
- package/dist/__tests__/convertToVercelTool.test.d.ts +1 -0
- package/dist/__tests__/convertToVercelTool.test.js +527 -0
- package/dist/__tests__/convertToVercelTool.test.js.map +1 -0
- package/dist/__tests__/core.test.d.ts +1 -0
- package/dist/__tests__/core.test.js +154 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/__tests__/crypto-plugin.test.d.ts +1 -0
- package/dist/__tests__/crypto-plugin.test.js +694 -0
- package/dist/__tests__/crypto-plugin.test.js.map +1 -0
- package/dist/__tests__/humanActions.test.d.ts +1 -0
- package/dist/__tests__/humanActions.test.js +221 -0
- package/dist/__tests__/humanActions.test.js.map +1 -0
- package/dist/__tests__/integration.test.d.ts +1 -0
- package/dist/__tests__/integration.test.js +1573 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/__tests__/mealMeSchemas.test.d.ts +576 -0
- package/dist/__tests__/mealMeSchemas.test.js +627 -0
- package/dist/__tests__/mealMeSchemas.test.js.map +1 -0
- package/dist/__tests__/oauth-context-simple.test.d.ts +1 -0
- package/dist/__tests__/oauth-context-simple.test.js +90 -0
- package/dist/__tests__/oauth-context-simple.test.js.map +1 -0
- package/dist/__tests__/oauth-context.test.d.ts +1 -0
- package/dist/__tests__/oauth-context.test.js +282 -0
- package/dist/__tests__/oauth-context.test.js.map +1 -0
- package/dist/__tests__/oauth.test.d.ts +1 -0
- package/dist/__tests__/oauth.test.js +378 -0
- package/dist/__tests__/oauth.test.js.map +1 -0
- package/dist/__tests__/oauth2-client-context.test.d.ts +1 -0
- package/dist/__tests__/oauth2-client-context.test.js +165 -0
- package/dist/__tests__/oauth2-client-context.test.js.map +1 -0
- package/dist/__tests__/oauth2-client-integration.test.d.ts +1 -0
- package/dist/__tests__/oauth2-client-integration.test.js +182 -0
- package/dist/__tests__/oauth2-client-integration.test.js.map +1 -0
- package/dist/__tests__/oauth2-client-simple.test.d.ts +1 -0
- package/dist/__tests__/oauth2-client-simple.test.js +144 -0
- package/dist/__tests__/oauth2-client-simple.test.js.map +1 -0
- package/dist/__tests__/oauth2-context.test.d.ts +1 -0
- package/dist/__tests__/oauth2-context.test.js +201 -0
- package/dist/__tests__/oauth2-context.test.js.map +1 -0
- package/dist/__tests__/oauth2-datasource.test.d.ts +1 -0
- package/dist/__tests__/oauth2-datasource.test.js +251 -0
- package/dist/__tests__/oauth2-datasource.test.js.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +1 -0
- package/dist/__tests__/plugin.test.js +900 -0
- package/dist/__tests__/plugin.test.js.map +1 -0
- package/dist/__tests__/processes.test.d.ts +1 -0
- package/dist/__tests__/processes.test.js +239 -0
- package/dist/__tests__/processes.test.js.map +1 -0
- package/dist/__tests__/streaming.test.d.ts +1 -0
- package/dist/__tests__/streaming.test.js +592 -0
- package/dist/__tests__/streaming.test.js.map +1 -0
- package/dist/__tests__/testEnums.d.ts +1 -0
- package/dist/__tests__/testEnums.js +73 -0
- package/dist/__tests__/testEnums.js.map +1 -0
- package/dist/__tests__/testOptionals.test.d.ts +1 -0
- package/dist/__tests__/testOptionals.test.js +83 -0
- package/dist/__tests__/testOptionals.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +1 -0
- package/dist/__tests__/types.test.js +98 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/client/client.d.ts +18 -5
- package/dist/client/client.js +25 -4
- package/dist/client/client.js.map +1 -1
- package/dist/client/types.d.ts +38 -0
- package/dist/client/types.js +35 -1
- package/dist/client/types.js.map +1 -1
- package/dist/service/actionable-tools.d.ts +135 -0
- package/dist/service/actionable-tools.js +144 -0
- package/dist/service/actionable-tools.js.map +1 -0
- package/dist/service/direct-auth-setup.d.ts +154 -0
- package/dist/service/direct-auth-setup.js +308 -0
- package/dist/service/direct-auth-setup.js.map +1 -0
- package/dist/service/index.d.ts +3 -1
- package/dist/service/index.js +10 -1
- package/dist/service/index.js.map +1 -1
- package/dist/service/nodeService.js +2 -0
- package/dist/service/nodeService.js.map +1 -1
- package/dist/service/oauth2.d.ts +40 -1
- package/dist/service/oauth2.js +46 -0
- package/dist/service/oauth2.js.map +1 -1
- package/dist/service/oauth2Manager.d.ts +31 -4
- package/dist/service/oauth2Manager.js +119 -8
- package/dist/service/oauth2Manager.js.map +1 -1
- package/dist/service/server.js +93 -19
- package/dist/service/server.js.map +1 -1
- package/dist/service/service.js +6 -1
- package/dist/service/service.js.map +1 -1
- package/dist/service/types.d.ts +59 -0
- package/dist/service/zod-json-converter.d.ts +14 -0
- package/dist/service/zod-json-converter.js +203 -0
- package/dist/service/zod-json-converter.js.map +1 -0
- package/package.json +9 -10
package/dist/client/types.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare const MetadataSchema: z.ZodObject<{
|
|
|
14
14
|
author: z.ZodString;
|
|
15
15
|
tags: z.ZodArray<z.ZodString>;
|
|
16
16
|
requiredScopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
supportsUserActions: z.ZodOptional<z.ZodBoolean>;
|
|
17
18
|
}, z.core.$strip>;
|
|
18
19
|
export declare const ServiceConfigSchema: z.ZodObject<{
|
|
19
20
|
id: z.ZodString;
|
|
@@ -50,6 +51,7 @@ export declare const ToolConfigSchema: z.ZodObject<{
|
|
|
50
51
|
interface: z.ZodOptional<z.ZodString>;
|
|
51
52
|
suggestConfirmation: z.ZodOptional<z.ZodBoolean>;
|
|
52
53
|
suggestConfirmationUISchema: z.ZodOptional<z.ZodAny>;
|
|
54
|
+
supportsUserActions: z.ZodOptional<z.ZodBoolean>;
|
|
53
55
|
}, z.core.$strip>;
|
|
54
56
|
export declare const ServiceContextSchema: z.ZodObject<{
|
|
55
57
|
id: z.ZodString;
|
|
@@ -113,6 +115,7 @@ export declare const ToolWithJsonSchemaSchema: z.ZodObject<{
|
|
|
113
115
|
interface: z.ZodOptional<z.ZodString>;
|
|
114
116
|
suggestConfirmation: z.ZodOptional<z.ZodBoolean>;
|
|
115
117
|
suggestConfirmationUISchema: z.ZodOptional<z.ZodAny>;
|
|
118
|
+
supportsUserActions: z.ZodOptional<z.ZodBoolean>;
|
|
116
119
|
}, z.core.$strip>;
|
|
117
120
|
export declare const GetAllToolsAsJsonSchemaResponseSchema: z.ZodObject<{
|
|
118
121
|
tools: z.ZodArray<z.ZodObject<{
|
|
@@ -125,6 +128,7 @@ export declare const GetAllToolsAsJsonSchemaResponseSchema: z.ZodObject<{
|
|
|
125
128
|
interface: z.ZodOptional<z.ZodString>;
|
|
126
129
|
suggestConfirmation: z.ZodOptional<z.ZodBoolean>;
|
|
127
130
|
suggestConfirmationUISchema: z.ZodOptional<z.ZodAny>;
|
|
131
|
+
supportsUserActions: z.ZodOptional<z.ZodBoolean>;
|
|
128
132
|
}, z.core.$strip>>;
|
|
129
133
|
reccomendedPrompts: z.ZodArray<z.ZodString>;
|
|
130
134
|
}, z.core.$strip>;
|
|
@@ -165,6 +169,38 @@ export declare const OAuth2ProviderInfoSchema: z.ZodObject<{
|
|
|
165
169
|
}, z.core.$strip>;
|
|
166
170
|
connected: z.ZodBoolean;
|
|
167
171
|
}, z.core.$strip>;
|
|
172
|
+
export declare const ProviderInfoSchema: z.ZodObject<{
|
|
173
|
+
name: z.ZodString;
|
|
174
|
+
type: z.ZodEnum<{
|
|
175
|
+
oauth2: "oauth2";
|
|
176
|
+
direct: "direct";
|
|
177
|
+
}>;
|
|
178
|
+
connected: z.ZodBoolean;
|
|
179
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
180
|
+
requiredTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
181
|
+
scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
182
|
+
logoUrl: z.ZodOptional<z.ZodString>;
|
|
183
|
+
authMethod: z.ZodUnion<readonly [z.ZodNull, z.ZodObject<{
|
|
184
|
+
type: z.ZodLiteral<"oauth2">;
|
|
185
|
+
authUrl: z.ZodString;
|
|
186
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
187
|
+
type: z.ZodLiteral<"direct">;
|
|
188
|
+
onboardingTool: z.ZodString;
|
|
189
|
+
}, z.core.$strip>]>;
|
|
190
|
+
}, z.core.$strip>;
|
|
191
|
+
export declare const DirectAuthStatusSchema: z.ZodObject<{
|
|
192
|
+
status: z.ZodEnum<{
|
|
193
|
+
complete: "complete";
|
|
194
|
+
authorization_pending: "authorization_pending";
|
|
195
|
+
not_found: "not_found";
|
|
196
|
+
}>;
|
|
197
|
+
config: z.ZodOptional<z.ZodObject<{
|
|
198
|
+
configuredAt: z.ZodNumber;
|
|
199
|
+
}, z.core.$strip>>;
|
|
200
|
+
expires_in: z.ZodOptional<z.ZodNumber>;
|
|
201
|
+
interval: z.ZodOptional<z.ZodNumber>;
|
|
202
|
+
error: z.ZodOptional<z.ZodString>;
|
|
203
|
+
}, z.core.$strip>;
|
|
168
204
|
export declare const ExampleQuerySchema: z.ZodObject<{
|
|
169
205
|
category: z.ZodString;
|
|
170
206
|
queries: z.ZodArray<z.ZodString>;
|
|
@@ -214,6 +250,8 @@ export type ToolWithJsonSchema = z.infer<typeof ToolWithJsonSchemaSchema>;
|
|
|
214
250
|
export type ServiceWidget = z.infer<typeof ServiceWidgetSchema>;
|
|
215
251
|
export type ServiceWidgetWithData = z.infer<typeof ServiceWidgetWithDataSchema>;
|
|
216
252
|
export type OAuth2ProviderInfo = z.infer<typeof OAuth2ProviderInfoSchema>;
|
|
253
|
+
export type ProviderInfo = z.infer<typeof ProviderInfoSchema>;
|
|
254
|
+
export type DirectAuthStatus = z.infer<typeof DirectAuthStatusSchema>;
|
|
217
255
|
export type ExampleQuery = z.infer<typeof ExampleQuerySchema>;
|
|
218
256
|
export type ExampleQueries = z.infer<typeof ExampleQueriesSchema>;
|
|
219
257
|
export type HumanActionStep = z.infer<typeof HumanActionStepSchema>;
|
package/dist/client/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HumanActionStepSchema = exports.ExampleQueriesSchema = exports.ExampleQuerySchema = exports.OAuth2ProviderInfoSchema = exports.ServiceWidgetWithDataSchema = exports.ServiceWidgetSchema = exports.GetAllToolsAsJsonSchemaResponseSchema = exports.ToolWithJsonSchemaSchema = exports.ServiceAgentSchema = exports.ServiceDatasourceWithDataSchema = exports.ServiceDatasourceSchema = exports.DatasourceTypeSchema = exports.ServiceContextWithDataSchema = exports.ServiceContextSchema = exports.ToolConfigSchema = exports.ToolboxConfigSchema = exports.ServiceConfigSchema = exports.MetadataSchema = exports.PricingInfoSchema = void 0;
|
|
3
|
+
exports.HumanActionStepSchema = exports.ExampleQueriesSchema = exports.ExampleQuerySchema = exports.DirectAuthStatusSchema = exports.ProviderInfoSchema = exports.OAuth2ProviderInfoSchema = exports.ServiceWidgetWithDataSchema = exports.ServiceWidgetSchema = exports.GetAllToolsAsJsonSchemaResponseSchema = exports.ToolWithJsonSchemaSchema = exports.ServiceAgentSchema = exports.ServiceDatasourceWithDataSchema = exports.ServiceDatasourceSchema = exports.DatasourceTypeSchema = exports.ServiceContextWithDataSchema = exports.ServiceContextSchema = exports.ToolConfigSchema = exports.ToolboxConfigSchema = exports.ServiceConfigSchema = exports.MetadataSchema = exports.PricingInfoSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
// Define and export types for DAIN service responses
|
|
6
6
|
exports.PricingInfoSchema = zod_1.z.object({
|
|
@@ -18,6 +18,7 @@ exports.MetadataSchema = zod_1.z.object({
|
|
|
18
18
|
author: zod_1.z.string(),
|
|
19
19
|
tags: zod_1.z.array(zod_1.z.string()),
|
|
20
20
|
requiredScopes: zod_1.z.array(zod_1.z.string()).optional(), // OAuth scopes required by this service
|
|
21
|
+
supportsUserActions: zod_1.z.boolean().optional(), // True if ANY tool supports interactive user actions (HITL)
|
|
21
22
|
});
|
|
22
23
|
exports.ServiceConfigSchema = zod_1.z.object({
|
|
23
24
|
id: zod_1.z.string(),
|
|
@@ -51,6 +52,7 @@ exports.ToolConfigSchema = zod_1.z.object({
|
|
|
51
52
|
interface: zod_1.z.string().optional(), // Tool interface type
|
|
52
53
|
suggestConfirmation: zod_1.z.boolean().optional(),
|
|
53
54
|
suggestConfirmationUISchema: zod_1.z.any().optional(), // The UI schema will be handled separately
|
|
55
|
+
supportsUserActions: zod_1.z.boolean().optional(), // Tool can send actionable messages (HITL)
|
|
54
56
|
});
|
|
55
57
|
exports.ServiceContextSchema = zod_1.z.object({
|
|
56
58
|
id: zod_1.z.string(),
|
|
@@ -91,6 +93,7 @@ exports.ToolWithJsonSchemaSchema = zod_1.z.object({
|
|
|
91
93
|
interface: zod_1.z.string().optional(),
|
|
92
94
|
suggestConfirmation: zod_1.z.boolean().optional(),
|
|
93
95
|
suggestConfirmationUISchema: zod_1.z.any().optional(),
|
|
96
|
+
supportsUserActions: zod_1.z.boolean().optional(),
|
|
94
97
|
});
|
|
95
98
|
exports.GetAllToolsAsJsonSchemaResponseSchema = zod_1.z.object({
|
|
96
99
|
tools: zod_1.z.array(exports.ToolWithJsonSchemaSchema),
|
|
@@ -121,6 +124,37 @@ exports.OAuth2ProviderInfoSchema = zod_1.z.object({
|
|
|
121
124
|
}),
|
|
122
125
|
connected: zod_1.z.boolean()
|
|
123
126
|
});
|
|
127
|
+
// Unified authentication provider schema (OAuth2 + Direct)
|
|
128
|
+
exports.ProviderInfoSchema = zod_1.z.object({
|
|
129
|
+
name: zod_1.z.string(),
|
|
130
|
+
type: zod_1.z.enum(['oauth2', 'direct']),
|
|
131
|
+
connected: zod_1.z.boolean(),
|
|
132
|
+
reason: zod_1.z.string().optional(),
|
|
133
|
+
requiredTools: zod_1.z.array(zod_1.z.string()).optional(),
|
|
134
|
+
scopes: zod_1.z.array(zod_1.z.string()).optional(),
|
|
135
|
+
logoUrl: zod_1.z.string().optional(),
|
|
136
|
+
authMethod: zod_1.z.union([
|
|
137
|
+
zod_1.z.null(),
|
|
138
|
+
zod_1.z.object({
|
|
139
|
+
type: zod_1.z.literal('oauth2'),
|
|
140
|
+
authUrl: zod_1.z.string()
|
|
141
|
+
}),
|
|
142
|
+
zod_1.z.object({
|
|
143
|
+
type: zod_1.z.literal('direct'),
|
|
144
|
+
onboardingTool: zod_1.z.string()
|
|
145
|
+
})
|
|
146
|
+
])
|
|
147
|
+
});
|
|
148
|
+
// Direct auth setup status (RFC 8628 Device Authorization Grant)
|
|
149
|
+
exports.DirectAuthStatusSchema = zod_1.z.object({
|
|
150
|
+
status: zod_1.z.enum(['complete', 'authorization_pending', 'not_found']),
|
|
151
|
+
config: zod_1.z.object({
|
|
152
|
+
configuredAt: zod_1.z.number()
|
|
153
|
+
}).optional(),
|
|
154
|
+
expires_in: zod_1.z.number().optional(),
|
|
155
|
+
interval: zod_1.z.number().optional(),
|
|
156
|
+
error: zod_1.z.string().optional()
|
|
157
|
+
});
|
|
124
158
|
exports.ExampleQuerySchema = zod_1.z.object({
|
|
125
159
|
category: zod_1.z.string(),
|
|
126
160
|
queries: zod_1.z.array(zod_1.z.string()),
|
package/dist/client/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,qDAAqD;AACxC,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,8BAA8B;IAC9C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,wCAAwC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actionable Tool Schema & Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides standardized schema and helpers for tools that send actionable messages.
|
|
5
|
+
* These tools enable users to trigger system actions through responses (buttons, callbacks, links).
|
|
6
|
+
*
|
|
7
|
+
* @see automation-core/src/core/tools/actionable-tool.schema.ts (matching schema)
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { ToolConfig, AgentInfo, ToolContext } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* Action button/option schema
|
|
13
|
+
*/
|
|
14
|
+
export declare const ActionSchema: z.ZodObject<{
|
|
15
|
+
label: z.ZodString;
|
|
16
|
+
type: z.ZodEnum<{
|
|
17
|
+
url: "url";
|
|
18
|
+
custom: "custom";
|
|
19
|
+
callback: "callback";
|
|
20
|
+
approve: "approve";
|
|
21
|
+
reject: "reject";
|
|
22
|
+
}>;
|
|
23
|
+
value: z.ZodOptional<z.ZodString>;
|
|
24
|
+
url: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
/**
|
|
27
|
+
* Automation metadata schema (auto-injected by automation-core)
|
|
28
|
+
*/
|
|
29
|
+
export declare const MetadataSchema: z.ZodObject<{
|
|
30
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
31
|
+
waitId: z.ZodOptional<z.ZodString>;
|
|
32
|
+
automationId: z.ZodOptional<z.ZodString>;
|
|
33
|
+
interactionUrl: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strip>;
|
|
35
|
+
/**
|
|
36
|
+
* Base schema for all actionable tools
|
|
37
|
+
* Tools marked with supportsUserActions: true MUST accept these fields
|
|
38
|
+
*/
|
|
39
|
+
export declare const ActionableToolBaseSchema: z.ZodObject<{
|
|
40
|
+
recipient: z.ZodString;
|
|
41
|
+
message: z.ZodString;
|
|
42
|
+
actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
43
|
+
label: z.ZodString;
|
|
44
|
+
type: z.ZodEnum<{
|
|
45
|
+
url: "url";
|
|
46
|
+
custom: "custom";
|
|
47
|
+
callback: "callback";
|
|
48
|
+
approve: "approve";
|
|
49
|
+
reject: "reject";
|
|
50
|
+
}>;
|
|
51
|
+
value: z.ZodOptional<z.ZodString>;
|
|
52
|
+
url: z.ZodOptional<z.ZodString>;
|
|
53
|
+
}, z.core.$strip>>>;
|
|
54
|
+
metadata: z.ZodOptional<z.ZodObject<{
|
|
55
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
56
|
+
waitId: z.ZodOptional<z.ZodString>;
|
|
57
|
+
automationId: z.ZodOptional<z.ZodString>;
|
|
58
|
+
interactionUrl: z.ZodOptional<z.ZodString>;
|
|
59
|
+
}, z.core.$strip>>;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
/**
|
|
62
|
+
* TypeScript type inferred from schema
|
|
63
|
+
*/
|
|
64
|
+
export type ActionableToolInput = z.infer<typeof ActionableToolBaseSchema>;
|
|
65
|
+
export type Action = z.infer<typeof ActionSchema>;
|
|
66
|
+
export type AutomationMetadata = z.infer<typeof MetadataSchema>;
|
|
67
|
+
/**
|
|
68
|
+
* Extend base actionable schema with tool-specific fields
|
|
69
|
+
* Use this to add additional parameters while keeping the standard actionable fields
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const TelegramInputSchema = extendActionableSchema({
|
|
74
|
+
* parse_mode: z.enum(['HTML', 'Markdown']).optional(),
|
|
75
|
+
* disable_notification: z.boolean().optional(),
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function extendActionableSchema<T extends z.ZodRawShape>(additionalFields: T): z.ZodObject<z.ZodRawShape>;
|
|
80
|
+
/**
|
|
81
|
+
* Helper function to build an actionable tool with type safety and schema enforcement
|
|
82
|
+
* Automatically merges base actionable schema with tool-specific fields
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* export const sendTelegramMessage = buildActionableTool({
|
|
87
|
+
* id: 'send-telegram-message',
|
|
88
|
+
* name: 'Send Telegram Message',
|
|
89
|
+
* description: 'Send a message with interactive buttons to a Telegram chat',
|
|
90
|
+
* additionalFields: {
|
|
91
|
+
* parse_mode: z.enum(['HTML', 'Markdown']).optional(),
|
|
92
|
+
* },
|
|
93
|
+
* handler: async (input, agentInfo, context) => {
|
|
94
|
+
* // input is typed with: recipient, message, actions, metadata, parse_mode
|
|
95
|
+
* const { recipient, message, actions, parse_mode } = input;
|
|
96
|
+
*
|
|
97
|
+
* // Use recipient as chatId for Telegram API
|
|
98
|
+
* const result = await sendToTelegram({
|
|
99
|
+
* chat_id: recipient,
|
|
100
|
+
* text: message,
|
|
101
|
+
* parse_mode,
|
|
102
|
+
* reply_markup: actions ? buildInlineKeyboard(actions) : undefined,
|
|
103
|
+
* });
|
|
104
|
+
*
|
|
105
|
+
* return {
|
|
106
|
+
* text: `Message sent to ${recipient}`,
|
|
107
|
+
* data: { messageId: result.message_id },
|
|
108
|
+
* };
|
|
109
|
+
* },
|
|
110
|
+
* });
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildActionableTool<TAdditional extends z.ZodRawShape = {}, TOutput extends z.ZodType = z.ZodAny>(config: {
|
|
114
|
+
id: string;
|
|
115
|
+
name: string;
|
|
116
|
+
description: string;
|
|
117
|
+
additionalFields?: TAdditional;
|
|
118
|
+
output?: TOutput;
|
|
119
|
+
handler: (input: ActionableToolInput & z.infer<z.ZodObject<TAdditional>>, agentInfo: AgentInfo, context: ToolContext) => Promise<{
|
|
120
|
+
success?: boolean;
|
|
121
|
+
text: string;
|
|
122
|
+
data: z.output<TOutput>;
|
|
123
|
+
ui?: any;
|
|
124
|
+
pleasePay?: any;
|
|
125
|
+
processes?: string[] | any[];
|
|
126
|
+
}>;
|
|
127
|
+
}): ToolConfig;
|
|
128
|
+
/**
|
|
129
|
+
* Validate that a tool schema includes required actionable fields
|
|
130
|
+
* Use this to check if a manually-defined tool complies with actionable schema
|
|
131
|
+
*/
|
|
132
|
+
export declare function validateActionableSchema(toolConfig: ToolConfig): {
|
|
133
|
+
valid: boolean;
|
|
134
|
+
errors?: string[];
|
|
135
|
+
};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Actionable Tool Schema & Utilities
|
|
4
|
+
*
|
|
5
|
+
* Provides standardized schema and helpers for tools that send actionable messages.
|
|
6
|
+
* These tools enable users to trigger system actions through responses (buttons, callbacks, links).
|
|
7
|
+
*
|
|
8
|
+
* @see automation-core/src/core/tools/actionable-tool.schema.ts (matching schema)
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.ActionableToolBaseSchema = exports.MetadataSchema = exports.ActionSchema = void 0;
|
|
12
|
+
exports.extendActionableSchema = extendActionableSchema;
|
|
13
|
+
exports.buildActionableTool = buildActionableTool;
|
|
14
|
+
exports.validateActionableSchema = validateActionableSchema;
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
/**
|
|
17
|
+
* Action button/option schema
|
|
18
|
+
*/
|
|
19
|
+
exports.ActionSchema = zod_1.z.object({
|
|
20
|
+
label: zod_1.z.string().describe('Button/action label shown to user'),
|
|
21
|
+
type: zod_1.z
|
|
22
|
+
.enum(['approve', 'reject', 'callback', 'url', 'custom'])
|
|
23
|
+
.describe('Type of action'),
|
|
24
|
+
value: zod_1.z.string().optional().describe('Value sent back when action is triggered'),
|
|
25
|
+
url: zod_1.z.string().optional().describe('URL to open (for url type actions)'),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Automation metadata schema (auto-injected by automation-core)
|
|
29
|
+
*/
|
|
30
|
+
exports.MetadataSchema = zod_1.z.object({
|
|
31
|
+
runId: zod_1.z.string().optional().describe('Current run ID'),
|
|
32
|
+
waitId: zod_1.z.string().optional().describe('Wait node ID if applicable'),
|
|
33
|
+
automationId: zod_1.z.string().optional().describe('Automation ID'),
|
|
34
|
+
interactionUrl: zod_1.z.string().optional().describe('URL for user interaction'),
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Base schema for all actionable tools
|
|
38
|
+
* Tools marked with supportsUserActions: true MUST accept these fields
|
|
39
|
+
*/
|
|
40
|
+
exports.ActionableToolBaseSchema = zod_1.z.object({
|
|
41
|
+
recipient: zod_1.z.string().describe('Who receives this message (chatId, channel, email, etc.)'),
|
|
42
|
+
message: zod_1.z.string().describe('The message text to send'),
|
|
43
|
+
actions: zod_1.z.array(exports.ActionSchema).optional().describe('Interactive actions the user can trigger'),
|
|
44
|
+
metadata: exports.MetadataSchema.optional().describe('Automation metadata (auto-injected by system)'),
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* Extend base actionable schema with tool-specific fields
|
|
48
|
+
* Use this to add additional parameters while keeping the standard actionable fields
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const TelegramInputSchema = extendActionableSchema({
|
|
53
|
+
* parse_mode: z.enum(['HTML', 'Markdown']).optional(),
|
|
54
|
+
* disable_notification: z.boolean().optional(),
|
|
55
|
+
* });
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
function extendActionableSchema(additionalFields) {
|
|
59
|
+
return exports.ActionableToolBaseSchema.extend(additionalFields);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Helper function to build an actionable tool with type safety and schema enforcement
|
|
63
|
+
* Automatically merges base actionable schema with tool-specific fields
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* export const sendTelegramMessage = buildActionableTool({
|
|
68
|
+
* id: 'send-telegram-message',
|
|
69
|
+
* name: 'Send Telegram Message',
|
|
70
|
+
* description: 'Send a message with interactive buttons to a Telegram chat',
|
|
71
|
+
* additionalFields: {
|
|
72
|
+
* parse_mode: z.enum(['HTML', 'Markdown']).optional(),
|
|
73
|
+
* },
|
|
74
|
+
* handler: async (input, agentInfo, context) => {
|
|
75
|
+
* // input is typed with: recipient, message, actions, metadata, parse_mode
|
|
76
|
+
* const { recipient, message, actions, parse_mode } = input;
|
|
77
|
+
*
|
|
78
|
+
* // Use recipient as chatId for Telegram API
|
|
79
|
+
* const result = await sendToTelegram({
|
|
80
|
+
* chat_id: recipient,
|
|
81
|
+
* text: message,
|
|
82
|
+
* parse_mode,
|
|
83
|
+
* reply_markup: actions ? buildInlineKeyboard(actions) : undefined,
|
|
84
|
+
* });
|
|
85
|
+
*
|
|
86
|
+
* return {
|
|
87
|
+
* text: `Message sent to ${recipient}`,
|
|
88
|
+
* data: { messageId: result.message_id },
|
|
89
|
+
* };
|
|
90
|
+
* },
|
|
91
|
+
* });
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function buildActionableTool(config) {
|
|
95
|
+
// Merge base actionable schema with additional fields
|
|
96
|
+
const inputSchema = config.additionalFields
|
|
97
|
+
? exports.ActionableToolBaseSchema.extend(config.additionalFields)
|
|
98
|
+
: exports.ActionableToolBaseSchema;
|
|
99
|
+
const outputSchema = config.output || zod_1.z.any();
|
|
100
|
+
return {
|
|
101
|
+
id: config.id,
|
|
102
|
+
name: config.name,
|
|
103
|
+
description: config.description,
|
|
104
|
+
input: inputSchema,
|
|
105
|
+
output: outputSchema,
|
|
106
|
+
supportsUserActions: true, // Always true for actionable tools
|
|
107
|
+
handler: config.handler,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Validate that a tool schema includes required actionable fields
|
|
112
|
+
* Use this to check if a manually-defined tool complies with actionable schema
|
|
113
|
+
*/
|
|
114
|
+
function validateActionableSchema(toolConfig) {
|
|
115
|
+
if (!toolConfig.supportsUserActions) {
|
|
116
|
+
return { valid: true }; // Not an actionable tool, no validation needed
|
|
117
|
+
}
|
|
118
|
+
const errors = [];
|
|
119
|
+
// Check if input schema is a Zod object
|
|
120
|
+
if (!(toolConfig.input instanceof zod_1.z.ZodObject)) {
|
|
121
|
+
errors.push('Input schema must be a Zod object for actionable tools');
|
|
122
|
+
return { valid: false, errors };
|
|
123
|
+
}
|
|
124
|
+
const shape = toolConfig.input.shape;
|
|
125
|
+
// Check required fields
|
|
126
|
+
if (!shape.recipient) {
|
|
127
|
+
errors.push("Missing required field: 'recipient'");
|
|
128
|
+
}
|
|
129
|
+
if (!shape.message) {
|
|
130
|
+
errors.push("Missing required field: 'message'");
|
|
131
|
+
}
|
|
132
|
+
// Check field types
|
|
133
|
+
if (shape.recipient && !(shape.recipient instanceof zod_1.z.ZodString)) {
|
|
134
|
+
errors.push("Field 'recipient' must be a string");
|
|
135
|
+
}
|
|
136
|
+
if (shape.message && !(shape.message instanceof zod_1.z.ZodString)) {
|
|
137
|
+
errors.push("Field 'message' must be a string");
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
valid: errors.length === 0,
|
|
141
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=actionable-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionable-tools.js","sourceRoot":"","sources":["../../src/service/actionable-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { StorageAdapter } from '@dainprotocol/oauth2-token-manager';
|
|
2
|
+
/**
|
|
3
|
+
* Pending setup information
|
|
4
|
+
*/
|
|
5
|
+
export interface PendingSetup {
|
|
6
|
+
setupCode: string;
|
|
7
|
+
userId: string;
|
|
8
|
+
provider: string;
|
|
9
|
+
expiresAt: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Setup completion result
|
|
13
|
+
*/
|
|
14
|
+
export interface SetupCompletionResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
userId?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Onboarding UI configuration
|
|
21
|
+
* Returned by adapter to display setup instructions to user
|
|
22
|
+
*/
|
|
23
|
+
export interface OnboardingUI {
|
|
24
|
+
/** Primary action URL (e.g., deep link, authorization URL) */
|
|
25
|
+
actionUrl: string;
|
|
26
|
+
/** QR code image URL */
|
|
27
|
+
qrCodeUrl?: string;
|
|
28
|
+
/** Instructions to display to the user */
|
|
29
|
+
instructions: string[];
|
|
30
|
+
/** Button label for primary action */
|
|
31
|
+
buttonLabel?: string;
|
|
32
|
+
/** Provider logo URL */
|
|
33
|
+
logoUrl?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* DirectAuthAdapter Interface
|
|
37
|
+
*
|
|
38
|
+
* Contract for provider-specific direct authentication adapters.
|
|
39
|
+
* Implementations handle provider-specific UI generation.
|
|
40
|
+
* Webhook parsing is handled by the service's existing infrastructure.
|
|
41
|
+
*/
|
|
42
|
+
export interface DirectAuthAdapter {
|
|
43
|
+
/** Provider name */
|
|
44
|
+
provider: string;
|
|
45
|
+
/**
|
|
46
|
+
* Generate the onboarding UI for the user
|
|
47
|
+
* @param setupCode - The generated setup code
|
|
48
|
+
* @param expiresAt - Timestamp when the setup code expires
|
|
49
|
+
*/
|
|
50
|
+
generateOnboardingUI(setupCode: string, expiresAt: number): OnboardingUI;
|
|
51
|
+
/**
|
|
52
|
+
* Send a confirmation message after successful setup
|
|
53
|
+
* @param config - The stored configuration
|
|
54
|
+
*/
|
|
55
|
+
sendConfirmation?(config: Record<string, any>): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* DirectAuthSetupManager - Manages temporary setup codes for direct authentication providers
|
|
59
|
+
*
|
|
60
|
+
* Used for services that require user-provided configuration without external OAuth flow
|
|
61
|
+
* Examples: Telegram bot (chat ID), SMS (phone number), custom API endpoints
|
|
62
|
+
*
|
|
63
|
+
* Storage Strategy:
|
|
64
|
+
* - Uses StorageAdapter (backed by database from @dainprotocol/oauth2-storage-drizzle)
|
|
65
|
+
* - Pending setups: Stored as tokens with provider `setup_pending_{provider}`
|
|
66
|
+
* - userId field = setup code (for quick lookup)
|
|
67
|
+
* - email field = actual user ID
|
|
68
|
+
* - metadata = { originalUserId, provider, expiresAt }
|
|
69
|
+
* - token.expiresAt = expiry timestamp
|
|
70
|
+
* - Completed setups: Stored as tokens with provider `{provider}`
|
|
71
|
+
* - userId field = user ID
|
|
72
|
+
* - metadata = { chatId, username, firstName, etc. }
|
|
73
|
+
*/
|
|
74
|
+
export declare class DirectAuthSetupManager {
|
|
75
|
+
private storage;
|
|
76
|
+
constructor(storage: StorageAdapter);
|
|
77
|
+
/**
|
|
78
|
+
* Generate a cryptographically secure setup code
|
|
79
|
+
* 32 hex characters (16 bytes entropy)
|
|
80
|
+
*/
|
|
81
|
+
private generateSetupCode;
|
|
82
|
+
/**
|
|
83
|
+
* Get the pending provider name for storage
|
|
84
|
+
*/
|
|
85
|
+
private getPendingProviderName;
|
|
86
|
+
/**
|
|
87
|
+
* Create a pending setup for a user and provider
|
|
88
|
+
*
|
|
89
|
+
* @param userId - The user ID (e.g., smart account ID)
|
|
90
|
+
* @param provider - The provider name (e.g., 'telegram')
|
|
91
|
+
* @param expiryMinutes - How long the setup code is valid (default: 15 minutes)
|
|
92
|
+
* @returns The generated setup code
|
|
93
|
+
*/
|
|
94
|
+
createSetup(userId: string, provider: string, expiryMinutes?: number): Promise<string>;
|
|
95
|
+
/**
|
|
96
|
+
* Verify a setup code is valid and not expired
|
|
97
|
+
*
|
|
98
|
+
* @param setupCode - The setup code to verify
|
|
99
|
+
* @param provider - The provider name
|
|
100
|
+
* @returns The pending setup info if valid, null otherwise
|
|
101
|
+
*/
|
|
102
|
+
verifySetup(setupCode: string, provider: string): Promise<PendingSetup | null>;
|
|
103
|
+
/**
|
|
104
|
+
* Complete setup and store the provider configuration
|
|
105
|
+
*
|
|
106
|
+
* @param setupCode - The setup code that was verified
|
|
107
|
+
* @param provider - The provider name
|
|
108
|
+
* @param config - The configuration to store (e.g., { chatId: 123456789 })
|
|
109
|
+
* @returns Result indicating success or failure
|
|
110
|
+
*/
|
|
111
|
+
completeSetup(setupCode: string, provider: string, config: Record<string, any>): Promise<SetupCompletionResult>;
|
|
112
|
+
/**
|
|
113
|
+
* Check if a user has completed setup for a provider
|
|
114
|
+
*
|
|
115
|
+
* @param userId - The user ID
|
|
116
|
+
* @param provider - The provider name
|
|
117
|
+
* @returns True if setup is complete
|
|
118
|
+
*/
|
|
119
|
+
isSetupComplete(userId: string, provider: string): Promise<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* Get the stored configuration for a user and provider
|
|
122
|
+
*
|
|
123
|
+
* @param userId - The user ID
|
|
124
|
+
* @param provider - The provider name
|
|
125
|
+
* @returns The stored config or null if not found
|
|
126
|
+
*/
|
|
127
|
+
getProviderConfig(userId: string, provider: string): Promise<Record<string, any> | null>;
|
|
128
|
+
/**
|
|
129
|
+
* Delete provider configuration for a user
|
|
130
|
+
* Used when user wants to disconnect/revoke access
|
|
131
|
+
*
|
|
132
|
+
* @param userId - The user ID
|
|
133
|
+
* @param provider - The provider name
|
|
134
|
+
* @returns True if deleted successfully
|
|
135
|
+
*/
|
|
136
|
+
deleteProviderConfig(userId: string, provider: string): Promise<boolean>;
|
|
137
|
+
/**
|
|
138
|
+
* Get pending setup status for a user
|
|
139
|
+
* Useful for showing setup progress in UI
|
|
140
|
+
*
|
|
141
|
+
* @param userId - The user ID
|
|
142
|
+
* @param provider - The provider name
|
|
143
|
+
* @returns Pending setup info if exists, null otherwise
|
|
144
|
+
*/
|
|
145
|
+
getPendingSetup(userId: string, provider: string): Promise<PendingSetup | null>;
|
|
146
|
+
/**
|
|
147
|
+
* Cleanup expired pending setups
|
|
148
|
+
* Should be called periodically to prevent stale data accumulation
|
|
149
|
+
*
|
|
150
|
+
* @param provider - The provider name to clean up
|
|
151
|
+
* @returns Number of expired setups cleaned up
|
|
152
|
+
*/
|
|
153
|
+
cleanupExpiredSetups(provider: string): Promise<number>;
|
|
154
|
+
}
|