@adcp/client 3.7.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp.js +42 -3
- package/dist/lib/adapters/content-standards-adapter.d.ts +106 -0
- package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/content-standards-adapter.js +199 -0
- package/dist/lib/adapters/content-standards-adapter.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +18 -0
- package/dist/lib/adapters/index.d.ts.map +1 -0
- package/dist/lib/adapters/index.js +41 -0
- package/dist/lib/adapters/index.js.map +1 -0
- package/dist/lib/adapters/property-list-adapter.d.ts +123 -0
- package/dist/lib/adapters/property-list-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/property-list-adapter.js +212 -0
- package/dist/lib/adapters/property-list-adapter.js.map +1 -0
- package/dist/lib/adapters/proposal-manager.d.ts +142 -0
- package/dist/lib/adapters/proposal-manager.d.ts.map +1 -0
- package/dist/lib/adapters/proposal-manager.js +184 -0
- package/dist/lib/adapters/proposal-manager.js.map +1 -0
- package/dist/lib/adapters/si-session-manager.d.ts +161 -0
- package/dist/lib/adapters/si-session-manager.d.ts.map +1 -0
- package/dist/lib/adapters/si-session-manager.js +320 -0
- package/dist/lib/adapters/si-session-manager.js.map +1 -0
- package/dist/lib/agents/index.generated.d.ts +109 -33
- package/dist/lib/agents/index.generated.d.ts.map +1 -1
- package/dist/lib/agents/index.generated.js +162 -36
- package/dist/lib/agents/index.generated.js.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.d.ts +5 -7
- package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
- package/dist/lib/core/ADCPMultiAgentClient.js +47 -35
- package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
- package/dist/lib/core/AgentClient.d.ts +13 -6
- package/dist/lib/core/AgentClient.d.ts.map +1 -1
- package/dist/lib/core/AgentClient.js +23 -13
- package/dist/lib/core/AgentClient.js.map +1 -1
- package/dist/lib/core/AsyncHandler.d.ts +1 -2
- package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
- package/dist/lib/core/AsyncHandler.js +0 -3
- package/dist/lib/core/AsyncHandler.js.map +1 -1
- package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
- package/dist/lib/core/ResponseValidator.js +0 -1
- package/dist/lib/core/ResponseValidator.js.map +1 -1
- package/dist/lib/core/SingleAgentClient.d.ts +102 -10
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
- package/dist/lib/core/SingleAgentClient.js +244 -17
- package/dist/lib/core/SingleAgentClient.js.map +1 -1
- package/dist/lib/discovery/property-crawler.d.ts +13 -2
- package/dist/lib/discovery/property-crawler.d.ts.map +1 -1
- package/dist/lib/discovery/property-crawler.js +48 -13
- package/dist/lib/discovery/property-crawler.js.map +1 -1
- package/dist/lib/discovery/types.d.ts +7 -1
- package/dist/lib/discovery/types.d.ts.map +1 -1
- package/dist/lib/index.d.ts +13 -4
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +79 -5
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/types/core.generated.d.ts +502 -238
- package/dist/lib/types/core.generated.d.ts.map +1 -1
- package/dist/lib/types/core.generated.js +2 -2
- package/dist/lib/types/core.generated.js.map +1 -1
- package/dist/lib/types/schemas.generated.d.ts +7237 -2284
- package/dist/lib/types/schemas.generated.d.ts.map +1 -1
- package/dist/lib/types/schemas.generated.js +1368 -461
- package/dist/lib/types/schemas.generated.js.map +1 -1
- package/dist/lib/types/tools.generated.d.ts +3128 -507
- package/dist/lib/types/tools.generated.d.ts.map +1 -1
- package/dist/lib/types/tools.generated.js +1 -1
- package/dist/lib/types/tools.generated.js.map +1 -1
- package/dist/lib/utils/capabilities.d.ts +98 -0
- package/dist/lib/utils/capabilities.d.ts.map +1 -0
- package/dist/lib/utils/capabilities.js +155 -0
- package/dist/lib/utils/capabilities.js.map +1 -0
- package/dist/lib/utils/creative-adapter.d.ts +87 -0
- package/dist/lib/utils/creative-adapter.d.ts.map +1 -0
- package/dist/lib/utils/creative-adapter.js +125 -0
- package/dist/lib/utils/creative-adapter.js.map +1 -0
- package/dist/lib/utils/format-assets.d.ts +4 -16
- package/dist/lib/utils/format-assets.d.ts.map +1 -1
- package/dist/lib/utils/format-assets.js +16 -14
- package/dist/lib/utils/format-assets.js.map +1 -1
- package/dist/lib/utils/format-renders.d.ts +82 -0
- package/dist/lib/utils/format-renders.d.ts.map +1 -0
- package/dist/lib/utils/format-renders.js +137 -0
- package/dist/lib/utils/format-renders.js.map +1 -0
- package/dist/lib/utils/index.d.ts +2 -1
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js +13 -3
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/preview-normalizer.d.ts +109 -0
- package/dist/lib/utils/preview-normalizer.d.ts.map +1 -0
- package/dist/lib/utils/preview-normalizer.js +122 -0
- package/dist/lib/utils/preview-normalizer.js.map +1 -0
- package/dist/lib/utils/pricing-adapter.d.ts +121 -0
- package/dist/lib/utils/pricing-adapter.d.ts.map +1 -0
- package/dist/lib/utils/pricing-adapter.js +213 -0
- package/dist/lib/utils/pricing-adapter.js.map +1 -0
- package/dist/lib/utils/response-unwrapper.d.ts +2 -2
- package/dist/lib/utils/response-unwrapper.d.ts.map +1 -1
- package/dist/lib/utils/response-unwrapper.js +2 -2
- package/dist/lib/utils/response-unwrapper.js.map +1 -1
- package/dist/lib/version.d.ts +15 -7
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +20 -11
- package/dist/lib/version.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sponsored Intelligence (SI) Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Server-side adapter for managing SI conversational commerce sessions.
|
|
5
|
+
* Brands use this to handle session lifecycle and message routing to their
|
|
6
|
+
* conversational AI systems.
|
|
7
|
+
*
|
|
8
|
+
* This is a stub implementation that doesn't support sessions.
|
|
9
|
+
* Brands should extend or replace this with their conversation logic.
|
|
10
|
+
*/
|
|
11
|
+
import type { SIGetOfferingRequest, SIGetOfferingResponse, SIInitiateSessionRequest, SIInitiateSessionResponse, SISendMessageRequest, SISendMessageResponse, SITerminateSessionRequest, SITerminateSessionResponse, SICapabilities } from '../types/tools.generated';
|
|
12
|
+
/**
|
|
13
|
+
* Internal session state
|
|
14
|
+
*/
|
|
15
|
+
export interface SISession {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
lastActiveAt: string;
|
|
19
|
+
identity: any;
|
|
20
|
+
mediaBuyId?: string;
|
|
21
|
+
offeringId?: string;
|
|
22
|
+
offeringToken?: string;
|
|
23
|
+
placement?: string;
|
|
24
|
+
negotiatedCapabilities?: SICapabilities;
|
|
25
|
+
status: 'active' | 'pending_handoff' | 'complete' | 'terminated';
|
|
26
|
+
messageCount: number;
|
|
27
|
+
conversationHistory: {
|
|
28
|
+
role: 'user' | 'brand';
|
|
29
|
+
content: string;
|
|
30
|
+
timestamp: string;
|
|
31
|
+
}[];
|
|
32
|
+
metadata?: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Abstract interface for SI session managers.
|
|
36
|
+
* Brands implement this to provide their conversational AI logic.
|
|
37
|
+
*/
|
|
38
|
+
export interface ISISessionManager {
|
|
39
|
+
/**
|
|
40
|
+
* Check if SI is supported by this server
|
|
41
|
+
*/
|
|
42
|
+
isSupported(): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Get offering details for display to user
|
|
45
|
+
*/
|
|
46
|
+
getOffering(request: SIGetOfferingRequest): Promise<SIGetOfferingResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Initiate a new SI session
|
|
49
|
+
*/
|
|
50
|
+
initiateSession(request: SIInitiateSessionRequest): Promise<SIInitiateSessionResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Handle a message within a session
|
|
53
|
+
*/
|
|
54
|
+
sendMessage(request: SISendMessageRequest): Promise<SISendMessageResponse>;
|
|
55
|
+
/**
|
|
56
|
+
* Terminate a session
|
|
57
|
+
*/
|
|
58
|
+
terminateSession(request: SITerminateSessionRequest): Promise<SITerminateSessionResponse>;
|
|
59
|
+
/**
|
|
60
|
+
* Get session state (for internal use)
|
|
61
|
+
*/
|
|
62
|
+
getSession(sessionId: string): Promise<SISession | null>;
|
|
63
|
+
/**
|
|
64
|
+
* Clean up stale sessions
|
|
65
|
+
*/
|
|
66
|
+
cleanupStaleSessions(maxAgeMinutes: number): Promise<number>;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Error codes for SI operations
|
|
70
|
+
*/
|
|
71
|
+
export declare const SIErrorCodes: {
|
|
72
|
+
readonly NOT_SUPPORTED: "si_not_supported";
|
|
73
|
+
readonly SESSION_NOT_FOUND: "session_not_found";
|
|
74
|
+
readonly SESSION_EXPIRED: "session_expired";
|
|
75
|
+
readonly SESSION_TERMINATED: "session_already_terminated";
|
|
76
|
+
readonly OFFERING_NOT_FOUND: "offering_not_found";
|
|
77
|
+
readonly OFFERING_UNAVAILABLE: "offering_unavailable";
|
|
78
|
+
readonly INVALID_MESSAGE: "invalid_message";
|
|
79
|
+
readonly CAPABILITY_NOT_SUPPORTED: "capability_not_supported";
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Stub implementation of SISessionManager.
|
|
83
|
+
* Uses in-memory storage and returns not-supported errors.
|
|
84
|
+
*
|
|
85
|
+
* Brands should extend this class or provide their own implementation
|
|
86
|
+
* that integrates with their conversational AI systems.
|
|
87
|
+
*/
|
|
88
|
+
export declare class SISessionManager implements ISISessionManager {
|
|
89
|
+
private sessions;
|
|
90
|
+
private offerings;
|
|
91
|
+
private nextSessionId;
|
|
92
|
+
/**
|
|
93
|
+
* Check if SI is supported.
|
|
94
|
+
* Override this to return true when implementing real logic.
|
|
95
|
+
*/
|
|
96
|
+
isSupported(): boolean;
|
|
97
|
+
getOffering(request: SIGetOfferingRequest): Promise<SIGetOfferingResponse>;
|
|
98
|
+
initiateSession(request: SIInitiateSessionRequest): Promise<SIInitiateSessionResponse>;
|
|
99
|
+
sendMessage(request: SISendMessageRequest): Promise<SISendMessageResponse>;
|
|
100
|
+
terminateSession(request: SITerminateSessionRequest): Promise<SITerminateSessionResponse>;
|
|
101
|
+
/**
|
|
102
|
+
* Generate ACP handoff data for checkout.
|
|
103
|
+
* Override to implement actual checkout flow integration.
|
|
104
|
+
*/
|
|
105
|
+
protected generateACPHandoff(session: SISession, terminationContext?: SITerminateSessionRequest['termination_context']): Promise<SITerminateSessionResponse['acp_handoff']>;
|
|
106
|
+
getSession(sessionId: string): Promise<SISession | null>;
|
|
107
|
+
cleanupStaleSessions(maxAgeMinutes: number): Promise<number>;
|
|
108
|
+
/**
|
|
109
|
+
* Generate a unique session ID.
|
|
110
|
+
*/
|
|
111
|
+
protected generateSessionId(): string;
|
|
112
|
+
/**
|
|
113
|
+
* Negotiate capabilities between host and brand.
|
|
114
|
+
* Override to customize capability negotiation.
|
|
115
|
+
*/
|
|
116
|
+
protected negotiateCapabilities(hostCapabilities?: SICapabilities): SICapabilities;
|
|
117
|
+
/**
|
|
118
|
+
* Generate initial response when session is created.
|
|
119
|
+
* Override to implement actual greeting/welcome logic.
|
|
120
|
+
*/
|
|
121
|
+
protected generateInitialResponse(session: SISession, context: string): Promise<{
|
|
122
|
+
message?: string;
|
|
123
|
+
ui_elements?: any[];
|
|
124
|
+
}>;
|
|
125
|
+
/**
|
|
126
|
+
* Generate response to a user message.
|
|
127
|
+
* Override to implement actual conversational AI logic.
|
|
128
|
+
*/
|
|
129
|
+
protected generateResponse(session: SISession, request: SISendMessageRequest): Promise<{
|
|
130
|
+
message?: string;
|
|
131
|
+
ui_elements?: any[];
|
|
132
|
+
}>;
|
|
133
|
+
/**
|
|
134
|
+
* Generate a summary of the conversation.
|
|
135
|
+
* Override to implement actual summarization logic.
|
|
136
|
+
*/
|
|
137
|
+
protected generateConversationSummary(session: SISession): Promise<string>;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Example of an AI-powered SI session manager (stub).
|
|
141
|
+
* Shows how brands might extend the base class.
|
|
142
|
+
*/
|
|
143
|
+
export declare class AISISessionManager extends SISessionManager {
|
|
144
|
+
private aiEndpoint?;
|
|
145
|
+
private brandConfig?;
|
|
146
|
+
constructor(config?: {
|
|
147
|
+
aiEndpoint?: string;
|
|
148
|
+
brandName?: string;
|
|
149
|
+
welcomeMessage?: string;
|
|
150
|
+
});
|
|
151
|
+
isSupported(): boolean;
|
|
152
|
+
protected generateInitialResponse(session: SISession, context: string): Promise<{
|
|
153
|
+
message?: string;
|
|
154
|
+
ui_elements?: any[];
|
|
155
|
+
}>;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Default singleton instance for servers that don't support SI
|
|
159
|
+
*/
|
|
160
|
+
export declare const defaultSISessionManager: SISessionManager;
|
|
161
|
+
//# sourceMappingURL=si-session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"si-session-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/si-session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sponsored Intelligence (SI) Session Manager
|
|
4
|
+
*
|
|
5
|
+
* Server-side adapter for managing SI conversational commerce sessions.
|
|
6
|
+
* Brands use this to handle session lifecycle and message routing to their
|
|
7
|
+
* conversational AI systems.
|
|
8
|
+
*
|
|
9
|
+
* This is a stub implementation that doesn't support sessions.
|
|
10
|
+
* Brands should extend or replace this with their conversation logic.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.defaultSISessionManager = exports.AISISessionManager = exports.SISessionManager = exports.SIErrorCodes = void 0;
|
|
14
|
+
/**
|
|
15
|
+
* Error codes for SI operations
|
|
16
|
+
*/
|
|
17
|
+
exports.SIErrorCodes = {
|
|
18
|
+
NOT_SUPPORTED: 'si_not_supported',
|
|
19
|
+
SESSION_NOT_FOUND: 'session_not_found',
|
|
20
|
+
SESSION_EXPIRED: 'session_expired',
|
|
21
|
+
SESSION_TERMINATED: 'session_already_terminated',
|
|
22
|
+
OFFERING_NOT_FOUND: 'offering_not_found',
|
|
23
|
+
OFFERING_UNAVAILABLE: 'offering_unavailable',
|
|
24
|
+
INVALID_MESSAGE: 'invalid_message',
|
|
25
|
+
CAPABILITY_NOT_SUPPORTED: 'capability_not_supported',
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Stub implementation of SISessionManager.
|
|
29
|
+
* Uses in-memory storage and returns not-supported errors.
|
|
30
|
+
*
|
|
31
|
+
* Brands should extend this class or provide their own implementation
|
|
32
|
+
* that integrates with their conversational AI systems.
|
|
33
|
+
*/
|
|
34
|
+
class SISessionManager {
|
|
35
|
+
sessions = new Map();
|
|
36
|
+
offerings = new Map(); // Offering cache
|
|
37
|
+
nextSessionId = 1;
|
|
38
|
+
/**
|
|
39
|
+
* Check if SI is supported.
|
|
40
|
+
* Override this to return true when implementing real logic.
|
|
41
|
+
*/
|
|
42
|
+
isSupported() {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
async getOffering(request) {
|
|
46
|
+
if (!this.isSupported()) {
|
|
47
|
+
return {
|
|
48
|
+
available: false,
|
|
49
|
+
unavailable_reason: 'SI not supported by this server',
|
|
50
|
+
errors: [
|
|
51
|
+
{
|
|
52
|
+
code: exports.SIErrorCodes.NOT_SUPPORTED,
|
|
53
|
+
message: 'Sponsored Intelligence is not supported by this server',
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
// Override in subclass to implement actual offering lookup
|
|
59
|
+
return {
|
|
60
|
+
available: false,
|
|
61
|
+
unavailable_reason: 'Offering not found',
|
|
62
|
+
errors: [
|
|
63
|
+
{
|
|
64
|
+
code: exports.SIErrorCodes.OFFERING_NOT_FOUND,
|
|
65
|
+
message: `Offering not found: ${request.offering_id}`,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async initiateSession(request) {
|
|
71
|
+
if (!this.isSupported()) {
|
|
72
|
+
return {
|
|
73
|
+
session_id: '',
|
|
74
|
+
errors: [
|
|
75
|
+
{
|
|
76
|
+
code: exports.SIErrorCodes.NOT_SUPPORTED,
|
|
77
|
+
message: 'Sponsored Intelligence is not supported by this server',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// Create session
|
|
83
|
+
const sessionId = this.generateSessionId();
|
|
84
|
+
const now = new Date().toISOString();
|
|
85
|
+
const session = {
|
|
86
|
+
sessionId,
|
|
87
|
+
createdAt: now,
|
|
88
|
+
lastActiveAt: now,
|
|
89
|
+
identity: request.identity,
|
|
90
|
+
mediaBuyId: request.media_buy_id,
|
|
91
|
+
offeringId: request.offering_id,
|
|
92
|
+
offeringToken: request.offering_token,
|
|
93
|
+
placement: request.placement,
|
|
94
|
+
negotiatedCapabilities: this.negotiateCapabilities(request.supported_capabilities),
|
|
95
|
+
status: 'active',
|
|
96
|
+
messageCount: 0,
|
|
97
|
+
conversationHistory: [],
|
|
98
|
+
};
|
|
99
|
+
this.sessions.set(sessionId, session);
|
|
100
|
+
// Generate initial response
|
|
101
|
+
const initialResponse = await this.generateInitialResponse(session, request.context);
|
|
102
|
+
return {
|
|
103
|
+
session_id: sessionId,
|
|
104
|
+
response: initialResponse,
|
|
105
|
+
negotiated_capabilities: session.negotiatedCapabilities,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async sendMessage(request) {
|
|
109
|
+
if (!this.isSupported()) {
|
|
110
|
+
return {
|
|
111
|
+
session_id: request.session_id,
|
|
112
|
+
session_status: 'complete',
|
|
113
|
+
errors: [
|
|
114
|
+
{
|
|
115
|
+
code: exports.SIErrorCodes.NOT_SUPPORTED,
|
|
116
|
+
message: 'Sponsored Intelligence is not supported by this server',
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const session = await this.getSession(request.session_id);
|
|
122
|
+
if (!session) {
|
|
123
|
+
return {
|
|
124
|
+
session_id: request.session_id,
|
|
125
|
+
session_status: 'complete',
|
|
126
|
+
errors: [
|
|
127
|
+
{
|
|
128
|
+
code: exports.SIErrorCodes.SESSION_NOT_FOUND,
|
|
129
|
+
message: `Session not found: ${request.session_id}`,
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (session.status === 'terminated' || session.status === 'complete') {
|
|
135
|
+
return {
|
|
136
|
+
session_id: request.session_id,
|
|
137
|
+
session_status: 'complete',
|
|
138
|
+
errors: [
|
|
139
|
+
{
|
|
140
|
+
code: exports.SIErrorCodes.SESSION_TERMINATED,
|
|
141
|
+
message: 'Session has already been terminated',
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// Record user message
|
|
147
|
+
if (request.message) {
|
|
148
|
+
session.conversationHistory.push({
|
|
149
|
+
role: 'user',
|
|
150
|
+
content: request.message,
|
|
151
|
+
timestamp: new Date().toISOString(),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
session.messageCount++;
|
|
155
|
+
session.lastActiveAt = new Date().toISOString();
|
|
156
|
+
// Generate response
|
|
157
|
+
const response = await this.generateResponse(session, request);
|
|
158
|
+
// Record brand response
|
|
159
|
+
if (response.message) {
|
|
160
|
+
session.conversationHistory.push({
|
|
161
|
+
role: 'brand',
|
|
162
|
+
content: response.message,
|
|
163
|
+
timestamp: new Date().toISOString(),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
this.sessions.set(session.sessionId, session);
|
|
167
|
+
return {
|
|
168
|
+
session_id: session.sessionId,
|
|
169
|
+
response,
|
|
170
|
+
session_status: session.status,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async terminateSession(request) {
|
|
174
|
+
if (!this.isSupported()) {
|
|
175
|
+
return {
|
|
176
|
+
session_id: request.session_id,
|
|
177
|
+
terminated: false,
|
|
178
|
+
errors: [
|
|
179
|
+
{
|
|
180
|
+
code: exports.SIErrorCodes.NOT_SUPPORTED,
|
|
181
|
+
message: 'Sponsored Intelligence is not supported by this server',
|
|
182
|
+
},
|
|
183
|
+
],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const session = await this.getSession(request.session_id);
|
|
187
|
+
if (!session) {
|
|
188
|
+
return {
|
|
189
|
+
session_id: request.session_id,
|
|
190
|
+
terminated: false,
|
|
191
|
+
errors: [
|
|
192
|
+
{
|
|
193
|
+
code: exports.SIErrorCodes.SESSION_NOT_FOUND,
|
|
194
|
+
message: `Session not found: ${request.session_id}`,
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// Update session status
|
|
200
|
+
session.status = 'terminated';
|
|
201
|
+
this.sessions.set(session.sessionId, session);
|
|
202
|
+
// Generate ACP handoff data if this is a transaction handoff
|
|
203
|
+
let acpHandoff;
|
|
204
|
+
if (request.reason === 'handoff_transaction') {
|
|
205
|
+
acpHandoff = await this.generateACPHandoff(session, request.termination_context);
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
session_id: session.sessionId,
|
|
209
|
+
terminated: true,
|
|
210
|
+
acp_handoff: acpHandoff,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generate ACP handoff data for checkout.
|
|
215
|
+
* Override to implement actual checkout flow integration.
|
|
216
|
+
*/
|
|
217
|
+
async generateACPHandoff(session, terminationContext) {
|
|
218
|
+
// Stub returns undefined (no checkout URL)
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
async getSession(sessionId) {
|
|
222
|
+
return this.sessions.get(sessionId) || null;
|
|
223
|
+
}
|
|
224
|
+
async cleanupStaleSessions(maxAgeMinutes) {
|
|
225
|
+
const cutoff = new Date();
|
|
226
|
+
cutoff.setMinutes(cutoff.getMinutes() - maxAgeMinutes);
|
|
227
|
+
let removed = 0;
|
|
228
|
+
for (const [id, session] of this.sessions) {
|
|
229
|
+
if (new Date(session.lastActiveAt) < cutoff) {
|
|
230
|
+
this.sessions.delete(id);
|
|
231
|
+
removed++;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return removed;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Generate a unique session ID.
|
|
238
|
+
*/
|
|
239
|
+
generateSessionId() {
|
|
240
|
+
return `si_${this.nextSessionId++}_${Date.now()}`;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Negotiate capabilities between host and brand.
|
|
244
|
+
* Override to customize capability negotiation.
|
|
245
|
+
*/
|
|
246
|
+
negotiateCapabilities(hostCapabilities) {
|
|
247
|
+
// Stub returns minimal capabilities
|
|
248
|
+
return {
|
|
249
|
+
modalities: {
|
|
250
|
+
conversational: true,
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Generate initial response when session is created.
|
|
256
|
+
* Override to implement actual greeting/welcome logic.
|
|
257
|
+
*/
|
|
258
|
+
async generateInitialResponse(session, context) {
|
|
259
|
+
// Stub returns a generic greeting
|
|
260
|
+
return {
|
|
261
|
+
message: 'Welcome! How can I help you today?',
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate response to a user message.
|
|
266
|
+
* Override to implement actual conversational AI logic.
|
|
267
|
+
*/
|
|
268
|
+
async generateResponse(session, request) {
|
|
269
|
+
// Stub returns a generic response
|
|
270
|
+
return {
|
|
271
|
+
message: "I'm sorry, but I'm not able to help with that right now. Is there anything else I can assist you with?",
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Generate a summary of the conversation.
|
|
276
|
+
* Override to implement actual summarization logic.
|
|
277
|
+
*/
|
|
278
|
+
async generateConversationSummary(session) {
|
|
279
|
+
return `Conversation with ${session.messageCount} messages.`;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
exports.SISessionManager = SISessionManager;
|
|
283
|
+
/**
|
|
284
|
+
* Example of an AI-powered SI session manager (stub).
|
|
285
|
+
* Shows how brands might extend the base class.
|
|
286
|
+
*/
|
|
287
|
+
class AISISessionManager extends SISessionManager {
|
|
288
|
+
aiEndpoint;
|
|
289
|
+
brandConfig;
|
|
290
|
+
constructor(config) {
|
|
291
|
+
super();
|
|
292
|
+
this.aiEndpoint = config?.aiEndpoint;
|
|
293
|
+
this.brandConfig = {
|
|
294
|
+
brandName: config?.brandName || 'Brand',
|
|
295
|
+
welcomeMessage: config?.welcomeMessage,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
isSupported() {
|
|
299
|
+
return !!this.aiEndpoint;
|
|
300
|
+
}
|
|
301
|
+
async generateInitialResponse(session, context) {
|
|
302
|
+
if (!this.isSupported()) {
|
|
303
|
+
return super.generateInitialResponse(session, context);
|
|
304
|
+
}
|
|
305
|
+
// In a real implementation, this would:
|
|
306
|
+
// 1. Parse the context to understand user intent
|
|
307
|
+
// 2. Call AI service to generate personalized greeting
|
|
308
|
+
// 3. Optionally include product recommendations
|
|
309
|
+
return {
|
|
310
|
+
message: this.brandConfig?.welcomeMessage ||
|
|
311
|
+
`Welcome to ${this.brandConfig?.brandName}! I see you're interested in ${context}. How can I help?`,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
exports.AISISessionManager = AISISessionManager;
|
|
316
|
+
/**
|
|
317
|
+
* Default singleton instance for servers that don't support SI
|
|
318
|
+
*/
|
|
319
|
+
exports.defaultSISessionManager = new SISessionManager();
|
|
320
|
+
//# sourceMappingURL=si-session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"si-session-manager.js","sourceRoot":"","sources":["../../../src/lib/adapters/si-session-manager.ts"],"names":[],"mappings":"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"}
|