@mondaydotcomorg/atp-protocol 0.17.14

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 ADDED
@@ -0,0 +1,241 @@
1
+ # @mondaydotcomorg/atp-protocol
2
+
3
+ Core protocol types, schemas, validation, and authentication for Agent Tool Protocol.
4
+
5
+ ## Overview
6
+
7
+ This package provides the foundational types and interfaces used across ATP, including JSON-RPC schemas, OAuth providers, authentication, and validation utilities.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install @mondaydotcomorg/atp-protocol
13
+ ```
14
+
15
+ ## Architecture
16
+
17
+ ```mermaid
18
+ graph TB
19
+ Types[types.ts] --> Schemas[schemas.ts]
20
+ Schemas --> Validation[validation.ts]
21
+ Types --> Auth[auth.ts]
22
+ Auth --> OAuth[oauth.ts]
23
+ Auth --> Providers[providers.ts]
24
+ ```
25
+
26
+ ## Core Components
27
+
28
+ ### Types
29
+
30
+ Defines all core ATP types including:
31
+
32
+ - **Protocol**: `AgentToolProtocolRequest`, `AgentToolProtocolResponse`, JSON-RPC messages
33
+ - **Execution**: `ExecutionConfig`, `ExecutionResult`, `ExecutionStatus`
34
+ - **Callbacks**: `CallbackType`, `ClientLLMHandler`, `ClientApprovalHandler`, `ClientEmbeddingHandler`
35
+ - **Tools**: `ClientTool`, `ToolMetadata`, `CustomFunctionDef`
36
+ - **Providers**: `CacheProvider`, `AuthProvider`, `AuditSink`
37
+
38
+ ```typescript
39
+ import type {
40
+ AgentToolProtocolRequest,
41
+ ExecutionResult,
42
+ ExecutionConfig,
43
+ CallbackType,
44
+ ClientLLMHandler,
45
+ } from '@mondaydotcomorg/atp-protocol';
46
+ ```
47
+
48
+ ### Schemas
49
+
50
+ Zod schemas for runtime validation:
51
+
52
+ ```typescript
53
+ import {
54
+ ExecutionConfigSchema,
55
+ ExecutionResultSchema,
56
+ SearchOptionsSchema,
57
+ } from '@mondaydotcomorg/atp-protocol';
58
+
59
+ // Validate execution config
60
+ const config = ExecutionConfigSchema.parse(userInput);
61
+ ```
62
+
63
+ ### Validation
64
+
65
+ Validation utilities:
66
+
67
+ ```typescript
68
+ import { validateExecutionConfig, validateToolDefinition } from '@mondaydotcomorg/atp-protocol';
69
+
70
+ const errors = validateExecutionConfig(config);
71
+ if (errors.length > 0) {
72
+ console.error('Validation failed:', errors);
73
+ }
74
+ ```
75
+
76
+ ### Authentication
77
+
78
+ Base interfaces for authentication:
79
+
80
+ ```typescript
81
+ import type { AuthProvider } from '@mondaydotcomorg/atp-protocol';
82
+
83
+ class CustomAuthProvider implements AuthProvider {
84
+ name = 'custom';
85
+
86
+ async getCredentials(key: string) {
87
+ // Return credentials for the given key
88
+ }
89
+ }
90
+ ```
91
+
92
+ ### OAuth
93
+
94
+ OAuth provider interfaces and utilities:
95
+
96
+ ```typescript
97
+ import type { OAuthProvider, OAuthScopeChecker } from '@mondaydotcomorg/atp-protocol';
98
+
99
+ // Implement OAuth provider
100
+ class GoogleOAuthProvider implements OAuthProvider {
101
+ name = 'google';
102
+
103
+ async generateAuthUrl(config) {
104
+ // Generate OAuth URL
105
+ }
106
+
107
+ async handleCallback(code, config) {
108
+ // Exchange code for tokens
109
+ }
110
+ }
111
+ ```
112
+
113
+ ## Key Types
114
+
115
+ ### Execution
116
+
117
+ ```typescript
118
+ interface ExecutionConfig {
119
+ code: string;
120
+ apiKey?: string;
121
+ timeout?: number;
122
+ pausable?: boolean;
123
+ resumeFromState?: ResumeState;
124
+ context?: Record<string, unknown>;
125
+ }
126
+
127
+ interface ExecutionResult {
128
+ status: ExecutionStatus;
129
+ result?: unknown;
130
+ error?: string;
131
+ pauseReason?: string;
132
+ executionId?: string;
133
+ }
134
+
135
+ enum ExecutionStatus {
136
+ SUCCESS = 'success',
137
+ ERROR = 'error',
138
+ PAUSED = 'paused',
139
+ TIMEOUT = 'timeout',
140
+ }
141
+ ```
142
+
143
+ ### Callbacks
144
+
145
+ ```typescript
146
+ enum CallbackType {
147
+ LLM = 'llm',
148
+ APPROVAL = 'approval',
149
+ EMBEDDING = 'embedding',
150
+ TOOL = 'tool',
151
+ }
152
+
153
+ interface ClientServices {
154
+ hasLLM: boolean;
155
+ hasApproval: boolean;
156
+ hasEmbedding: boolean;
157
+ hasTools: boolean;
158
+ toolNames?: string[];
159
+ }
160
+ ```
161
+
162
+ ### Providers
163
+
164
+ ```typescript
165
+ interface CacheProvider {
166
+ name: string;
167
+ get<T>(key: string): Promise<T | null>;
168
+ set(key: string, value: unknown, ttl?: number): Promise<void>;
169
+ delete(key: string): Promise<void>;
170
+ has(key: string): Promise<boolean>;
171
+ }
172
+
173
+ interface AuthProvider {
174
+ name: string;
175
+ getCredentials(key: string): Promise<UserCredentialData | null>;
176
+ setCredentials(key: string, credentials: UserCredentialData): Promise<void>;
177
+ deleteCredentials(key: string): Promise<void>;
178
+ }
179
+
180
+ interface AuditSink {
181
+ write(event: AuditEvent): Promise<void>;
182
+ flush?(): Promise<void>;
183
+ }
184
+ ```
185
+
186
+ ## Exports
187
+
188
+ ```typescript
189
+ // Types
190
+ export * from './types';
191
+
192
+ // Schemas (Zod)
193
+ export * from './schemas';
194
+
195
+ // Validation utilities
196
+ export * from './validation';
197
+
198
+ // Auth interfaces
199
+ export * from './auth';
200
+
201
+ // OAuth interfaces
202
+ export * from './oauth';
203
+
204
+ // Provider interfaces
205
+ export * from './providers';
206
+ ```
207
+
208
+ ## Usage Example
209
+
210
+ ```typescript
211
+ import {
212
+ type AgentToolProtocolRequest,
213
+ type ExecutionConfig,
214
+ ExecutionConfigSchema,
215
+ ExecutionStatus,
216
+ CallbackType,
217
+ } from '@mondaydotcomorg/atp-protocol';
218
+
219
+ // Create execution config with validation
220
+ const config: ExecutionConfig = {
221
+ code: 'const result = await atp.llm.call({ prompt: "Hello" });',
222
+ timeout: 30000,
223
+ pausable: true,
224
+ };
225
+
226
+ // Validate
227
+ const validated = ExecutionConfigSchema.parse(config);
228
+
229
+ // Check status
230
+ if (result.status === ExecutionStatus.PAUSED) {
231
+ console.log('Execution paused for callback');
232
+ }
233
+ ```
234
+
235
+ ## TypeScript Support
236
+
237
+ Full TypeScript definitions included with strict type checking.
238
+
239
+ ## License
240
+
241
+ MIT
package/dist/auth.d.ts ADDED
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Authentication and credential management types for Agent Tool Protocol
3
+ */
4
+ /**
5
+ * Supported authentication schemes
6
+ */
7
+ export type AuthScheme = 'apiKey' | 'bearer' | 'basic' | 'oauth2' | 'custom' | 'composite';
8
+ /**
9
+ * Base authentication configuration
10
+ */
11
+ export interface BaseAuthConfig {
12
+ scheme: AuthScheme;
13
+ /** Environment variable name to read credentials from */
14
+ envVar?: string;
15
+ /** Direct credential value (not recommended for production) */
16
+ value?: string;
17
+ /**
18
+ * Credential source: 'server' for server-level env vars (default), 'user' for user-scoped OAuth
19
+ */
20
+ source?: 'server' | 'user';
21
+ /**
22
+ * OAuth provider name for user-scoped credentials (e.g., 'github', 'google')
23
+ * Required when source='user'. Used to look up user's OAuth token from AuthProvider.
24
+ * Note: This is different from the 'provider' field which is for runtime credential providers.
25
+ */
26
+ oauthProvider?: string;
27
+ /** Runtime credential provider function name */
28
+ provider?: string;
29
+ }
30
+ /**
31
+ * API Key authentication (in header or query param)
32
+ */
33
+ export interface APIKeyAuthConfig extends BaseAuthConfig {
34
+ scheme: 'apiKey';
35
+ /** Where to send the API key */
36
+ in: 'header' | 'query';
37
+ /** Parameter/header name */
38
+ name: string;
39
+ }
40
+ /**
41
+ * Bearer token authentication
42
+ */
43
+ export interface BearerAuthConfig extends BaseAuthConfig {
44
+ scheme: 'bearer';
45
+ /** Optional bearer format (e.g., 'JWT') */
46
+ bearerFormat?: string;
47
+ }
48
+ /**
49
+ * HTTP Basic authentication
50
+ */
51
+ export interface BasicAuthConfig extends BaseAuthConfig {
52
+ scheme: 'basic';
53
+ /** Username (can use envVar for dynamic value) */
54
+ username?: string;
55
+ /** Username environment variable */
56
+ usernameEnvVar?: string;
57
+ /** Password environment variable */
58
+ passwordEnvVar?: string;
59
+ }
60
+ /**
61
+ * OAuth2 authentication with automatic token refresh
62
+ */
63
+ export interface OAuth2AuthConfig extends BaseAuthConfig {
64
+ scheme: 'oauth2';
65
+ /** OAuth2 flow type */
66
+ flow: 'clientCredentials' | 'authorizationCode' | 'implicit' | 'password';
67
+ /** Token endpoint URL */
68
+ tokenUrl: string;
69
+ /** Authorization endpoint (for authorizationCode/implicit) */
70
+ authorizationUrl?: string;
71
+ /** Client ID */
72
+ clientId?: string;
73
+ /** Client ID environment variable */
74
+ clientIdEnvVar?: string;
75
+ /** Client secret environment variable */
76
+ clientSecretEnvVar?: string;
77
+ /** Scopes required */
78
+ scopes?: string[];
79
+ /** Refresh token environment variable (for token refresh) */
80
+ refreshTokenEnvVar?: string;
81
+ }
82
+ /**
83
+ * Custom authentication with arbitrary headers
84
+ */
85
+ export interface CustomAuthConfig extends BaseAuthConfig {
86
+ scheme: 'custom';
87
+ /** Custom headers to inject */
88
+ headers: Record<string, string>;
89
+ /** Environment variables to use for header values */
90
+ headerEnvVars?: Record<string, string>;
91
+ /** Query parameters to inject */
92
+ queryParams?: Record<string, string>;
93
+ /** Environment variables to use for query parameter values */
94
+ queryParamEnvVars?: Record<string, string>;
95
+ }
96
+ /**
97
+ * Composite authentication - combines multiple auth mechanisms
98
+ * Useful for APIs that require multiple credentials (e.g., projectId + apiKey + secret)
99
+ */
100
+ export interface CompositeAuthConfig extends BaseAuthConfig {
101
+ scheme: 'composite';
102
+ /**
103
+ * Multiple credentials to combine
104
+ * Example: { projectId: { envVar: 'PROJECT_ID' }, apiKey: { envVar: 'API_KEY' }, secret: { envVar: 'API_SECRET' } }
105
+ */
106
+ credentials: Record<string, CredentialConfig>;
107
+ /** How to inject credentials: 'header', 'query', or 'both' */
108
+ injectAs?: 'header' | 'query' | 'both';
109
+ }
110
+ /**
111
+ * Individual credential configuration for composite auth
112
+ */
113
+ export interface CredentialConfig {
114
+ /** Environment variable to read from */
115
+ envVar?: string;
116
+ /** Direct value (not recommended) */
117
+ value?: string;
118
+ /** Header name if injecting as header */
119
+ headerName?: string;
120
+ /** Query param name if injecting as query */
121
+ queryParamName?: string;
122
+ /** Whether this credential is required */
123
+ required?: boolean;
124
+ }
125
+ /**
126
+ * Union type of all auth configurations
127
+ */
128
+ export type AuthConfig = APIKeyAuthConfig | BearerAuthConfig | BasicAuthConfig | OAuth2AuthConfig | CustomAuthConfig | CompositeAuthConfig;
129
+ /**
130
+ * Runtime credential provider
131
+ * Allows dynamic credential resolution at runtime
132
+ */
133
+ export interface CredentialProvider {
134
+ name: string;
135
+ /** Resolves credentials dynamically */
136
+ resolve: () => Promise<Credentials> | Credentials;
137
+ }
138
+ /**
139
+ * Resolved credentials ready to be injected into requests
140
+ */
141
+ export interface Credentials {
142
+ headers?: Record<string, string>;
143
+ queryParams?: Record<string, string>;
144
+ }
145
+ /**
146
+ * Credential resolver - resolves auth config to actual credentials
147
+ */
148
+ export declare class CredentialResolver {
149
+ private providers;
150
+ /**
151
+ * Registers a runtime credential provider
152
+ */
153
+ registerProvider(provider: CredentialProvider): void;
154
+ /**
155
+ * Resolves auth configuration to credentials
156
+ */
157
+ resolve(authConfig: AuthConfig): Promise<Credentials>;
158
+ private resolveAPIKey;
159
+ private resolveBearer;
160
+ private resolveBasic;
161
+ private resolveOAuth2;
162
+ private resolveCustom;
163
+ private resolveComposite;
164
+ /**
165
+ * Gets credential value from config (env var or direct value)
166
+ */
167
+ private getValue;
168
+ /**
169
+ * Fetches OAuth2 token using client credentials flow
170
+ */
171
+ private fetchOAuth2Token;
172
+ }
173
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACvD,MAAM,EAAE,QAAQ,CAAC;IACjB,gCAAgC;IAChC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACvD,MAAM,EAAE,QAAQ,CAAC;IACjB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACvD,MAAM,EAAE,QAAQ,CAAC;IACjB,uBAAuB;IACvB,IAAI,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,UAAU,GAAG,UAAU,CAAC;IAC1E,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACvD,MAAM,EAAE,QAAQ,CAAC;IACjB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IAC1D,MAAM,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,gBAAgB,GAChB,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,SAAS,CAA8C;IAE/D;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIpD;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA2B3D,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;YAkBN,aAAa;IAoC3B,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;YACW,gBAAgB;CA+B9B"}
package/dist/auth.js ADDED
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Authentication and credential management types for Agent Tool Protocol
3
+ */
4
+ /**
5
+ * Credential resolver - resolves auth config to actual credentials
6
+ */
7
+ export class CredentialResolver {
8
+ providers = new Map();
9
+ /**
10
+ * Registers a runtime credential provider
11
+ */
12
+ registerProvider(provider) {
13
+ this.providers.set(provider.name, provider);
14
+ }
15
+ /**
16
+ * Resolves auth configuration to credentials
17
+ */
18
+ async resolve(authConfig) {
19
+ if (authConfig.provider) {
20
+ const provider = this.providers.get(authConfig.provider);
21
+ if (!provider) {
22
+ throw new Error(`Credential provider '${authConfig.provider}' not found`);
23
+ }
24
+ return await provider.resolve();
25
+ }
26
+ switch (authConfig.scheme) {
27
+ case 'apiKey':
28
+ return this.resolveAPIKey(authConfig);
29
+ case 'bearer':
30
+ return this.resolveBearer(authConfig);
31
+ case 'basic':
32
+ return this.resolveBasic(authConfig);
33
+ case 'oauth2':
34
+ return this.resolveOAuth2(authConfig);
35
+ case 'custom':
36
+ return this.resolveCustom(authConfig);
37
+ case 'composite':
38
+ return this.resolveComposite(authConfig);
39
+ default:
40
+ throw new Error(`Unsupported auth scheme: ${authConfig.scheme}`);
41
+ }
42
+ }
43
+ resolveAPIKey(config) {
44
+ const value = this.getValue(config);
45
+ if (!value) {
46
+ throw new Error(`API key not provided for '${config.name}'`);
47
+ }
48
+ if (config.in === 'header') {
49
+ return { headers: { [config.name]: value } };
50
+ }
51
+ else {
52
+ return { queryParams: { [config.name]: value } };
53
+ }
54
+ }
55
+ resolveBearer(config) {
56
+ const token = this.getValue(config);
57
+ if (!token) {
58
+ throw new Error('Bearer token not provided');
59
+ }
60
+ return {
61
+ headers: {
62
+ Authorization: `Bearer ${token}`,
63
+ },
64
+ };
65
+ }
66
+ resolveBasic(config) {
67
+ const username = config.usernameEnvVar ? process.env[config.usernameEnvVar] : config.username;
68
+ const password = config.passwordEnvVar
69
+ ? process.env[config.passwordEnvVar]
70
+ : this.getValue(config);
71
+ if (!username || !password) {
72
+ throw new Error('Basic auth username and password not provided');
73
+ }
74
+ const credentials = Buffer.from(`${username}:${password}`).toString('base64');
75
+ return {
76
+ headers: {
77
+ Authorization: `Basic ${credentials}`,
78
+ },
79
+ };
80
+ }
81
+ async resolveOAuth2(config) {
82
+ const clientId = config.clientIdEnvVar ? process.env[config.clientIdEnvVar] : config.clientId;
83
+ const clientSecret = config.clientSecretEnvVar
84
+ ? process.env[config.clientSecretEnvVar]
85
+ : undefined;
86
+ if (!clientId || !clientSecret) {
87
+ throw new Error('OAuth2 client credentials not provided');
88
+ }
89
+ if (config.flow === 'clientCredentials') {
90
+ const token = await this.fetchOAuth2Token(config.tokenUrl, clientId, clientSecret, config.scopes);
91
+ return {
92
+ headers: {
93
+ Authorization: `Bearer ${token}`,
94
+ },
95
+ };
96
+ }
97
+ const token = this.getValue(config);
98
+ if (token) {
99
+ return {
100
+ headers: {
101
+ Authorization: `Bearer ${token}`,
102
+ },
103
+ };
104
+ }
105
+ throw new Error(`OAuth2 flow '${config.flow}' requires manual token setup`);
106
+ }
107
+ resolveCustom(config) {
108
+ const headers = {};
109
+ const queryParams = {};
110
+ Object.assign(headers, config.headers);
111
+ if (config.headerEnvVars) {
112
+ for (const [headerName, envVar] of Object.entries(config.headerEnvVars)) {
113
+ const value = process.env[envVar];
114
+ if (value) {
115
+ headers[headerName] = value;
116
+ }
117
+ }
118
+ }
119
+ if (config.queryParams) {
120
+ Object.assign(queryParams, config.queryParams);
121
+ }
122
+ if (config.queryParamEnvVars) {
123
+ for (const [paramName, envVar] of Object.entries(config.queryParamEnvVars)) {
124
+ const value = process.env[envVar];
125
+ if (value) {
126
+ queryParams[paramName] = value;
127
+ }
128
+ }
129
+ }
130
+ return {
131
+ headers: Object.keys(headers).length > 0 ? headers : undefined,
132
+ queryParams: Object.keys(queryParams).length > 0 ? queryParams : undefined,
133
+ };
134
+ }
135
+ resolveComposite(config) {
136
+ const headers = {};
137
+ const queryParams = {};
138
+ for (const [credName, credConfig] of Object.entries(config.credentials)) {
139
+ const value = credConfig.envVar ? process.env[credConfig.envVar] : credConfig.value;
140
+ if (!value) {
141
+ if (credConfig.required !== false) {
142
+ throw new Error(`Required credential '${credName}' not provided`);
143
+ }
144
+ continue;
145
+ }
146
+ const injectAs = config.injectAs || 'header';
147
+ if ((injectAs === 'header' || injectAs === 'both') && credConfig.headerName) {
148
+ headers[credConfig.headerName] = value;
149
+ }
150
+ if ((injectAs === 'query' || injectAs === 'both') && credConfig.queryParamName) {
151
+ queryParams[credConfig.queryParamName] = value;
152
+ }
153
+ if (!credConfig.headerName && !credConfig.queryParamName) {
154
+ if (injectAs === 'query' || injectAs === 'both') {
155
+ queryParams[credName] = value;
156
+ }
157
+ else {
158
+ headers[`X-${credName}`] = value;
159
+ }
160
+ }
161
+ }
162
+ return {
163
+ headers: Object.keys(headers).length > 0 ? headers : undefined,
164
+ queryParams: Object.keys(queryParams).length > 0 ? queryParams : undefined,
165
+ };
166
+ }
167
+ /**
168
+ * Gets credential value from config (env var or direct value)
169
+ */
170
+ getValue(config) {
171
+ if (config.envVar) {
172
+ return process.env[config.envVar];
173
+ }
174
+ return config.value;
175
+ }
176
+ /**
177
+ * Fetches OAuth2 token using client credentials flow
178
+ */
179
+ async fetchOAuth2Token(tokenUrl, clientId, clientSecret, scopes) {
180
+ const params = new URLSearchParams({
181
+ grant_type: 'client_credentials',
182
+ client_id: clientId,
183
+ client_secret: clientSecret,
184
+ });
185
+ if (scopes && scopes.length > 0) {
186
+ params.append('scope', scopes.join(' '));
187
+ }
188
+ const response = await fetch(tokenUrl, {
189
+ method: 'POST',
190
+ headers: {
191
+ 'Content-Type': 'application/x-www-form-urlencoded',
192
+ },
193
+ body: params.toString(),
194
+ });
195
+ if (!response.ok) {
196
+ throw new Error(`OAuth2 token fetch failed: ${response.statusText}`);
197
+ }
198
+ const data = (await response.json());
199
+ return data.access_token;
200
+ }
201
+ }
202
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './types.js';
2
+ export * from './schemas.js';
3
+ export * from './validation.js';
4
+ export * from './auth.js';
5
+ export * from './providers.js';
6
+ export * from './oauth.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from './types.js';
2
+ export * from './schemas.js';
3
+ export * from './validation.js';
4
+ export * from './auth.js';
5
+ export * from './providers.js';
6
+ export * from './oauth.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}