@mondaydotcomorg/atp-client 0.23.0 → 0.23.1
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/client.d.ts +0 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/core/base-session.d.ts +28 -6
- package/dist/core/base-session.d.ts.map +1 -1
- package/dist/core/base-session.js +20 -4
- package/dist/core/base-session.js.map +1 -1
- package/dist/core/in-process-session.d.ts +0 -5
- package/dist/core/in-process-session.d.ts.map +1 -1
- package/dist/core/in-process-session.js +2 -12
- package/dist/core/in-process-session.js.map +1 -1
- package/dist/core/index.cjs +29 -44
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +29 -44
- package/dist/core/index.js.map +1 -1
- package/dist/core/session.d.ts +0 -4
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +2 -25
- package/dist/core/session.js.map +1 -1
- package/dist/index.cjs +29 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -44
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +0 -1
- package/src/core/base-session.ts +34 -7
- package/src/core/in-process-session.ts +3 -15
- package/src/core/session.ts +3 -30
package/dist/core/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/base-session.ts","../../src/core/session.ts","../../src/core/in-process-session.ts","../../src/core/api-operations.ts","../../src/errors.ts","../../src/core/provenance-registry.ts","../../src/core/execution-operations.ts","../../src/core/service-providers.ts"],"names":["BaseSession","clientId","clientToken","tokenExpiresAt","tokenRotateAt","initPromise","refreshPromise","tokenRefreshConfig","enabled","bufferMs","constructor","getClientId","Error","setTokenRefreshConfig","config","needsTokenRefresh","now","Date","undefined","refreshTokenIfNeeded","doRefreshToken","updateTokenState","credentials","token","expiresAt","shouldSkipRefreshForUrl","url","includes","ClientSession","baseUrl","customHeaders","hooks","headers","init","clientInfo","tools","services","initResult","body","JSON","stringify","prepareHeaders","response","fetch","method","ok","status","statusText","data","json","ensureInitialized","getHeaders","getBaseUrl","Authorization","errorText","text","preRequest","result","currentHeaders","abort","abortReason","InProcessSession","server","initialized","start","ctx","createContext","path","handleInit","handleTokenRefresh","_method","_body","getDefinitions","options","query","apiGroups","join","getRuntimeDefinitions","apis","length","getServerInfo","getInfo","search","handleSearch","explore","handleExplore","execute","code","handleExecute","resume","executionId","callbackResult","handleResume","resumeWithBatchResults","batchResults","results","noopLogger","debug","info","warn","error","logger","responseBody","throw","message","assert","condition","set","APIOperations","session","inProcessSession","apiDefinitions","connect","typescript","serverVersion","version","capabilities","params","URLSearchParams","getTypeDefinitions","searchAPI","exploreAPI","toString","ClientCallbackError","name","ProvenanceTokenRegistry","cache","Map","maxSize","ttl","sequenceCounter","ttlHours","add","evictExpired","size","evictLRU","addedAt","sequence","getRecentTokens","maxCount","expiredTokens","entries","Array","from","values","filter","entry","split","push","payload","parse","Buffer","sort","a","b","slice","delete","map","e","clear","toDelete","oldestToken","oldestSequence","Infinity","ExecutionOperations","serviceProviders","tokenRegistry","lastExecutionConfig","executeStream","onEvent","onProgress","Promise","resolve","reject","fetchImpl","require","then","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","lines","pop","i","line","startsWith","eventType","substring","trim","j","dataLine","dataStr","event","type","timestamp","fraction","log","catch","hints","detectedClientServices","hasLLM","getLLM","hasApproval","getApproval","hasEmbedding","getEmbedding","hasTools","executionConfig","clientServices","provenanceHints","provenanceTokens","ExecutionStatus","PAUSED","needsCallbacks","handleBatchCallbacksAndResume","needsCallback","handlePauseAndResume","pausedResult","missingServiceIds","Set","cb","hasServiceForCallback","id","missingServices","has","explicitlyRequestedMissing","wasServiceExplicitlyRequested","unexpectedMissing","errorMessage","operation","existingCallbacks","existingResults","all","handleCallback","allResults","__error","find","r","String","allErrorResults","callbackCount","wasExplicitlyRequested","callbackType","CallbackType","LLM","APPROVAL","EMBEDDING","TOOL","LLMOperation","CALL","EXTRACT","CLASSIFY","EmbeddingOperation","EMBED","SEARCH","ServiceProviders","providers","toolHandlers","tool","handler","provideLLM","llm","provideApproval","approval","provideEmbedding","embedding","provideTools","getTools","getToolDefinitions","definition","hasAnyServices","calls","call","prompt","extract","schema","classify","categories","contextWithExecutionId","context","request","embed","queryEmbedding","similarity","text1","text2","ToolOperation","toolName","get","input"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { TokenRefreshConfig } from './types.js';\n\n/**\n * Token credentials returned from init and refresh operations\n */\nexport interface TokenCredentials {\n\tclientId: string;\n\ttoken: string;\n\texpiresAt: number;\n\ttokenRotateAt: number;\n}\n\n/**\n * Session interface for ATP client operations\n */\nexport interface ISession {\n\tinit(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials>;\n\tgetClientId(): string;\n\tensureInitialized(): Promise<void>;\n\tgetHeaders(): Record<string, string>;\n\tgetBaseUrl(): string;\n\tprepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\trefreshTokenIfNeeded(): Promise<void>;\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void;\n}\n\n/**\n * Base session class with shared token management logic.\n * Subclasses implement the transport-specific operations (HTTP vs in-process).\n */\nexport abstract class BaseSession implements ISession {\n\tprotected clientId?: string;\n\tprotected clientToken?: string;\n\tprotected tokenExpiresAt?: number;\n\tprotected tokenRotateAt?: number;\n\tprotected initPromise?: Promise<void>;\n\tprotected refreshPromise?: Promise<void>;\n\tprotected tokenRefreshConfig: TokenRefreshConfig = {\n\t\tenabled: true,\n\t\tbufferMs: 1000,\n\t};\n\n\tconstructor(tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tif (tokenRefreshConfig) {\n\t\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...tokenRefreshConfig };\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the session - must be implemented by subclass\n\t */\n\tabstract init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials>;\n\n\t/**\n\t * Get headers for requests - must be implemented by subclass\n\t */\n\tabstract getHeaders(): Record<string, string>;\n\n\t/**\n\t * Get base URL - must be implemented by subclass\n\t */\n\tabstract getBaseUrl(): string;\n\n\t/**\n\t * Ensure client is initialized - must be implemented by subclass\n\t */\n\tabstract ensureInitialized(): Promise<void>;\n\n\t/**\n\t * Prepare headers for a request - must be implemented by subclass\n\t */\n\tabstract prepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\n\t/**\n\t * Perform the actual token refresh - must be implemented by subclass\n\t */\n\tprotected abstract doRefreshToken(): Promise<void>;\n\n\t/**\n\t * Gets the unique client ID.\n\t */\n\tgetClientId(): string {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t\treturn this.clientId;\n\t}\n\n\t/**\n\t * Configure automatic token refresh behavior\n\t */\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void {\n\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...config };\n\t}\n\n\t/**\n\t * Check if token needs refresh based on current time and config\n\t */\n\tprotected needsTokenRefresh(): boolean {\n\t\tconst now = Date.now();\n\t\treturn (\n\t\t\t(this.tokenRotateAt !== undefined && now >= this.tokenRotateAt - this.tokenRefreshConfig.bufferMs) ||\n\t\t\t(this.tokenExpiresAt !== undefined && now >= this.tokenExpiresAt)\n\t\t);\n\t}\n\n\t/**\n\t * Refresh token if needed (past rotateAt time or expired).\n\t * This is called automatically before requests when autoRefresh is enabled.\n\t * Uses a shared promise to prevent concurrent refresh requests.\n\t *\n\t * Note: Even expired tokens can be refreshed as long as the server session\n\t * still exists. The server accepts expired JWTs for the refresh endpoint.\n\t */\n\tasync refreshTokenIfNeeded(): Promise<void> {\n\t\t// Skip if auto-refresh is disabled\n\t\tif (!this.tokenRefreshConfig.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if not initialized\n\t\tif (!this.clientId || !this.clientToken) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if we need to refresh\n\t\tif (!this.needsTokenRefresh()) {\n\t\t\treturn; // Token is still fresh\n\t\t}\n\n\t\t// Prevent concurrent refresh requests\n\t\tif (this.refreshPromise) {\n\t\t\tawait this.refreshPromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refreshPromise = this.doRefreshToken();\n\n\t\ttry {\n\t\t\tawait this.refreshPromise;\n\t\t} finally {\n\t\t\tthis.refreshPromise = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Update token state after successful init or refresh\n\t */\n\tprotected updateTokenState(credentials: TokenCredentials): void {\n\t\tthis.clientId = credentials.clientId;\n\t\tthis.clientToken = credentials.token;\n\t\tthis.tokenExpiresAt = credentials.expiresAt;\n\t\tthis.tokenRotateAt = credentials.tokenRotateAt;\n\t}\n\n\t/**\n\t * Check if URL should skip token refresh (to avoid infinite recursion)\n\t */\n\tprotected shouldSkipRefreshForUrl(url: string): boolean {\n\t\treturn url.includes('/api/token/refresh') || url.includes('/api/init');\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { ClientHooks, TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * HTTP-based session for connecting to remote ATP servers.\n */\nexport class ClientSession extends BaseSession {\n\tprivate baseUrl: string;\n\tprivate customHeaders: Record<string, string>;\n\tprivate hooks?: ClientHooks;\n\n\tconstructor(\n\t\tbaseUrl: string,\n\t\theaders?: Record<string, string>,\n\t\thooks?: ClientHooks,\n\t\ttokenRefreshConfig?: Partial<TokenRefreshConfig>\n\t) {\n\t\tsuper(tokenRefreshConfig);\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.customHeaders = headers || {};\n\t\tthis.hooks = hooks;\n\t}\n\n\t/**\n\t * Initializes the client session with the server.\n\t * This MUST be called before any other operations.\n\t * The server generates and returns a unique client ID and token.\n\t */\n\tasync init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials> {\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t\treturn {\n\t\t\t\tclientId: this.clientId!,\n\t\t\t\ttoken: this.clientToken!,\n\t\t\t\texpiresAt: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\n\n\t\tthis.initPromise = (async () => {\n\t\t\tconst url = `${this.baseUrl}/api/init`;\n\t\t\tconst body = JSON.stringify({\n\t\t\t\tclientInfo,\n\t\t\t\ttools: tools || [],\n\t\t\t\tservices,\n\t\t\t});\n\n\t\t\tconst headers = await this.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`Client initialization failed: ${response.status} ${response.statusText}`);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as TokenCredentials;\n\t\t\tthis.updateTokenState(data);\n\t\t\tinitResult = data;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\n\t}\n\n\t/**\n\t * Ensures the client is initialized before making requests.\n\t */\n\tasync ensureInitialized(): Promise<void> {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates HTTP headers for requests.\n\t */\n\tgetHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...this.customHeaders,\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['X-Client-ID'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['Authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tgetBaseUrl(): string {\n\t\treturn this.baseUrl;\n\t}\n\n\t/**\n\t * Perform the actual token refresh via HTTP\n\t */\n\tprotected async doRefreshToken(): Promise<void> {\n\t\tconst url = `${this.baseUrl}/api/token/refresh`;\n\t\tconst body = JSON.stringify({ clientId: this.clientId });\n\n\t\t// Use current token for auth, but don't recursively try to refresh\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...this.customHeaders,\n\t\t\t'X-Client-ID': this.clientId!,\n\t\t\tAuthorization: `Bearer ${this.clientToken}`,\n\t\t};\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconst errorText = await response.text();\n\t\t\tthrow new Error(`Token refresh failed: ${response.status} ${response.statusText} - ${errorText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as TokenCredentials;\n\t\tthis.updateTokenState(data);\n\t}\n\n\t/**\n\t * Prepares headers for a request, refreshing token if needed and calling preRequest hook if configured\n\t */\n\tasync prepareHeaders(\n\t\tmethod: string,\n\t\turl: string,\n\t\tbody?: unknown\n\t): Promise<Record<string, string>> {\n\t\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\n\t\tlet headers = this.getHeaders();\n\n\t\tif (this.hooks?.preRequest) {\n\t\t\tconst result = await this.hooks.preRequest({\n\t\t\t\turl,\n\t\t\t\tmethod,\n\t\t\t\tcurrentHeaders: headers,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (result.abort) {\n\t\t\t\tthrow new Error(result.abortReason || 'Request aborted by preRequest hook');\n\t\t\t}\n\n\t\t\tif (result.headers) {\n\t\t\t\theaders = result.headers;\n\t\t\t}\n\t\t}\n\n\t\treturn headers;\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * Server interface for in-process communication\n */\nexport interface InProcessServer {\n\tstart(): Promise<void>;\n\thandleInit(ctx: InProcessRequestContext): Promise<unknown>;\n\tgetDefinitions(ctx?: InProcessRequestContext): Promise<unknown>;\n\tgetRuntimeDefinitions(ctx?: InProcessRequestContext): Promise<string>;\n\tgetInfo(): unknown;\n\thandleSearch(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleExplore(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleExecute(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleResume(ctx: InProcessRequestContext, executionId: string): Promise<unknown>;\n\thandleTokenRefresh(ctx: InProcessRequestContext): Promise<unknown>;\n}\n\n/**\n * Request context for in-process server calls\n */\nexport interface InProcessRequestContext {\n\tmethod: string;\n\tpath: string;\n\tquery: Record<string, string>;\n\theaders: Record<string, string>;\n\tbody: unknown;\n\tclientId?: string;\n\tclientToken?: string;\n\tuserId?: string;\n\tuser?: unknown;\n\texecutionId?: string;\n\tcode?: string;\n\tvalidation?: unknown;\n\tresult?: unknown;\n\terror?: Error;\n\tlogger: { debug: () => void; info: () => void; warn: () => void; error: () => void };\n\tstatus: number;\n\tresponseBody: unknown;\n\tthrow(status: number, message: string): never;\n\tassert(condition: boolean, message: string): asserts condition;\n\tset(header: string, value: string): void;\n}\n\n/**\n * In-process session for direct server communication without HTTP.\n * Used when the client and server run in the same process.\n */\nexport class InProcessSession extends BaseSession {\n\tprivate server: InProcessServer;\n\tprivate initialized: boolean = false;\n\n\tconstructor(server: InProcessServer, tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tsuper(tokenRefreshConfig);\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initializes the client session with the in-process server.\n\t */\n\tasync init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials> {\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t\treturn {\n\t\t\t\tclientId: this.clientId!,\n\t\t\t\ttoken: this.clientToken!,\n\t\t\t\texpiresAt: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\n\n\t\tthis.initPromise = (async () => {\n\t\t\tawait this.server.start();\n\n\t\t\tconst ctx = await this.createContext({\n\t\t\t\tmethod: 'POST',\n\t\t\t\tpath: '/api/init',\n\t\t\t\tbody: {\n\t\t\t\t\tclientInfo,\n\t\t\t\t\ttools: tools || [],\n\t\t\t\t\tservices,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst result = (await this.server.handleInit(ctx)) as TokenCredentials;\n\t\t\tthis.updateTokenState(result);\n\t\t\tthis.initialized = true;\n\t\t\tinitResult = result;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\n\t}\n\n\t/**\n\t * Ensures the client is initialized before making requests.\n\t */\n\tasync ensureInitialized(): Promise<void> {\n\t\tif (!this.initialized) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates headers for in-process requests (lowercase for consistency with Node.js)\n\t */\n\tgetHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t'content-type': 'application/json',\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['x-client-id'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tgetBaseUrl(): string {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Perform the actual token refresh via in-process server call\n\t */\n\tprotected async doRefreshToken(): Promise<void> {\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/token/refresh',\n\t\t\tbody: { clientId: this.clientId },\n\t\t});\n\n\t\tconst result = (await this.server.handleTokenRefresh(ctx)) as TokenCredentials;\n\t\tthis.updateTokenState(result);\n\t}\n\n\t/**\n\t * Prepares headers for a request, refreshing token if needed\n\t */\n\tasync prepareHeaders(\n\t\t_method: string,\n\t\turl: string,\n\t\t_body?: unknown\n\t): Promise<Record<string, string>> {\n\t\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\t\treturn this.getHeaders();\n\t}\n\n\t// ============================================\n\t// In-process specific methods for direct server calls\n\t// ============================================\n\n\tasync getDefinitions(options?: { apiGroups?: string[] }): Promise<{\n\t\ttypescript: string;\n\t\tversion: string;\n\t\tapiGroups: string[];\n\t}> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'GET',\n\t\t\tpath: '/api/definitions',\n\t\t\tquery: options?.apiGroups ? { apiGroups: options.apiGroups.join(',') } : {},\n\t\t});\n\n\t\treturn (await this.server.getDefinitions(ctx)) as {\n\t\t\ttypescript: string;\n\t\t\tversion: string;\n\t\t\tapiGroups: string[];\n\t\t};\n\t}\n\n\tasync getRuntimeDefinitions(options?: { apis?: string[] }): Promise<string> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'GET',\n\t\t\tpath: '/api/runtime',\n\t\t\tquery: options?.apis?.length ? { apis: options.apis.join(',') } : {},\n\t\t});\n\n\t\treturn await this.server.getRuntimeDefinitions(ctx);\n\t}\n\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\tawait this.ensureInitialized();\n\t\treturn this.server.getInfo() as {\n\t\t\tversion: string;\n\t\t\tcapabilities: Record<string, boolean>;\n\t\t};\n\t}\n\n\tasync search(query: string, options?: Record<string, unknown>): Promise<{ results: unknown[] }> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/search',\n\t\t\tbody: { query, ...options },\n\t\t});\n\n\t\treturn (await this.server.handleSearch(ctx)) as { results: unknown[] };\n\t}\n\n\tasync explore(path: string, options?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/explore',\n\t\t\tbody: { path, ...options },\n\t\t});\n\n\t\treturn await this.server.handleExplore(ctx);\n\t}\n\n\tasync execute(code: string, config?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/execute',\n\t\t\tbody: { code, config },\n\t\t});\n\n\t\treturn await this.server.handleExecute(ctx);\n\t}\n\n\tasync resume(executionId: string, callbackResult: unknown): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: `/api/resume/${executionId}`,\n\t\t\tbody: { result: callbackResult },\n\t\t});\n\n\t\treturn await this.server.handleResume(ctx, executionId);\n\t}\n\n\tasync resumeWithBatchResults(\n\t\texecutionId: string,\n\t\tbatchResults: Array<{ id: string; result: unknown }>\n\t): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: `/api/resume/${executionId}`,\n\t\t\tbody: { results: batchResults },\n\t\t});\n\n\t\treturn await this.server.handleResume(ctx, executionId);\n\t}\n\n\t/**\n\t * Creates a request context for in-process server calls\n\t */\n\tprivate async createContext(options: {\n\t\tmethod: string;\n\t\tpath: string;\n\t\tquery?: Record<string, string>;\n\t\tbody?: unknown;\n\t}): Promise<InProcessRequestContext> {\n\t\tconst noopLogger = {\n\t\t\tdebug: () => {},\n\t\t\tinfo: () => {},\n\t\t\twarn: () => {},\n\t\t\terror: () => {},\n\t\t};\n\n\t\treturn {\n\t\t\tmethod: options.method,\n\t\t\tpath: options.path,\n\t\t\tquery: options.query || {},\n\t\t\theaders: await this.prepareHeaders(options.method, options.path, options.body),\n\t\t\tbody: options.body,\n\t\t\tclientId: this.clientId,\n\t\t\tclientToken: this.clientToken,\n\t\t\tlogger: noopLogger,\n\t\t\tstatus: 200,\n\t\t\tresponseBody: null,\n\t\t\tthrow: (status: number, message: string) => {\n\t\t\t\tconst error = new Error(message);\n\t\t\t\t(error as Error & { status: number }).status = status;\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\tassert: (condition: boolean, message: string) => {\n\t\t\t\tif (!condition) {\n\t\t\t\t\tthrow new Error(message);\n\t\t\t\t}\n\t\t\t},\n\t\t\tset: () => {},\n\t\t};\n\t}\n}\n","import type { SearchOptions, SearchResult, ExploreResult, ApiGroupRules } from '@mondaydotcomorg/atp-protocol';\nimport type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-session.js';\nimport type { InProcessSession } from './in-process-session.js';\n\nexport class APIOperations {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate apiDefinitions?: string;\n\n\tconstructor(session: ISession, inProcessSession?: InProcessSession) {\n\t\tthis.session = session;\n\t\tthis.inProcessSession = inProcessSession;\n\t}\n\n\t/**\n\t * Connects to the server and retrieves API definitions.\n\t */\n\tasync connect(options?: { apiGroups?: string[] }): Promise<{\n\t\tserverVersion: string;\n\t\tcapabilities: unknown;\n\t\tapiGroups: string[];\n\t}> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\tconst data = await this.inProcessSession.getDefinitions(options);\n\t\t\tthis.apiDefinitions = data.typescript;\n\t\t\treturn {\n\t\t\t\tserverVersion: data.version,\n\t\t\t\tcapabilities: {},\n\t\t\t\tapiGroups: data.apiGroups,\n\t\t\t};\n\t\t}\n\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.apiGroups) {\n\t\t\tparams.set('apiGroups', options.apiGroups.join(','));\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/definitions?${params}`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Connection failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as {\n\t\t\ttypescript: string;\n\t\t\tversion: string;\n\t\t\tapiGroups: string[];\n\t\t};\n\t\tthis.apiDefinitions = data.typescript;\n\n\t\treturn {\n\t\t\tserverVersion: data.version,\n\t\t\tcapabilities: {},\n\t\t\tapiGroups: data.apiGroups,\n\t\t};\n\t}\n\n\t/**\n\t * Gets the TypeScript type definitions for available APIs.\n\t */\n\tgetTypeDefinitions(): string {\n\t\tif (!this.apiDefinitions) {\n\t\t\tthrow new Error('Not connected. Call connect() first.');\n\t\t}\n\t\treturn this.apiDefinitions;\n\t}\n\n\t/**\n\t * Searches for available API functions.\n\t */\n\tasync searchAPI(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\tconst data = await this.inProcessSession.search(\n\t\t\t\tquery,\n\t\t\t\toptions as unknown as Record<string, unknown>\n\t\t\t);\n\t\t\treturn data.results as SearchResult[];\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/search`;\n\t\tconst body = JSON.stringify({ query, ...options });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Search failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as { results: SearchResult[] };\n\t\treturn data.results;\n\t}\n\n\t/**\n\t * Explores the API filesystem at the given path.\n\t */\n\tasync exploreAPI(path: string, options?: { toolRules?: ApiGroupRules }): Promise<ExploreResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn (await this.inProcessSession.explore(path, options)) as ExploreResult;\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/explore`;\n\t\tconst body = JSON.stringify({ path, ...options });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Explore failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\treturn (await response.json()) as ExploreResult;\n\t}\n\n\t/**\n\t * Gets information about the server.\n\t */\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn await this.inProcessSession.getServerInfo();\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/info`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to get server info: ${response.status}`);\n\t\t}\n\n\t\treturn (await response.json()) as {\n\t\t\tversion: string;\n\t\t\tcapabilities: Record<string, boolean>;\n\t\t};\n\t}\n\n\t/**\n\t * Gets ATP runtime API definitions as TypeScript declarations.\n\t * Returns the full TypeScript definitions for atp.llm.*, atp.cache.*, etc.\n\t * These are the APIs available during code execution.\n\t *\n\t * Behavior:\n\t * - No options: Returns APIs based on client capabilities (default filtering)\n\t * - apis: ['llm', 'cache']: Returns only specified APIs (intersection with client capabilities)\n\t * - apis: []: Returns all APIs regardless of client capabilities\n\t *\n\t * @param options - Optional filtering options\n\t * @param options.apis - Specific APIs to include (e.g., ['llm', 'cache', 'approval'])\n\t */\n\tasync getRuntimeDefinitions(options?: { apis?: RuntimeAPIName[] }): Promise<string> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn await this.inProcessSession.getRuntimeDefinitions(\n\t\t\t\toptions?.apis ? { apis: options.apis } : undefined\n\t\t\t);\n\t\t}\n\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.apis && options.apis.length > 0) {\n\t\t\tparams.set('apis', options.apis.join(','));\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/runtime${params.toString() ? `?${params}` : ''}`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to get runtime definitions: ${response.status}`);\n\t\t}\n\n\t\treturn await response.text();\n\t}\n}\n","/**\n * Base error class for exceptions thrown by client callbacks that should\n * be propagated through the execution flow rather than being caught and\n * converted to error results.\n *\n * Use this when client-side service providers need to interrupt normal\n * execution flow (e.g., for human-in-the-loop workflows, custom control flow).\n *\n * @example\n * ```typescript\n * class CustomInterruptException extends ClientCallbackError {\n * constructor(message: string, public data: any) {\n * super(message);\n * this.name = 'CustomInterruptException';\n * }\n * }\n * ```\n */\nexport class ClientCallbackError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'ClientCallbackError';\n\t}\n}\n","/**\n * Provenance Token Registry for Client\n *\n * Stores and manages provenance tokens for multi-step tracking\n */\n\nexport interface TokenEntry {\n\ttoken: string;\n\taddedAt: number;\n\tsequence: number;\n}\n\nexport class ProvenanceTokenRegistry {\n\tprivate cache: Map<string, TokenEntry> = new Map();\n\tprivate maxSize: number;\n\tprivate ttl: number;\n\tprivate sequenceCounter: number = 0;\n\n\tconstructor(maxSize: number = 10000, ttlHours: number = 1) {\n\t\tthis.maxSize = maxSize;\n\t\tthis.ttl = ttlHours * 3600 * 1000;\n\t}\n\n\t/**\n\t * Add a token to the registry\n\t */\n\tadd(token: string): void {\n\t\t// Evict expired tokens first\n\t\tthis.evictExpired();\n\n\t\t// Check if at capacity and evict LRU if needed\n\t\tif (this.cache.size >= this.maxSize) {\n\t\t\tthis.evictLRU();\n\t\t}\n\n\t\t// Store token with sequence number for stable ordering\n\t\tthis.cache.set(token, {\n\t\t\ttoken,\n\t\t\taddedAt: Date.now(),\n\t\t\tsequence: this.sequenceCounter++,\n\t\t});\n\t}\n\n\t/**\n\t * Get recent tokens (non-expired, sorted by age, limited)\n\t * Returns tokens in chronological order (oldest first, most recent last)\n\t */\n\tgetRecentTokens(maxCount: number = 1000): string[] {\n\t\tif (maxCount <= 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthis.evictExpired();\n\n\t\tconst now = Date.now();\n\t\tconst expiredTokens: string[] = [];\n\n\t\tconst entries = Array.from(this.cache.values())\n\t\t\t.filter((entry) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst [body] = entry.token.split('.');\n\t\t\t\t\tif (!body) {\n\t\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst payload = JSON.parse(Buffer.from(body, 'base64url').toString());\n\t\t\t\t\tif (!payload.expiresAt || payload.expiresAt <= now) {\n\t\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.sort((a, b) => a.sequence - b.sequence)\n\t\t\t.slice(-maxCount);\n\n\t\tfor (const token of expiredTokens) {\n\t\t\tthis.cache.delete(token);\n\t\t}\n\n\t\treturn entries.map((e) => e.token);\n\t}\n\n\t/**\n\t * Clear all tokens\n\t */\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n\n\t/**\n\t * Get registry size\n\t */\n\tsize(): number {\n\t\treturn this.cache.size;\n\t}\n\n\t/**\n\t * Evict expired tokens\n\t */\n\tprivate evictExpired(): void {\n\t\tconst now = Date.now();\n\t\tconst toDelete: string[] = [];\n\n\t\tfor (const [token, entry] of this.cache.entries()) {\n\t\t\tif (now - entry.addedAt > this.ttl) {\n\t\t\t\ttoDelete.push(token);\n\t\t\t}\n\t\t}\n\n\t\tfor (const token of toDelete) {\n\t\t\tthis.cache.delete(token);\n\t\t}\n\t}\n\n\t/**\n\t * Evict least recently used (oldest) token\n\t */\n\tprivate evictLRU(): void {\n\t\tlet oldestToken: string | null = null;\n\t\tlet oldestSequence = Infinity;\n\n\t\tfor (const [token, entry] of this.cache.entries()) {\n\t\t\tif (entry.sequence < oldestSequence) {\n\t\t\t\toldestSequence = entry.sequence;\n\t\t\t\toldestToken = token;\n\t\t\t}\n\t\t}\n\n\t\tif (oldestToken) {\n\t\t\tthis.cache.delete(oldestToken);\n\t\t}\n\t}\n}\n","import type { ExecutionResult, ExecutionConfig, ATPEvent } from '@mondaydotcomorg/atp-protocol';\nimport { ExecutionStatus, CallbackType } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-session.js';\nimport type { InProcessSession } from './in-process-session.js';\nimport type { ServiceProviders } from './service-providers';\nimport { ClientCallbackError } from '../errors.js';\nimport { ProvenanceTokenRegistry } from './provenance-registry.js';\n\nexport class ExecutionOperations {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate serviceProviders: ServiceProviders;\n\tprivate tokenRegistry: ProvenanceTokenRegistry;\n\tprivate lastExecutionConfig: Partial<ExecutionConfig> | null = null;\n\n\tconstructor(\n\t\tsession: ISession,\n\t\tserviceProviders: ServiceProviders,\n\t\tinProcessSession?: InProcessSession\n\t) {\n\t\tthis.session = session;\n\t\tthis.inProcessSession = inProcessSession;\n\t\tthis.serviceProviders = serviceProviders;\n\t\tthis.tokenRegistry = new ProvenanceTokenRegistry();\n\t}\n\n\t/**\n\t * Executes code on the server with real-time streaming events via SSE.\n\t *\n\t * @param code - TypeScript code to execute\n\t * @param config - Optional execution configuration\n\t * @param onEvent - Callback for all streaming events (thinking, tool_start, tool_end, text, source, etc.)\n\t * @param onProgress - Legacy callback for progress events only (deprecated, use onEvent instead)\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonEvent?: (event: ATPEvent) => void,\n\t\tonProgress?: (message: string, fraction: number) => void\n\t): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/execute/stream`;\n\t\tconst body = JSON.stringify({ code, config });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst fetchImpl = typeof fetch !== 'undefined' ? fetch : require('undici').fetch;\n\n\t\t\tfetchImpl(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t})\n\t\t\t\t.then(async (response: Response) => {\n\t\t\t\t\tif (!response.ok) {\n\t\t\t\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst reader = response.body?.getReader();\n\t\t\t\t\tif (!reader) {\n\t\t\t\t\t\tthrow new Error('Response body is not readable');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst decoder = new TextDecoder();\n\t\t\t\t\tlet buffer = '';\n\t\t\t\t\tlet result: ExecutionResult | null = null;\n\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst { done, value } = await reader.read();\n\n\t\t\t\t\t\tif (done) break;\n\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\t\t\tconst lines = buffer.split('\\n');\n\t\t\t\t\t\tbuffer = lines.pop() || '';\n\n\t\t\t\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\t\t\t\tconst line = lines[i];\n\n\t\t\t\t\t\t\tif (line && line.startsWith('event:')) {\n\t\t\t\t\t\t\t\tconst eventType = line.substring(6).trim();\n\n\t\t\t\t\t\t\t\tfor (let j = i + 1; j < lines.length; j++) {\n\t\t\t\t\t\t\t\t\tconst dataLine = lines[j];\n\t\t\t\t\t\t\t\t\tif (dataLine && dataLine.startsWith('data:')) {\n\t\t\t\t\t\t\t\t\t\tconst dataStr = dataLine.substring(5).trim();\n\t\t\t\t\t\t\t\t\t\tif (dataStr) {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tconst data = JSON.parse(dataStr);\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (onEvent) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst event: ATPEvent = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (eventType === 'progress' && onProgress) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tonProgress(data.message, data.fraction);\n\t\t\t\t\t\t\t\t\t\t\t\t} else if (eventType === 'result') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult = data as ExecutionResult;\n\t\t\t\t\t\t\t\t\t\t\t\t} else if (eventType === 'error') {\n\t\t\t\t\t\t\t\t\t\t\t\t\treject(new Error(data.message));\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\t\tlog.error('Failed to parse SSE data', { dataStr, error: e });\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(new Error('No result received from server'));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t}\n\n\t/**\n\t * Executes code on the server in a sandboxed environment.\n\t */\n\tasync execute(code: string, config?: Partial<ExecutionConfig>): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tconst hints = this.tokenRegistry.getRecentTokens(1000);\n\n\t\tconst detectedClientServices = {\n\t\t\thasLLM: !!this.serviceProviders.getLLM(),\n\t\t\thasApproval: !!this.serviceProviders.getApproval(),\n\t\t\thasEmbedding: !!this.serviceProviders.getEmbedding(),\n\t\t\thasTools: this.serviceProviders.hasTools(),\n\t\t};\n\n\t\tconst executionConfig = {\n\t\t\t...config,\n\t\t\tclientServices: {\n\t\t\t\t...detectedClientServices,\n\t\t\t\t...(config?.clientServices || {}),\n\t\t\t},\n\t\t\tprovenanceHints: hints.length > 0 ? hints : undefined,\n\t\t};\n\n\t\tthis.lastExecutionConfig = executionConfig;\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.execute(code, executionConfig)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/execute`;\n\t\t\tconst body = JSON.stringify({ code, config: executionConfig });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Execution failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Handles batch callbacks by executing them in parallel and resuming.\n\t */\n\tprivate async handleBatchCallbacksAndResume(\n\t\tpausedResult: ExecutionResult\n\t): Promise<ExecutionResult> {\n\t\tif (!pausedResult.needsCallbacks || pausedResult.needsCallbacks.length === 0) {\n\t\t\tthrow new Error('No batch callback requests in paused execution');\n\t\t}\n\n\t\tconst missingServiceIds = new Set(\n\t\t\tpausedResult.needsCallbacks\n\t\t\t\t.filter((cb) => !this.serviceProviders.hasServiceForCallback(cb.type))\n\t\t\t\t.map((cb) => cb.id)\n\t\t);\n\n\t\tif (missingServiceIds.size > 0) {\n\t\t\tconst missingServices = pausedResult.needsCallbacks.filter((cb) =>\n\t\t\t\tmissingServiceIds.has(cb.id)\n\t\t\t);\n\t\t\tconst explicitlyRequestedMissing = missingServices.filter((cb) =>\n\t\t\t\tthis.wasServiceExplicitlyRequested(cb.type)\n\t\t\t);\n\t\t\tconst unexpectedMissing = missingServices.filter(\n\t\t\t\t(cb) => !this.wasServiceExplicitlyRequested(cb.type)\n\t\t\t);\n\n\t\t\tif (explicitlyRequestedMissing.length > 0) {\n\t\t\t\treturn pausedResult;\n\t\t\t}\n\n\t\t\tconst errorMessage = `Missing service providers for callback types: ${unexpectedMissing.map((cb) => cb.type).join(', ')}`;\n\t\t\tlog.error(`Auto-handling batch paused execution without service providers: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tmissingServices: unexpectedMissing.map((cb) => ({\n\t\t\t\t\ttype: cb.type,\n\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\tid: cb.id,\n\t\t\t\t})),\n\t\t\t});\n\n\t\t\tconst existingCallbacks = pausedResult.needsCallbacks.filter(\n\t\t\t\t(cb) => !missingServiceIds.has(cb.id)\n\t\t\t);\n\n\t\t\tif (existingCallbacks.length > 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst existingResults = await Promise.all(\n\t\t\t\t\t\texistingCallbacks.map(async (cb) => {\n\t\t\t\t\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(cb.type, {\n\t\t\t\t\t\t\t\t...cb.payload,\n\t\t\t\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn { id: cb.id, result: callbackResult };\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tconst allResults = pausedResult.needsCallbacks.map((cb) => {\n\t\t\t\t\t\tif (missingServiceIds.has(cb.id)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: cb.id,\n\t\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\t\t\t\tmessage: `${cb.type} service not provided by client`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn existingResults.find((r) => r.id === cb.id)!;\n\t\t\t\t\t});\n\n\t\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allResults);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tlog.error(`Error handling existing services in batch: ${errorMessage}`, {\n\t\t\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\t\t});\n\t\t\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\t\t\tid: cb.id,\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\t\tmessage: missingServiceIds.has(cb.id)\n\t\t\t\t\t\t\t\t? `${cb.type} service not provided by client`\n\t\t\t\t\t\t\t\t: errorMessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\t\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\t\tid: cb.id,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\tmessage: `${cb.type} service not provided by client`,\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst batchResults = await Promise.all(\n\t\t\t\tpausedResult.needsCallbacks.map(async (cb) => {\n\t\t\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(cb.type, {\n\t\t\t\t\t\t...cb.payload,\n\t\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\t});\n\t\t\t\t\treturn { id: cb.id, result: callbackResult };\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, batchResults);\n\t\t} catch (error) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tlog.error(`Error handling batch callbacks: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackCount: pausedResult.needsCallbacks.length,\n\t\t\t});\n\n\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\tid: cb.id,\n\t\t\t\tresult: {\n\t\t\t\t\t__error: true,\n\t\t\t\t\tmessage: errorMessage,\n\t\t\t\t},\n\t\t\t}));\n\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t}\n\t}\n\n\t/**\n\t * Handles a paused execution by processing the callback and resuming.\n\t */\n\tprivate async handlePauseAndResume(pausedResult: ExecutionResult): Promise<ExecutionResult> {\n\t\tif (!pausedResult.needsCallback) {\n\t\t\tthrow new Error('No callback request in paused execution');\n\t\t}\n\n\t\tif (!this.serviceProviders.hasServiceForCallback(pausedResult.needsCallback.type)) {\n\t\t\tconst wasExplicitlyRequested = this.wasServiceExplicitlyRequested(\n\t\t\t\tpausedResult.needsCallback.type\n\t\t\t);\n\n\t\t\tif (wasExplicitlyRequested) {\n\t\t\t\treturn pausedResult;\n\t\t\t}\n\n\t\t\tconst errorMessage = `${pausedResult.needsCallback.type} service not provided by client`;\n\t\t\tlog.error(`Auto-handling paused execution without service provider: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackType: pausedResult.needsCallback.type,\n\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t});\n\n\t\t\treturn await this.resume(pausedResult.executionId, {\n\t\t\t\t__error: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(\n\t\t\t\tpausedResult.needsCallback.type,\n\t\t\t\t{\n\t\t\t\t\t...pausedResult.needsCallback.payload,\n\t\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn await this.resume(pausedResult.executionId, callbackResult);\n\t\t} catch (error) {\n\t\t\tif (error instanceof ClientCallbackError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tlog.error(`Error handling callback: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackType: pausedResult.needsCallback.type,\n\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t});\n\t\t\treturn await this.resume(pausedResult.executionId, {\n\t\t\t\t__error: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Check if a service was explicitly requested in clientServices config\n\t */\n\tprivate wasServiceExplicitlyRequested(callbackType: CallbackType): boolean {\n\t\tif (!this.lastExecutionConfig?.clientServices) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasLLM;\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasApproval;\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasEmbedding;\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasTools;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Resumes a paused execution with a callback result.\n\t */\n\tasync resume(executionId: string, callbackResult: unknown): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.resume(executionId, callbackResult)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/resume/${executionId}`;\n\t\t\tconst body = JSON.stringify({ result: callbackResult });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Resume failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Resumes a paused execution with batch callback results.\n\t */\n\tprivate async resumeWithBatchResults(\n\t\texecutionId: string,\n\t\tbatchResults: Array<{ id: string; result: unknown }>\n\t): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.resumeWithBatchResults(\n\t\t\t\texecutionId,\n\t\t\t\tbatchResults\n\t\t\t)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/resume/${executionId}`;\n\t\t\tconst body = JSON.stringify({ results: batchResults });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Batch resume failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","import { CallbackType, ToolOperation } from '@mondaydotcomorg/atp-protocol';\nimport type {\n\tClientLLMHandler,\n\tClientApprovalHandler,\n\tClientEmbeddingHandler,\n\tClientServiceProviders,\n\tClientTool,\n\tClientToolDefinition,\n\tClientToolHandler,\n} from '@mondaydotcomorg/atp-protocol';\n\nconst LLMOperation = {\n\tCALL: 'call',\n\tEXTRACT: 'extract',\n\tCLASSIFY: 'classify',\n} as const;\n\nconst EmbeddingOperation = {\n\tEMBED: 'embed',\n\tSEARCH: 'search',\n} as const;\n\nexport class ServiceProviders {\n\tprivate providers: ClientServiceProviders = {};\n\tprivate toolHandlers: Map<string, ClientToolHandler> = new Map();\n\n\tconstructor(providers?: ClientServiceProviders) {\n\t\tthis.providers = providers || {};\n\n\t\tif (providers?.tools) {\n\t\t\tfor (const tool of providers.tools) {\n\t\t\t\tthis.toolHandlers.set(tool.name, tool.handler);\n\t\t\t}\n\t\t}\n\t}\n\n\tprovideLLM(handler: ClientLLMHandler): void {\n\t\tthis.providers.llm = handler;\n\t}\n\n\tprovideApproval(handler: ClientApprovalHandler): void {\n\t\tthis.providers.approval = handler;\n\t}\n\n\tprovideEmbedding(handler: ClientEmbeddingHandler): void {\n\t\tthis.providers.embedding = handler;\n\t}\n\n\tprovideTools(tools: ClientTool[]): void {\n\t\tthis.providers.tools = tools;\n\t\tfor (const tool of tools) {\n\t\t\tthis.toolHandlers.set(tool.name, tool.handler);\n\t\t}\n\t}\n\n\tgetLLM(): ClientLLMHandler | undefined {\n\t\treturn this.providers.llm;\n\t}\n\n\tgetApproval(): ClientApprovalHandler | undefined {\n\t\treturn this.providers.approval;\n\t}\n\n\tgetEmbedding(): ClientEmbeddingHandler | undefined {\n\t\treturn this.providers.embedding;\n\t}\n\n\tgetTools(): ClientTool[] | undefined {\n\t\treturn this.providers.tools;\n\t}\n\n\t/**\n\t * Get tool definitions (without handlers) for sending to server\n\t */\n\tgetToolDefinitions(): ClientToolDefinition[] {\n\t\tif (!this.providers.tools) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn this.providers.tools.map((tool) => {\n\t\t\tconst { handler, ...definition } = tool;\n\t\t\treturn definition;\n\t\t});\n\t}\n\n\t/**\n\t * Check if client has tools\n\t */\n\thasTools(): boolean {\n\t\treturn !!(this.providers.tools && this.providers.tools.length > 0);\n\t}\n\n\t/**\n\t * Check if client has any services or tools\n\t */\n\thasAnyServices(): boolean {\n\t\treturn !!(\n\t\t\tthis.providers.llm ||\n\t\t\tthis.providers.approval ||\n\t\t\tthis.providers.embedding ||\n\t\t\tthis.hasTools()\n\t\t);\n\t}\n\n\t/**\n\t * Check if client has a service for a specific callback type\n\t */\n\thasServiceForCallback(callbackType: CallbackType): boolean {\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\treturn !!this.providers.llm;\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\treturn !!this.providers.approval;\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\treturn !!this.providers.embedding;\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\treturn this.hasTools();\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync handleCallback(callbackType: CallbackType, payload: any): Promise<any> {\n\t\tif (payload.operation === 'batch_parallel' && payload.calls) {\n\t\t\treturn await Promise.all(\n\t\t\t\tpayload.calls.map(async (call: any) => {\n\t\t\t\t\treturn await this.handleCallback(call.type, {\n\t\t\t\t\t\t...call.payload,\n\t\t\t\t\t\toperation: call.operation,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\tif (!this.providers.llm) {\n\t\t\t\t\tthrow new Error('LLM service not provided by client');\n\t\t\t\t}\n\t\t\t\tif (payload.operation === LLMOperation.CALL) {\n\t\t\t\t\treturn await this.providers.llm.call(payload.prompt, payload.options);\n\t\t\t\t} else if (payload.operation === LLMOperation.EXTRACT && this.providers.llm.extract) {\n\t\t\t\t\treturn await this.providers.llm.extract(payload.prompt, payload.schema, payload.options);\n\t\t\t\t} else if (payload.operation === LLMOperation.CLASSIFY && this.providers.llm.classify) {\n\t\t\t\t\treturn await this.providers.llm.classify(\n\t\t\t\t\t\tpayload.text,\n\t\t\t\t\t\tpayload.categories,\n\t\t\t\t\t\tpayload.options\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported LLM operation: ${payload.operation}`);\n\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\tif (!this.providers.approval) {\n\t\t\t\t\tthrow new Error('Approval service not provided by client');\n\t\t\t\t}\n\t\t\t\tconst contextWithExecutionId = payload.context\n\t\t\t\t\t? { ...payload.context, executionId: payload.executionId }\n\t\t\t\t\t: { executionId: payload.executionId };\n\t\t\t\treturn await this.providers.approval.request(payload.message, contextWithExecutionId);\n\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\tif (!this.providers.embedding) {\n\t\t\t\t\tthrow new Error('Embedding service not provided by client');\n\t\t\t\t}\n\t\t\t\tif (payload.operation === EmbeddingOperation.EMBED) {\n\t\t\t\t\treturn await this.providers.embedding.embed(payload.text);\n\t\t\t\t} else if (payload.operation === EmbeddingOperation.SEARCH) {\n\t\t\t\t\tconst queryEmbedding = await this.providers.embedding.embed(payload.query);\n\t\t\t\t\treturn queryEmbedding;\n\t\t\t\t} else if (payload.operation === 'similarity' && this.providers.embedding.similarity) {\n\t\t\t\t\treturn await this.providers.embedding.similarity(payload.text1, payload.text2);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported embedding operation: ${payload.operation}`);\n\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\tif (payload.operation === ToolOperation.CALL) {\n\t\t\t\t\tconst toolName = payload.toolName;\n\t\t\t\t\tconst handler = this.toolHandlers.get(toolName);\n\n\t\t\t\t\tif (!handler) {\n\t\t\t\t\t\tthrow new Error(`Tool '${toolName}' not found in client tools`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = await handler(payload.input);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported tool operation: ${payload.operation}`);\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown callback type: ${callbackType}`);\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/base-session.ts","../../src/core/session.ts","../../src/core/in-process-session.ts","../../src/core/api-operations.ts","../../src/errors.ts","../../src/core/provenance-registry.ts","../../src/core/execution-operations.ts","../../src/core/service-providers.ts"],"names":["BaseSession","clientId","clientToken","tokenExpiresAt","tokenRotateAt","initPromise","refreshPromise","storedInitParams","tokenRefreshConfig","enabled","bufferMs","doRefreshToken","Error","undefined","init","clientInfo","tools","services","getClientId","setTokenRefreshConfig","config","needsTokenRefresh","now","Date","refreshTokenIfNeeded","updateTokenState","credentials","token","expiresAt","shouldSkipRefreshForUrl","url","includes","ClientSession","baseUrl","customHeaders","hooks","constructor","headers","initResult","body","JSON","stringify","prepareHeaders","response","fetch","method","ok","status","statusText","data","json","ensureInitialized","getHeaders","getBaseUrl","preRequest","result","currentHeaders","abort","abortReason","InProcessSession","server","initialized","start","ctx","createContext","path","handleInit","_method","_body","getDefinitions","options","query","apiGroups","join","getRuntimeDefinitions","apis","length","getServerInfo","getInfo","search","handleSearch","explore","handleExplore","execute","code","handleExecute","resume","executionId","callbackResult","handleResume","resumeWithBatchResults","batchResults","results","noopLogger","debug","info","warn","error","logger","responseBody","throw","message","assert","condition","set","APIOperations","session","inProcessSession","apiDefinitions","connect","typescript","serverVersion","version","capabilities","params","URLSearchParams","getTypeDefinitions","searchAPI","exploreAPI","toString","text","ClientCallbackError","name","ProvenanceTokenRegistry","cache","Map","maxSize","ttl","sequenceCounter","ttlHours","add","evictExpired","size","evictLRU","addedAt","sequence","getRecentTokens","maxCount","expiredTokens","entries","Array","from","values","filter","entry","split","push","payload","parse","Buffer","sort","a","b","slice","delete","map","e","clear","toDelete","oldestToken","oldestSequence","Infinity","ExecutionOperations","serviceProviders","tokenRegistry","lastExecutionConfig","executeStream","onEvent","onProgress","Promise","resolve","reject","fetchImpl","require","then","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","lines","pop","i","line","startsWith","eventType","substring","trim","j","dataLine","dataStr","event","type","timestamp","fraction","log","catch","hints","detectedClientServices","hasLLM","getLLM","hasApproval","getApproval","hasEmbedding","getEmbedding","hasTools","executionConfig","clientServices","provenanceHints","provenanceTokens","ExecutionStatus","PAUSED","needsCallbacks","handleBatchCallbacksAndResume","needsCallback","handlePauseAndResume","pausedResult","missingServiceIds","Set","cb","hasServiceForCallback","id","missingServices","has","explicitlyRequestedMissing","wasServiceExplicitlyRequested","unexpectedMissing","errorMessage","operation","existingCallbacks","existingResults","all","handleCallback","allResults","__error","find","r","String","allErrorResults","callbackCount","wasExplicitlyRequested","callbackType","CallbackType","LLM","APPROVAL","EMBEDDING","TOOL","LLMOperation","CALL","EXTRACT","CLASSIFY","EmbeddingOperation","EMBED","SEARCH","ServiceProviders","providers","toolHandlers","tool","handler","provideLLM","llm","provideApproval","approval","provideEmbedding","embedding","provideTools","getTools","getToolDefinitions","definition","hasAnyServices","calls","call","prompt","extract","schema","classify","categories","contextWithExecutionId","context","request","embed","queryEmbedding","similarity","text1","text2","ToolOperation","toolName","get","input"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { TokenRefreshConfig } from './types.js';\n\n/**\n * Token credentials returned from init and refresh operations\n */\nexport interface TokenCredentials {\n\tclientId: string;\n\ttoken: string;\n\texpiresAt: number;\n\ttokenRotateAt: number;\n}\n\n/**\n * Session interface for ATP client operations\n */\nexport interface ISession {\n\tinit(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials>;\n\tgetClientId(): string;\n\tensureInitialized(): Promise<void>;\n\tgetHeaders(): Record<string, string>;\n\tgetBaseUrl(): string;\n\tprepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\trefreshTokenIfNeeded(): Promise<void>;\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void;\n}\n\n/**\n * Stored init parameters for re-initialization during token refresh.\n */\nexport interface StoredInitParams {\n\tclientInfo?: { name?: string; version?: string; [key: string]: unknown };\n\ttools?: ClientToolDefinition[];\n\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean };\n}\n\n/**\n * Base session class with shared token management logic.\n * Subclasses implement the transport-specific operations (HTTP vs in-process).\n */\nexport abstract class BaseSession implements ISession {\n\tprotected clientId?: string;\n\tprotected clientToken?: string;\n\tprotected tokenExpiresAt?: number;\n\tprotected tokenRotateAt?: number;\n\tprotected initPromise?: Promise<void>;\n\tprotected refreshPromise?: Promise<void>;\n\tprotected storedInitParams?: StoredInitParams;\n\tprotected tokenRefreshConfig: TokenRefreshConfig = {\n\t\tenabled: true,\n\t\tbufferMs: 1000,\n\t};\n\n\tprotected constructor(tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tif (tokenRefreshConfig) {\n\t\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...tokenRefreshConfig };\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the session - must be implemented by subclass\n\t */\n\tabstract init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials>;\n\n\t/**\n\t * Get headers for requests - must be implemented by subclass\n\t */\n\tabstract getHeaders(): Record<string, string>;\n\n\t/**\n\t * Get base URL - must be implemented by subclass\n\t */\n\tabstract getBaseUrl(): string;\n\n\t/**\n\t * Ensure client is initialized - must be implemented by subclass\n\t */\n\tabstract ensureInitialized(): Promise<void>;\n\n\t/**\n\t * Prepare headers for a request - must be implemented by subclass\n\t */\n\tabstract prepareHeaders(method: string, url: string, body?: unknown): Promise<Record<string, string>>;\n\n\t/**\n\t * Perform token refresh by re-initializing the session.\n\t * Resets the init guard and calls init() again with the stored params,\n\t * effectively creating a fresh session without depending on the old\n\t * session still existing in the server's cache.\n\t */\n\tprotected async doRefreshToken(): Promise<void> {\n\t\tif (!this.storedInitParams) {\n\t\t\tthrow new Error('Cannot refresh token: init params not stored. Was init() called?');\n\t\t}\n\n\t\t// Reset the init guard so init() runs a fresh handshake\n\t\tthis.initPromise = undefined;\n\n\t\tawait this.init(\n\t\t\tthis.storedInitParams.clientInfo,\n\t\t\tthis.storedInitParams.tools,\n\t\t\tthis.storedInitParams.services,\n\t\t);\n\t}\n\n\t/**\n\t * Gets the unique client ID.\n\t */\n\tgetClientId(): string {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t\treturn this.clientId;\n\t}\n\n\t/**\n\t * Configure automatic token refresh behavior\n\t */\n\tsetTokenRefreshConfig(config: Partial<TokenRefreshConfig>): void {\n\t\tthis.tokenRefreshConfig = { ...this.tokenRefreshConfig, ...config };\n\t}\n\n\t/**\n\t * Check if token needs refresh based on current time and config\n\t */\n\tprotected needsTokenRefresh(): boolean {\n\t\tconst now = Date.now();\n\t\treturn (\n\t\t\t(this.tokenRotateAt !== undefined && now >= this.tokenRotateAt - this.tokenRefreshConfig.bufferMs) ||\n\t\t\t(this.tokenExpiresAt !== undefined && now >= this.tokenExpiresAt)\n\t\t);\n\t}\n\n\t/**\n\t * Refresh token if needed (past rotateAt time or expired).\n\t * This is called automatically before requests when autoRefresh is enabled.\n\t * Uses a shared promise to prevent concurrent refresh requests.\n\t *\n\t * Refresh works by re-initializing the session (calling init() again),\n\t * so it does not depend on the old session still existing in the server's cache.\n\t */\n\tasync refreshTokenIfNeeded(): Promise<void> {\n\t\t// Skip if auto-refresh is disabled\n\t\tif (!this.tokenRefreshConfig.enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Skip if not initialized\n\t\tif (!this.clientId || !this.clientToken) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if we need to refresh\n\t\tif (!this.needsTokenRefresh()) {\n\t\t\treturn; // Token is still fresh\n\t\t}\n\n\t\t// Prevent concurrent refresh requests\n\t\tif (this.refreshPromise) {\n\t\t\tawait this.refreshPromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refreshPromise = this.doRefreshToken();\n\n\t\ttry {\n\t\t\tawait this.refreshPromise;\n\t\t} finally {\n\t\t\tthis.refreshPromise = undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Update token state after successful init or refresh\n\t */\n\tprotected updateTokenState(credentials: TokenCredentials): void {\n\t\tthis.clientId = credentials.clientId;\n\t\tthis.clientToken = credentials.token;\n\t\tthis.tokenExpiresAt = credentials.expiresAt;\n\t\tthis.tokenRotateAt = credentials.tokenRotateAt;\n\t}\n\n\t/**\n\t * Check if URL should skip token refresh (to avoid infinite recursion).\n\t * Since refresh now calls init(), we only need to guard the init path.\n\t */\n\tprotected shouldSkipRefreshForUrl(url: string): boolean {\n\t\treturn url.includes('/api/init');\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { ClientHooks, TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * HTTP-based session for connecting to remote ATP servers.\n */\nexport class ClientSession extends BaseSession {\n\tprivate baseUrl: string;\n\tprivate customHeaders: Record<string, string>;\n\tprivate hooks?: ClientHooks;\n\n\tconstructor(\n\t\tbaseUrl: string,\n\t\theaders?: Record<string, string>,\n\t\thooks?: ClientHooks,\n\t\ttokenRefreshConfig?: Partial<TokenRefreshConfig>\n\t) {\n\t\tsuper(tokenRefreshConfig);\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.customHeaders = headers || {};\n\t\tthis.hooks = hooks;\n\t}\n\n\t/**\n\t * Initializes the client session with the server.\n\t * This MUST be called before any other operations.\n\t * The server generates and returns a unique client ID and token.\n\t */\n\tasync init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials> {\n\t\t// Store init params so doRefreshToken() can re-init with the same data\n\t\tthis.storedInitParams = { clientInfo, tools, services };\n\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t\treturn {\n\t\t\t\tclientId: this.clientId!,\n\t\t\t\ttoken: this.clientToken!,\n\t\t\t\texpiresAt: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\n\n\t\tthis.initPromise = (async () => {\n\t\t\tconst url = `${this.baseUrl}/api/init`;\n\t\t\tconst body = JSON.stringify({\n\t\t\t\tclientInfo,\n\t\t\t\ttools: tools || [],\n\t\t\t\tservices,\n\t\t\t});\n\n\t\t\tconst headers = await this.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(`Client initialization failed: ${response.status} ${response.statusText}`);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as TokenCredentials;\n\t\t\tthis.updateTokenState(data);\n\t\t\tinitResult = data;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\n\t}\n\n\t/**\n\t * Ensures the client is initialized before making requests.\n\t */\n\tasync ensureInitialized(): Promise<void> {\n\t\tif (!this.clientId) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates HTTP headers for requests.\n\t */\n\tgetHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...this.customHeaders,\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['X-Client-ID'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['Authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tgetBaseUrl(): string {\n\t\treturn this.baseUrl;\n\t}\n\n\t/**\n\t * Prepares headers for a request, refreshing token if needed and calling preRequest hook if configured\n\t */\n\tasync prepareHeaders(\n\t\tmethod: string,\n\t\turl: string,\n\t\tbody?: unknown\n\t): Promise<Record<string, string>> {\n\t\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\n\t\tlet headers = this.getHeaders();\n\n\t\tif (this.hooks?.preRequest) {\n\t\t\tconst result = await this.hooks.preRequest({\n\t\t\t\turl,\n\t\t\t\tmethod,\n\t\t\t\tcurrentHeaders: headers,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (result.abort) {\n\t\t\t\tthrow new Error(result.abortReason || 'Request aborted by preRequest hook');\n\t\t\t}\n\n\t\t\tif (result.headers) {\n\t\t\t\theaders = result.headers;\n\t\t\t}\n\t\t}\n\n\t\treturn headers;\n\t}\n}\n","import type { ClientToolDefinition } from '@mondaydotcomorg/atp-protocol';\nimport type { TokenRefreshConfig } from './types.js';\nimport { BaseSession, type TokenCredentials } from './base-session.js';\n\n/**\n * Server interface for in-process communication\n */\nexport interface InProcessServer {\n\tstart(): Promise<void>;\n\thandleInit(ctx: InProcessRequestContext): Promise<unknown>;\n\tgetDefinitions(ctx?: InProcessRequestContext): Promise<unknown>;\n\tgetRuntimeDefinitions(ctx?: InProcessRequestContext): Promise<string>;\n\tgetInfo(): unknown;\n\thandleSearch(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleExplore(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleExecute(ctx: InProcessRequestContext): Promise<unknown>;\n\thandleResume(ctx: InProcessRequestContext, executionId: string): Promise<unknown>;\n}\n\n/**\n * Request context for in-process server calls\n */\nexport interface InProcessRequestContext {\n\tmethod: string;\n\tpath: string;\n\tquery: Record<string, string>;\n\theaders: Record<string, string>;\n\tbody: unknown;\n\tclientId?: string;\n\tclientToken?: string;\n\tuserId?: string;\n\tuser?: unknown;\n\texecutionId?: string;\n\tcode?: string;\n\tvalidation?: unknown;\n\tresult?: unknown;\n\terror?: Error;\n\tlogger: { debug: () => void; info: () => void; warn: () => void; error: () => void };\n\tstatus: number;\n\tresponseBody: unknown;\n\tthrow(status: number, message: string): never;\n\tassert(condition: boolean, message: string): asserts condition;\n\tset(header: string, value: string): void;\n}\n\n/**\n * In-process session for direct server communication without HTTP.\n * Used when the client and server run in the same process.\n */\nexport class InProcessSession extends BaseSession {\n\tprivate server: InProcessServer;\n\tprivate initialized: boolean = false;\n\n\tconstructor(server: InProcessServer, tokenRefreshConfig?: Partial<TokenRefreshConfig>) {\n\t\tsuper(tokenRefreshConfig);\n\t\tthis.server = server;\n\t}\n\n\t/**\n\t * Initializes the client session with the in-process server.\n\t */\n\tasync init(\n\t\tclientInfo?: { name?: string; version?: string; [key: string]: unknown },\n\t\ttools?: ClientToolDefinition[],\n\t\tservices?: { hasLLM: boolean; hasApproval: boolean; hasEmbedding: boolean; hasTools: boolean }\n\t): Promise<TokenCredentials> {\n\t\t// Store init params so doRefreshToken() can re-init with the same data\n\t\tthis.storedInitParams = { clientInfo, tools, services };\n\n\t\tif (this.initPromise) {\n\t\t\tawait this.initPromise;\n\t\t\treturn {\n\t\t\t\tclientId: this.clientId!,\n\t\t\t\ttoken: this.clientToken!,\n\t\t\t\texpiresAt: this.tokenExpiresAt!,\n\t\t\t\ttokenRotateAt: this.tokenRotateAt!,\n\t\t\t};\n\t\t}\n\n\t\tlet initResult: TokenCredentials;\n\n\t\tthis.initPromise = (async () => {\n\t\t\tawait this.server.start();\n\n\t\t\tconst ctx = await this.createContext({\n\t\t\t\tmethod: 'POST',\n\t\t\t\tpath: '/api/init',\n\t\t\t\tbody: {\n\t\t\t\t\tclientInfo,\n\t\t\t\t\ttools: tools || [],\n\t\t\t\t\tservices,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst result = (await this.server.handleInit(ctx)) as TokenCredentials;\n\t\t\tthis.updateTokenState(result);\n\t\t\tthis.initialized = true;\n\t\t\tinitResult = result;\n\t\t})();\n\n\t\tawait this.initPromise;\n\n\t\treturn initResult!;\n\t}\n\n\t/**\n\t * Ensures the client is initialized before making requests.\n\t */\n\tasync ensureInitialized(): Promise<void> {\n\t\tif (!this.initialized) {\n\t\t\tthrow new Error('Client not initialized. Call init() first.');\n\t\t}\n\t}\n\n\t/**\n\t * Creates headers for in-process requests (lowercase for consistency with Node.js)\n\t */\n\tgetHeaders(): Record<string, string> {\n\t\tconst headers: Record<string, string> = {\n\t\t\t'content-type': 'application/json',\n\t\t};\n\n\t\tif (this.clientId) {\n\t\t\theaders['x-client-id'] = this.clientId;\n\t\t}\n\n\t\tif (this.clientToken) {\n\t\t\theaders['authorization'] = `Bearer ${this.clientToken}`;\n\t\t}\n\n\t\treturn headers;\n\t}\n\n\tgetBaseUrl(): string {\n\t\treturn '';\n\t}\n\n\t/**\n\t * Prepares headers for a request, refreshing token if needed\n\t */\n\tasync prepareHeaders(\n\t\t_method: string,\n\t\turl: string,\n\t\t_body?: unknown\n\t): Promise<Record<string, string>> {\n\t\t// Refresh token if needed BEFORE preparing headers\n\t\tif (!this.shouldSkipRefreshForUrl(url)) {\n\t\t\tawait this.refreshTokenIfNeeded();\n\t\t}\n\t\treturn this.getHeaders();\n\t}\n\n\t// ============================================\n\t// In-process specific methods for direct server calls\n\t// ============================================\n\n\tasync getDefinitions(options?: { apiGroups?: string[] }): Promise<{\n\t\ttypescript: string;\n\t\tversion: string;\n\t\tapiGroups: string[];\n\t}> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'GET',\n\t\t\tpath: '/api/definitions',\n\t\t\tquery: options?.apiGroups ? { apiGroups: options.apiGroups.join(',') } : {},\n\t\t});\n\n\t\treturn (await this.server.getDefinitions(ctx)) as {\n\t\t\ttypescript: string;\n\t\t\tversion: string;\n\t\t\tapiGroups: string[];\n\t\t};\n\t}\n\n\tasync getRuntimeDefinitions(options?: { apis?: string[] }): Promise<string> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'GET',\n\t\t\tpath: '/api/runtime',\n\t\t\tquery: options?.apis?.length ? { apis: options.apis.join(',') } : {},\n\t\t});\n\n\t\treturn await this.server.getRuntimeDefinitions(ctx);\n\t}\n\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\tawait this.ensureInitialized();\n\t\treturn this.server.getInfo() as {\n\t\t\tversion: string;\n\t\t\tcapabilities: Record<string, boolean>;\n\t\t};\n\t}\n\n\tasync search(query: string, options?: Record<string, unknown>): Promise<{ results: unknown[] }> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/search',\n\t\t\tbody: { query, ...options },\n\t\t});\n\n\t\treturn (await this.server.handleSearch(ctx)) as { results: unknown[] };\n\t}\n\n\tasync explore(path: string, options?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/explore',\n\t\t\tbody: { path, ...options },\n\t\t});\n\n\t\treturn await this.server.handleExplore(ctx);\n\t}\n\n\tasync execute(code: string, config?: Record<string, unknown>): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: '/api/execute',\n\t\t\tbody: { code, config },\n\t\t});\n\n\t\treturn await this.server.handleExecute(ctx);\n\t}\n\n\tasync resume(executionId: string, callbackResult: unknown): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: `/api/resume/${executionId}`,\n\t\t\tbody: { result: callbackResult },\n\t\t});\n\n\t\treturn await this.server.handleResume(ctx, executionId);\n\t}\n\n\tasync resumeWithBatchResults(\n\t\texecutionId: string,\n\t\tbatchResults: Array<{ id: string; result: unknown }>\n\t): Promise<unknown> {\n\t\tawait this.ensureInitialized();\n\n\t\tconst ctx = await this.createContext({\n\t\t\tmethod: 'POST',\n\t\t\tpath: `/api/resume/${executionId}`,\n\t\t\tbody: { results: batchResults },\n\t\t});\n\n\t\treturn await this.server.handleResume(ctx, executionId);\n\t}\n\n\t/**\n\t * Creates a request context for in-process server calls\n\t */\n\tprivate async createContext(options: {\n\t\tmethod: string;\n\t\tpath: string;\n\t\tquery?: Record<string, string>;\n\t\tbody?: unknown;\n\t}): Promise<InProcessRequestContext> {\n\t\tconst noopLogger = {\n\t\t\tdebug: () => {},\n\t\t\tinfo: () => {},\n\t\t\twarn: () => {},\n\t\t\terror: () => {},\n\t\t};\n\n\t\treturn {\n\t\t\tmethod: options.method,\n\t\t\tpath: options.path,\n\t\t\tquery: options.query || {},\n\t\t\theaders: await this.prepareHeaders(options.method, options.path, options.body),\n\t\t\tbody: options.body,\n\t\t\tclientId: this.clientId,\n\t\t\tclientToken: this.clientToken,\n\t\t\tlogger: noopLogger,\n\t\t\tstatus: 200,\n\t\t\tresponseBody: null,\n\t\t\tthrow: (status: number, message: string) => {\n\t\t\t\tconst error = new Error(message);\n\t\t\t\t(error as Error & { status: number }).status = status;\n\t\t\t\tthrow error;\n\t\t\t},\n\t\t\tassert: (condition: boolean, message: string) => {\n\t\t\t\tif (!condition) {\n\t\t\t\t\tthrow new Error(message);\n\t\t\t\t}\n\t\t\t},\n\t\t\tset: () => {},\n\t\t};\n\t}\n}\n","import type { SearchOptions, SearchResult, ExploreResult, ApiGroupRules } from '@mondaydotcomorg/atp-protocol';\nimport type { RuntimeAPIName } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-session.js';\nimport type { InProcessSession } from './in-process-session.js';\n\nexport class APIOperations {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate apiDefinitions?: string;\n\n\tconstructor(session: ISession, inProcessSession?: InProcessSession) {\n\t\tthis.session = session;\n\t\tthis.inProcessSession = inProcessSession;\n\t}\n\n\t/**\n\t * Connects to the server and retrieves API definitions.\n\t */\n\tasync connect(options?: { apiGroups?: string[] }): Promise<{\n\t\tserverVersion: string;\n\t\tcapabilities: unknown;\n\t\tapiGroups: string[];\n\t}> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\tconst data = await this.inProcessSession.getDefinitions(options);\n\t\t\tthis.apiDefinitions = data.typescript;\n\t\t\treturn {\n\t\t\t\tserverVersion: data.version,\n\t\t\t\tcapabilities: {},\n\t\t\t\tapiGroups: data.apiGroups,\n\t\t\t};\n\t\t}\n\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.apiGroups) {\n\t\t\tparams.set('apiGroups', options.apiGroups.join(','));\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/definitions?${params}`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Connection failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as {\n\t\t\ttypescript: string;\n\t\t\tversion: string;\n\t\t\tapiGroups: string[];\n\t\t};\n\t\tthis.apiDefinitions = data.typescript;\n\n\t\treturn {\n\t\t\tserverVersion: data.version,\n\t\t\tcapabilities: {},\n\t\t\tapiGroups: data.apiGroups,\n\t\t};\n\t}\n\n\t/**\n\t * Gets the TypeScript type definitions for available APIs.\n\t */\n\tgetTypeDefinitions(): string {\n\t\tif (!this.apiDefinitions) {\n\t\t\tthrow new Error('Not connected. Call connect() first.');\n\t\t}\n\t\treturn this.apiDefinitions;\n\t}\n\n\t/**\n\t * Searches for available API functions.\n\t */\n\tasync searchAPI(query: string, options?: SearchOptions): Promise<SearchResult[]> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\tconst data = await this.inProcessSession.search(\n\t\t\t\tquery,\n\t\t\t\toptions as unknown as Record<string, unknown>\n\t\t\t);\n\t\t\treturn data.results as SearchResult[];\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/search`;\n\t\tconst body = JSON.stringify({ query, ...options });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Search failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as { results: SearchResult[] };\n\t\treturn data.results;\n\t}\n\n\t/**\n\t * Explores the API filesystem at the given path.\n\t */\n\tasync exploreAPI(path: string, options?: { toolRules?: ApiGroupRules }): Promise<ExploreResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn (await this.inProcessSession.explore(path, options)) as ExploreResult;\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/explore`;\n\t\tconst body = JSON.stringify({ path, ...options });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\tconst response = await fetch(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders,\n\t\t\tbody,\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Explore failed: ${response.status} ${response.statusText}`);\n\t\t}\n\n\t\treturn (await response.json()) as ExploreResult;\n\t}\n\n\t/**\n\t * Gets information about the server.\n\t */\n\tasync getServerInfo(): Promise<{\n\t\tversion: string;\n\t\tcapabilities: Record<string, boolean>;\n\t}> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn await this.inProcessSession.getServerInfo();\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/info`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to get server info: ${response.status}`);\n\t\t}\n\n\t\treturn (await response.json()) as {\n\t\t\tversion: string;\n\t\t\tcapabilities: Record<string, boolean>;\n\t\t};\n\t}\n\n\t/**\n\t * Gets ATP runtime API definitions as TypeScript declarations.\n\t * Returns the full TypeScript definitions for atp.llm.*, atp.cache.*, etc.\n\t * These are the APIs available during code execution.\n\t *\n\t * Behavior:\n\t * - No options: Returns APIs based on client capabilities (default filtering)\n\t * - apis: ['llm', 'cache']: Returns only specified APIs (intersection with client capabilities)\n\t * - apis: []: Returns all APIs regardless of client capabilities\n\t *\n\t * @param options - Optional filtering options\n\t * @param options.apis - Specific APIs to include (e.g., ['llm', 'cache', 'approval'])\n\t */\n\tasync getRuntimeDefinitions(options?: { apis?: RuntimeAPIName[] }): Promise<string> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tif (this.inProcessSession) {\n\t\t\treturn await this.inProcessSession.getRuntimeDefinitions(\n\t\t\t\toptions?.apis ? { apis: options.apis } : undefined\n\t\t\t);\n\t\t}\n\n\t\tconst params = new URLSearchParams();\n\t\tif (options?.apis && options.apis.length > 0) {\n\t\t\tparams.set('apis', options.apis.join(','));\n\t\t}\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/runtime${params.toString() ? `?${params}` : ''}`;\n\t\tconst headers = await this.session.prepareHeaders('GET', url);\n\n\t\tconst response = await fetch(url, { headers });\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Failed to get runtime definitions: ${response.status}`);\n\t\t}\n\n\t\treturn await response.text();\n\t}\n}\n","/**\n * Base error class for exceptions thrown by client callbacks that should\n * be propagated through the execution flow rather than being caught and\n * converted to error results.\n *\n * Use this when client-side service providers need to interrupt normal\n * execution flow (e.g., for human-in-the-loop workflows, custom control flow).\n *\n * @example\n * ```typescript\n * class CustomInterruptException extends ClientCallbackError {\n * constructor(message: string, public data: any) {\n * super(message);\n * this.name = 'CustomInterruptException';\n * }\n * }\n * ```\n */\nexport class ClientCallbackError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'ClientCallbackError';\n\t}\n}\n","/**\n * Provenance Token Registry for Client\n *\n * Stores and manages provenance tokens for multi-step tracking\n */\n\nexport interface TokenEntry {\n\ttoken: string;\n\taddedAt: number;\n\tsequence: number;\n}\n\nexport class ProvenanceTokenRegistry {\n\tprivate cache: Map<string, TokenEntry> = new Map();\n\tprivate maxSize: number;\n\tprivate ttl: number;\n\tprivate sequenceCounter: number = 0;\n\n\tconstructor(maxSize: number = 10000, ttlHours: number = 1) {\n\t\tthis.maxSize = maxSize;\n\t\tthis.ttl = ttlHours * 3600 * 1000;\n\t}\n\n\t/**\n\t * Add a token to the registry\n\t */\n\tadd(token: string): void {\n\t\t// Evict expired tokens first\n\t\tthis.evictExpired();\n\n\t\t// Check if at capacity and evict LRU if needed\n\t\tif (this.cache.size >= this.maxSize) {\n\t\t\tthis.evictLRU();\n\t\t}\n\n\t\t// Store token with sequence number for stable ordering\n\t\tthis.cache.set(token, {\n\t\t\ttoken,\n\t\t\taddedAt: Date.now(),\n\t\t\tsequence: this.sequenceCounter++,\n\t\t});\n\t}\n\n\t/**\n\t * Get recent tokens (non-expired, sorted by age, limited)\n\t * Returns tokens in chronological order (oldest first, most recent last)\n\t */\n\tgetRecentTokens(maxCount: number = 1000): string[] {\n\t\tif (maxCount <= 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthis.evictExpired();\n\n\t\tconst now = Date.now();\n\t\tconst expiredTokens: string[] = [];\n\n\t\tconst entries = Array.from(this.cache.values())\n\t\t\t.filter((entry) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst [body] = entry.token.split('.');\n\t\t\t\t\tif (!body) {\n\t\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tconst payload = JSON.parse(Buffer.from(body, 'base64url').toString());\n\t\t\t\t\tif (!payload.expiresAt || payload.expiresAt <= now) {\n\t\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\texpiredTokens.push(entry.token);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.sort((a, b) => a.sequence - b.sequence)\n\t\t\t.slice(-maxCount);\n\n\t\tfor (const token of expiredTokens) {\n\t\t\tthis.cache.delete(token);\n\t\t}\n\n\t\treturn entries.map((e) => e.token);\n\t}\n\n\t/**\n\t * Clear all tokens\n\t */\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n\n\t/**\n\t * Get registry size\n\t */\n\tsize(): number {\n\t\treturn this.cache.size;\n\t}\n\n\t/**\n\t * Evict expired tokens\n\t */\n\tprivate evictExpired(): void {\n\t\tconst now = Date.now();\n\t\tconst toDelete: string[] = [];\n\n\t\tfor (const [token, entry] of this.cache.entries()) {\n\t\t\tif (now - entry.addedAt > this.ttl) {\n\t\t\t\ttoDelete.push(token);\n\t\t\t}\n\t\t}\n\n\t\tfor (const token of toDelete) {\n\t\t\tthis.cache.delete(token);\n\t\t}\n\t}\n\n\t/**\n\t * Evict least recently used (oldest) token\n\t */\n\tprivate evictLRU(): void {\n\t\tlet oldestToken: string | null = null;\n\t\tlet oldestSequence = Infinity;\n\n\t\tfor (const [token, entry] of this.cache.entries()) {\n\t\t\tif (entry.sequence < oldestSequence) {\n\t\t\t\toldestSequence = entry.sequence;\n\t\t\t\toldestToken = token;\n\t\t\t}\n\t\t}\n\n\t\tif (oldestToken) {\n\t\t\tthis.cache.delete(oldestToken);\n\t\t}\n\t}\n}\n","import type { ExecutionResult, ExecutionConfig, ATPEvent } from '@mondaydotcomorg/atp-protocol';\nimport { ExecutionStatus, CallbackType } from '@mondaydotcomorg/atp-protocol';\nimport { log } from '@mondaydotcomorg/atp-runtime';\nimport type { ISession } from './base-session.js';\nimport type { InProcessSession } from './in-process-session.js';\nimport type { ServiceProviders } from './service-providers';\nimport { ClientCallbackError } from '../errors.js';\nimport { ProvenanceTokenRegistry } from './provenance-registry.js';\n\nexport class ExecutionOperations {\n\tprivate session: ISession;\n\tprivate inProcessSession?: InProcessSession;\n\tprivate serviceProviders: ServiceProviders;\n\tprivate tokenRegistry: ProvenanceTokenRegistry;\n\tprivate lastExecutionConfig: Partial<ExecutionConfig> | null = null;\n\n\tconstructor(\n\t\tsession: ISession,\n\t\tserviceProviders: ServiceProviders,\n\t\tinProcessSession?: InProcessSession\n\t) {\n\t\tthis.session = session;\n\t\tthis.inProcessSession = inProcessSession;\n\t\tthis.serviceProviders = serviceProviders;\n\t\tthis.tokenRegistry = new ProvenanceTokenRegistry();\n\t}\n\n\t/**\n\t * Executes code on the server with real-time streaming events via SSE.\n\t *\n\t * @param code - TypeScript code to execute\n\t * @param config - Optional execution configuration\n\t * @param onEvent - Callback for all streaming events (thinking, tool_start, tool_end, text, source, etc.)\n\t * @param onProgress - Legacy callback for progress events only (deprecated, use onEvent instead)\n\t */\n\tasync executeStream(\n\t\tcode: string,\n\t\tconfig?: Partial<ExecutionConfig>,\n\t\tonEvent?: (event: ATPEvent) => void,\n\t\tonProgress?: (message: string, fraction: number) => void\n\t): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tconst url = `${this.session.getBaseUrl()}/api/execute/stream`;\n\t\tconst body = JSON.stringify({ code, config });\n\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst fetchImpl = typeof fetch !== 'undefined' ? fetch : require('undici').fetch;\n\n\t\t\tfetchImpl(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t})\n\t\t\t\t.then(async (response: Response) => {\n\t\t\t\t\tif (!response.ok) {\n\t\t\t\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst reader = response.body?.getReader();\n\t\t\t\t\tif (!reader) {\n\t\t\t\t\t\tthrow new Error('Response body is not readable');\n\t\t\t\t\t}\n\n\t\t\t\t\tconst decoder = new TextDecoder();\n\t\t\t\t\tlet buffer = '';\n\t\t\t\t\tlet result: ExecutionResult | null = null;\n\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\tconst { done, value } = await reader.read();\n\n\t\t\t\t\t\tif (done) break;\n\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\t\t\t\tconst lines = buffer.split('\\n');\n\t\t\t\t\t\tbuffer = lines.pop() || '';\n\n\t\t\t\t\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\t\t\t\t\tconst line = lines[i];\n\n\t\t\t\t\t\t\tif (line && line.startsWith('event:')) {\n\t\t\t\t\t\t\t\tconst eventType = line.substring(6).trim();\n\n\t\t\t\t\t\t\t\tfor (let j = i + 1; j < lines.length; j++) {\n\t\t\t\t\t\t\t\t\tconst dataLine = lines[j];\n\t\t\t\t\t\t\t\t\tif (dataLine && dataLine.startsWith('data:')) {\n\t\t\t\t\t\t\t\t\t\tconst dataStr = dataLine.substring(5).trim();\n\t\t\t\t\t\t\t\t\t\tif (dataStr) {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tconst data = JSON.parse(dataStr);\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (onEvent) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst event: ATPEvent = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\tonEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (eventType === 'progress' && onProgress) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tonProgress(data.message, data.fraction);\n\t\t\t\t\t\t\t\t\t\t\t\t} else if (eventType === 'result') {\n\t\t\t\t\t\t\t\t\t\t\t\t\tresult = data as ExecutionResult;\n\t\t\t\t\t\t\t\t\t\t\t\t} else if (eventType === 'error') {\n\t\t\t\t\t\t\t\t\t\t\t\t\treject(new Error(data.message));\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\t\t\t\tlog.error('Failed to parse SSE data', { dataStr, error: e });\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(new Error('No result received from server'));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(reject);\n\t\t});\n\t}\n\n\t/**\n\t * Executes code on the server in a sandboxed environment.\n\t */\n\tasync execute(code: string, config?: Partial<ExecutionConfig>): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tconst hints = this.tokenRegistry.getRecentTokens(1000);\n\n\t\tconst detectedClientServices = {\n\t\t\thasLLM: !!this.serviceProviders.getLLM(),\n\t\t\thasApproval: !!this.serviceProviders.getApproval(),\n\t\t\thasEmbedding: !!this.serviceProviders.getEmbedding(),\n\t\t\thasTools: this.serviceProviders.hasTools(),\n\t\t};\n\n\t\tconst executionConfig = {\n\t\t\t...config,\n\t\t\tclientServices: {\n\t\t\t\t...detectedClientServices,\n\t\t\t\t...(config?.clientServices || {}),\n\t\t\t},\n\t\t\tprovenanceHints: hints.length > 0 ? hints : undefined,\n\t\t};\n\n\t\tthis.lastExecutionConfig = executionConfig;\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.execute(code, executionConfig)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/execute`;\n\t\t\tconst body = JSON.stringify({ code, config: executionConfig });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Execution failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Handles batch callbacks by executing them in parallel and resuming.\n\t */\n\tprivate async handleBatchCallbacksAndResume(\n\t\tpausedResult: ExecutionResult\n\t): Promise<ExecutionResult> {\n\t\tif (!pausedResult.needsCallbacks || pausedResult.needsCallbacks.length === 0) {\n\t\t\tthrow new Error('No batch callback requests in paused execution');\n\t\t}\n\n\t\tconst missingServiceIds = new Set(\n\t\t\tpausedResult.needsCallbacks\n\t\t\t\t.filter((cb) => !this.serviceProviders.hasServiceForCallback(cb.type))\n\t\t\t\t.map((cb) => cb.id)\n\t\t);\n\n\t\tif (missingServiceIds.size > 0) {\n\t\t\tconst missingServices = pausedResult.needsCallbacks.filter((cb) =>\n\t\t\t\tmissingServiceIds.has(cb.id)\n\t\t\t);\n\t\t\tconst explicitlyRequestedMissing = missingServices.filter((cb) =>\n\t\t\t\tthis.wasServiceExplicitlyRequested(cb.type)\n\t\t\t);\n\t\t\tconst unexpectedMissing = missingServices.filter(\n\t\t\t\t(cb) => !this.wasServiceExplicitlyRequested(cb.type)\n\t\t\t);\n\n\t\t\tif (explicitlyRequestedMissing.length > 0) {\n\t\t\t\treturn pausedResult;\n\t\t\t}\n\n\t\t\tconst errorMessage = `Missing service providers for callback types: ${unexpectedMissing.map((cb) => cb.type).join(', ')}`;\n\t\t\tlog.error(`Auto-handling batch paused execution without service providers: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tmissingServices: unexpectedMissing.map((cb) => ({\n\t\t\t\t\ttype: cb.type,\n\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\tid: cb.id,\n\t\t\t\t})),\n\t\t\t});\n\n\t\t\tconst existingCallbacks = pausedResult.needsCallbacks.filter(\n\t\t\t\t(cb) => !missingServiceIds.has(cb.id)\n\t\t\t);\n\n\t\t\tif (existingCallbacks.length > 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst existingResults = await Promise.all(\n\t\t\t\t\t\texistingCallbacks.map(async (cb) => {\n\t\t\t\t\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(cb.type, {\n\t\t\t\t\t\t\t\t...cb.payload,\n\t\t\t\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn { id: cb.id, result: callbackResult };\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\n\t\t\t\t\tconst allResults = pausedResult.needsCallbacks.map((cb) => {\n\t\t\t\t\t\tif (missingServiceIds.has(cb.id)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: cb.id,\n\t\t\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\t\t\t\tmessage: `${cb.type} service not provided by client`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn existingResults.find((r) => r.id === cb.id)!;\n\t\t\t\t\t});\n\n\t\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allResults);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tlog.error(`Error handling existing services in batch: ${errorMessage}`, {\n\t\t\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\t\t});\n\t\t\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\t\t\tid: cb.id,\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\t\tmessage: missingServiceIds.has(cb.id)\n\t\t\t\t\t\t\t\t? `${cb.type} service not provided by client`\n\t\t\t\t\t\t\t\t: errorMessage,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\t\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\t\tid: cb.id,\n\t\t\t\t\tresult: {\n\t\t\t\t\t\t__error: true,\n\t\t\t\t\t\tmessage: `${cb.type} service not provided by client`,\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst batchResults = await Promise.all(\n\t\t\t\tpausedResult.needsCallbacks.map(async (cb) => {\n\t\t\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(cb.type, {\n\t\t\t\t\t\t...cb.payload,\n\t\t\t\t\t\toperation: cb.operation,\n\t\t\t\t\t});\n\t\t\t\t\treturn { id: cb.id, result: callbackResult };\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, batchResults);\n\t\t} catch (error) {\n\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tlog.error(`Error handling batch callbacks: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackCount: pausedResult.needsCallbacks.length,\n\t\t\t});\n\n\t\t\tconst allErrorResults = pausedResult.needsCallbacks.map((cb) => ({\n\t\t\t\tid: cb.id,\n\t\t\t\tresult: {\n\t\t\t\t\t__error: true,\n\t\t\t\t\tmessage: errorMessage,\n\t\t\t\t},\n\t\t\t}));\n\t\t\treturn await this.resumeWithBatchResults(pausedResult.executionId, allErrorResults);\n\t\t}\n\t}\n\n\t/**\n\t * Handles a paused execution by processing the callback and resuming.\n\t */\n\tprivate async handlePauseAndResume(pausedResult: ExecutionResult): Promise<ExecutionResult> {\n\t\tif (!pausedResult.needsCallback) {\n\t\t\tthrow new Error('No callback request in paused execution');\n\t\t}\n\n\t\tif (!this.serviceProviders.hasServiceForCallback(pausedResult.needsCallback.type)) {\n\t\t\tconst wasExplicitlyRequested = this.wasServiceExplicitlyRequested(\n\t\t\t\tpausedResult.needsCallback.type\n\t\t\t);\n\n\t\t\tif (wasExplicitlyRequested) {\n\t\t\t\treturn pausedResult;\n\t\t\t}\n\n\t\t\tconst errorMessage = `${pausedResult.needsCallback.type} service not provided by client`;\n\t\t\tlog.error(`Auto-handling paused execution without service provider: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackType: pausedResult.needsCallback.type,\n\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t});\n\n\t\t\treturn await this.resume(pausedResult.executionId, {\n\t\t\t\t__error: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst callbackResult = await this.serviceProviders.handleCallback(\n\t\t\t\tpausedResult.needsCallback.type,\n\t\t\t\t{\n\t\t\t\t\t...pausedResult.needsCallback.payload,\n\t\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn await this.resume(pausedResult.executionId, callbackResult);\n\t\t} catch (error) {\n\t\t\tif (error instanceof ClientCallbackError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tlog.error(`Error handling callback: ${errorMessage}`, {\n\t\t\t\texecutionId: pausedResult.executionId,\n\t\t\t\tcallbackType: pausedResult.needsCallback.type,\n\t\t\t\toperation: pausedResult.needsCallback.operation,\n\t\t\t});\n\t\t\treturn await this.resume(pausedResult.executionId, {\n\t\t\t\t__error: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Check if a service was explicitly requested in clientServices config\n\t */\n\tprivate wasServiceExplicitlyRequested(callbackType: CallbackType): boolean {\n\t\tif (!this.lastExecutionConfig?.clientServices) {\n\t\t\treturn false;\n\t\t}\n\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasLLM;\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasApproval;\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasEmbedding;\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\treturn this.lastExecutionConfig.clientServices.hasTools;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Resumes a paused execution with a callback result.\n\t */\n\tasync resume(executionId: string, callbackResult: unknown): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.resume(executionId, callbackResult)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/resume/${executionId}`;\n\t\t\tconst body = JSON.stringify({ result: callbackResult });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Resume failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Resumes a paused execution with batch callback results.\n\t */\n\tprivate async resumeWithBatchResults(\n\t\texecutionId: string,\n\t\tbatchResults: Array<{ id: string; result: unknown }>\n\t): Promise<ExecutionResult> {\n\t\tawait this.session.ensureInitialized();\n\n\t\tlet result: ExecutionResult;\n\n\t\tif (this.inProcessSession) {\n\t\t\tresult = (await this.inProcessSession.resumeWithBatchResults(\n\t\t\t\texecutionId,\n\t\t\t\tbatchResults\n\t\t\t)) as ExecutionResult;\n\t\t} else {\n\t\t\tconst url = `${this.session.getBaseUrl()}/api/resume/${executionId}`;\n\t\t\tconst body = JSON.stringify({ results: batchResults });\n\t\t\tconst headers = await this.session.prepareHeaders('POST', url, body);\n\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders,\n\t\t\t\tbody,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = (await response.json()) as { error: string };\n\t\t\t\tthrow new Error(`Batch resume failed: ${error.error || response.statusText}`);\n\t\t\t}\n\n\t\t\tresult = (await response.json()) as ExecutionResult;\n\t\t}\n\n\t\tif (result.provenanceTokens && result.provenanceTokens.length > 0) {\n\t\t\tfor (const { token } of result.provenanceTokens) {\n\t\t\t\tthis.tokenRegistry.add(token);\n\t\t\t}\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallbacks) {\n\t\t\treturn await this.handleBatchCallbacksAndResume(result);\n\t\t}\n\n\t\tif (result.status === ExecutionStatus.PAUSED && result.needsCallback) {\n\t\t\treturn await this.handlePauseAndResume(result);\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","import { CallbackType, ToolOperation } from '@mondaydotcomorg/atp-protocol';\nimport type {\n\tClientLLMHandler,\n\tClientApprovalHandler,\n\tClientEmbeddingHandler,\n\tClientServiceProviders,\n\tClientTool,\n\tClientToolDefinition,\n\tClientToolHandler,\n} from '@mondaydotcomorg/atp-protocol';\n\nconst LLMOperation = {\n\tCALL: 'call',\n\tEXTRACT: 'extract',\n\tCLASSIFY: 'classify',\n} as const;\n\nconst EmbeddingOperation = {\n\tEMBED: 'embed',\n\tSEARCH: 'search',\n} as const;\n\nexport class ServiceProviders {\n\tprivate providers: ClientServiceProviders = {};\n\tprivate toolHandlers: Map<string, ClientToolHandler> = new Map();\n\n\tconstructor(providers?: ClientServiceProviders) {\n\t\tthis.providers = providers || {};\n\n\t\tif (providers?.tools) {\n\t\t\tfor (const tool of providers.tools) {\n\t\t\t\tthis.toolHandlers.set(tool.name, tool.handler);\n\t\t\t}\n\t\t}\n\t}\n\n\tprovideLLM(handler: ClientLLMHandler): void {\n\t\tthis.providers.llm = handler;\n\t}\n\n\tprovideApproval(handler: ClientApprovalHandler): void {\n\t\tthis.providers.approval = handler;\n\t}\n\n\tprovideEmbedding(handler: ClientEmbeddingHandler): void {\n\t\tthis.providers.embedding = handler;\n\t}\n\n\tprovideTools(tools: ClientTool[]): void {\n\t\tthis.providers.tools = tools;\n\t\tfor (const tool of tools) {\n\t\t\tthis.toolHandlers.set(tool.name, tool.handler);\n\t\t}\n\t}\n\n\tgetLLM(): ClientLLMHandler | undefined {\n\t\treturn this.providers.llm;\n\t}\n\n\tgetApproval(): ClientApprovalHandler | undefined {\n\t\treturn this.providers.approval;\n\t}\n\n\tgetEmbedding(): ClientEmbeddingHandler | undefined {\n\t\treturn this.providers.embedding;\n\t}\n\n\tgetTools(): ClientTool[] | undefined {\n\t\treturn this.providers.tools;\n\t}\n\n\t/**\n\t * Get tool definitions (without handlers) for sending to server\n\t */\n\tgetToolDefinitions(): ClientToolDefinition[] {\n\t\tif (!this.providers.tools) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn this.providers.tools.map((tool) => {\n\t\t\tconst { handler, ...definition } = tool;\n\t\t\treturn definition;\n\t\t});\n\t}\n\n\t/**\n\t * Check if client has tools\n\t */\n\thasTools(): boolean {\n\t\treturn !!(this.providers.tools && this.providers.tools.length > 0);\n\t}\n\n\t/**\n\t * Check if client has any services or tools\n\t */\n\thasAnyServices(): boolean {\n\t\treturn !!(\n\t\t\tthis.providers.llm ||\n\t\t\tthis.providers.approval ||\n\t\t\tthis.providers.embedding ||\n\t\t\tthis.hasTools()\n\t\t);\n\t}\n\n\t/**\n\t * Check if client has a service for a specific callback type\n\t */\n\thasServiceForCallback(callbackType: CallbackType): boolean {\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\treturn !!this.providers.llm;\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\treturn !!this.providers.approval;\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\treturn !!this.providers.embedding;\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\treturn this.hasTools();\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync handleCallback(callbackType: CallbackType, payload: any): Promise<any> {\n\t\tif (payload.operation === 'batch_parallel' && payload.calls) {\n\t\t\treturn await Promise.all(\n\t\t\t\tpayload.calls.map(async (call: any) => {\n\t\t\t\t\treturn await this.handleCallback(call.type, {\n\t\t\t\t\t\t...call.payload,\n\t\t\t\t\t\toperation: call.operation,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tswitch (callbackType) {\n\t\t\tcase CallbackType.LLM:\n\t\t\t\tif (!this.providers.llm) {\n\t\t\t\t\tthrow new Error('LLM service not provided by client');\n\t\t\t\t}\n\t\t\t\tif (payload.operation === LLMOperation.CALL) {\n\t\t\t\t\treturn await this.providers.llm.call(payload.prompt, payload.options);\n\t\t\t\t} else if (payload.operation === LLMOperation.EXTRACT && this.providers.llm.extract) {\n\t\t\t\t\treturn await this.providers.llm.extract(payload.prompt, payload.schema, payload.options);\n\t\t\t\t} else if (payload.operation === LLMOperation.CLASSIFY && this.providers.llm.classify) {\n\t\t\t\t\treturn await this.providers.llm.classify(\n\t\t\t\t\t\tpayload.text,\n\t\t\t\t\t\tpayload.categories,\n\t\t\t\t\t\tpayload.options\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported LLM operation: ${payload.operation}`);\n\n\t\t\tcase CallbackType.APPROVAL:\n\t\t\t\tif (!this.providers.approval) {\n\t\t\t\t\tthrow new Error('Approval service not provided by client');\n\t\t\t\t}\n\t\t\t\tconst contextWithExecutionId = payload.context\n\t\t\t\t\t? { ...payload.context, executionId: payload.executionId }\n\t\t\t\t\t: { executionId: payload.executionId };\n\t\t\t\treturn await this.providers.approval.request(payload.message, contextWithExecutionId);\n\n\t\t\tcase CallbackType.EMBEDDING:\n\t\t\t\tif (!this.providers.embedding) {\n\t\t\t\t\tthrow new Error('Embedding service not provided by client');\n\t\t\t\t}\n\t\t\t\tif (payload.operation === EmbeddingOperation.EMBED) {\n\t\t\t\t\treturn await this.providers.embedding.embed(payload.text);\n\t\t\t\t} else if (payload.operation === EmbeddingOperation.SEARCH) {\n\t\t\t\t\tconst queryEmbedding = await this.providers.embedding.embed(payload.query);\n\t\t\t\t\treturn queryEmbedding;\n\t\t\t\t} else if (payload.operation === 'similarity' && this.providers.embedding.similarity) {\n\t\t\t\t\treturn await this.providers.embedding.similarity(payload.text1, payload.text2);\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported embedding operation: ${payload.operation}`);\n\n\t\t\tcase CallbackType.TOOL:\n\t\t\t\tif (payload.operation === ToolOperation.CALL) {\n\t\t\t\t\tconst toolName = payload.toolName;\n\t\t\t\t\tconst handler = this.toolHandlers.get(toolName);\n\n\t\t\t\t\tif (!handler) {\n\t\t\t\t\t\tthrow new Error(`Tool '${toolName}' not found in client tools`);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = await handler(payload.input);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tthrow new Error(`Unsupported tool operation: ${payload.operation}`);\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unknown callback type: ${callbackType}`);\n\t\t}\n\t}\n}\n"]}
|
package/dist/core/index.js
CHANGED
|
@@ -22,6 +22,7 @@ var BaseSession = class {
|
|
|
22
22
|
tokenRotateAt;
|
|
23
23
|
initPromise;
|
|
24
24
|
refreshPromise;
|
|
25
|
+
storedInitParams;
|
|
25
26
|
tokenRefreshConfig = {
|
|
26
27
|
enabled: true,
|
|
27
28
|
bufferMs: 1e3
|
|
@@ -35,6 +36,19 @@ var BaseSession = class {
|
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
39
|
+
* Perform token refresh by re-initializing the session.
|
|
40
|
+
* Resets the init guard and calls init() again with the stored params,
|
|
41
|
+
* effectively creating a fresh session without depending on the old
|
|
42
|
+
* session still existing in the server's cache.
|
|
43
|
+
*/
|
|
44
|
+
async doRefreshToken() {
|
|
45
|
+
if (!this.storedInitParams) {
|
|
46
|
+
throw new Error("Cannot refresh token: init params not stored. Was init() called?");
|
|
47
|
+
}
|
|
48
|
+
this.initPromise = void 0;
|
|
49
|
+
await this.init(this.storedInitParams.clientInfo, this.storedInitParams.tools, this.storedInitParams.services);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
38
52
|
* Gets the unique client ID.
|
|
39
53
|
*/
|
|
40
54
|
getClientId() {
|
|
@@ -64,8 +78,8 @@ var BaseSession = class {
|
|
|
64
78
|
* This is called automatically before requests when autoRefresh is enabled.
|
|
65
79
|
* Uses a shared promise to prevent concurrent refresh requests.
|
|
66
80
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
81
|
+
* Refresh works by re-initializing the session (calling init() again),
|
|
82
|
+
* so it does not depend on the old session still existing in the server's cache.
|
|
69
83
|
*/
|
|
70
84
|
async refreshTokenIfNeeded() {
|
|
71
85
|
if (!this.tokenRefreshConfig.enabled) {
|
|
@@ -98,10 +112,11 @@ var BaseSession = class {
|
|
|
98
112
|
this.tokenRotateAt = credentials.tokenRotateAt;
|
|
99
113
|
}
|
|
100
114
|
/**
|
|
101
|
-
* Check if URL should skip token refresh (to avoid infinite recursion)
|
|
115
|
+
* Check if URL should skip token refresh (to avoid infinite recursion).
|
|
116
|
+
* Since refresh now calls init(), we only need to guard the init path.
|
|
102
117
|
*/
|
|
103
118
|
shouldSkipRefreshForUrl(url) {
|
|
104
|
-
return url.includes("/api/
|
|
119
|
+
return url.includes("/api/init");
|
|
105
120
|
}
|
|
106
121
|
};
|
|
107
122
|
|
|
@@ -125,6 +140,11 @@ var ClientSession = class extends BaseSession {
|
|
|
125
140
|
* The server generates and returns a unique client ID and token.
|
|
126
141
|
*/
|
|
127
142
|
async init(clientInfo, tools, services) {
|
|
143
|
+
this.storedInitParams = {
|
|
144
|
+
clientInfo,
|
|
145
|
+
tools,
|
|
146
|
+
services
|
|
147
|
+
};
|
|
128
148
|
if (this.initPromise) {
|
|
129
149
|
await this.initPromise;
|
|
130
150
|
return {
|
|
@@ -186,32 +206,6 @@ var ClientSession = class extends BaseSession {
|
|
|
186
206
|
return this.baseUrl;
|
|
187
207
|
}
|
|
188
208
|
/**
|
|
189
|
-
* Perform the actual token refresh via HTTP
|
|
190
|
-
*/
|
|
191
|
-
async doRefreshToken() {
|
|
192
|
-
const url = `${this.baseUrl}/api/token/refresh`;
|
|
193
|
-
const body = JSON.stringify({
|
|
194
|
-
clientId: this.clientId
|
|
195
|
-
});
|
|
196
|
-
const headers = {
|
|
197
|
-
"Content-Type": "application/json",
|
|
198
|
-
...this.customHeaders,
|
|
199
|
-
"X-Client-ID": this.clientId,
|
|
200
|
-
Authorization: `Bearer ${this.clientToken}`
|
|
201
|
-
};
|
|
202
|
-
const response = await fetch(url, {
|
|
203
|
-
method: "POST",
|
|
204
|
-
headers,
|
|
205
|
-
body
|
|
206
|
-
});
|
|
207
|
-
if (!response.ok) {
|
|
208
|
-
const errorText = await response.text();
|
|
209
|
-
throw new Error(`Token refresh failed: ${response.status} ${response.statusText} - ${errorText}`);
|
|
210
|
-
}
|
|
211
|
-
const data = await response.json();
|
|
212
|
-
this.updateTokenState(data);
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
209
|
* Prepares headers for a request, refreshing token if needed and calling preRequest hook if configured
|
|
216
210
|
*/
|
|
217
211
|
async prepareHeaders(method, url, body) {
|
|
@@ -252,6 +246,11 @@ var InProcessSession = class extends BaseSession {
|
|
|
252
246
|
* Initializes the client session with the in-process server.
|
|
253
247
|
*/
|
|
254
248
|
async init(clientInfo, tools, services) {
|
|
249
|
+
this.storedInitParams = {
|
|
250
|
+
clientInfo,
|
|
251
|
+
tools,
|
|
252
|
+
services
|
|
253
|
+
};
|
|
255
254
|
if (this.initPromise) {
|
|
256
255
|
await this.initPromise;
|
|
257
256
|
return {
|
|
@@ -308,20 +307,6 @@ var InProcessSession = class extends BaseSession {
|
|
|
308
307
|
return "";
|
|
309
308
|
}
|
|
310
309
|
/**
|
|
311
|
-
* Perform the actual token refresh via in-process server call
|
|
312
|
-
*/
|
|
313
|
-
async doRefreshToken() {
|
|
314
|
-
const ctx = await this.createContext({
|
|
315
|
-
method: "POST",
|
|
316
|
-
path: "/api/token/refresh",
|
|
317
|
-
body: {
|
|
318
|
-
clientId: this.clientId
|
|
319
|
-
}
|
|
320
|
-
});
|
|
321
|
-
const result = await this.server.handleTokenRefresh(ctx);
|
|
322
|
-
this.updateTokenState(result);
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
310
|
* Prepares headers for a request, refreshing token if needed
|
|
326
311
|
*/
|
|
327
312
|
async prepareHeaders(_method, url, _body) {
|