@tashiscool/agents 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +186 -0
  2. package/dist/conversation.d.ts +146 -0
  3. package/dist/conversation.d.ts.map +1 -0
  4. package/dist/conversation.js +239 -0
  5. package/dist/conversation.js.map +1 -0
  6. package/dist/events.d.ts +218 -0
  7. package/dist/events.d.ts.map +1 -0
  8. package/dist/events.js +299 -0
  9. package/dist/events.js.map +1 -0
  10. package/dist/executor.d.ts +144 -0
  11. package/dist/executor.d.ts.map +1 -0
  12. package/dist/executor.js +362 -0
  13. package/dist/executor.js.map +1 -0
  14. package/dist/index.d.ts +26 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +27 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/langchain.d.ts +210 -0
  19. package/dist/langchain.d.ts.map +1 -0
  20. package/dist/langchain.js +333 -0
  21. package/dist/langchain.js.map +1 -0
  22. package/dist/mcp.d.ts +208 -0
  23. package/dist/mcp.d.ts.map +1 -0
  24. package/dist/mcp.js +266 -0
  25. package/dist/mcp.js.map +1 -0
  26. package/dist/memory.d.ts +96 -0
  27. package/dist/memory.d.ts.map +1 -0
  28. package/dist/memory.js +248 -0
  29. package/dist/memory.js.map +1 -0
  30. package/dist/oauth.d.ts +158 -0
  31. package/dist/oauth.d.ts.map +1 -0
  32. package/dist/oauth.js +344 -0
  33. package/dist/oauth.js.map +1 -0
  34. package/dist/output.d.ts +262 -0
  35. package/dist/output.d.ts.map +1 -0
  36. package/dist/output.js +249 -0
  37. package/dist/output.js.map +1 -0
  38. package/dist/session.d.ts +212 -0
  39. package/dist/session.d.ts.map +1 -0
  40. package/dist/session.js +347 -0
  41. package/dist/session.js.map +1 -0
  42. package/dist/tools.d.ts +125 -0
  43. package/dist/tools.d.ts.map +1 -0
  44. package/dist/tools.js +195 -0
  45. package/dist/tools.js.map +1 -0
  46. package/package.json +45 -0
