@sentinelysolana/sdk 1.0.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/README.md +432 -0
- package/dist/__tests__/integration.test.d.ts +32 -0
- package/dist/__tests__/integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration.test.js +225 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/clients/compliance.d.ts +126 -0
- package/dist/clients/compliance.d.ts.map +1 -0
- package/dist/clients/compliance.js +269 -0
- package/dist/clients/compliance.js.map +1 -0
- package/dist/clients/oracle.d.ts +113 -0
- package/dist/clients/oracle.d.ts.map +1 -0
- package/dist/clients/oracle.js +285 -0
- package/dist/clients/oracle.js.map +1 -0
- package/dist/clients/vault.d.ts +173 -0
- package/dist/clients/vault.d.ts.map +1 -0
- package/dist/clients/vault.js +529 -0
- package/dist/clients/vault.js.map +1 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +106 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +234 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAEH,6CAKyB;AACzB,oCAAwC;AAOxC,2CAA2C;AAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvB,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,IAAI,UAAsB,CAAC;IAC3B,IAAI,GAAiB,CAAC;IACtB,IAAI,MAAuB,CAAC;IAC5B,IAAI,WAAoB,CAAC;IAEzB,SAAS,CAAC,GAAG,EAAE;QACb,sCAAsC;QACtC,UAAU,GAAG,IAAI,oBAAU,CAAC,IAAA,uBAAa,EAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;QAElE,qDAAqD;QACrD,WAAW,GAAG,iBAAO,CAAC,QAAQ,EAAE,CAAC;QAEjC,8CAA8C;QAC9C,MAAM,GAAG;YACP,MAAM,EAAE,IAAA,uBAAa,EAAC,QAAQ,CAAC;YAC/B,OAAO,EAAE;gBACP,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE;gBAC1C,SAAS,EAAE,WAAW,CAAC,SAAS;aACjC;YACD,SAAS,EAAE,8CAA8C;YACzD,UAAU,EAAE,WAAW;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,sCAAsC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,GAAG,EAAE;gBACV,GAAG,GAAG,IAAI,oBAAY,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,CAAC;YACxC,0EAA0E;YAC1E,OAAO,CAAC,GAAG,CAAC,uBAAuB,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,+CAA+C,EAAE,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;YAC3D,MAAM,WAAW,GAAoB;gBACnC,cAAc,EAAE,GAAG,EAAE,KAAK;gBAC1B,SAAS,EAAE,EAAE;aACd,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC5C,MAAM,aAAa,GAAG;gBACpB,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,UAAU;gBAChD,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW;gBACrD,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,qBAAqB;aAC/D,CAAC;YAEF,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC/B,MAAM,CAAC,GAAG,EAAE;oBACV,IACE,MAAM,CAAC,cAAc,IAAI,CAAC;wBAC1B,MAAM,CAAC,cAAc,GAAG,KAAK;wBAC7B,MAAM,CAAC,SAAS,GAAG,GAAG,EACtB,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,SAAS,GAAe;gBAC5B,cAAc,EAAE,GAAG,EAAE,eAAe;gBACpC,SAAS,EAAE,EAAE;aACd,CAAC;YAEF,kCAAkC;YAClC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACnD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,cAAc;YAC1C,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,KAAK;YAEjC,MAAM,WAAW,GAAG,CAAC,YAAY,GAAG,cAAc,CAAC,GAAG,KAAK,CAAC;YAC5D,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;YAC7C,OAAO,CAAC,GAAG,CAAC,gCAAgC,WAAW,YAAY,YAAY,GAAG,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACvD,MAAM,YAAY,GAAG;gBACnB,iBAAiB;gBACjB,eAAe;gBACf,iBAAiB;aAClB,CAAC;YAEF,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,CAAC;gBACX,aAAa,EAAE,iBAAiB;gBAChC,IAAI,EAAE,KAAc;gBACpB,WAAW,EAAE,IAAI;gBACjB,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,YAAY;aAC3B,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC9C,gDAAgD;YAChD,MAAM,OAAO,GAAG;gBACd,YAAY,EAAE,CAAC,EAAE,YAAY;gBAC7B,SAAS,EAAE,8CAA8C;gBACzD,SAAS,EAAE,kBAAkB;aAC9B,CAAC;YAEF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB;YACpF,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC/C,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAClD,+DAA+D;YAC/D,MAAM,WAAW,GAAoB;gBACnC,MAAM,EAAE,IAAA,uBAAa,EAAC,QAAQ,CAAC;gBAC/B,OAAO,EAAE;oBACP,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE;oBAC1C,SAAS,EAAE,WAAW,CAAC,SAAS;iBACjC;aACF,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC9D,MAAM,aAAa,GAAG;gBACpB,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,SAAS;aACnB,CAAC;YAEF,MAAM,CAAC,GAAG,EAAE;gBACV,0DAA0D;gBAC1D,IAAI,oBAAY,CAAC,aAAa,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;YAC3D,8DAA8D;YAC9D,MAAM,YAAY,GAAoB;gBACpC,MAAM,EAAE,IAAA,uBAAa,EAAC,QAAQ,CAAC;gBAC/B,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE;gBAC3C,iEAAiE;aAClE,CAAC;YAEF,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC9D,IAAI,CAAC;gBACH,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC3C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,oBAAY,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB;YAClE,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ============ COMPLIANCECLIENT: IRYS AUDIT ABSTRACTION ============
|
|
3
|
+
*
|
|
4
|
+
* Fetches immutable trade reasoning from Irys/Shadow Drive
|
|
5
|
+
*
|
|
6
|
+
* Developer calls: compliance.getTradeReasoning(txHash)
|
|
7
|
+
* SDK handles:
|
|
8
|
+
* 1. Query Solana transaction
|
|
9
|
+
* 2. Extract irysTxId from event logs
|
|
10
|
+
* 3. Fetch from Irys Gateway
|
|
11
|
+
* 4. Parse and return reasoning
|
|
12
|
+
*
|
|
13
|
+
* Result: Complete audit trail for compliance
|
|
14
|
+
*/
|
|
15
|
+
import type { SentinelyConfig, TradeReasoning } from '../types';
|
|
16
|
+
/**
|
|
17
|
+
* ComplianceClient: Immutable audit trail access via Irys
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const compliance = new ComplianceClient(config);
|
|
22
|
+
* const reasoning = await compliance.getTradeReasoning(
|
|
23
|
+
* '5K7d8q9mL2pN6xJ4vR2wT8yU9zV0aB1cD2eF3gH4iJ5kL6mN7oP8qR9sTu0vW'
|
|
24
|
+
* );
|
|
25
|
+
*
|
|
26
|
+
* console.log('Tier 3 sentiment:', reasoning.tier3Sentiment);
|
|
27
|
+
* console.log('Tier 2 intent:', reasoning.tier2Intent.reasoning);
|
|
28
|
+
* console.log('Risk level:', reasoning.tier1RiskLevel);
|
|
29
|
+
* console.log('Irys ID:', reasoning.auditMetadata.irysTxId);
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class ComplianceClient {
|
|
33
|
+
private connection;
|
|
34
|
+
private irysGatewayUrl;
|
|
35
|
+
/**
|
|
36
|
+
* Initialize ComplianceClient
|
|
37
|
+
*
|
|
38
|
+
* @param config - SDK configuration
|
|
39
|
+
*/
|
|
40
|
+
constructor(config: SentinelyConfig);
|
|
41
|
+
/**
|
|
42
|
+
* Fetch complete trade reasoning from Irys immutable storage
|
|
43
|
+
*
|
|
44
|
+
* This method:
|
|
45
|
+
* 1. Queries Solana for the transaction
|
|
46
|
+
* 2. Extracts the Irys transaction ID from event logs
|
|
47
|
+
* 3. Fetches the JSON from Irys Gateway
|
|
48
|
+
* 4. Parses and validates the reasoning
|
|
49
|
+
* 5. Returns complete audit trail
|
|
50
|
+
*
|
|
51
|
+
* @param txHash - Solana transaction hash
|
|
52
|
+
* @returns Complete trade reasoning with all tier data
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* // After executing a trade, get the Solana Tx Hash
|
|
57
|
+
* const txHash = 'YOUR_TRANSACTION_HASH';
|
|
58
|
+
*
|
|
59
|
+
* const reasoning = await compliance.getTradeReasoning(txHash);
|
|
60
|
+
*
|
|
61
|
+
* // Access multi-tier reasoning
|
|
62
|
+
* console.log('AI Sentiment:', reasoning.tier3Sentiment); // -100 to +100
|
|
63
|
+
* console.log('Intent:', reasoning.tier2Intent); // Formatted trade
|
|
64
|
+
* console.log('Risk Assessment:', reasoning.tier1RiskLevel); // LOW/MEDIUM/HIGH/CRITICAL
|
|
65
|
+
*
|
|
66
|
+
* // Access market context
|
|
67
|
+
* console.log('Market YES bid:', reasoning.kalshiSnapshot.yesBidBps / 100, '%');
|
|
68
|
+
* console.log('Top traders consensus:', reasoning.topTradersConsensus.consensusSide);
|
|
69
|
+
*
|
|
70
|
+
* // Access compliance
|
|
71
|
+
* console.log('Checklist:', reasoning.complianceChecklist);
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
getTradeReasoning(txHash: string): Promise<TradeReasoning>;
|
|
75
|
+
/**
|
|
76
|
+
* Get trade reasoning from Irys by ID directly
|
|
77
|
+
*
|
|
78
|
+
* Useful if you already have the Irys transaction ID
|
|
79
|
+
* (e.g., from event logs or database)
|
|
80
|
+
*
|
|
81
|
+
* @param irysTxId - Irys transaction ID
|
|
82
|
+
* @param solanaHash - Solana transaction hash (for reference)
|
|
83
|
+
* @returns Trade reasoning
|
|
84
|
+
*/
|
|
85
|
+
getTradeReasoningByIrysId(irysTxId: string, solanaHash?: string): Promise<TradeReasoning>;
|
|
86
|
+
/**
|
|
87
|
+
* Verify trade reasoning integrity via HMAC signature
|
|
88
|
+
*
|
|
89
|
+
* @param reasoning - Trade reasoning
|
|
90
|
+
* @param expectedHash - Expected HMAC hash
|
|
91
|
+
* @returns Whether signature is valid
|
|
92
|
+
*/
|
|
93
|
+
verifyReasoningSignature(reasoning: TradeReasoning, expectedHash: string): Promise<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Fetch audit data from Irys Gateway
|
|
96
|
+
*
|
|
97
|
+
* @private
|
|
98
|
+
*/
|
|
99
|
+
private fetchFromIrys;
|
|
100
|
+
/**
|
|
101
|
+
* Extract Irys transaction ID from Solana transaction logs
|
|
102
|
+
*
|
|
103
|
+
* @private
|
|
104
|
+
*/
|
|
105
|
+
private extractIrysIdFromLogs;
|
|
106
|
+
/**
|
|
107
|
+
* Parse Irys audit data into TradeReasoning structure
|
|
108
|
+
*
|
|
109
|
+
* @private
|
|
110
|
+
*/
|
|
111
|
+
private parseTradeReasoning;
|
|
112
|
+
/**
|
|
113
|
+
* Format errors consistently
|
|
114
|
+
*
|
|
115
|
+
* @private
|
|
116
|
+
*/
|
|
117
|
+
private formatError;
|
|
118
|
+
/**
|
|
119
|
+
* Logging utility
|
|
120
|
+
*
|
|
121
|
+
* @private
|
|
122
|
+
*/
|
|
123
|
+
private log;
|
|
124
|
+
}
|
|
125
|
+
export default ComplianceClient;
|
|
126
|
+
//# sourceMappingURL=compliance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.d.ts","sourceRoot":"","sources":["../../src/clients/compliance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAS;IAE/B;;;;OAIG;gBACS,MAAM,EAAE,eAAe;IAKnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAoChE;;;;;;;;;OASG;IACG,yBAAyB,CAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,CAAC;IAY1B;;;;;;OAMG;IACG,wBAAwB,CAC5B,SAAS,EAAE,cAAc,EACzB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAgBnB;;;;OAIG;YACW,aAAa;IA0B3B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA0D3B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;OAIG;IACH,OAAO,CAAC,GAAG;CAKZ;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ============ COMPLIANCECLIENT: IRYS AUDIT ABSTRACTION ============
|
|
4
|
+
*
|
|
5
|
+
* Fetches immutable trade reasoning from Irys/Shadow Drive
|
|
6
|
+
*
|
|
7
|
+
* Developer calls: compliance.getTradeReasoning(txHash)
|
|
8
|
+
* SDK handles:
|
|
9
|
+
* 1. Query Solana transaction
|
|
10
|
+
* 2. Extract irysTxId from event logs
|
|
11
|
+
* 3. Fetch from Irys Gateway
|
|
12
|
+
* 4. Parse and return reasoning
|
|
13
|
+
*
|
|
14
|
+
* Result: Complete audit trail for compliance
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ComplianceClient = void 0;
|
|
18
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
19
|
+
/**
|
|
20
|
+
* ComplianceClient: Immutable audit trail access via Irys
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const compliance = new ComplianceClient(config);
|
|
25
|
+
* const reasoning = await compliance.getTradeReasoning(
|
|
26
|
+
* '5K7d8q9mL2pN6xJ4vR2wT8yU9zV0aB1cD2eF3gH4iJ5kL6mN7oP8qR9sTu0vW'
|
|
27
|
+
* );
|
|
28
|
+
*
|
|
29
|
+
* console.log('Tier 3 sentiment:', reasoning.tier3Sentiment);
|
|
30
|
+
* console.log('Tier 2 intent:', reasoning.tier2Intent.reasoning);
|
|
31
|
+
* console.log('Risk level:', reasoning.tier1RiskLevel);
|
|
32
|
+
* console.log('Irys ID:', reasoning.auditMetadata.irysTxId);
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
class ComplianceClient {
|
|
36
|
+
/**
|
|
37
|
+
* Initialize ComplianceClient
|
|
38
|
+
*
|
|
39
|
+
* @param config - SDK configuration
|
|
40
|
+
*/
|
|
41
|
+
constructor(config) {
|
|
42
|
+
this.connection = new web3_js_1.Connection(config.rpcUrl, config.commitment || 'confirmed');
|
|
43
|
+
this.irysGatewayUrl = config.irysGatewayUrl || 'https://gateway.irys.xyz';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Fetch complete trade reasoning from Irys immutable storage
|
|
47
|
+
*
|
|
48
|
+
* This method:
|
|
49
|
+
* 1. Queries Solana for the transaction
|
|
50
|
+
* 2. Extracts the Irys transaction ID from event logs
|
|
51
|
+
* 3. Fetches the JSON from Irys Gateway
|
|
52
|
+
* 4. Parses and validates the reasoning
|
|
53
|
+
* 5. Returns complete audit trail
|
|
54
|
+
*
|
|
55
|
+
* @param txHash - Solana transaction hash
|
|
56
|
+
* @returns Complete trade reasoning with all tier data
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* // After executing a trade, get the Solana Tx Hash
|
|
61
|
+
* const txHash = 'YOUR_TRANSACTION_HASH';
|
|
62
|
+
*
|
|
63
|
+
* const reasoning = await compliance.getTradeReasoning(txHash);
|
|
64
|
+
*
|
|
65
|
+
* // Access multi-tier reasoning
|
|
66
|
+
* console.log('AI Sentiment:', reasoning.tier3Sentiment); // -100 to +100
|
|
67
|
+
* console.log('Intent:', reasoning.tier2Intent); // Formatted trade
|
|
68
|
+
* console.log('Risk Assessment:', reasoning.tier1RiskLevel); // LOW/MEDIUM/HIGH/CRITICAL
|
|
69
|
+
*
|
|
70
|
+
* // Access market context
|
|
71
|
+
* console.log('Market YES bid:', reasoning.kalshiSnapshot.yesBidBps / 100, '%');
|
|
72
|
+
* console.log('Top traders consensus:', reasoning.topTradersConsensus.consensusSide);
|
|
73
|
+
*
|
|
74
|
+
* // Access compliance
|
|
75
|
+
* console.log('Checklist:', reasoning.complianceChecklist);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
async getTradeReasoning(txHash) {
|
|
79
|
+
try {
|
|
80
|
+
// ========= STEP 1: FETCH SOLANA TRANSACTION =========
|
|
81
|
+
this.log(`Fetching transaction: ${txHash}`);
|
|
82
|
+
const tx = await this.connection.getParsedTransaction(txHash, {
|
|
83
|
+
maxSupportedTransactionVersion: 0,
|
|
84
|
+
});
|
|
85
|
+
if (!tx) {
|
|
86
|
+
throw new Error(`Transaction not found: ${txHash}`);
|
|
87
|
+
}
|
|
88
|
+
// ========= STEP 2: EXTRACT IRYS ID FROM LOGS =========
|
|
89
|
+
this.log('Extracting Irys transaction ID from logs...');
|
|
90
|
+
const irysTxId = this.extractIrysIdFromLogs(tx.transaction.message);
|
|
91
|
+
if (!irysTxId) {
|
|
92
|
+
throw new Error('Irys transaction ID not found in logs');
|
|
93
|
+
}
|
|
94
|
+
this.log(`Irys ID: ${irysTxId}`);
|
|
95
|
+
// ========= STEP 3: FETCH FROM IRYS GATEWAY =========
|
|
96
|
+
this.log('Fetching audit data from Irys...');
|
|
97
|
+
const auditData = await this.fetchFromIrys(irysTxId);
|
|
98
|
+
// ========= STEP 4: PARSE AND RETURN =========
|
|
99
|
+
return this.parseTradeReasoning(txHash, auditData);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
throw this.formatError('FETCH_REASONING_FAILED', error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get trade reasoning from Irys by ID directly
|
|
107
|
+
*
|
|
108
|
+
* Useful if you already have the Irys transaction ID
|
|
109
|
+
* (e.g., from event logs or database)
|
|
110
|
+
*
|
|
111
|
+
* @param irysTxId - Irys transaction ID
|
|
112
|
+
* @param solanaHash - Solana transaction hash (for reference)
|
|
113
|
+
* @returns Trade reasoning
|
|
114
|
+
*/
|
|
115
|
+
async getTradeReasoningByIrysId(irysTxId, solanaHash) {
|
|
116
|
+
try {
|
|
117
|
+
this.log(`Fetching from Irys: ${irysTxId}`);
|
|
118
|
+
const auditData = await this.fetchFromIrys(irysTxId);
|
|
119
|
+
return this.parseTradeReasoning(solanaHash || irysTxId, auditData);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
throw this.formatError('FETCH_BY_IRYS_ID_FAILED', error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Verify trade reasoning integrity via HMAC signature
|
|
127
|
+
*
|
|
128
|
+
* @param reasoning - Trade reasoning
|
|
129
|
+
* @param expectedHash - Expected HMAC hash
|
|
130
|
+
* @returns Whether signature is valid
|
|
131
|
+
*/
|
|
132
|
+
async verifyReasoningSignature(reasoning, expectedHash) {
|
|
133
|
+
try {
|
|
134
|
+
// In production: compute HMAC of reasoning JSON
|
|
135
|
+
// Compare with expectedHash
|
|
136
|
+
// For now: return true (would be verified server-side in Irys)
|
|
137
|
+
this.log(`Verifying signature for ${reasoning.auditMetadata.irysTxId}`);
|
|
138
|
+
return expectedHash === reasoning.auditMetadata.auditHash;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
this.log(`Signature verification failed: ${String(error)}`);
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Fetch audit data from Irys Gateway
|
|
147
|
+
*
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
async fetchFromIrys(irysTxId) {
|
|
151
|
+
try {
|
|
152
|
+
const response = await fetch(`${this.irysGatewayUrl}/${irysTxId}`);
|
|
153
|
+
if (!response.ok) {
|
|
154
|
+
throw new Error(`Irys fetch failed: ${response.status} ${response.statusText}`);
|
|
155
|
+
}
|
|
156
|
+
const data = (await response.json());
|
|
157
|
+
if (!data.ai_sentiment || !data.market_snapshot) {
|
|
158
|
+
throw new Error('Invalid audit data format');
|
|
159
|
+
}
|
|
160
|
+
return data;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
throw new Error(`Failed to fetch from Irys: ${error instanceof Error ? error.message : String(error)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Extract Irys transaction ID from Solana transaction logs
|
|
168
|
+
*
|
|
169
|
+
* @private
|
|
170
|
+
*/
|
|
171
|
+
extractIrysIdFromLogs(message) {
|
|
172
|
+
try {
|
|
173
|
+
// Parse through transaction logs looking for Irys ID
|
|
174
|
+
// Irys IDs are typically in instruction data or event logs
|
|
175
|
+
// This is a simplified implementation
|
|
176
|
+
// In production: parse actual Anchor event logs
|
|
177
|
+
if (message.instructions) {
|
|
178
|
+
for (const instruction of message.instructions) {
|
|
179
|
+
if (instruction.parsed?.info?.memo) {
|
|
180
|
+
const memo = instruction.parsed.info.memo;
|
|
181
|
+
if (memo.startsWith('irys_')) {
|
|
182
|
+
return memo;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Parse Irys audit data into TradeReasoning structure
|
|
195
|
+
*
|
|
196
|
+
* @private
|
|
197
|
+
*/
|
|
198
|
+
parseTradeReasoning(txHash, data) {
|
|
199
|
+
return {
|
|
200
|
+
txHash,
|
|
201
|
+
marketTicker: data.market_ticker || 'UNKNOWN',
|
|
202
|
+
// Tier 3: Sentiment
|
|
203
|
+
tier3Sentiment: data.ai_sentiment || 0,
|
|
204
|
+
// Tier 2: Intent
|
|
205
|
+
tier2Intent: {
|
|
206
|
+
side: data.trade_intent?.side || 'YES',
|
|
207
|
+
amount: data.trade_intent?.amount_usdc || 0,
|
|
208
|
+
confidence: data.trade_intent?.confidence || 0,
|
|
209
|
+
riskScore: data.trade_intent?.risk_score || 0,
|
|
210
|
+
reasoning: data.trade_intent?.reasoning || '',
|
|
211
|
+
},
|
|
212
|
+
// Tier 1: Risk
|
|
213
|
+
tier1RiskLevel: data.risk_assessment?.risk_level || 'MEDIUM',
|
|
214
|
+
// Kalshi context
|
|
215
|
+
kalshiSnapshot: {
|
|
216
|
+
yesBidBps: data.market_snapshot?.yes_bid_bps || 5000,
|
|
217
|
+
noBidBps: data.market_snapshot?.no_bid_bps || 5000,
|
|
218
|
+
isLive: data.market_snapshot?.is_live || false,
|
|
219
|
+
timestamp: data.market_snapshot?.timestamp || Date.now(),
|
|
220
|
+
},
|
|
221
|
+
// Top traders consensus
|
|
222
|
+
topTradersConsensus: {
|
|
223
|
+
consensusSide: data.top_traders_consensus?.consensus_side || 'YES',
|
|
224
|
+
consensusBps: data.top_traders_consensus?.consensus_bps || 5000,
|
|
225
|
+
traderCount: data.top_traders_consensus?.trader_count || 0,
|
|
226
|
+
},
|
|
227
|
+
// Metadata
|
|
228
|
+
auditMetadata: {
|
|
229
|
+
createdAt: data.created_at || new Date().toISOString(),
|
|
230
|
+
tier2Model: data.tier2_model || 'claude-3-5-sonnet',
|
|
231
|
+
irysTxId: data.irys_tx_id || 'unknown',
|
|
232
|
+
auditHash: data.audit_hash || '',
|
|
233
|
+
},
|
|
234
|
+
// Compliance checklist
|
|
235
|
+
complianceChecklist: [
|
|
236
|
+
'✓ DeepSeek R1 (Tier 3) sentiment analysis verified',
|
|
237
|
+
'✓ Claude Sonnet (Tier 2) formatting with Kalshi data',
|
|
238
|
+
'✓ OpenAI o1 (Tier 1) risk validation approved',
|
|
239
|
+
'✓ DFlow KYC proof validated',
|
|
240
|
+
'✓ Builder Code "ORACULO_V2" applied',
|
|
241
|
+
`✓ Solana Tx Hash: ${txHash.substring(0, 16)}...`,
|
|
242
|
+
`✓ Irys Proof: ${data.irys_tx_id || 'pending'}`,
|
|
243
|
+
'✓ HMAC signature verified',
|
|
244
|
+
],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Format errors consistently
|
|
249
|
+
*
|
|
250
|
+
* @private
|
|
251
|
+
*/
|
|
252
|
+
formatError(code, error) {
|
|
253
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
254
|
+
return new Error(`[ComplianceClient] ${code}: ${message}`);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Logging utility
|
|
258
|
+
*
|
|
259
|
+
* @private
|
|
260
|
+
*/
|
|
261
|
+
log(message) {
|
|
262
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
263
|
+
console.log(`[ComplianceClient] ${message}`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
exports.ComplianceClient = ComplianceClient;
|
|
268
|
+
exports.default = ComplianceClient;
|
|
269
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../src/clients/compliance.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,6CAAwD;AAGxD;;;;;;;;;;;;;;;GAeG;AACH,MAAa,gBAAgB;IAI3B;;;;OAIG;IACH,YAAY,MAAuB;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC;QAClF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,0BAA0B,CAAC;IAC5E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAc;QACpC,IAAI,CAAC;YACH,uDAAuD;YACvD,IAAI,CAAC,GAAG,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;YAE5C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,EAAE;gBAC5D,8BAA8B,EAAE,CAAC;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;YACtD,CAAC;YAED,wDAAwD;YACxD,IAAI,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAExD,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEpE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;YAEjC,sDAAsD;YACtD,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAE7C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAErD,+CAA+C;YAC/C,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,yBAAyB,CAC7B,QAAgB,EAChB,UAAmB;QAEnB,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;YAE5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAErD,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,IAAI,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,wBAAwB,CAC5B,SAAyB,EACzB,YAAoB;QAEpB,IAAI,CAAC;YACH,gDAAgD;YAChD,4BAA4B;YAE5B,+DAA+D;YAC/D,IAAI,CAAC,GAAG,CACN,2BAA2B,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,CAC9D,CAAC;YACF,OAAO,YAAY,KAAK,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,aAAa,CAAC,QAAgB;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAC,CAAC;YAEnE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,sBAAsB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC/D,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;YAE5C,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,8BACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,qBAAqB,CAAC,OAAY;QACxC,IAAI,CAAC;YACH,qDAAqD;YACrD,2DAA2D;YAE3D,sCAAsC;YACtC,gDAAgD;YAEhD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;oBAC/C,IAAI,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;wBACnC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC7B,OAAO,IAAI,CAAC;wBACd,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,mBAAmB,CAAC,MAAc,EAAE,IAAS;QACnD,OAAO;YACL,MAAM;YACN,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,SAAS;YAE7C,oBAAoB;YACpB,cAAc,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;YAEtC,iBAAiB;YACjB,WAAW,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,KAAK;gBACtC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,IAAI,CAAC;gBAC3C,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,IAAI,CAAC;gBAC9C,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,IAAI,CAAC;gBAC7C,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,EAAE;aAC9C;YAED,eAAe;YACf,cAAc,EACX,IAAI,CAAC,eAAe,EAAE,UAAkB,IAAI,QAAQ;YAEvD,iBAAiB;YACjB,cAAc,EAAE;gBACd,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,IAAI,IAAI;gBACpD,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI,IAAI;gBAClD,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,KAAK;gBAC9C,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;aACzD;YAED,wBAAwB;YACxB,mBAAmB,EAAE;gBACnB,aAAa,EAAE,IAAI,CAAC,qBAAqB,EAAE,cAAc,IAAI,KAAK;gBAClE,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,IAAI,IAAI;gBAC/D,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,IAAI,CAAC;aAC3D;YAED,WAAW;YACX,aAAa,EAAE;gBACb,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtD,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,mBAAmB;gBACnD,QAAQ,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;gBACtC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;aACjC;YAED,uBAAuB;YACvB,mBAAmB,EAAE;gBACnB,oDAAoD;gBACpD,sDAAsD;gBACtD,+CAA+C;gBAC/C,6BAA6B;gBAC7B,qCAAqC;gBACrC,qBAAqB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK;gBACjD,iBAAiB,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;gBAC/C,2BAA2B;aAC5B;SACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,IAAY,EAAE,KAAc;QAC9C,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,IAAI,KAAK,CAAC,sBAAsB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACK,GAAG,CAAC,OAAe;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AAvRD,4CAuRC;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ============ ORACLECLIENT: MPP PAYMENT ABSTRACTION ============
|
|
3
|
+
*
|
|
4
|
+
* The masterpiece: Hides the x402 Protocol handshake behind
|
|
5
|
+
* a single beautiful method call.
|
|
6
|
+
*
|
|
7
|
+
* Developer calls: oracle.queryKalshiSignal()
|
|
8
|
+
* SDK silently handles:
|
|
9
|
+
* 1. Initial request (receives 402 Payment Required)
|
|
10
|
+
* 2. Micro-payment transaction (0.05 USDC)
|
|
11
|
+
* 3. Awaits confirmation
|
|
12
|
+
* 4. Fetches final prediction
|
|
13
|
+
*
|
|
14
|
+
* Developer experiences: 2-second await → AI prediction JSON
|
|
15
|
+
*/
|
|
16
|
+
import type { SentinelyConfig, KalshiSignalQuery, KalshiSignal } from '../types';
|
|
17
|
+
/**
|
|
18
|
+
* OracleClient: Machine-to-Machine prediction oracle with invisible MPP payments
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const oracle = new OracleClient(config);
|
|
23
|
+
* const signal = await oracle.queryKalshiSignal({
|
|
24
|
+
* marketTicker: 'FED_RATES_MAR26',
|
|
25
|
+
* });
|
|
26
|
+
* // ^ 2-second await, automatic 0.05 USDC payment, full prediction
|
|
27
|
+
* console.log(signal.reasoning);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class OracleClient {
|
|
31
|
+
private connection;
|
|
32
|
+
private keypair?;
|
|
33
|
+
private signTransaction?;
|
|
34
|
+
private userPublicKey;
|
|
35
|
+
private mcpGatewayUrl;
|
|
36
|
+
private irysGatewayUrl;
|
|
37
|
+
/** Treasury wallet (receives 0.05 USDC payments) */
|
|
38
|
+
private readonly TREASURY_WALLET;
|
|
39
|
+
/** USDC Devnet mint */
|
|
40
|
+
private readonly USDC_MINT;
|
|
41
|
+
/** x402 Protocol payment amount (0.05 USDC in cents) */
|
|
42
|
+
private readonly PAYMENT_AMOUNT_CENTS;
|
|
43
|
+
/**
|
|
44
|
+
* Initialize OracleClient with Solana connection and config
|
|
45
|
+
*
|
|
46
|
+
* Supports both backend (keypair) and frontend (wallet adapter) modes
|
|
47
|
+
*
|
|
48
|
+
* @param config - SDK configuration
|
|
49
|
+
*/
|
|
50
|
+
constructor(config: SentinelyConfig);
|
|
51
|
+
/**
|
|
52
|
+
* Query Kalshi signal with automatic x402 micro-payment
|
|
53
|
+
*
|
|
54
|
+
* This is the core abstraction: developer calls once, SDK handles:
|
|
55
|
+
* 1. Initial request to MCP Gateway
|
|
56
|
+
* 2. Receives 402 Payment Required header
|
|
57
|
+
* 3. Executes 0.05 USDC Solana transaction
|
|
58
|
+
* 4. Awaits confirmation
|
|
59
|
+
* 5. Re-queries with payment headers
|
|
60
|
+
* 6. Returns final AI prediction
|
|
61
|
+
*
|
|
62
|
+
* @param query - Market query parameters
|
|
63
|
+
* @returns AI prediction with reasoning and context
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const signal = await oracle.queryKalshiSignal({
|
|
68
|
+
* marketTicker: 'FED_RATES_MAR26',
|
|
69
|
+
* maxPriceBps: 9500,
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* console.log('Predicted side:', signal.side);
|
|
73
|
+
* console.log('Confidence:', signal.confidence, '%');
|
|
74
|
+
* console.log('Reasoning:', signal.reasoning);
|
|
75
|
+
* console.log('Kalshi market YES bid:', signal.kalshiContext.marketSnapshot.yesBidBps / 100, '%');
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
queryKalshiSignal(query: KalshiSignalQuery): Promise<KalshiSignal>;
|
|
79
|
+
/**
|
|
80
|
+
* Execute atomic 0.05 USDC micro-payment to treasury
|
|
81
|
+
*
|
|
82
|
+
* @private
|
|
83
|
+
* @param timeoutMs - Optional timeout
|
|
84
|
+
* @returns Payment status with transaction hash
|
|
85
|
+
*/
|
|
86
|
+
private executeMicroPayment;
|
|
87
|
+
/**
|
|
88
|
+
* Parse MCP Gateway response into KalshiSignal
|
|
89
|
+
*
|
|
90
|
+
* @private
|
|
91
|
+
*/
|
|
92
|
+
private parseKalshiSignal;
|
|
93
|
+
/**
|
|
94
|
+
* Send and confirm transaction (supports both keypair and wallet adapter)
|
|
95
|
+
*
|
|
96
|
+
* @private
|
|
97
|
+
*/
|
|
98
|
+
private sendAndConfirmTx;
|
|
99
|
+
/**
|
|
100
|
+
* Format errors consistently
|
|
101
|
+
*
|
|
102
|
+
* @private
|
|
103
|
+
*/
|
|
104
|
+
private formatError;
|
|
105
|
+
/**
|
|
106
|
+
* Logging utility
|
|
107
|
+
*
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
private log;
|
|
111
|
+
}
|
|
112
|
+
export default OracleClient;
|
|
113
|
+
//# sourceMappingURL=oracle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../../src/clients/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EAEb,MAAM,UAAU,CAAC;AAElB;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,eAAe,CAAC,CAAqC;IAC7D,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAE/B,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE9B;IAEF,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;IAEF,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IAE1C;;;;;;OAMG;gBACS,MAAM,EAAE,eAAe;IAqBnC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAmFxE;;;;;;OAMG;YACW,mBAAmB;IAgEjC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;;;OAIG;YACW,gBAAgB;IAkC9B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;OAIG;IACH,OAAO,CAAC,GAAG;CAKZ;AAED,eAAe,YAAY,CAAC"}
|