@elizaos/plugin-signal 2.0.3-beta.2 → 2.0.3-beta.3
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/dist/accounts.d.ts +123 -0
- package/dist/accounts.d.ts.map +1 -0
- package/dist/config.d.ts +91 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/connector-account-provider.d.ts +18 -0
- package/dist/connector-account-provider.d.ts.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7233 -0
- package/dist/index.js.map +76 -0
- package/dist/local-client.d.ts +9 -0
- package/dist/local-client.d.ts.map +1 -0
- package/dist/pairing-service.d.ts +72 -0
- package/dist/pairing-service.d.ts.map +1 -0
- package/dist/rpc.d.ts +163 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/service.d.ts +130 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/setup-routes.d.ts +39 -0
- package/dist/setup-routes.d.ts.map +1 -0
- package/dist/types.d.ts +190 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/workflow-credential-provider.d.ts +21 -0
- package/dist/workflow-credential-provider.d.ts.map +1 -0
- package/package.json +5 -4
- package/registry-entry.json +74 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SignalRecentMessage } from "./types";
|
|
2
|
+
export interface SignalLocalClientConfig {
|
|
3
|
+
httpUrl: string;
|
|
4
|
+
accountNumber: string;
|
|
5
|
+
}
|
|
6
|
+
export type { SignalRecentMessage } from "./types";
|
|
7
|
+
export declare function readSignalLocalClientConfigFromEnv(env?: NodeJS.ProcessEnv): SignalLocalClientConfig | null;
|
|
8
|
+
export declare function readSignalInboundMessages(config: SignalLocalClientConfig, limit?: number): Promise<SignalRecentMessage[]>;
|
|
9
|
+
//# sourceMappingURL=local-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-client.d.ts","sourceRoot":"","sources":["../src/local-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAmCnD,wBAAgB,kCAAkC,CAChD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,uBAAuB,GAAG,IAAI,CAOhC;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,uBAAuB,EAC/B,KAAK,SAAwB,GAC5B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmDhC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal pairing service — manages device linking via QR code.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors whatsapp-pairing.ts but uses @elizaos/signal-native instead of
|
|
5
|
+
* Baileys. Signal linking produces a single provisioning URL (not a refresh
|
|
6
|
+
* loop) — if it times out, restart the session.
|
|
7
|
+
*/
|
|
8
|
+
type ExecFileAsync = (file: string, args?: readonly string[], options?: {
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
}) => Promise<{
|
|
11
|
+
stdout: string;
|
|
12
|
+
stderr: string;
|
|
13
|
+
}>;
|
|
14
|
+
/** Validate accountId to prevent path traversal. */
|
|
15
|
+
export declare function sanitizeAccountId(raw: string): string;
|
|
16
|
+
export type SignalPairingStatus = "idle" | "initializing" | "waiting_for_qr" | "connected" | "disconnected" | "timeout" | "error";
|
|
17
|
+
export interface SignalPairingEvent {
|
|
18
|
+
type: "signal-qr" | "signal-status";
|
|
19
|
+
accountId: string;
|
|
20
|
+
qrDataUrl?: string;
|
|
21
|
+
status?: SignalPairingStatus;
|
|
22
|
+
uuid?: string;
|
|
23
|
+
phoneNumber?: string;
|
|
24
|
+
error?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SignalPairingSnapshot {
|
|
27
|
+
status: SignalPairingStatus;
|
|
28
|
+
qrDataUrl: string | null;
|
|
29
|
+
phoneNumber: string | null;
|
|
30
|
+
error: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface SignalPairingOptions {
|
|
33
|
+
authDir: string;
|
|
34
|
+
accountId: string;
|
|
35
|
+
cliPath?: string;
|
|
36
|
+
onEvent: (event: SignalPairingEvent) => void;
|
|
37
|
+
}
|
|
38
|
+
export declare function extractSignalCliProvisioningUrl(text: string): string | null;
|
|
39
|
+
export declare function parseSignalCliAccountsOutput(output: string): string | null;
|
|
40
|
+
export declare function resolveSignalCliExecutable(options?: {
|
|
41
|
+
cliPath?: string;
|
|
42
|
+
env?: NodeJS.ProcessEnv;
|
|
43
|
+
execFile?: ExecFileAsync;
|
|
44
|
+
existsSync?: (path: string) => boolean;
|
|
45
|
+
platform?: NodeJS.Platform;
|
|
46
|
+
}): Promise<string | null>;
|
|
47
|
+
export declare function missingSignalCliMessage(cliPath: string | undefined, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string;
|
|
48
|
+
export declare function classifySignalPairingErrorStatus(errorMessage: string): SignalPairingStatus;
|
|
49
|
+
export declare class SignalPairingSession {
|
|
50
|
+
private status;
|
|
51
|
+
private options;
|
|
52
|
+
private aborted;
|
|
53
|
+
private qrDataUrl;
|
|
54
|
+
private phoneNumber;
|
|
55
|
+
private lastError;
|
|
56
|
+
private activeChild;
|
|
57
|
+
constructor(options: SignalPairingOptions);
|
|
58
|
+
start(): Promise<void>;
|
|
59
|
+
stop(): void;
|
|
60
|
+
getStatus(): SignalPairingStatus;
|
|
61
|
+
getSnapshot(): SignalPairingSnapshot;
|
|
62
|
+
private setStatus;
|
|
63
|
+
private loadSignalNativeModule;
|
|
64
|
+
private startWithSignalNative;
|
|
65
|
+
private startWithSignalCli;
|
|
66
|
+
private finishConnected;
|
|
67
|
+
private readLinkedSignalAccount;
|
|
68
|
+
}
|
|
69
|
+
export declare function signalAuthExists(workspaceDir: string, accountId?: string): boolean;
|
|
70
|
+
export declare function signalLogout(workspaceDir: string, accountId?: string): void;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=pairing-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing-service.d.ts","sourceRoot":"","sources":["../src/pairing-service.ts"],"names":[],"mappings":"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"}
|
package/dist/rpc.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for Signal RPC requests
|
|
3
|
+
*/
|
|
4
|
+
export interface SignalRpcOptions {
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Signal RPC error structure
|
|
10
|
+
*/
|
|
11
|
+
export interface SignalRpcError {
|
|
12
|
+
code?: number;
|
|
13
|
+
message?: string;
|
|
14
|
+
data?: unknown;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Signal RPC response structure
|
|
18
|
+
*/
|
|
19
|
+
export interface SignalRpcResponse<T> {
|
|
20
|
+
jsonrpc?: string;
|
|
21
|
+
result?: T;
|
|
22
|
+
error?: SignalRpcError;
|
|
23
|
+
id?: string | number | null;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Signal SSE event structure
|
|
27
|
+
*/
|
|
28
|
+
export interface SignalSseEvent {
|
|
29
|
+
event?: string;
|
|
30
|
+
data?: string;
|
|
31
|
+
id?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Result of a Signal health check
|
|
35
|
+
*/
|
|
36
|
+
export interface SignalCheckResult {
|
|
37
|
+
ok: boolean;
|
|
38
|
+
status?: number | null;
|
|
39
|
+
error?: string | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Normalizes a base URL for Signal CLI HTTP server
|
|
43
|
+
*/
|
|
44
|
+
export declare function normalizeBaseUrl(url: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Makes a JSON-RPC request to the Signal CLI HTTP server
|
|
47
|
+
*/
|
|
48
|
+
export declare function signalRpcRequest<T = unknown>(method: string, params: Record<string, unknown> | undefined, opts: SignalRpcOptions): Promise<T>;
|
|
49
|
+
/**
|
|
50
|
+
* Checks if the Signal CLI HTTP server is available
|
|
51
|
+
*/
|
|
52
|
+
export declare function signalCheck(baseUrl: string, timeoutMs?: number): Promise<SignalCheckResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Gets the current Signal version from the CLI
|
|
55
|
+
*/
|
|
56
|
+
export declare function signalGetVersion(opts: SignalRpcOptions): Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Lists all registered Signal accounts
|
|
59
|
+
*/
|
|
60
|
+
export declare function signalListAccounts(opts: SignalRpcOptions): Promise<Array<{
|
|
61
|
+
number: string;
|
|
62
|
+
uuid: string;
|
|
63
|
+
}>>;
|
|
64
|
+
/**
|
|
65
|
+
* Gets contacts for a Signal account
|
|
66
|
+
*/
|
|
67
|
+
export declare function signalListContacts(account: string, opts: SignalRpcOptions): Promise<Array<{
|
|
68
|
+
number: string;
|
|
69
|
+
uuid: string;
|
|
70
|
+
name?: string;
|
|
71
|
+
profileName?: string;
|
|
72
|
+
blocked?: boolean;
|
|
73
|
+
}>>;
|
|
74
|
+
/**
|
|
75
|
+
* Gets groups for a Signal account
|
|
76
|
+
*/
|
|
77
|
+
export declare function signalListGroups(account: string, opts: SignalRpcOptions): Promise<Array<{
|
|
78
|
+
id: string;
|
|
79
|
+
name: string;
|
|
80
|
+
description?: string;
|
|
81
|
+
isMember: boolean;
|
|
82
|
+
isBlocked: boolean;
|
|
83
|
+
members: Array<{
|
|
84
|
+
uuid: string;
|
|
85
|
+
number?: string;
|
|
86
|
+
}>;
|
|
87
|
+
}>>;
|
|
88
|
+
/**
|
|
89
|
+
* Sends a message to a recipient or group
|
|
90
|
+
*/
|
|
91
|
+
export declare function signalSend(params: {
|
|
92
|
+
account: string;
|
|
93
|
+
recipients?: string[];
|
|
94
|
+
groupId?: string;
|
|
95
|
+
message?: string;
|
|
96
|
+
attachments?: string[];
|
|
97
|
+
quote?: {
|
|
98
|
+
timestamp: number;
|
|
99
|
+
author: string;
|
|
100
|
+
};
|
|
101
|
+
}, opts: SignalRpcOptions): Promise<{
|
|
102
|
+
timestamp: number;
|
|
103
|
+
}>;
|
|
104
|
+
/**
|
|
105
|
+
* Sends a reaction to a message
|
|
106
|
+
*/
|
|
107
|
+
export declare function signalSendReaction(params: {
|
|
108
|
+
account: string;
|
|
109
|
+
recipient?: string;
|
|
110
|
+
groupId?: string;
|
|
111
|
+
emoji: string;
|
|
112
|
+
targetAuthor: string;
|
|
113
|
+
targetTimestamp: number;
|
|
114
|
+
remove?: boolean;
|
|
115
|
+
}, opts: SignalRpcOptions): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Sends a typing indicator
|
|
118
|
+
*/
|
|
119
|
+
export declare function signalSendTyping(params: {
|
|
120
|
+
account: string;
|
|
121
|
+
recipient?: string;
|
|
122
|
+
groupId?: string;
|
|
123
|
+
stop?: boolean;
|
|
124
|
+
}, opts: SignalRpcOptions): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Sends a read receipt
|
|
127
|
+
*/
|
|
128
|
+
export declare function signalSendReadReceipt(params: {
|
|
129
|
+
account: string;
|
|
130
|
+
recipient: string;
|
|
131
|
+
targetTimestamp: number;
|
|
132
|
+
}, opts: SignalRpcOptions): Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Streams SSE events from the Signal CLI HTTP server
|
|
135
|
+
*/
|
|
136
|
+
export declare function streamSignalEvents(params: {
|
|
137
|
+
baseUrl: string;
|
|
138
|
+
account?: string;
|
|
139
|
+
abortSignal?: AbortSignal;
|
|
140
|
+
onEvent: (event: SignalSseEvent) => void;
|
|
141
|
+
}): Promise<void>;
|
|
142
|
+
/**
|
|
143
|
+
* Parses an SSE data field as JSON
|
|
144
|
+
*/
|
|
145
|
+
export declare function parseSignalEventData<T>(data: string | undefined): T | null;
|
|
146
|
+
/**
|
|
147
|
+
* Creates an SSE event handler with reconnection logic
|
|
148
|
+
*/
|
|
149
|
+
export declare function createSignalEventStream(params: {
|
|
150
|
+
baseUrl: string;
|
|
151
|
+
account?: string;
|
|
152
|
+
onEvent: (event: SignalSseEvent) => void;
|
|
153
|
+
onError?: (error: Error) => void;
|
|
154
|
+
onConnect?: () => void;
|
|
155
|
+
onDisconnect?: () => void;
|
|
156
|
+
reconnectDelayMs?: number;
|
|
157
|
+
maxReconnectDelayMs?: number;
|
|
158
|
+
}): {
|
|
159
|
+
start: () => void;
|
|
160
|
+
stop: () => void;
|
|
161
|
+
isRunning: () => boolean;
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { type Character, type Content, type IAgentRuntime, type Memory, type MessageConnectorQueryContext, Service, type TargetInfo, type UUID } from "@elizaos/core";
|
|
2
|
+
type ConnectorFetchMessagesParams = {
|
|
3
|
+
target?: TargetInfo;
|
|
4
|
+
limit?: number;
|
|
5
|
+
before?: string;
|
|
6
|
+
after?: string;
|
|
7
|
+
channelId?: string;
|
|
8
|
+
roomId?: UUID;
|
|
9
|
+
};
|
|
10
|
+
type ConnectorSearchMessagesParams = ConnectorFetchMessagesParams & {
|
|
11
|
+
query?: string;
|
|
12
|
+
};
|
|
13
|
+
type ConnectorReactionParams = {
|
|
14
|
+
target?: TargetInfo;
|
|
15
|
+
channelId?: string;
|
|
16
|
+
roomId?: UUID;
|
|
17
|
+
messageId?: string;
|
|
18
|
+
targetTimestamp?: number;
|
|
19
|
+
targetAuthor?: string;
|
|
20
|
+
emoji?: string;
|
|
21
|
+
remove?: boolean;
|
|
22
|
+
};
|
|
23
|
+
type ConnectorUserLookupParams = {
|
|
24
|
+
userId?: string;
|
|
25
|
+
username?: string;
|
|
26
|
+
handle?: string;
|
|
27
|
+
query?: string;
|
|
28
|
+
target?: TargetInfo;
|
|
29
|
+
};
|
|
30
|
+
import { type ISignalService, type SignalContact, type SignalGroup, type SignalMessage, type SignalMessageSendOptions, type SignalRecentMessage } from "./types";
|
|
31
|
+
export declare const DEFAULT_SIGNAL_CLI_PATH = "signal-cli";
|
|
32
|
+
/**
|
|
33
|
+
* SignalService class for interacting with Signal via HTTP API or CLI
|
|
34
|
+
*/
|
|
35
|
+
export declare class SignalService extends Service implements ISignalService {
|
|
36
|
+
static serviceType: string;
|
|
37
|
+
capabilityDescription: string;
|
|
38
|
+
stop(): Promise<void>;
|
|
39
|
+
character: Character;
|
|
40
|
+
accountNumber: string | null;
|
|
41
|
+
isConnected: boolean;
|
|
42
|
+
private defaultAccountId;
|
|
43
|
+
private accountNumbers;
|
|
44
|
+
private clients;
|
|
45
|
+
private client;
|
|
46
|
+
private settings;
|
|
47
|
+
private contactCache;
|
|
48
|
+
private contactCaches;
|
|
49
|
+
private groupCache;
|
|
50
|
+
private groupCaches;
|
|
51
|
+
private pollInterval;
|
|
52
|
+
private eventStream;
|
|
53
|
+
private eventStreams;
|
|
54
|
+
private isPolling;
|
|
55
|
+
private daemonProcess;
|
|
56
|
+
constructor(runtime?: IAgentRuntime);
|
|
57
|
+
private loadSettings;
|
|
58
|
+
private normalizeAccountId;
|
|
59
|
+
private getConnectorAccountIds;
|
|
60
|
+
private getClientForAccount;
|
|
61
|
+
private getAccountNumberForAccount;
|
|
62
|
+
private cacheContacts;
|
|
63
|
+
private cacheGroups;
|
|
64
|
+
private getCachedContact;
|
|
65
|
+
private getCachedGroupForAccount;
|
|
66
|
+
private accountScopedKey;
|
|
67
|
+
private static resolveStartupConfig;
|
|
68
|
+
private initializeConfiguredAccount;
|
|
69
|
+
private ensureAccountDaemon;
|
|
70
|
+
static start(runtime: IAgentRuntime): Promise<SignalService>;
|
|
71
|
+
static registerSendHandlers(runtime: IAgentRuntime, service: SignalService): void;
|
|
72
|
+
private initialize;
|
|
73
|
+
private shutdown;
|
|
74
|
+
private ensureDaemonRunning;
|
|
75
|
+
private startPolling;
|
|
76
|
+
private stopPolling;
|
|
77
|
+
/**
|
|
78
|
+
* Unwraps signal-cli REST API envelope format into a flat SignalMessage.
|
|
79
|
+
*
|
|
80
|
+
* signal-cli returns `{envelope:{source, sourceNumber, sourceName, dataMessage:{message,...}}}`
|
|
81
|
+
* but the plugin expects flat `{sender, message, timestamp, ...}` objects.
|
|
82
|
+
*/
|
|
83
|
+
static unwrapEnvelope(raw: Record<string, unknown>): SignalMessage | null;
|
|
84
|
+
private static unwrapFlatMessage;
|
|
85
|
+
private static unwrapEnvelopeMessage;
|
|
86
|
+
private pollMessages;
|
|
87
|
+
private handleSignalEventPayload;
|
|
88
|
+
private handleIncomingMessage;
|
|
89
|
+
private handleReaction;
|
|
90
|
+
private processMessage;
|
|
91
|
+
private buildMemoryFromMessage;
|
|
92
|
+
private getRoomId;
|
|
93
|
+
private getEntityId;
|
|
94
|
+
private ensureRoomExists;
|
|
95
|
+
sendMessage(recipient: string, text: string, options?: SignalMessageSendOptions): Promise<{
|
|
96
|
+
timestamp: number;
|
|
97
|
+
}>;
|
|
98
|
+
sendGroupMessage(groupId: string, text: string, options?: SignalMessageSendOptions): Promise<{
|
|
99
|
+
timestamp: number;
|
|
100
|
+
}>;
|
|
101
|
+
sendDirectMessage(target: string, content: Content): Promise<void>;
|
|
102
|
+
sendRoomMessage(target: string, content: Content): Promise<void>;
|
|
103
|
+
private recordOutgoingMessage;
|
|
104
|
+
sendReaction(recipient: string, emoji: string, targetTimestamp: number, targetAuthor: string, accountId?: string): Promise<void>;
|
|
105
|
+
removeReaction(recipient: string, emoji: string, targetTimestamp: number, targetAuthor: string, accountId?: string): Promise<void>;
|
|
106
|
+
getContacts(accountId?: string): Promise<SignalContact[]>;
|
|
107
|
+
private listConnectorContacts;
|
|
108
|
+
getGroups(accountId?: string): Promise<SignalGroup[]>;
|
|
109
|
+
private listConnectorGroups;
|
|
110
|
+
private roomMatchesAccount;
|
|
111
|
+
private memoryMatchesAccount;
|
|
112
|
+
getRecentMessages(limit?: number, accountId?: string): Promise<SignalRecentMessage[]>;
|
|
113
|
+
private getSignalRooms;
|
|
114
|
+
fetchConnectorMessages(context: MessageConnectorQueryContext, params: ConnectorFetchMessagesParams): Promise<Memory[]>;
|
|
115
|
+
searchConnectorMessages(context: MessageConnectorQueryContext, params: ConnectorSearchMessagesParams): Promise<Memory[]>;
|
|
116
|
+
reactConnectorMessage(runtime: IAgentRuntime, params: ConnectorReactionParams): Promise<void>;
|
|
117
|
+
private resolveReactionTarget;
|
|
118
|
+
private lookupReactionTargetFromMemory;
|
|
119
|
+
getConnectorUser(_runtime: IAgentRuntime, params: ConnectorUserLookupParams): Promise<unknown>;
|
|
120
|
+
getGroup(groupId: string, accountId?: string): Promise<SignalGroup | null>;
|
|
121
|
+
sendTypingIndicator(recipient: string, accountId?: string): Promise<void>;
|
|
122
|
+
stopTypingIndicator(recipient: string, accountId?: string): Promise<void>;
|
|
123
|
+
private splitMessage;
|
|
124
|
+
getContact(number: string): SignalContact | null;
|
|
125
|
+
getCachedGroup(groupId: string): SignalGroup | null;
|
|
126
|
+
getAccountNumber(): string | null;
|
|
127
|
+
isServiceConnected(): boolean;
|
|
128
|
+
}
|
|
129
|
+
export {};
|
|
130
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal connector setup HTTP routes.
|
|
3
|
+
*
|
|
4
|
+
* Implements the shared setup contract defined in
|
|
5
|
+
* `@elizaos/app-core/api/setup-contract.ts`:
|
|
6
|
+
*
|
|
7
|
+
* GET /api/setup/signal/status check current connection / pairing state
|
|
8
|
+
* POST /api/setup/signal/start start (or restart) a QR device-linking session
|
|
9
|
+
* POST /api/setup/signal/cancel stop active pairing and disconnect Signal
|
|
10
|
+
*
|
|
11
|
+
* The underlying QR pairing logic is unchanged from the legacy
|
|
12
|
+
* `/api/signal/*` routes — only the path layout, the canonical response
|
|
13
|
+
* envelope, and the structured error shape have been normalized.
|
|
14
|
+
*
|
|
15
|
+
* Cancel folds the old "stop pairing in progress" and "disconnect already
|
|
16
|
+
* paired Signal" cases into a single endpoint: it stops any in-flight
|
|
17
|
+
* session and wipes auth on disk in one call.
|
|
18
|
+
*
|
|
19
|
+
* These routes are registered with `rawPath: true` so they mount at their
|
|
20
|
+
* canonical paths without the plugin-name prefix.
|
|
21
|
+
*/
|
|
22
|
+
import type { Route } from "@elizaos/core";
|
|
23
|
+
/**
|
|
24
|
+
* Plugin routes for Signal device-linking setup.
|
|
25
|
+
* Registered with `rawPath: true` to mount at the canonical
|
|
26
|
+
* `/api/setup/signal/*` paths without the plugin-name prefix.
|
|
27
|
+
*/
|
|
28
|
+
export declare const signalSetupRoutes: Route[];
|
|
29
|
+
/**
|
|
30
|
+
* Override plugin-discovery status for Signal when QR-paired auth exists.
|
|
31
|
+
* Exported so the agent can still use it during plugin discovery if needed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function applySignalQrOverride(plugins: {
|
|
34
|
+
id: string;
|
|
35
|
+
validationErrors: unknown[];
|
|
36
|
+
configured: boolean;
|
|
37
|
+
qrConnected?: boolean;
|
|
38
|
+
}[], workspaceDir: string): void;
|
|
39
|
+
//# sourceMappingURL=setup-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-routes.d.ts","sourceRoot":"","sources":["../src/setup-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAiB,KAAK,EAA+B,MAAM,eAAe,CAAC;AAgavF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,EAmBpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE;IACP,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,EAAE,EACH,YAAY,EAAE,MAAM,GACnB,IAAI,CASN"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type { Character, EventPayload, MessagePayload, WorldPayload } from "@elizaos/core";
|
|
2
|
+
/**
|
|
3
|
+
* Signal-specific event types
|
|
4
|
+
*/
|
|
5
|
+
export declare enum SignalEventTypes {
|
|
6
|
+
MESSAGE_RECEIVED = "SIGNAL_MESSAGE_RECEIVED",
|
|
7
|
+
MESSAGE_SENT = "SIGNAL_MESSAGE_SENT",
|
|
8
|
+
REACTION_RECEIVED = "SIGNAL_REACTION_RECEIVED",
|
|
9
|
+
GROUP_JOINED = "SIGNAL_GROUP_JOINED",
|
|
10
|
+
GROUP_LEFT = "SIGNAL_GROUP_LEFT"
|
|
11
|
+
}
|
|
12
|
+
export interface SignalMessageReceivedPayload extends MessagePayload {
|
|
13
|
+
sender: string;
|
|
14
|
+
groupId: string | undefined;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
attachments: SignalAttachment[];
|
|
17
|
+
isGroupMessage: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface SignalMessageSentPayload extends MessagePayload {
|
|
20
|
+
recipient: string;
|
|
21
|
+
groupId: string | undefined;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
}
|
|
24
|
+
export interface SignalReactionPayload extends EventPayload {
|
|
25
|
+
emoji: string;
|
|
26
|
+
sender: string;
|
|
27
|
+
targetTimestamp: number;
|
|
28
|
+
targetAuthor: string;
|
|
29
|
+
isRemove: boolean;
|
|
30
|
+
}
|
|
31
|
+
interface SignalGroupPayload extends WorldPayload {
|
|
32
|
+
groupId: string;
|
|
33
|
+
groupName: string;
|
|
34
|
+
members: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface SignalAttachment {
|
|
37
|
+
contentType: string;
|
|
38
|
+
filename: string | undefined;
|
|
39
|
+
id: string;
|
|
40
|
+
size: number;
|
|
41
|
+
width: number | undefined;
|
|
42
|
+
height: number | undefined;
|
|
43
|
+
caption: string | undefined;
|
|
44
|
+
blurhash: string | undefined;
|
|
45
|
+
}
|
|
46
|
+
export interface SignalEventPayloadMap {
|
|
47
|
+
[SignalEventTypes.MESSAGE_RECEIVED]: SignalMessageReceivedPayload;
|
|
48
|
+
[SignalEventTypes.MESSAGE_SENT]: SignalMessageSentPayload;
|
|
49
|
+
[SignalEventTypes.REACTION_RECEIVED]: SignalReactionPayload;
|
|
50
|
+
[SignalEventTypes.GROUP_JOINED]: SignalGroupPayload;
|
|
51
|
+
[SignalEventTypes.GROUP_LEFT]: SignalGroupPayload;
|
|
52
|
+
}
|
|
53
|
+
export interface SignalContact {
|
|
54
|
+
number: string;
|
|
55
|
+
uuid: string | undefined;
|
|
56
|
+
name: string | undefined;
|
|
57
|
+
profileName: string | undefined;
|
|
58
|
+
color: string | undefined;
|
|
59
|
+
blocked: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface SignalGroup {
|
|
62
|
+
id: string;
|
|
63
|
+
name: string;
|
|
64
|
+
description: string | undefined;
|
|
65
|
+
isMember: boolean;
|
|
66
|
+
isBlocked: boolean;
|
|
67
|
+
members: SignalGroupMember[];
|
|
68
|
+
admins: string[];
|
|
69
|
+
inviteLink: string | undefined;
|
|
70
|
+
}
|
|
71
|
+
export interface SignalGroupMember {
|
|
72
|
+
uuid: string;
|
|
73
|
+
number: string | undefined;
|
|
74
|
+
role: "ADMINISTRATOR" | "DEFAULT";
|
|
75
|
+
}
|
|
76
|
+
export interface SignalMessage {
|
|
77
|
+
timestamp: number;
|
|
78
|
+
sender: string;
|
|
79
|
+
senderUuid: string | undefined;
|
|
80
|
+
groupId: string | undefined;
|
|
81
|
+
message: string | undefined;
|
|
82
|
+
attachments: SignalAttachment[];
|
|
83
|
+
quote: SignalQuote | undefined;
|
|
84
|
+
reaction: SignalReactionInfo | undefined;
|
|
85
|
+
expiresInSeconds: number | undefined;
|
|
86
|
+
viewOnce: boolean;
|
|
87
|
+
}
|
|
88
|
+
export interface SignalRecentMessage {
|
|
89
|
+
id: string;
|
|
90
|
+
roomId: string;
|
|
91
|
+
channelId: string;
|
|
92
|
+
roomName: string;
|
|
93
|
+
speakerName: string;
|
|
94
|
+
text: string;
|
|
95
|
+
createdAt: number;
|
|
96
|
+
isFromAgent: boolean;
|
|
97
|
+
isGroup: boolean;
|
|
98
|
+
}
|
|
99
|
+
export interface SignalQuote {
|
|
100
|
+
id: number;
|
|
101
|
+
author: string;
|
|
102
|
+
authorUuid: string | undefined;
|
|
103
|
+
text: string;
|
|
104
|
+
attachments: SignalAttachment[];
|
|
105
|
+
}
|
|
106
|
+
export interface SignalReactionInfo {
|
|
107
|
+
emoji: string;
|
|
108
|
+
targetAuthor: string;
|
|
109
|
+
targetAuthorUuid: string | undefined;
|
|
110
|
+
targetSentTimestamp: number;
|
|
111
|
+
isRemove: boolean;
|
|
112
|
+
}
|
|
113
|
+
export interface ISignalService {
|
|
114
|
+
accountNumber: string | null;
|
|
115
|
+
character: Character;
|
|
116
|
+
isConnected: boolean;
|
|
117
|
+
getRecentMessages(limit?: number): Promise<SignalRecentMessage[]>;
|
|
118
|
+
}
|
|
119
|
+
export declare const SIGNAL_SERVICE_NAME = "signal";
|
|
120
|
+
export interface SignalSettings {
|
|
121
|
+
shouldIgnoreGroupMessages: boolean;
|
|
122
|
+
allowedGroups: string[] | undefined;
|
|
123
|
+
blockedNumbers: string[] | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* When false (default), inbound messages are persisted as memories and a
|
|
126
|
+
* MESSAGE_RECEIVED event is emitted, but the agent does NOT auto-generate
|
|
127
|
+
* a reply. Sends only happen via explicit caller action (LifeOps send
|
|
128
|
+
* route, user-issued chat command). Set SIGNAL_AUTO_REPLY=true to opt in.
|
|
129
|
+
*/
|
|
130
|
+
autoReply: boolean;
|
|
131
|
+
receiveMode: "on-start" | "manual";
|
|
132
|
+
}
|
|
133
|
+
export interface SignalMessageSendOptions {
|
|
134
|
+
/** Connector account ID to send from. Defaults to the configured default account. */
|
|
135
|
+
accountId?: string;
|
|
136
|
+
attachments?: string[];
|
|
137
|
+
quote?: {
|
|
138
|
+
timestamp: number;
|
|
139
|
+
author: string;
|
|
140
|
+
};
|
|
141
|
+
expiresInSeconds?: number;
|
|
142
|
+
record?: boolean;
|
|
143
|
+
}
|
|
144
|
+
export declare class SignalPluginError extends Error {
|
|
145
|
+
readonly code: string;
|
|
146
|
+
constructor(message: string, code: string);
|
|
147
|
+
}
|
|
148
|
+
export declare class SignalServiceNotInitializedError extends SignalPluginError {
|
|
149
|
+
constructor();
|
|
150
|
+
}
|
|
151
|
+
export declare class SignalClientNotAvailableError extends SignalPluginError {
|
|
152
|
+
constructor();
|
|
153
|
+
}
|
|
154
|
+
export declare class SignalConfigurationError extends SignalPluginError {
|
|
155
|
+
constructor(missingConfig: string);
|
|
156
|
+
}
|
|
157
|
+
export declare class SignalApiError extends SignalPluginError {
|
|
158
|
+
readonly apiErrorCode: string | undefined;
|
|
159
|
+
constructor(message: string, apiErrorCode: string | undefined);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Normalize a phone number to E.164 format
|
|
163
|
+
*/
|
|
164
|
+
export declare function normalizeE164(number: string): string | null;
|
|
165
|
+
/**
|
|
166
|
+
* Validates an E.164 phone number format
|
|
167
|
+
*/
|
|
168
|
+
export declare function isValidE164(number: string): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Validates a Signal group ID format (base64-encoded)
|
|
171
|
+
*/
|
|
172
|
+
export declare function isValidGroupId(id: string): boolean;
|
|
173
|
+
/**
|
|
174
|
+
* Validates a Signal UUID format
|
|
175
|
+
*/
|
|
176
|
+
export declare function isValidUuid(uuid: string): boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Gets the display name for a Signal contact
|
|
179
|
+
*/
|
|
180
|
+
export declare function getSignalContactDisplayName(contact: SignalContact): string;
|
|
181
|
+
/**
|
|
182
|
+
* Maximum message length for Signal messages
|
|
183
|
+
*/
|
|
184
|
+
export declare const MAX_SIGNAL_MESSAGE_LENGTH = 4000;
|
|
185
|
+
/**
|
|
186
|
+
* Maximum attachment size (100MB)
|
|
187
|
+
*/
|
|
188
|
+
export declare const MAX_SIGNAL_ATTACHMENT_SIZE: number;
|
|
189
|
+
export {};
|
|
190
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3F;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,gBAAgB,4BAA4B;IAC5C,YAAY,wBAAwB;IACpC,iBAAiB,6BAA6B;IAC9C,YAAY,wBAAwB;IACpC,UAAU,sBAAsB;CACjC;AAED,MAAM,WAAW,4BAA6B,SAAQ,cAAc;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,kBAAmB,SAAQ,YAAY;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAClE,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IAC1D,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC5D,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IACpD,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACnD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,eAAe,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACzC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;CACnE;AAED,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,yBAAyB,EAAE,OAAO,CAAC;IACnC,aAAa,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC;;;;;OAKG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,UAAU,GAAG,QAAQ,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK/B;AAED,qBAAa,gCAAiC,SAAQ,iBAAiB;;CAKtE;AAED,qBAAa,6BAA8B,SAAQ,iBAAiB;;CAKnE;AAED,qBAAa,wBAAyB,SAAQ,iBAAiB;gBACjD,aAAa,EAAE,MAAM;CAIlC;AAED,qBAAa,cAAe,SAAQ,iBAAiB;aAGjC,YAAY,EAAE,MAAM,GAAG,SAAS;gBADhD,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,MAAM,GAAG,SAAS;CAKnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsB3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAGlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAoB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type IAgentRuntime, Service } from "@elizaos/core";
|
|
2
|
+
type CredentialProviderResult = {
|
|
3
|
+
status: "credential_data";
|
|
4
|
+
data: Record<string, unknown>;
|
|
5
|
+
} | {
|
|
6
|
+
status: "needs_auth";
|
|
7
|
+
authUrl: string;
|
|
8
|
+
} | null;
|
|
9
|
+
export declare class SignalWorkflowCredentialProvider extends Service {
|
|
10
|
+
static readonly serviceType = "workflow_credential_provider";
|
|
11
|
+
capabilityDescription: string;
|
|
12
|
+
static start(runtime: IAgentRuntime): Promise<SignalWorkflowCredentialProvider>;
|
|
13
|
+
stop(): Promise<void>;
|
|
14
|
+
resolve(_userId: string, credType: string): Promise<CredentialProviderResult>;
|
|
15
|
+
checkCredentialTypes(credTypes: string[]): {
|
|
16
|
+
supported: string[];
|
|
17
|
+
unsupported: string[];
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=workflow-credential-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-credential-provider.d.ts","sourceRoot":"","sources":["../src/workflow-credential-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAK5D,KAAK,wBAAwB,GACzB;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC5D;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzC,IAAI,CAAC;AAMT,qBAAa,gCAAiC,SAAQ,OAAO;IAC3D,gBAAyB,WAAW,kCAAqC;IAChE,qBAAqB,SACsD;WAEvE,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAI/E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAErB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgBnF,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE;CAM1F"}
|