@@ -0,0 +1,158 @@
1
+ /**
2
+ * OAuth Token Manager
3
+ * Manage OAuth tokens with automatic refresh
4
+ */
5
+ /**
6
+ * OAuth token data
7
+ */
8
+ export interface OAuthToken {
9
+ /** Access token */
10
+ accessToken: string;
11
+ /** Token type (usually 'Bearer') */
12
+ tokenType: string;
13
+ /** Expiration timestamp */
14
+ expiresAt: Date;
15
+ /** Refresh token (if available) */
16
+ refreshToken?: string;
17
+ /** Token scope */
18
+ scope?: string;
19
+ /** Additional token data */
20
+ metadata?: Record<string, unknown>;
21
+ }
22
+ /**
23
+ * OAuth provider configuration
24
+ */
25
+ export interface OAuthProviderConfig {
26
+ /** Provider name */
27
+ name: string;
28
+ /** Authorization URL */
29
+ authorizationUrl: string;
30
+ /** Token URL */
31
+ tokenUrl: string;
32
+ /** Revocation URL */
33
+ revocationUrl?: string;
34
+ /** Client ID */
35
+ clientId: string;
36
+ /** Client secret */
37
+ clientSecret?: string;
38
+ /** Default scopes */
39
+ defaultScopes?: string[];
40
+ /** Token refresh buffer in ms (refresh before expiry) */
41
+ refreshBufferMs?: number;
42
+ }
43
+ /**
44
+ * Token storage interface
45
+ */
46
+ export interface TokenStorage {
47
+ save(key: string, token: OAuthToken): Promise<void>;
48
+ load(key: string): Promise<OAuthToken | null>;
49
+ delete(key: string): Promise<void>;
50
+ }
51
+ /**
52
+ * In-memory token storage
53
+ */
54
+ export declare class InMemoryTokenStorage implements TokenStorage {
55
+ private tokens;
56
+ save(key: string, token: OAuthToken): Promise<void>;
57
+ load(key: string): Promise<OAuthToken | null>;
58
+ delete(key: string): Promise<void>;
59
+ }
60
+ /**
61
+ * Token refresh function type
62
+ */
63
+ export type TokenRefreshFn = (refreshToken: string, config: OAuthProviderConfig) => Promise<OAuthToken>;
64
+ /**
65
+ * OAuth token manager options
66
+ */
67
+ export interface TokenManagerOptions {
68
+ /** Token storage */
69
+ storage?: TokenStorage;
70
+ /** Custom refresh function */
71
+ refreshFn?: TokenRefreshFn;
72
+ /** Auto-refresh enabled */
73
+ autoRefresh?: boolean;
74
+ /** Refresh buffer in ms (refresh before expiry) */
75
+ refreshBufferMs?: number;
76
+ }
77
+ /**
78
+ * OAuth token manager
79
+ */
80
+ export declare class OAuthTokenManager {
81
+ private providers;
82
+ private storage;
83
+ private refreshFn;
84
+ private autoRefresh;
85
+ private refreshBufferMs;
86
+ private refreshTimers;
87
+ private refreshPromises;
88
+ constructor(options?: TokenManagerOptions);
89
+ /**
90
+ * Register an OAuth provider
91
+ */
92
+ registerProvider(config: OAuthProviderConfig): void;
93
+ /**
94
+ * Get provider config
95
+ */
96
+ getProvider(name: string): OAuthProviderConfig | undefined;
97
+ /**
98
+ * Generate storage key
99
+ */
100
+ private getStorageKey;
101
+ /**
102
+ * Store a token
103
+ */
104
+ storeToken(provider: string, token: OAuthToken, userId?: string): Promise<void>;
105
+ /**
106
+ * Schedule token refresh
107
+ */
108
+ private scheduleRefresh;
109
+ /**
110
+ * Get a valid token, refreshing if necessary
111
+ */
112
+ getToken(provider: string, userId?: string): Promise<OAuthToken | null>;
113
+ /**
114
+ * Refresh a token
115
+ */
116
+ refreshToken(provider: string, userId?: string): Promise<OAuthToken>;
117
+ /**
118
+ * Revoke a token
119
+ */
120
+ revokeToken(provider: string, userId?: string): Promise<void>;
121
+ /**
122
+ * Check if a valid token exists
123
+ */
124
+ hasValidToken(provider: string, userId?: string): Promise<boolean>;
125
+ /**
126
+ * Get authorization URL for OAuth flow
127
+ */
128
+ getAuthorizationUrl(provider: string, options: {
129
+ redirectUri: string;
130
+ state?: string;
131
+ scopes?: string[];
132
+ codeChallenge?: string;
133
+ codeChallengeMethod?: 'S256' | 'plain';
134
+ }): string;
135
+ /**
136
+ * Exchange authorization code for tokens
137
+ */
138
+ exchangeCode(provider: string, code: string, redirectUri: string, codeVerifier?: string): Promise<OAuthToken>;
139
+ /**
140
+ * Cleanup all refresh timers
141
+ */
142
+ cleanup(): void;
143
+ }
144
+ /**
145
+ * Create an OAuth token manager
146
+ */
147
+ export declare function createOAuthManager(options?: TokenManagerOptions): OAuthTokenManager;
148
+ /**
149
+ * Common OAuth provider configurations
150
+ */
151
+ export declare const OAuthProviders: {
152
+ google: (clientId: string, clientSecret?: string) => OAuthProviderConfig;
153
+ github: (clientId: string, clientSecret?: string) => OAuthProviderConfig;
154
+ microsoft: (clientId: string, clientSecret?: string) => OAuthProviderConfig;
155
+ slack: (clientId: string, clientSecret?: string) => OAuthProviderConfig;
156
+ notion: (clientId: string, clientSecret?: string) => OAuthProviderConfig;
157
+ };
158
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}
package/dist/oauth.js ADDED
@@ -0,0 +1,344 @@
1
+ /**
2
+ * OAuth Token Manager
3
+ * Manage OAuth tokens with automatic refresh
4
+ */
5
+ /**
6
+ * In-memory token storage
7
+ */
8
+ export class InMemoryTokenStorage {
9
+ tokens = new Map();
10
+ async save(key, token) {
11
+ this.tokens.set(key, token);
12
+ }
13
+ async load(key) {
14
+ return this.tokens.get(key) || null;
15
+ }
16
+ async delete(key) {
17
+ this.tokens.delete(key);
18
+ }
19
+ }
20
+ /**
21
+ * Default token refresh implementation
22
+ */
23
+ async function defaultRefreshToken(refreshToken, config) {
24
+ const params = new URLSearchParams({
25
+ grant_type: 'refresh_token',
26
+ refresh_token: refreshToken,
27
+ client_id: config.clientId,
28
+ });
29
+ if (config.clientSecret) {
30
+ params.set('client_secret', config.clientSecret);
31
+ }
32
+ const response = await fetch(config.tokenUrl, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'Content-Type': 'application/x-www-form-urlencoded',
36
+ },
37
+ body: params.toString(),
38
+ });
39
+ if (!response.ok) {
40
+ const error = await response.text();
41
+ throw new Error(`Token refresh failed: ${error}`);
42
+ }
43
+ const data = await response.json();
44
+ return {
45
+ accessToken: data.access_token,
46
+ tokenType: data.token_type || 'Bearer',
47
+ expiresAt: new Date(Date.now() + data.expires_in * 1000),
48
+ refreshToken: data.refresh_token || refreshToken,
49
+ scope: data.scope,
50
+ };
51
+ }
52
+ /**
53
+ * OAuth token manager
54
+ */
55
+ export class OAuthTokenManager {
56
+ providers = new Map();
57
+ storage;
58
+ refreshFn;
59
+ autoRefresh;
60
+ refreshBufferMs;
61
+ refreshTimers = new Map();
62
+ refreshPromises = new Map();
63
+ constructor(options = {}) {
64
+ this.storage = options.storage || new InMemoryTokenStorage();
65
+ this.refreshFn = options.refreshFn || defaultRefreshToken;
66
+ this.autoRefresh = options.autoRefresh ?? true;
67
+ this.refreshBufferMs = options.refreshBufferMs ?? 60000; // 1 minute default
68
+ }
69
+ /**
70
+ * Register an OAuth provider
71
+ */
72
+ registerProvider(config) {
73
+ this.providers.set(config.name, config);
74
+ }
75
+ /**
76
+ * Get provider config
77
+ */
78
+ getProvider(name) {
79
+ return this.providers.get(name);
80
+ }
81
+ /**
82
+ * Generate storage key
83
+ */
84
+ getStorageKey(provider, userId) {
85
+ return userId ? `${provider}:${userId}` : provider;
86
+ }
87
+ /**
88
+ * Store a token
89
+ */
90
+ async storeToken(provider, token, userId) {
91
+ const key = this.getStorageKey(provider, userId);
92
+ await this.storage.save(key, token);
93
+ // Setup auto-refresh if enabled
94
+ if (this.autoRefresh && token.refreshToken) {
95
+ this.scheduleRefresh(provider, key, token);
96
+ }
97
+ }
98
+ /**
99
+ * Schedule token refresh
100
+ */
101
+ scheduleRefresh(provider, key, token) {
102
+ // Clear existing timer
103
+ const existingTimer = this.refreshTimers.get(key);
104
+ if (existingTimer) {
105
+ clearTimeout(existingTimer);
106
+ }
107
+ // Calculate time until refresh
108
+ const config = this.providers.get(provider);
109
+ const bufferMs = config?.refreshBufferMs ?? this.refreshBufferMs;
110
+ const refreshAt = token.expiresAt.getTime() - bufferMs;
111
+ const delay = Math.max(0, refreshAt - Date.now());
112
+ // Schedule refresh
113
+ const timer = setTimeout(async () => {
114
+ try {
115
+ await this.refreshToken(provider, key.split(':')[1]);
116
+ }
117
+ catch (error) {
118
+ console.error(`Auto-refresh failed for ${key}:`, error);
119
+ }
120
+ }, delay);
121
+ this.refreshTimers.set(key, timer);
122
+ }
123
+ /**
124
+ * Get a valid token, refreshing if necessary
125
+ */
126
+ async getToken(provider, userId) {
127
+ const key = this.getStorageKey(provider, userId);
128
+ const token = await this.storage.load(key);
129
+ if (!token) {
130
+ return null;
131
+ }
132
+ // Check if token is expired or about to expire
133
+ const config = this.providers.get(provider);
134
+ const bufferMs = config?.refreshBufferMs ?? this.refreshBufferMs;
135
+ const isExpired = token.expiresAt.getTime() - bufferMs < Date.now();
136
+ if (isExpired && token.refreshToken) {
137
+ return this.refreshToken(provider, userId);
138
+ }
139
+ return token;
140
+ }
141
+ /**
142
+ * Refresh a token
143
+ */
144
+ async refreshToken(provider, userId) {
145
+ const key = this.getStorageKey(provider, userId);
146
+ // Check for in-flight refresh
147
+ const existingPromise = this.refreshPromises.get(key);
148
+ if (existingPromise) {
149
+ return existingPromise;
150
+ }
151
+ const config = this.providers.get(provider);
152
+ if (!config) {
153
+ throw new Error(`Unknown OAuth provider: ${provider}`);
154
+ }
155
+ const currentToken = await this.storage.load(key);
156
+ if (!currentToken?.refreshToken) {
157
+ throw new Error('No refresh token available');
158
+ }
159
+ // Create refresh promise
160
+ const refreshPromise = (async () => {
161
+ try {
162
+ const newToken = await this.refreshFn(currentToken.refreshToken, config);
163
+ await this.storeToken(provider, newToken, userId);
164
+ return newToken;
165
+ }
166
+ finally {
167
+ this.refreshPromises.delete(key);
168
+ }
169
+ })();
170
+ this.refreshPromises.set(key, refreshPromise);
171
+ return refreshPromise;
172
+ }
173
+ /**
174
+ * Revoke a token
175
+ */
176
+ async revokeToken(provider, userId) {
177
+ const key = this.getStorageKey(provider, userId);
178
+ const config = this.providers.get(provider);
179
+ const token = await this.storage.load(key);
180
+ if (config?.revocationUrl && token) {
181
+ try {
182
+ const params = new URLSearchParams({
183
+ token: token.accessToken,
184
+ client_id: config.clientId,
185
+ });
186
+ if (config.clientSecret) {
187
+ params.set('client_secret', config.clientSecret);
188
+ }
189
+ await fetch(config.revocationUrl, {
190
+ method: 'POST',
191
+ headers: {
192
+ 'Content-Type': 'application/x-www-form-urlencoded',
193
+ },
194
+ body: params.toString(),
195
+ });
196
+ }
197
+ catch (error) {
198
+ console.error('Token revocation failed:', error);
199
+ }
200
+ }
201
+ // Clear timer and storage
202
+ const timer = this.refreshTimers.get(key);
203
+ if (timer) {
204
+ clearTimeout(timer);
205
+ this.refreshTimers.delete(key);
206
+ }
207
+ await this.storage.delete(key);
208
+ }
209
+ /**
210
+ * Check if a valid token exists
211
+ */
212
+ async hasValidToken(provider, userId) {
213
+ const token = await this.getToken(provider, userId);
214
+ return token !== null;
215
+ }
216
+ /**
217
+ * Get authorization URL for OAuth flow
218
+ */
219
+ getAuthorizationUrl(provider, options) {
220
+ const config = this.providers.get(provider);
221
+ if (!config) {
222
+ throw new Error(`Unknown OAuth provider: ${provider}`);
223
+ }
224
+ const params = new URLSearchParams({
225
+ response_type: 'code',
226
+ client_id: config.clientId,
227
+ redirect_uri: options.redirectUri,
228
+ });
229
+ const scopes = options.scopes || config.defaultScopes;
230
+ if (scopes?.length) {
231
+ params.set('scope', scopes.join(' '));
232
+ }
233
+ if (options.state) {
234
+ params.set('state', options.state);
235
+ }
236
+ if (options.codeChallenge) {
237
+ params.set('code_challenge', options.codeChallenge);
238
+ params.set('code_challenge_method', options.codeChallengeMethod || 'S256');
239
+ }
240
+ return `${config.authorizationUrl}?${params.toString()}`;
241
+ }
242
+ /**
243
+ * Exchange authorization code for tokens
244
+ */
245
+ async exchangeCode(provider, code, redirectUri, codeVerifier) {
246
+ const config = this.providers.get(provider);
247
+ if (!config) {
248
+ throw new Error(`Unknown OAuth provider: ${provider}`);
249
+ }
250
+ const params = new URLSearchParams({
251
+ grant_type: 'authorization_code',
252
+ code,
253
+ redirect_uri: redirectUri,
254
+ client_id: config.clientId,
255
+ });
256
+ if (config.clientSecret) {
257
+ params.set('client_secret', config.clientSecret);
258
+ }
259
+ if (codeVerifier) {
260
+ params.set('code_verifier', codeVerifier);
261
+ }
262
+ const response = await fetch(config.tokenUrl, {
263
+ method: 'POST',
264
+ headers: {
265
+ 'Content-Type': 'application/x-www-form-urlencoded',
266
+ },
267
+ body: params.toString(),
268
+ });
269
+ if (!response.ok) {
270
+ const error = await response.text();
271
+ throw new Error(`Token exchange failed: ${error}`);
272
+ }
273
+ const data = await response.json();
274
+ return {
275
+ accessToken: data.access_token,
276
+ tokenType: data.token_type || 'Bearer',
277
+ expiresAt: new Date(Date.now() + data.expires_in * 1000),
278
+ refreshToken: data.refresh_token,
279
+ scope: data.scope,
280
+ };
281
+ }
282
+ /**
283
+ * Cleanup all refresh timers
284
+ */
285
+ cleanup() {
286
+ for (const timer of this.refreshTimers.values()) {
287
+ clearTimeout(timer);
288
+ }
289
+ this.refreshTimers.clear();
290
+ }
291
+ }
292
+ /**
293
+ * Create an OAuth token manager
294
+ */
295
+ export function createOAuthManager(options) {
296
+ return new OAuthTokenManager(options);
297
+ }
298
+ /**
299
+ * Common OAuth provider configurations
300
+ */
301
+ export const OAuthProviders = {
302
+ google: (clientId, clientSecret) => ({
303
+ name: 'google',
304
+ authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
305
+ tokenUrl: 'https://oauth2.googleapis.com/token',
306
+ revocationUrl: 'https://oauth2.googleapis.com/revoke',
307
+ clientId,
308
+ clientSecret,
309
+ defaultScopes: ['openid', 'email', 'profile'],
310
+ }),
311
+ github: (clientId, clientSecret) => ({
312
+ name: 'github',
313
+ authorizationUrl: 'https://github.com/login/oauth/authorize',
314
+ tokenUrl: 'https://github.com/login/oauth/access_token',
315
+ clientId,
316
+ clientSecret,
317
+ defaultScopes: ['read:user', 'user:email'],
318
+ }),
319
+ microsoft: (clientId, clientSecret) => ({
320
+ name: 'microsoft',
321
+ authorizationUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
322
+ tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
323
+ clientId,
324
+ clientSecret,
325
+ defaultScopes: ['openid', 'email', 'profile', 'offline_access'],
326
+ }),
327
+ slack: (clientId, clientSecret) => ({
328
+ name: 'slack',
329
+ authorizationUrl: 'https://slack.com/oauth/v2/authorize',
330
+ tokenUrl: 'https://slack.com/api/oauth.v2.access',
331
+ revocationUrl: 'https://slack.com/api/auth.revoke',
332
+ clientId,
333
+ clientSecret,
334
+ }),
335
+ notion: (clientId, clientSecret) => ({
336
+ name: 'notion',
337
+ authorizationUrl: 'https://api.notion.com/v1/oauth/authorize',
338
+ tokenUrl: 'https://api.notion.com/v1/oauth/token',
339
+ clientId,
340
+ clientSecret,
341
+ defaultScopes: [],
342
+ }),
343
+ };
344
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"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"}