@obscura-fhe/sdk 1.0.2 → 1.0.4
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/CHANGELOG.md +21 -0
- package/dist/index.cjs +137 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +110 -20
- package/dist/index.d.ts +110 -20
- package/dist/index.js +136 -46
- package/dist/index.js.map +1 -1
- package/package.json +1 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@obscura-fhe/sdk` are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.0.4] - 2026-05-30
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **AgentModule** — create, list, revoke, and regenerate agent tokens via Obscura API
|
|
10
|
+
- **`agentToken` config** — `Authorization: Bearer` on wallet-scoped API reads
|
|
11
|
+
- **`getAuthenticatedSummary()`** / **`listAuthenticated()`** — `/agent/reputation` and `/agent/activity`
|
|
12
|
+
- **`buildAgentTokenMessage()`** — EIP-191 message helper for token issuance
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **HttpClient** sends Bearer header when `agentToken` is set
|
|
17
|
+
- **ReputationModule** / **ActivityModule** route authenticated reads to `/agent/*` when token configured
|
|
18
|
+
|
|
19
|
+
## [1.0.3] - 2026-05-30
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- **Activity module:** reads via `GET /activity/:wallet` on Obscura API — no Supabase credentials required
|
|
24
|
+
- **Breaking:** `ActivityModule` constructor now takes `HttpClient` only; `supabaseUrl` / `supabaseAnonKey` config deprecated
|
|
25
|
+
|
|
5
26
|
## [1.0.2] - 2026-05-30
|
|
6
27
|
|
|
7
28
|
### Added
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var viem = require('viem');
|
|
4
4
|
var chains = require('viem/chains');
|
|
5
|
-
var supabaseJs = require('@supabase/supabase-js');
|
|
6
5
|
|
|
7
6
|
// src/config/defaults.ts
|
|
8
7
|
var ARBITRUM_SEPOLIA_CHAIN_ID = 421614;
|
|
@@ -68,18 +67,30 @@ function stripTrailingSlash(url) {
|
|
|
68
67
|
|
|
69
68
|
// src/core/http.ts
|
|
70
69
|
var HttpClient = class {
|
|
71
|
-
constructor(baseUrl) {
|
|
70
|
+
constructor(baseUrl, agentToken) {
|
|
72
71
|
this.baseUrl = baseUrl;
|
|
72
|
+
this.agentToken = agentToken;
|
|
73
73
|
}
|
|
74
74
|
baseUrl;
|
|
75
|
+
agentToken;
|
|
75
76
|
get url() {
|
|
76
77
|
return stripTrailingSlash(this.baseUrl);
|
|
77
78
|
}
|
|
79
|
+
hasAgentToken() {
|
|
80
|
+
return Boolean(this.agentToken);
|
|
81
|
+
}
|
|
82
|
+
authHeaders(extra) {
|
|
83
|
+
return {
|
|
84
|
+
Accept: "application/json",
|
|
85
|
+
...this.agentToken ? { Authorization: `Bearer ${this.agentToken}` } : {},
|
|
86
|
+
...extra
|
|
87
|
+
};
|
|
88
|
+
}
|
|
78
89
|
async get(path, init) {
|
|
79
90
|
const response = await fetch(`${this.url}${path}`, {
|
|
80
91
|
...init,
|
|
81
92
|
method: "GET",
|
|
82
|
-
headers:
|
|
93
|
+
headers: this.authHeaders(init?.headers)
|
|
83
94
|
});
|
|
84
95
|
if (!response.ok) {
|
|
85
96
|
const body = await response.text().catch(() => "");
|
|
@@ -92,8 +103,9 @@ var HttpClient = class {
|
|
|
92
103
|
...init,
|
|
93
104
|
method: "POST",
|
|
94
105
|
headers: {
|
|
95
|
-
|
|
96
|
-
|
|
106
|
+
...this.authHeaders({
|
|
107
|
+
"Content-Type": "application/json"
|
|
108
|
+
}),
|
|
97
109
|
...init?.headers
|
|
98
110
|
},
|
|
99
111
|
body: JSON.stringify(body)
|
|
@@ -109,8 +121,9 @@ var HttpClient = class {
|
|
|
109
121
|
...init,
|
|
110
122
|
method: "DELETE",
|
|
111
123
|
headers: {
|
|
112
|
-
|
|
113
|
-
|
|
124
|
+
...this.authHeaders({
|
|
125
|
+
"Content-Type": "application/json"
|
|
126
|
+
}),
|
|
114
127
|
...init?.headers
|
|
115
128
|
},
|
|
116
129
|
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
@@ -221,54 +234,115 @@ var ACTIVITY_EVENT_FILTERS = {
|
|
|
221
234
|
// src/modules/activity.ts
|
|
222
235
|
var DEFAULT_PAGE_SIZE = 20;
|
|
223
236
|
var ActivityModule = class {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
this.supabaseAnonKey = supabaseAnonKey;
|
|
230
|
-
this.client = supabaseUrl && supabaseAnonKey ? supabaseJs.createClient(supabaseUrl, supabaseAnonKey) : null;
|
|
231
|
-
}
|
|
232
|
-
/** True when both Supabase URL and anon key were supplied at SDK init. */
|
|
237
|
+
constructor(http2) {
|
|
238
|
+
this.http = http2;
|
|
239
|
+
}
|
|
240
|
+
http;
|
|
241
|
+
/** True when API-backed activity reads are available (always when SDK has default apiUrl). */
|
|
233
242
|
isConfigured() {
|
|
234
|
-
return this.
|
|
243
|
+
return Boolean(this.http.url);
|
|
244
|
+
}
|
|
245
|
+
hasAgentToken() {
|
|
246
|
+
return this.http.hasAgentToken();
|
|
235
247
|
}
|
|
236
248
|
getEventFilters() {
|
|
237
249
|
return ACTIVITY_EVENT_FILTERS;
|
|
238
250
|
}
|
|
251
|
+
/** Authenticated activity for the agent token wallet */
|
|
252
|
+
async listAuthenticated(options = {}) {
|
|
253
|
+
if (!this.http.hasAgentToken()) {
|
|
254
|
+
throw new Error("agentToken required \u2014 create one at /docs/agents");
|
|
255
|
+
}
|
|
256
|
+
return this.listWithPath("/agent/activity", options);
|
|
257
|
+
}
|
|
239
258
|
async listForWallet(wallet, options = {}) {
|
|
240
|
-
if (
|
|
241
|
-
|
|
242
|
-
[
|
|
243
|
-
"Activity module requires Supabase credentials.",
|
|
244
|
-
`Pass supabaseAnonKey (and optionally supabaseUrl) to ObscuraSDK.create().`,
|
|
245
|
-
`Default URL: ${DEFAULT_SUPABASE_URL}`,
|
|
246
|
-
"Get the anon key from your Supabase project \u2192 Settings \u2192 API \u2192 anon public.",
|
|
247
|
-
"Reputation and notifications work without Supabase; activity does not."
|
|
248
|
-
].join(" ")
|
|
249
|
-
);
|
|
259
|
+
if (this.http.hasAgentToken()) {
|
|
260
|
+
return this.listAuthenticated(options);
|
|
250
261
|
}
|
|
251
262
|
const normalized = normalizeWallet(wallet);
|
|
252
263
|
if (!normalized) throw new Error("Invalid wallet address");
|
|
264
|
+
return this.listWithPath(`/activity/${normalized}`, options);
|
|
265
|
+
}
|
|
266
|
+
async listWithPath(basePath, options) {
|
|
253
267
|
const filter = options.filter ?? "all";
|
|
254
268
|
const page = options.page ?? 0;
|
|
255
269
|
const pageSize = options.pageSize ?? DEFAULT_PAGE_SIZE;
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
if (
|
|
259
|
-
|
|
270
|
+
const params = new URLSearchParams();
|
|
271
|
+
if (filter !== "all") params.set("filter", filter);
|
|
272
|
+
if (page > 0) params.set("page", String(page));
|
|
273
|
+
if (pageSize !== DEFAULT_PAGE_SIZE) params.set("pageSize", String(pageSize));
|
|
274
|
+
const qs = params.toString();
|
|
275
|
+
const path = `${basePath}${qs ? `?${qs}` : ""}`;
|
|
276
|
+
return this.http.get(path);
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
// src/modules/agent.ts
|
|
281
|
+
var AgentModule = class {
|
|
282
|
+
constructor(http2) {
|
|
283
|
+
this.http = http2;
|
|
284
|
+
}
|
|
285
|
+
http;
|
|
286
|
+
async validateToken(token) {
|
|
287
|
+
return this.http.post("/agent/validate", { token });
|
|
288
|
+
}
|
|
289
|
+
async getIdentity() {
|
|
290
|
+
if (!this.http.hasAgentToken()) {
|
|
291
|
+
throw new Error("agentToken required");
|
|
260
292
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
293
|
+
return this.http.get("/agent/me");
|
|
294
|
+
}
|
|
295
|
+
async createToken(params) {
|
|
296
|
+
const wallet = normalizeWallet(params.wallet);
|
|
297
|
+
if (!wallet) throw new Error("Invalid wallet address");
|
|
298
|
+
return this.http.post("/agent-tokens", {
|
|
299
|
+
wallet,
|
|
300
|
+
signature: params.signature,
|
|
301
|
+
timestamp: params.timestamp,
|
|
302
|
+
label: params.label,
|
|
303
|
+
permissions: params.permissions
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
async listTokens(params) {
|
|
307
|
+
const wallet = normalizeWallet(params.wallet);
|
|
308
|
+
if (!wallet) throw new Error("Invalid wallet address");
|
|
309
|
+
const qs = new URLSearchParams({
|
|
310
|
+
wallet,
|
|
311
|
+
signature: params.signature,
|
|
312
|
+
timestamp: String(params.timestamp)
|
|
313
|
+
});
|
|
314
|
+
return this.http.get(`/agent-tokens?${qs.toString()}`);
|
|
315
|
+
}
|
|
316
|
+
async revokeToken(params) {
|
|
317
|
+
const wallet = normalizeWallet(params.wallet);
|
|
318
|
+
if (!wallet) throw new Error("Invalid wallet address");
|
|
319
|
+
return this.http.delete(`/agent-tokens/${params.tokenId}`, {
|
|
320
|
+
wallet,
|
|
321
|
+
signature: params.signature,
|
|
322
|
+
timestamp: params.timestamp
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
async regenerateToken(params) {
|
|
326
|
+
const wallet = normalizeWallet(params.wallet);
|
|
327
|
+
if (!wallet) throw new Error("Invalid wallet address");
|
|
328
|
+
return this.http.post(`/agent-tokens/${params.tokenId}/regenerate`, {
|
|
329
|
+
wallet,
|
|
330
|
+
signature: params.signature,
|
|
331
|
+
timestamp: params.timestamp,
|
|
332
|
+
label: params.label
|
|
333
|
+
});
|
|
270
334
|
}
|
|
271
335
|
};
|
|
336
|
+
function buildAgentTokenMessage(wallet, timestamp, action, tokenId) {
|
|
337
|
+
const lines = [
|
|
338
|
+
"Obscura Agent Token Request",
|
|
339
|
+
`Wallet: ${wallet.toLowerCase()}`,
|
|
340
|
+
`Timestamp: ${timestamp}`,
|
|
341
|
+
`Action: ${action}`
|
|
342
|
+
];
|
|
343
|
+
if (tokenId) lines.push(`TokenId: ${tokenId}`);
|
|
344
|
+
return lines.join("\n");
|
|
345
|
+
}
|
|
272
346
|
|
|
273
347
|
// src/abis/index.ts
|
|
274
348
|
var IN_EUINT64_COMPONENTS = [
|
|
@@ -653,7 +727,24 @@ var ReputationModule = class {
|
|
|
653
727
|
this.http = http2;
|
|
654
728
|
}
|
|
655
729
|
http;
|
|
730
|
+
/** True when an agent token is configured for authenticated reads */
|
|
731
|
+
hasAgentToken() {
|
|
732
|
+
return this.http.hasAgentToken();
|
|
733
|
+
}
|
|
734
|
+
/** Authenticated reputation for the agent token wallet */
|
|
735
|
+
async getAuthenticatedSummary() {
|
|
736
|
+
if (!this.http.hasAgentToken()) {
|
|
737
|
+
throw new Error("agentToken required \u2014 create one at /docs/agents");
|
|
738
|
+
}
|
|
739
|
+
return this.http.get("/agent/reputation");
|
|
740
|
+
}
|
|
656
741
|
async getSummary(wallet) {
|
|
742
|
+
if (this.http.hasAgentToken()) {
|
|
743
|
+
return this.getAuthenticatedSummary();
|
|
744
|
+
}
|
|
745
|
+
if (!wallet) {
|
|
746
|
+
throw new Error("Invalid wallet address");
|
|
747
|
+
}
|
|
657
748
|
const normalized = normalizeWallet(wallet);
|
|
658
749
|
if (!normalized) {
|
|
659
750
|
throw new Error("Invalid wallet address");
|
|
@@ -735,6 +826,7 @@ var ObscuraSDK = class _ObscuraSDK {
|
|
|
735
826
|
vote;
|
|
736
827
|
reputation;
|
|
737
828
|
activity;
|
|
829
|
+
agent;
|
|
738
830
|
notifications;
|
|
739
831
|
walletClient;
|
|
740
832
|
constructor(config) {
|
|
@@ -745,7 +837,7 @@ var ObscuraSDK = class _ObscuraSDK {
|
|
|
745
837
|
const rpcUrl = config.rpcUrl ?? DEFAULT_RPC_URL;
|
|
746
838
|
this.publicClient = config.publicClient ?? createDefaultPublicClient(rpcUrl, this.chainId);
|
|
747
839
|
const apiUrl = config.apiUrl ?? DEFAULT_API_URL;
|
|
748
|
-
const http2 = new HttpClient(apiUrl);
|
|
840
|
+
const http2 = new HttpClient(apiUrl, config.agentToken);
|
|
749
841
|
const moduleDeps = {
|
|
750
842
|
chainId: this.chainId,
|
|
751
843
|
addresses: this.addresses,
|
|
@@ -761,11 +853,9 @@ var ObscuraSDK = class _ObscuraSDK {
|
|
|
761
853
|
});
|
|
762
854
|
this.vote = new VoteModule(moduleDeps);
|
|
763
855
|
this.reputation = new ReputationModule(http2);
|
|
856
|
+
this.agent = new AgentModule(http2);
|
|
764
857
|
this.notifications = new NotificationsModule(http2);
|
|
765
|
-
this.activity = new ActivityModule(
|
|
766
|
-
config.supabaseUrl ?? DEFAULT_SUPABASE_URL,
|
|
767
|
-
config.supabaseAnonKey
|
|
768
|
-
);
|
|
858
|
+
this.activity = new ActivityModule(http2);
|
|
769
859
|
}
|
|
770
860
|
static create(config = {}) {
|
|
771
861
|
return new _ObscuraSDK(config);
|
|
@@ -784,6 +874,7 @@ var ObscuraSDK = class _ObscuraSDK {
|
|
|
784
874
|
exports.ACTIVITY_EVENT_FILTERS = ACTIVITY_EVENT_FILTERS;
|
|
785
875
|
exports.ARBITRUM_SEPOLIA_CHAIN_ID = ARBITRUM_SEPOLIA_CHAIN_ID;
|
|
786
876
|
exports.ActivityModule = ActivityModule;
|
|
877
|
+
exports.AgentModule = AgentModule;
|
|
787
878
|
exports.CREDIT_MARKET_ABI = CREDIT_MARKET_ABI;
|
|
788
879
|
exports.CreditModule = CreditModule;
|
|
789
880
|
exports.DEFAULT_ADDRESSES = DEFAULT_ADDRESSES;
|
|
@@ -799,6 +890,7 @@ exports.ObscuraSDK = ObscuraSDK;
|
|
|
799
890
|
exports.PayModule = PayModule;
|
|
800
891
|
exports.ReputationModule = ReputationModule;
|
|
801
892
|
exports.VoteModule = VoteModule;
|
|
893
|
+
exports.buildAgentTokenMessage = buildAgentTokenMessage;
|
|
802
894
|
exports.createDefaultPublicClient = createDefaultPublicClient;
|
|
803
895
|
exports.encodeCall = encodeCall;
|
|
804
896
|
exports.normalizeWallet = normalizeWallet;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/defaults.ts","../src/fhe/types.ts","../src/core/utils.ts","../src/core/http.ts","../src/core/chain.ts","../src/config/activity-filters.ts","../src/modules/activity.ts","../src/abis/index.ts","../src/modules/credit.ts","../src/modules/notifications.ts","../src/modules/pay.ts","../src/modules/reputation.ts","../src/modules/vote.ts","../src/client.ts"],"names":["arbitrumSepolia","createPublicClient","http","encodeFunctionData","createClient"],"mappings":";;;;;;;AAyBO,IAAM,yBAAA,GAA4B;AAElC,IAAM,eAAA,GAAkB;AACxB,IAAM,eAAA,GAAkB;AACxB,IAAM,oBAAA,GAAuB;AAE7B,IAAM,iBAAA,GAAsC;AAAA,EACjD,UAAA,EAAY,4CAAA;AAAA,EACZ,UAAA,EAAY,4CAAA;AAAA,EACZ,kBAAA,EAAoB,4CAAA;AAAA,EACpB,yBAAA,EAA2B,4CAAA;AAAA,EAC3B,cAAA,EAAgB,4CAAA;AAAA,EAChB,sBAAA,EAAwB,4CAAA;AAAA,EACxB,WAAA,EAAa,4CAAA;AAAA,EACb,eAAA,EAAiB,4CAAA;AAAA,EACjB,cAAA,EAAgB,4CAAA;AAAA,EAChB,oBAAA,EAAsB,4CAAA;AAAA,EACtB,mBAAA,EAAqB,4CAAA;AAAA,EACrB,gBAAA,EAAkB,4CAAA;AAAA,EAClB,oBAAA,EAAsB,4CAAA;AAAA,EACtB,oBAAA,EAAsB,4CAAA;AAAA,EACtB,8BAAA,EAAgC,4CAAA;AAAA,EAChC,oBAAA,EAAsB,4CAAA;AAAA,EACtB,gBAAA,EAAkB,4CAAA;AAAA,EAClB,eAAA,EAAiB,4CAAA;AAAA,EACjB,eAAA,EAAiB;AACnB;AAEO,SAAS,eAAe,OAAA,EAAuD;AACpF,EAAA,OAAO,EAAE,GAAG,iBAAA,EAAmB,GAAG,OAAA,EAAQ;AAC5C;;;ACzCO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,YAAY,SAAA,EAAmB;AAC7B,IAAA,KAAA;AAAA,MACE,6BAA6B,SAAS,CAAA,sEAAA;AAAA,KACxC;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;;;AChBA,eAAsB,gBAAA,CACpB,KAAA,EACA,eAAA,EACA,GAAA,EACA,YAAA,EACoB;AACpB,EAAA,IAAI,cAAc,OAAO,YAAA;AACzB,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,iBAAiB,kBAAkB,CAAA;AACvD,EAAA,OAAO,GAAA,CAAI,aAAA,CAAc,KAAA,EAAO,EAAE,iBAAiB,CAAA;AACrD;AAGO,SAAS,oBAAoB,KAAA,EAKlC;AACA,EAAA,OAAO;AAAA,IACL,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,WAAW,KAAA,CAAM;AAAA,GACnB;AACF;AAEO,SAAS,gBAAgB,MAAA,EAAgC;AAC9D,EAAA,IAAI,CAAC,qBAAA,CAAsB,IAAA,CAAK,MAAM,GAAG,OAAO,IAAA;AAChD,EAAA,OAAO,OAAO,WAAA,EAAY;AAC5B;AAEO,SAAS,mBAAmB,GAAA,EAAqB;AACtD,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAC9B;;;ACpCO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,OAAA,EAAiB;AAAjB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAkB;AAAA,EAAlB,OAAA;AAAA,EAE7B,IAAI,GAAA,GAAc;AAChB,IAAA,OAAO,kBAAA,CAAmB,KAAK,OAAO,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,GAAA,CAAO,IAAA,EAAc,IAAA,EAAgC;AACzD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MACjD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,KAAA;AAAA,MACR,SAAS,EAAE,MAAA,EAAQ,kBAAA,EAAoB,GAAG,MAAM,OAAA;AAAQ,KACzD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACjD,MAAA,MAAM,IAAI,SAAA,CAAU,QAAA,CAAS,MAAA,EAAQ,OAAO,IAAI,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,IAAI,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAC1G;AACA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA,EAEA,MAAM,IAAA,CAAQ,IAAA,EAAc,IAAA,EAAe,IAAA,EAAgC;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MACjD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,kBAAA;AAAA,QACR,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,IAAA,EAAM;AAAA,OACX;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACjD,MAAA,MAAM,IAAI,SAAA,CAAU,QAAA,CAAS,MAAA,EAAQ,QAAQ,IAAI,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,IAAI,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAC3G;AACA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AAAA,EAEA,MAAM,MAAA,CAAU,IAAA,EAAc,IAAA,EAAgB,IAAA,EAAgC;AAC5E,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,KAAK,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MACjD,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,kBAAA;AAAA,QACR,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,IAAA,EAAM;AAAA,OACX;AAAA,MACA,MAAM,IAAA,KAAS,MAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACnD,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACjD,MAAA,MAAM,IAAI,SAAA,CAAU,QAAA,CAAS,MAAA,EAAQ,UAAU,IAAI,CAAA,SAAA,EAAY,QAAA,CAAS,MAAM,IAAI,IAAA,GAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAC7G;AACA,IAAA,OAAO,SAAS,IAAA,EAAK;AAAA,EACvB;AACF,CAAA;AAEO,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EACnC,WAAA,CACW,QACT,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHJ,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAIT,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AAAA,EACd;AAAA,EALW,MAAA;AAMb;ACpDO,SAAS,aAAa,OAAA,EAAwB;AACnD,EAAA,IAAI,OAAA,KAAY,2BAA2B,OAAOA,sBAAA;AAClD,EAAA,OAAO;AAAA,IACL,GAAGA,sBAAA;AAAA,IACH,EAAA,EAAI;AAAA,GACN;AACF;AAEO,SAAS,yBAAA,CAA0B,QAAgB,OAAA,EAA+B;AACvF,EAAA,OAAOC,uBAAA,CAAmB;AAAA,IACxB,KAAA,EAAO,aAAa,OAAO,CAAA;AAAA,IAC3B,SAAA,EAAWC,SAAA,CAAK,MAAA,IAAU,eAAe;AAAA,GAC1C,CAAA;AACH;AAEO,SAAS,WAAW,IAAA,EAAyB;AAClD,EAAA,OAAOC,uBAAA,CAAmB;AAAA,IACxB,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,IAAA,EAAM,CAAC,GAAG,IAAA,CAAK,IAAI;AAAA,GACpB,CAAA;AACH;AAEA,eAAsB,gBAAA,CACpB,IAAA,EACA,YAAA,EACA,OAAA,EACc;AACd,EAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAa,aAAA,CAAc;AAAA,IAC5C,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,IAAA,EAAM,CAAC,GAAG,IAAA,CAAK,IAAI,CAAA;AAAA,IACnB,KAAA,EAAO,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AAAA,IAChC;AAAA,GACD,CAAA;AACD,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,QAAA,CACd,OAAA,EACA,OAAA,EACA,GAAA,EACA,cACA,IAAA,EACc;AACd,EAAA,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,YAAA,EAAc,MAAM,OAAA,EAAQ;AACrD;;;AC5DA,IAAM,2BAAA,GAA8B;AAAA,EAClC,8BAAA;AAAA,EACA,+BAAA;AAAA,EACA,8BAAA;AAAA,EACA,4BAAA;AAAA,EACA,gCAAA;AAAA,EACA,wCAAA;AAAA,EACA,yCAAA;AAAA,EACA,8BAAA;AAAA,EACA,6BAAA;AAAA,EACA,qCAAA;AAAA,EACA,gCAAA;AAAA,EACA,qCAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,yBAAA,GAA4B;AAAA,EAChC,6BAAA;AAAA,EACA,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA,uBAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,8BAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,sBAAA,GAAuE;AAAA,EAClF,KAAK,EAAC;AAAA,EACN,IAAA,EAAM,CAAC,wBAAwB,CAAA;AAAA,EAC/B,QAAA,EAAU,CAAC,4BAA4B,CAAA;AAAA,EACvC,MAAA,EAAQ;AAAA,IACN,kCAAA;AAAA,IACA,oCAAA;AAAA,IACA,oCAAA;AAAA,IACA,kCAAA;AAAA,IACA,oCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,OAAA,EAAS,CAAC,+BAAA,EAAiC,4BAA4B,CAAA;AAAA,EACvE,MAAA,EAAQ;AAAA,IACN,yCAAA;AAAA,IACA,wCAAA;AAAA,IACA,0CAAA;AAAA,IACA,2CAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,OAAA,EAAS,CAAC,qCAAA,EAAuC,uCAAuC,CAAA;AAAA,EACxF,MAAA,EAAQ,2BAAA;AAAA,EACR,IAAA,EAAM;AACR;;;AC1CA,IAAM,iBAAA,GAAoB,EAAA;AAEnB,IAAM,iBAAN,MAAqB;AAAA,EACT,MAAA;AAAA,EACR,WAAA;AAAA,EACA,eAAA;AAAA,EAET,WAAA,CAAY,aAAiC,eAAA,EAAqC;AAChF,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,SACH,WAAA,IAAe,eAAA,GAAkBC,uBAAA,CAAa,WAAA,EAAa,eAAe,CAAA,GAAI,IAAA;AAAA,EAClF;AAAA;AAAA,EAGA,YAAA,GAAwB;AACtB,IAAA,OAAO,KAAK,MAAA,KAAW,IAAA;AAAA,EACzB;AAAA,EAEA,eAAA,GAA0C;AACxC,IAAA,OAAO,sBAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAA,CAAc,MAAA,EAAiB,OAAA,GAA+B,EAAC,EAAgC;AACnG,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,UACE,gDAAA;AAAA,UACA,CAAA,yEAAA,CAAA;AAAA,UACA,gBAAgB,oBAAoB,CAAA,CAAA;AAAA,UACpC,4FAAA;AAAA,UACA;AAAA,SACF,CAAE,KAAK,GAAG;AAAA,OACZ;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAEzD,IAAA,MAAM,MAAA,GAA4B,QAAQ,MAAA,IAAU,KAAA;AACpD,IAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,CAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,iBAAA;AAErC,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,MAAA,CACd,IAAA,CAAK,kBAAkB,CAAA,CACvB,MAAA,CAAO,GAAG,CAAA,CACV,QAAA,CAAS,cAAA,EAAgB,CAAC,UAAU,CAAC,CAAA,CACrC,KAAA,CAAM,cAAA,EAAgB,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA,CAC1C,KAAA,CAAM,IAAA,GAAO,QAAA,EAAU,IAAA,GAAO,QAAA,GAAW,QAAA,GAAW,CAAC,CAAA;AAExD,IAAA,MAAM,OAAA,GAAU,uBAAuB,MAAM,CAAA;AAC7C,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,KAAA,GAAQ,MAAM,EAAA,CAAG,YAAA,EAAc,CAAC,GAAG,OAAO,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,KAAA;AAC9B,IAAA,IAAI,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,MAAM,OAAO,CAAA;AAExC,IAAA,MAAM,KAAA,GAAS,QAAQ,EAAC;AAExB,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA,EAAS,MAAM,MAAA,KAAW;AAAA,KAC5B;AAAA,EACF;AACF;;;AC7EO,IAAM,qBAAA,GAAwB;AAAA,EACnC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,EAClC,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAQ;AAAA,EACtC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC/B,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,OAAA;AAC7B,CAAA;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B;AAAA,IACE,IAAA,EAAM,uBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,SAAA,EAAW,IAAA,EAAM,WAAW,CAAA;AAAA,IAC7C,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,MAClC,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,MAC9B,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,sBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,MAC9B,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC;AAEd;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B;AAAA,IACE,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,EAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,EAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,mBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,EAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,WAAW,CAAA;AAAA,IAC1C,OAAA,EAAS;AAAA,MACP,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,SAAA,EAAU;AAAA,MAC3C,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,SAAA,EAAU;AAAA,MACxC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,MACtC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA;AAAU;AACxC,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,oBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,WAAW,CAAA;AAAA,IAC1C,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,WAAW,CAAA;AAAA,IAC1C,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,kBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC;AAEd;AAEO,IAAM,gBAAA,GAAmB;AAAA,EAC9B;AAAA,IACE,IAAA,EAAM,gBAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,EAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,EAAA,EAAI,IAAA,EAAM,WAAW;AAAA,GACzC;AAAA,EACA;AAAA,IACE,IAAA,EAAM,aAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,MAAA;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,YAAA,EAAc,IAAA,EAAM,WAAW,CAAA;AAAA,IAChD,OAAA,EAAS;AAAA,MACP,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA,EAAU;AAAA,MACnC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,QAAA,EAAS;AAAA,MAChC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,QAAA,EAAS;AAAA,MACtC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,UAAA,EAAW;AAAA,MACpC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,SAAA,EAAU;AAAA,MACrC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA,EAAU;AAAA,MACnC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,MAAA,EAAO;AAAA,MAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,SAAA;AAAU;AAC3C,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,MACN,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,MACtC,EAAE,MAAM,iBAAA,EAAmB,IAAA,EAAM,SAAS,UAAA,EAAY,CAAC,GAAG,qBAAqB,CAAA;AAAE,KACnF;AAAA,IACA,SAAS;AAAC,GACZ;AAAA,EACA;AAAA,IACE,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,eAAA,EAAiB,YAAA;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,WAAA,EAAa,IAAA,EAAM,WAAW,CAAA;AAAA,IAC/C,SAAS;AAAC;AAEd;;;AC1JA,IAAM,wBAAA,GACJ,+JAAA;AAUF,SAAS,kBAAkB,KAAA,EAA8B;AACvD,EAAA,MAAM,MAAM,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA;AAC/C,EAAA,OAAO,KAAK,GAAG,CAAA,CAAA;AACjB;AAEO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,IAAA,EAAwB;AAAxB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAyB;AAAA,EAAzB,IAAA;AAAA,EAE7B,iBAAiB,QAAA,EAA6B;AAC5C,IAAA,OAAO,QAAA,IAAY,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,8BAAA;AAAA,EACzC;AAAA;AAAA,EAGA,MAAM,qBAAqB,aAAA,EAA2D;AACpF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAClD,IAAA,MAAM,CAAC,cAAA,EAAgB,iBAAA,EAAmB,iBAAiB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/E,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,QAClC,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,iBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,QAClC,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,iBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,MACD,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,QAClC,OAAA,EAAS,MAAA;AAAA,QACT,GAAA,EAAK,iBAAA;AAAA,QACL,YAAA,EAAc;AAAA,OACf;AAAA,KACF,CAAA;AAED,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,MAAA;AAAA,MACf,cAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,GAA0E,EAAC,EAC3C;AAChC,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAEzD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,aAAa,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAY,MAAM,IAAA,CAAK,IAAA,CAAK,aAAa,YAAA,CAAa;AAAA,MAC1D,OAAA,EAAS,MAAA;AAAA,MACT,GAAA,EAAK,iBAAA;AAAA,MACL,YAAA,EAAc,aAAA;AAAA,MACd,IAAA,EAAM,CAAC,UAAU;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,MAAA,GAAgC;AAAA,MACpC,aAAA,EAAe,MAAA;AAAA,MACf,MAAA,EAAQ,UAAA;AAAA,MACR,2BAAA,EAA6B,iBAAA,CAAkB,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,MAC1D,2BAAA,EAA6B,iBAAA,CAAkB,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,MAC1D,yBAAA,EAA2B,iBAAA,CAAkB,QAAA,CAAS,CAAC,CAAC;AAAA,KAC1D;AAEA,IAAA,IAAI,QAAQ,uBAAA,EAAyB;AACnC,MAAA,MAAM,CAAC,eAAA,EAAiB,WAAW,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QACvD,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,UAClC,OAAA,EAAS,MAAA;AAAA,UACT,GAAA,EAAK,iBAAA;AAAA,UACL,YAAA,EAAc,oBAAA;AAAA,UACd,IAAA,EAAM,CAAC,UAAU;AAAA,SAClB,CAAA;AAAA,QACD,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,UAClC,OAAA,EAAS,MAAA;AAAA,UACT,GAAA,EAAK,iBAAA;AAAA,UACL,YAAA,EAAc,gBAAA;AAAA,UACd,IAAA,EAAM,CAAC,UAAU;AAAA,SAClB;AAAA,OACF,CAAA;AACD,MAAA,MAAA,CAAO,sBAAA,GAAyB,wBAAA;AAChC,MAAA,MAAA,CAAO,eAAA,GAAkB,eAAA;AACzB,MAAA,MAAA,CAAO,WAAA,GAAc,WAAA;AAAA,IACvB;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,qBAAA,CACJ,MAAA,EACA,eAAA,EACA,aAAA,EACuB;AACvB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,eAAe,CAAA;AACjF,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ,mBAAmB,kBAAA,EAAoB;AAAA,MAChF,oBAAoB,GAAG;AAAA,KACxB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CACJ,MAAA,EACA,eAAA,EACA,aAAA,EACuB;AACvB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,eAAe,CAAA;AACjF,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ,mBAAmB,QAAA,EAAU;AAAA,MACtE,oBAAoB,GAAG;AAAA,KACxB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,UAAA,CACJ,MAAA,EACA,eAAA,EACA,aAAA,EACuB;AACvB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAClD,IAAA,MAAM,GAAA,GAAM,MAAM,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,eAAe,CAAA;AACjF,IAAA,OAAO,SAAS,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ,mBAAmB,OAAA,EAAS;AAAA,MACrE,oBAAoB,GAAG;AAAA,KACxB,CAAA;AAAA,EACH;AACF;;;ACzIO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6BF,KAAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAAA,KAAAA;AAAA,EAAmB;AAAA,EAAnB,IAAA;AAAA,EAE7B,MAAM,iBAAA,GAAqC;AACzC,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,IAAA,CAAK,IAAA,CAAK,IAAmB,mBAAmB,CAAA;AAC5E,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,MAAA,EAAoD;AACjE,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAEzD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAuB,CAAA,OAAA,EAAU,UAAU,CAAA,CAAE,CAAA;AAAA,IACtE,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,SAAA,IAAa,GAAA,CAAI,MAAA,KAAW,KAAK,OAAO,IAAA;AAC3D,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,KAAA,EAAyC;AACvD,IAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAA;AAC/C,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAEzD,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAiB,QAAA,EAAU;AAAA,MACzC,GAAG,KAAA;AAAA,MACH,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,SAAA,CAAU,MAAA,EAAiB,YAAA,EAAmD;AAClF,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,wBAAwB,CAAA;AACzD,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,EAAU,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAEhF,IAAA,MAAM,IAAA,CAAK,KAAK,IAAA,CAAiB,YAAA,EAAc,EAAE,MAAA,EAAQ,UAAA,EAAY,cAAc,CAAA;AAAA,EACrF;AAAA,EAEA,MAAM,YAAY,MAAA,EAAgC;AAChD,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAEzD,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAmB,cAAc,EAAE,MAAA,EAAQ,YAAY,CAAA;AAAA,EACzE;AACF;;;AC1CO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAE7B,IAAI,aAAA,GAAyB;AAC3B,IAAA,OAAO,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,mBAAmB,OAAA,EAAmC;AAC1D,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MACzC,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,UAAA;AAAA,MAC7B,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,uBAAA;AAAA,MACd,IAAA,EAAM,CAAC,OAAO;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CACJ,MAAA,EACA,eAAA,EACuB;AACvB,IAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,MAChB,MAAA;AAAA,MACA,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,MACpB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV;AAAA,KACF;AACA,IAAA,OAAO,QAAA;AAAA,MACL,KAAK,IAAA,CAAK,OAAA;AAAA,MACV,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,MACpB,eAAA;AAAA,MACA,QAAA;AAAA,MACA,CAAC,MAAA,EAAQ,mBAAA,CAAoB,GAAG,CAAC;AAAA,KACnC;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,EAAA,EACA,MAAA,EACA,eAAA,EACuB;AACvB,IAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,MAChB,MAAA;AAAA,MACA,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,MACpB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV;AAAA,KACF;AACA,IAAA,OAAO,QAAA;AAAA,MACL,KAAK,IAAA,CAAK,OAAA;AAAA,MACV,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,MACpB,eAAA;AAAA,MACA,UAAA;AAAA,MACA,CAAC,EAAA,EAAI,mBAAA,CAAoB,GAAG,CAAC;AAAA,KAC/B;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,EAAA,EACA,MAAA,EACA,eAAA,EACuB;AACvB,IAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,MAChB,MAAA;AAAA,MACA,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,MACpB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV;AAAA,KACF;AACA,IAAA,OAAO,QAAA;AAAA,MACL,KAAK,IAAA,CAAK,OAAA;AAAA,MACV,IAAA,CAAK,KAAK,SAAA,CAAU,UAAA;AAAA,MACpB,eAAA;AAAA,MACA,sBAAA;AAAA,MACA,CAAC,EAAA,EAAI,mBAAA,CAAoB,GAAG,CAAC;AAAA,KAC/B;AAAA,EACF;AACF;;;ACrFO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6BA,KAAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAAA,KAAAA;AAAA,EAAmB;AAAA,EAAnB,IAAA;AAAA,EAE7B,MAAM,WAAW,MAAA,EAA6C;AAC5D,IAAA,MAAM,UAAA,GAAa,gBAAgB,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAuB,CAAA,YAAA,EAAe,UAAU,CAAA,CAAE,CAAA;AAAA,EACrE;AACF;;;ACAO,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,IAAA,EAAsB;AAAtB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAuB;AAAA,EAAvB,IAAA;AAAA,EAE7B,IAAI,WAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,KAAK,SAAA,CAAU,WAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,gBAAA,GAAoC;AACxC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,YAAA,CAAa;AAAA,MACzC,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,WAAA;AAAA,MAC7B,GAAA,EAAK,gBAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,EAAA,EAAoC;AACpD,IAAA,MAAM,MAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,aAAa,YAAA,CAAa;AAAA,MACxD,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,WAAA;AAAA,MAC7B,GAAA,EAAK,gBAAA;AAAA,MACL,YAAA,EAAc,aAAA;AAAA,MACd,IAAA,EAAM,CAAC,EAAE;AAAA,KACV,CAAA;AAED,IAAA,OAAO;AAAA,MACL,EAAA;AAAA,MACA,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,MACjB,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,MACf,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,MACrB,OAAA,EAAS,CAAC,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,MACtB,SAAA,EAAW,OAAO,CAAC,CAAA;AAAA,MACnB,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,MACjB,SAAA,EAAW,OAAO,CAAC,CAAA;AAAA,MACnB,aAAA,EAAe,OAAO,CAAC;AAAA,KACzB;AAAA,EACF;AAAA,EAEA,MAAM,aAAA,CACJ,UAAA,EACA,WAAA,EACA,eAAA,EACuB;AACvB,IAAA,MAAM,MAAM,MAAM,gBAAA;AAAA,MAChB,OAAO,WAAW,CAAA;AAAA,MAClB,IAAA,CAAK,KAAK,SAAA,CAAU,WAAA;AAAA,MACpB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV;AAAA,KACF;AACA,IAAA,OAAO,QAAA;AAAA,MACL,KAAK,IAAA,CAAK,OAAA;AAAA,MACV,IAAA,CAAK,KAAK,SAAA,CAAU,WAAA;AAAA,MACpB,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,CAAC,UAAA,EAAY,mBAAA,CAAoB,GAAG,CAAC;AAAA,KACvC;AAAA,EACF;AAAA,EAEA,cAAc,SAAA,EAAkC;AAC9C,IAAA,OAAO,QAAA;AAAA,MACL,KAAK,IAAA,CAAK,OAAA;AAAA,MACV,IAAA,CAAK,KAAK,SAAA,CAAU,WAAA;AAAA,MACpB,gBAAA;AAAA,MACA,UAAA;AAAA,MACA,CAAC,SAAS;AAAA,KACZ;AAAA,EACF;AACF;;;ACzDO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA,EACb,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAA;AAAA,EAEA,GAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EAEQ,YAAA;AAAA,EAET,YAAY,MAAA,EAA0B;AAC5C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,yBAAA;AACjC,IAAA,IAAA,CAAK,SAAA,GAAY,cAAA,CAAe,MAAA,CAAO,SAAS,CAAA;AAChD,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAClB,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA;AAE3B,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,eAAA;AAChC,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,YAAA,IAAgB,yBAAA,CAA0B,MAAA,EAAQ,KAAK,OAAO,CAAA;AAEzF,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,eAAA;AAChC,IAAA,MAAMA,KAAAA,GAAO,IAAI,UAAA,CAAW,MAAM,CAAA;AAElC,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,KAAK,IAAA,CAAK;AAAA,KACZ;AAEA,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,SAAA,CAAU,UAAU,CAAA;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa;AAAA,MAC7B,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,KAAK,IAAA,CAAK;AAAA,KACX,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,UAAU,CAAA;AACrC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,gBAAA,CAAiBA,KAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,mBAAA,CAAoBA,KAAI,CAAA;AACjD,IAAA,IAAA,CAAK,WAAW,IAAI,cAAA;AAAA,MAClB,OAAO,WAAA,IAAe,oBAAA;AAAA,MACtB,MAAA,CAAO;AAAA,KACT;AAAA,EACF;AAAA,EAEA,OAAO,MAAA,CAAO,MAAA,GAA2B,EAAC,EAAe;AACvD,IAAA,OAAO,IAAI,YAAW,MAAM,CAAA;AAAA,EAC9B;AAAA,EAEA,WAAW,IAAA,EAAyB;AAClC,IAAA,OAAO,WAAW,IAAI,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,QAAA,CAAS,IAAA,EAAoB,OAAA,EAAgC;AACjE,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,IACjG;AACA,IAAA,OAAO,gBAAA,CAAiB,IAAA,EAAM,IAAA,CAAK,YAAA,EAAc,OAAO,CAAA;AAAA,EAC1D;AACF","file":"index.cjs","sourcesContent":["import type { Address } from \"viem\";\r\n\r\n/** Arbitrum Sepolia deployment snapshot — sync from contracts-hardhat/deployments/arb-sepolia.json */\r\nexport interface ObscuraAddresses {\r\n ocUSDC_Pay: Address;\r\n ObscuraPay: Address;\r\n ObscuraPayStreamV3: Address;\r\n ObscuraConfidentialEscrow: Address;\r\n ObscuraInvoice: Address;\r\n ObscuraStealthRegistry: Address;\r\n ObscuraVote: Address;\r\n ObscuraTreasury: Address;\r\n ObscuraRewards: Address;\r\n ObscuraCreditFactory: Address;\r\n ObscuraCreditOracle: Address;\r\n ObscuraCreditIRM: Address;\r\n ObscuraCreditAuction: Address;\r\n ObscuraCreditScoreV2: Address;\r\n CreditCanonicalPayOcUSDCMarket: Address;\r\n v2_ConservativeVault: Address;\r\n v2_BalancedVault: Address;\r\n ObscuraGovernor: Address;\r\n ObscuraTimelock: Address;\r\n}\r\n\r\nexport const ARBITRUM_SEPOLIA_CHAIN_ID = 421614;\r\n\r\nexport const DEFAULT_RPC_URL = \"https://sepolia-rollup.arbitrum.io/rpc\";\r\nexport const DEFAULT_API_URL = \"https://obscura-api-n62v.onrender.com\";\r\nexport const DEFAULT_SUPABASE_URL = \"https://quoovjkjwgtdqwdofubh.supabase.co\";\r\n\r\nexport const DEFAULT_ADDRESSES: ObscuraAddresses = {\r\n ocUSDC_Pay: \"0xEd46020Df8abe7BB1E096f27d089F4326D223a53\",\r\n ObscuraPay: \"0x91CdD9a481C732bEB09Ce039da23DC11e83547a4\",\r\n ObscuraPayStreamV3: \"0xE4328F139F03138D63f7fdF90A8Ef240e04653fA\",\r\n ObscuraConfidentialEscrow: \"0x293810A2081114CcE0c98A709a0c31aE07c01D75\",\r\n ObscuraInvoice: \"0x62a86C8d68fF32ea41Faf349db6EF7EF496620b7\",\r\n ObscuraStealthRegistry: \"0xa36e791a611D36e2C817a7DA0f41547D30D4917d\",\r\n ObscuraVote: \"0xe358776AfdbA95d7c9F040e6ef1f5A021aF91730\",\r\n ObscuraTreasury: \"0x89252ee3f920978EEfDB650760fe56BA1Ede8c08\",\r\n ObscuraRewards: \"0x435ea117404553A6868fbe728A7A284FCEd15BC2\",\r\n ObscuraCreditFactory: \"0x5aDC1965D155f4b18119222CBA7a7A4be4F45680\",\r\n ObscuraCreditOracle: \"0x5F00910533AB6fc12a35a87BaFe856EF2cb323c3\",\r\n ObscuraCreditIRM: \"0xA072c038cE98dEC8F5350D451145fB98F5EA57Bc\",\r\n ObscuraCreditAuction: \"0x205FfC0A3b8207B645c1a6B1b4805eb3FfC828F0\",\r\n ObscuraCreditScoreV2: \"0xe5B0c6c06C0B1fd7d7CD5D2e93997693863d3D4D\",\r\n CreditCanonicalPayOcUSDCMarket: \"0x1Ec113297c7F9516A6604aa3b18C180559a6f551\",\r\n v2_ConservativeVault: \"0xCEBb042ae8FDE217a9FdE5b8a82E23827FdBB898\",\r\n v2_BalancedVault: \"0xF508315bD4C5EC4c71C5E431AE972C0dC6B78Bbc\",\r\n ObscuraGovernor: \"0xE4807C9F90a0da8F5B5bafa4361B15ff855b7186\",\r\n ObscuraTimelock: \"0x07b7961627f433a1d9001F82Ac4af9F19b9a9E05\",\r\n};\r\n\r\nexport function mergeAddresses(partial?: Partial<ObscuraAddresses>): ObscuraAddresses {\r\n return { ...DEFAULT_ADDRESSES, ...partial };\r\n}\r\n","import type { Address } from \"viem\";\r\nimport type { InEuint64 } from \"../types/index.js\";\r\n\r\nexport interface FheEncryptOptions {\r\n contractAddress: Address;\r\n onStep?: (step: string) => void;\r\n}\r\n\r\n/** Injectable FHE adapter — host supplies @cofhe/sdk or custom implementation */\r\nexport interface FheProvider {\r\n encryptUint64(value: bigint, options: FheEncryptOptions): Promise<InEuint64>;\r\n decryptCtHash?(ctHash: bigint, contractAddress: Address): Promise<bigint>;\r\n}\r\n\r\nexport class FheRequiredError extends Error {\r\n constructor(operation: string) {\r\n super(\r\n `FHE provider required for ${operation}. Pass fhe in ObscuraSDK.create() or supply a pre-encrypted InEuint64.`,\r\n );\r\n this.name = \"FheRequiredError\";\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type { InEuint64 } from \"../types/index.js\";\r\nimport { FheRequiredError } from \"../fhe/types.js\";\r\n\r\nexport async function resolveInEuint64(\r\n value: bigint,\r\n contractAddress: Address,\r\n fhe: FheProvider | undefined,\r\n preEncrypted?: InEuint64,\r\n): Promise<InEuint64> {\r\n if (preEncrypted) return preEncrypted;\r\n if (!fhe) throw new FheRequiredError(\"encrypted amount\");\r\n return fhe.encryptUint64(value, { contractAddress });\r\n}\r\n\r\n/** Serialize InEuint64 for viem contract args (bigint ctHash) */\r\nexport function toContractInEuint64(input: InEuint64): {\r\n ctHash: bigint;\r\n securityZone: number;\r\n utype: number;\r\n signature: `0x${string}`;\r\n} {\r\n return {\r\n ctHash: input.ctHash,\r\n securityZone: input.securityZone,\r\n utype: input.utype,\r\n signature: input.signature,\r\n };\r\n}\r\n\r\nexport function normalizeWallet(wallet: string): Address | null {\r\n if (!/^0x[0-9a-fA-F]{40}$/.test(wallet)) return null;\r\n return wallet.toLowerCase() as Address;\r\n}\r\n\r\nexport function stripTrailingSlash(url: string): string {\r\n return url.replace(/\\/$/, \"\");\r\n}\r\n","import { stripTrailingSlash } from \"./utils.js\";\r\n\r\nexport class HttpClient {\r\n constructor(private readonly baseUrl: string) {}\r\n\r\n get url(): string {\r\n return stripTrailingSlash(this.baseUrl);\r\n }\r\n\r\n async get<T>(path: string, init?: RequestInit): Promise<T> {\r\n const response = await fetch(`${this.url}${path}`, {\r\n ...init,\r\n method: \"GET\",\r\n headers: { Accept: \"application/json\", ...init?.headers },\r\n });\r\n if (!response.ok) {\r\n const body = await response.text().catch(() => \"\");\r\n throw new HttpError(response.status, `GET ${path} failed (${response.status})${body ? `: ${body}` : \"\"}`);\r\n }\r\n return response.json() as Promise<T>;\r\n }\r\n\r\n async post<T>(path: string, body: unknown, init?: RequestInit): Promise<T> {\r\n const response = await fetch(`${this.url}${path}`, {\r\n ...init,\r\n method: \"POST\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n ...init?.headers,\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => \"\");\r\n throw new HttpError(response.status, `POST ${path} failed (${response.status})${text ? `: ${text}` : \"\"}`);\r\n }\r\n return response.json() as Promise<T>;\r\n }\r\n\r\n async delete<T>(path: string, body?: unknown, init?: RequestInit): Promise<T> {\r\n const response = await fetch(`${this.url}${path}`, {\r\n ...init,\r\n method: \"DELETE\",\r\n headers: {\r\n Accept: \"application/json\",\r\n \"Content-Type\": \"application/json\",\r\n ...init?.headers,\r\n },\r\n body: body !== undefined ? JSON.stringify(body) : undefined,\r\n });\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => \"\");\r\n throw new HttpError(response.status, `DELETE ${path} failed (${response.status})${text ? `: ${text}` : \"\"}`);\r\n }\r\n return response.json() as Promise<T>;\r\n }\r\n}\r\n\r\nexport class HttpError extends Error {\r\n constructor(\r\n readonly status: number,\r\n message: string,\r\n ) {\r\n super(message);\r\n this.name = \"HttpError\";\r\n }\r\n}\r\n","import {\r\n createPublicClient,\r\n encodeFunctionData,\r\n http,\r\n type Abi,\r\n type Address,\r\n type Chain,\r\n type Hex,\r\n type PublicClient,\r\n type WalletClient,\r\n} from \"viem\";\r\nimport { arbitrumSepolia } from \"viem/chains\";\r\nimport { ARBITRUM_SEPOLIA_CHAIN_ID, DEFAULT_RPC_URL } from \"../config/defaults.js\";\r\nimport type { ContractCall } from \"../types/index.js\";\r\n\r\nexport function resolveChain(chainId: number): Chain {\r\n if (chainId === ARBITRUM_SEPOLIA_CHAIN_ID) return arbitrumSepolia;\r\n return {\r\n ...arbitrumSepolia,\r\n id: chainId,\r\n };\r\n}\r\n\r\nexport function createDefaultPublicClient(rpcUrl: string, chainId: number): PublicClient {\r\n return createPublicClient({\r\n chain: resolveChain(chainId),\r\n transport: http(rpcUrl || DEFAULT_RPC_URL),\r\n });\r\n}\r\n\r\nexport function encodeCall(call: ContractCall): Hex {\r\n return encodeFunctionData({\r\n abi: call.abi as Abi,\r\n functionName: call.functionName,\r\n args: [...call.args],\r\n });\r\n}\r\n\r\nexport async function sendContractCall(\r\n call: ContractCall,\r\n walletClient: WalletClient,\r\n account: Address,\r\n): Promise<Hex> {\r\n const hash = await walletClient.writeContract({\r\n address: call.address,\r\n abi: call.abi as Abi,\r\n functionName: call.functionName,\r\n args: [...call.args],\r\n chain: resolveChain(call.chainId),\r\n account,\r\n });\r\n return hash;\r\n}\r\n\r\nexport function makeCall(\r\n chainId: number,\r\n address: Address,\r\n abi: readonly unknown[],\r\n functionName: string,\r\n args: readonly unknown[],\r\n): ContractCall {\r\n return { address, abi, functionName, args, chainId };\r\n}\r\n","import type { ActivityEventType } from \"../types/index.js\";\r\n\r\nconst CREDIT_ACTIVITY_EVENT_NAMES = [\r\n \"ObscuraCreditMarket.Supplied\",\r\n \"ObscuraCreditMarket.Withdrawn\",\r\n \"ObscuraCreditMarket.Borrowed\",\r\n \"ObscuraCreditMarket.Repaid\",\r\n \"ObscuraCreditMarket.Liquidated\",\r\n \"ObscuraCreditMarket.CollateralSupplied\",\r\n \"ObscuraCreditMarket.CollateralWithdrawn\",\r\n \"ObscuraCreditVault.Deposited\",\r\n \"ObscuraCreditVault.Withdrew\",\r\n \"ObscuraCreditAuction.AuctionCreated\",\r\n \"ObscuraCreditAuction.BidPlaced\",\r\n \"ObscuraCreditAuction.AuctionSettled\",\r\n \"ObscuraCreditScoreV2.ScoreUpdated\",\r\n];\r\n\r\nconst VOTE_ACTIVITY_EVENT_NAMES = [\r\n \"ObscuraVote.ProposalCreated\",\r\n \"ObscuraVote.VoteCast\",\r\n \"ObscuraVote.VoteChanged\",\r\n \"ObscuraVote.Delegated\",\r\n \"ObscuraVote.DelegationRemoved\",\r\n \"ObscuraVote.ProposalFinalized\",\r\n \"ObscuraTreasury.SpendAttached\",\r\n \"ObscuraTreasury.SpendExecuted\",\r\n \"ObscuraRewards.RewardAccrued\",\r\n \"ObscuraRewards.RewardWithdrawn\",\r\n];\r\n\r\nexport const ACTIVITY_EVENT_FILTERS: Record<ActivityEventType, readonly string[]> = {\r\n all: [],\r\n sent: [\"ObscuraPay.PaymentSent\"],\r\n received: [\"ObscuraPay.PaymentReceived\"],\r\n stream: [\r\n \"ObscuraPayStreamV2.StreamCreated\",\r\n \"ObscuraPayStreamV2.StreamCancelled\",\r\n \"ObscuraPayStreamV2.StreamWithdrawn\",\r\n \"ObscuraPayStreamV3.StreamCreated\",\r\n \"ObscuraPayStreamV3.StreamCancelled\",\r\n \"ObscuraPayStreamV3.CycleSettled\",\r\n ],\r\n invoice: [\"ObscuraInvoice.InvoiceCreated\", \"ObscuraInvoice.InvoicePaid\"],\r\n escrow: [\r\n \"ObscuraConfidentialEscrow.EscrowCreated\",\r\n \"ObscuraConfidentialEscrow.EscrowFunded\",\r\n \"ObscuraConfidentialEscrow.EscrowRedeemed\",\r\n \"ObscuraConfidentialEscrow.EscrowCancelled\",\r\n \"ObscuraConfidentialEscrow.EscrowRefunded\",\r\n ],\r\n stealth: [\"ObscuraStealthRegistry.Announcement\", \"ObscuraStealthRegistry.MetaAddressSet\"],\r\n credit: CREDIT_ACTIVITY_EVENT_NAMES,\r\n vote: VOTE_ACTIVITY_EVENT_NAMES,\r\n};\r\n\r\nexport type ActivityEventFilterMap = typeof ACTIVITY_EVENT_FILTERS;\r\n","import { createClient, type SupabaseClient } from \"@supabase/supabase-js\";\r\nimport type { Address } from \"viem\";\r\nimport { ACTIVITY_EVENT_FILTERS, type ActivityEventFilterMap } from \"../config/activity-filters.js\";\r\nimport { DEFAULT_SUPABASE_URL } from \"../config/defaults.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\nimport type {\r\n ActivityEventType,\r\n ActivityItem,\r\n ActivityListOptions,\r\n ActivityListResult,\r\n} from \"../types/index.js\";\r\n\r\nconst DEFAULT_PAGE_SIZE = 20;\r\n\r\nexport class ActivityModule {\r\n private readonly client: SupabaseClient | null;\r\n readonly supabaseUrl: string | undefined;\r\n readonly supabaseAnonKey: string | undefined;\r\n\r\n constructor(supabaseUrl: string | undefined, supabaseAnonKey: string | undefined) {\r\n this.supabaseUrl = supabaseUrl;\r\n this.supabaseAnonKey = supabaseAnonKey;\r\n this.client =\r\n supabaseUrl && supabaseAnonKey ? createClient(supabaseUrl, supabaseAnonKey) : null;\r\n }\r\n\r\n /** True when both Supabase URL and anon key were supplied at SDK init. */\r\n isConfigured(): boolean {\r\n return this.client !== null;\r\n }\r\n\r\n getEventFilters(): ActivityEventFilterMap {\r\n return ACTIVITY_EVENT_FILTERS;\r\n }\r\n\r\n async listForWallet(wallet: Address, options: ActivityListOptions = {}): Promise<ActivityListResult> {\r\n if (!this.client) {\r\n throw new Error(\r\n [\r\n \"Activity module requires Supabase credentials.\",\r\n `Pass supabaseAnonKey (and optionally supabaseUrl) to ObscuraSDK.create().`,\r\n `Default URL: ${DEFAULT_SUPABASE_URL}`,\r\n \"Get the anon key from your Supabase project → Settings → API → anon public.\",\r\n \"Reputation and notifications work without Supabase; activity does not.\",\r\n ].join(\" \"),\r\n );\r\n }\r\n\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n const filter: ActivityEventType = options.filter ?? \"all\";\r\n const page = options.page ?? 0;\r\n const pageSize = options.pageSize ?? DEFAULT_PAGE_SIZE;\r\n\r\n let query = this.client\r\n .from(\"obscura_activity\")\r\n .select(\"*\")\r\n .contains(\"participants\", [normalized])\r\n .order(\"block_number\", { ascending: false })\r\n .range(page * pageSize, page * pageSize + pageSize - 1);\r\n\r\n const allowed = ACTIVITY_EVENT_FILTERS[filter];\r\n if (allowed.length > 0) {\r\n query = query.in(\"event_name\", [...allowed]);\r\n }\r\n\r\n const { data, error } = await query;\r\n if (error) throw new Error(error.message);\r\n\r\n const items = (data ?? []) as ActivityItem[];\r\n\r\n return {\r\n items,\r\n page,\r\n pageSize,\r\n hasMore: items.length === pageSize,\r\n };\r\n }\r\n}\r\n","/** Minimal ABI fragments for SDK v1 transaction builders and reads */\r\n\r\nexport const IN_EUINT64_COMPONENTS = [\r\n { name: \"ctHash\", type: \"uint256\" },\r\n { name: \"securityZone\", type: \"uint8\" },\r\n { name: \"utype\", type: \"uint8\" },\r\n { name: \"signature\", type: \"bytes\" },\r\n] as const;\r\n\r\nexport const OC_USDC_PAY_ABI = [\r\n {\r\n name: \"confidentialBalanceOf\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"account\", type: \"address\" }],\r\n outputs: [{ name: \"\", type: \"uint256\" }],\r\n },\r\n {\r\n name: \"shield\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"amount\", type: \"uint256\" },\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"unshield\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"to\", type: \"address\" },\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"confidentialTransfer\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"to\", type: \"address\" },\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n] as const;\r\n\r\nexport const CREDIT_MARKET_ABI = [\r\n {\r\n name: \"utilizationBps\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint256\" }],\r\n },\r\n {\r\n name: \"totalSupplyAssets\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"totalBorrowAssets\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"getPosition\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"user\", type: \"address\" }],\r\n outputs: [\r\n { name: \"encSupplyShares\", type: \"uint256\" },\r\n { name: \"borrowShares\", type: \"uint256\" },\r\n { name: \"collateral\", type: \"uint256\" },\r\n { name: \"disburseTo\", type: \"uint256\" },\r\n ],\r\n },\r\n {\r\n name: \"getPlainCollateral\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"user\", type: \"address\" }],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"getPlainBorrow\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"user\", type: \"address\" }],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"supplyCollateral\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"borrow\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"repay\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n] as const;\r\n\r\nexport const OBSCURA_VOTE_ABI = [\r\n {\r\n name: \"nextProposalId\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint256\" }],\r\n },\r\n {\r\n name: \"getProposal\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"proposalId\", type: \"uint256\" }],\r\n outputs: [\r\n { name: \"creator\", type: \"address\" },\r\n { name: \"title\", type: \"string\" },\r\n { name: \"description\", type: \"string\" },\r\n { name: \"options\", type: \"string[]\" },\r\n { name: \"startTime\", type: \"uint256\" },\r\n { name: \"endTime\", type: \"uint256\" },\r\n { name: \"finalized\", type: \"bool\" },\r\n { name: \"winningOption\", type: \"uint256\" },\r\n ],\r\n },\r\n {\r\n name: \"castVote\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"proposalId\", type: \"uint256\" },\r\n { name: \"encryptedOption\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"delegate\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [{ name: \"delegatee\", type: \"address\" }],\r\n outputs: [],\r\n },\r\n] as const;\r\n","import type { Address, PublicClient } from \"viem\";\r\nimport { CREDIT_MARKET_ABI } from \"../abis/index.js\";\r\nimport { makeCall } from \"../core/chain.js\";\r\nimport { normalizeWallet, resolveInEuint64, toContractInEuint64 } from \"../core/utils.js\";\r\nimport type { ObscuraAddresses } from \"../config/defaults.js\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type {\r\n ContractCall,\r\n CreditMarketUtilization,\r\n CreditPositionHandles,\r\n InEuint64,\r\n} from \"../types/index.js\";\r\n\r\nconst PLAINTEXT_SHADOW_WARNING =\r\n \"Plaintext shadows are public testnet UI hints only — not encrypted balances. \" +\r\n \"Do not treat as private position size. Omit on mainnet strict privacy mode.\";\r\n\r\nexport interface CreditModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n publicClient: PublicClient;\r\n fhe?: FheProvider;\r\n}\r\n\r\nfunction bigintToHandleHex(value: bigint): `0x${string}` {\r\n const hex = value.toString(16).padStart(64, \"0\");\r\n return `0x${hex}` as `0x${string}`;\r\n}\r\n\r\nexport class CreditModule {\r\n constructor(private readonly deps: CreditModuleDeps) {}\r\n\r\n getMarketAddress(override?: Address): Address {\r\n return override ?? this.deps.addresses.CreditCanonicalPayOcUSDCMarket;\r\n }\r\n\r\n /** Public pool aggregates — no wallet required */\r\n async getMarketUtilization(marketAddress?: Address): Promise<CreditMarketUtilization> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const [utilizationBps, totalSupplyAssets, totalBorrowAssets] = await Promise.all([\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"utilizationBps\",\r\n }) as Promise<bigint>,\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"totalSupplyAssets\",\r\n }) as Promise<bigint>,\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"totalBorrowAssets\",\r\n }) as Promise<bigint>,\r\n ]);\r\n\r\n return {\r\n marketAddress: market,\r\n utilizationBps,\r\n totalSupplyAssets,\r\n totalBorrowAssets,\r\n };\r\n }\r\n\r\n /**\r\n * Returns encrypted position handles as opaque hex strings.\r\n * Plaintext shadows are optional and labeled with an explicit warning.\r\n */\r\n async getPositionHandles(\r\n wallet: Address,\r\n options: { marketAddress?: Address; includePlaintextShadows?: boolean } = {},\r\n ): Promise<CreditPositionHandles> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n const market = this.getMarketAddress(options.marketAddress);\r\n const position = (await this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"getPosition\",\r\n args: [normalized],\r\n })) as readonly [bigint, bigint, bigint, bigint];\r\n\r\n const result: CreditPositionHandles = {\r\n marketAddress: market,\r\n wallet: normalized,\r\n encryptedSupplySharesHandle: bigintToHandleHex(position[0]),\r\n encryptedBorrowSharesHandle: bigintToHandleHex(position[1]),\r\n encryptedCollateralHandle: bigintToHandleHex(position[2]),\r\n };\r\n\r\n if (options.includePlaintextShadows) {\r\n const [plainCollateral, plainBorrow] = await Promise.all([\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"getPlainCollateral\",\r\n args: [normalized],\r\n }) as Promise<bigint>,\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"getPlainBorrow\",\r\n args: [normalized],\r\n }) as Promise<bigint>,\r\n ]);\r\n result.plaintextShadowWarning = PLAINTEXT_SHADOW_WARNING;\r\n result.plainCollateral = plainCollateral;\r\n result.plainBorrow = plainBorrow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async buildSupplyCollateral(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n marketAddress?: Address,\r\n ): Promise<ContractCall> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);\r\n return makeCall(this.deps.chainId, market, CREDIT_MARKET_ABI, \"supplyCollateral\", [\r\n toContractInEuint64(enc),\r\n ]);\r\n }\r\n\r\n async buildBorrow(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n marketAddress?: Address,\r\n ): Promise<ContractCall> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);\r\n return makeCall(this.deps.chainId, market, CREDIT_MARKET_ABI, \"borrow\", [\r\n toContractInEuint64(enc),\r\n ]);\r\n }\r\n\r\n async buildRepay(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n marketAddress?: Address,\r\n ): Promise<ContractCall> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);\r\n return makeCall(this.deps.chainId, market, CREDIT_MARKET_ABI, \"repay\", [\r\n toContractInEuint64(enc),\r\n ]);\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport { HttpClient, HttpError } from \"../core/http.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\nimport type { NotificationPrefs, PushSubscriptionJSON } from \"../types/index.js\";\r\n\r\ninterface VapidResponse {\r\n publicKey: string;\r\n}\r\n\r\ninterface OkResponse {\r\n ok: boolean;\r\n}\r\n\r\nexport class NotificationsModule {\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n async getVapidPublicKey(): Promise<string> {\r\n const { publicKey } = await this.http.get<VapidResponse>(\"/vapid-public-key\");\r\n return publicKey;\r\n }\r\n\r\n async getPrefs(wallet: Address): Promise<NotificationPrefs | null> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n try {\r\n return await this.http.get<NotificationPrefs>(`/prefs/${normalized}`);\r\n } catch (err) {\r\n if (err instanceof HttpError && err.status === 404) return null;\r\n throw err;\r\n }\r\n }\r\n\r\n async savePrefs(prefs: NotificationPrefs): Promise<void> {\r\n const normalized = normalizeWallet(prefs.wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n await this.http.post<OkResponse>(\"/prefs\", {\r\n ...prefs,\r\n wallet: normalized,\r\n });\r\n }\r\n\r\n async subscribe(wallet: Address, subscription: PushSubscriptionJSON): Promise<void> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n if (!subscription?.endpoint) throw new Error(\"subscription.endpoint is required\");\r\n\r\n await this.http.post<OkResponse>(\"/subscribe\", { wallet: normalized, subscription });\r\n }\r\n\r\n async unsubscribe(wallet: Address): Promise<void> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n await this.http.delete<OkResponse>(\"/subscribe\", { wallet: normalized });\r\n }\r\n}\r\n","import type { Address, PublicClient } from \"viem\";\r\nimport { OC_USDC_PAY_ABI } from \"../abis/index.js\";\r\nimport { makeCall } from \"../core/chain.js\";\r\nimport { resolveInEuint64, toContractInEuint64 } from \"../core/utils.js\";\r\nimport type { ObscuraAddresses } from \"../config/defaults.js\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type { ContractCall, InEuint64 } from \"../types/index.js\";\r\n\r\nexport interface PayModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n publicClient: PublicClient;\r\n fhe?: FheProvider;\r\n}\r\n\r\nexport class PayModule {\r\n constructor(private readonly deps: PayModuleDeps) {}\r\n\r\n get ocUsdcAddress(): Address {\r\n return this.deps.addresses.ocUSDC_Pay;\r\n }\r\n\r\n /** Returns encrypted balance ctHash (uint256) for account */\r\n async getShieldedBalance(account: Address): Promise<bigint> {\r\n return this.deps.publicClient.readContract({\r\n address: this.deps.addresses.ocUSDC_Pay,\r\n abi: OC_USDC_PAY_ABI,\r\n functionName: \"confidentialBalanceOf\",\r\n args: [account],\r\n }) as Promise<bigint>;\r\n }\r\n\r\n async buildShield(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n amount,\r\n this.deps.addresses.ocUSDC_Pay,\r\n this.deps.fhe,\r\n encryptedAmount,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ocUSDC_Pay,\r\n OC_USDC_PAY_ABI,\r\n \"shield\",\r\n [amount, toContractInEuint64(enc)],\r\n );\r\n }\r\n\r\n async buildUnshield(\r\n to: Address,\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n amount,\r\n this.deps.addresses.ocUSDC_Pay,\r\n this.deps.fhe,\r\n encryptedAmount,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ocUSDC_Pay,\r\n OC_USDC_PAY_ABI,\r\n \"unshield\",\r\n [to, toContractInEuint64(enc)],\r\n );\r\n }\r\n\r\n async buildTransfer(\r\n to: Address,\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n amount,\r\n this.deps.addresses.ocUSDC_Pay,\r\n this.deps.fhe,\r\n encryptedAmount,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ocUSDC_Pay,\r\n OC_USDC_PAY_ABI,\r\n \"confidentialTransfer\",\r\n [to, toContractInEuint64(enc)],\r\n );\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport type { HttpClient } from \"../core/http.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\nimport type { ReputationSummary } from \"../types/index.js\";\r\n\r\nexport class ReputationModule {\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n async getSummary(wallet: Address): Promise<ReputationSummary> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) {\r\n throw new Error(\"Invalid wallet address\");\r\n }\r\n return this.http.get<ReputationSummary>(`/reputation/${normalized}`);\r\n }\r\n}\r\n","import type { Address, PublicClient } from \"viem\";\r\nimport { OBSCURA_VOTE_ABI } from \"../abis/index.js\";\r\nimport { makeCall } from \"../core/chain.js\";\r\nimport { resolveInEuint64, toContractInEuint64 } from \"../core/utils.js\";\r\nimport type { ObscuraAddresses } from \"../config/defaults.js\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type { ContractCall, InEuint64, ProposalState } from \"../types/index.js\";\r\n\r\nexport interface VoteModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n publicClient: PublicClient;\r\n fhe?: FheProvider;\r\n}\r\n\r\nexport class VoteModule {\r\n constructor(private readonly deps: VoteModuleDeps) {}\r\n\r\n get voteAddress(): Address {\r\n return this.deps.addresses.ObscuraVote;\r\n }\r\n\r\n /** Returns total proposals created (= public `nextProposalId` on ObscuraVote). */\r\n async getProposalCount(): Promise<bigint> {\r\n return this.deps.publicClient.readContract({\r\n address: this.deps.addresses.ObscuraVote,\r\n abi: OBSCURA_VOTE_ABI,\r\n functionName: \"nextProposalId\",\r\n }) as Promise<bigint>;\r\n }\r\n\r\n async getProposal(id: bigint): Promise<ProposalState> {\r\n const result = (await this.deps.publicClient.readContract({\r\n address: this.deps.addresses.ObscuraVote,\r\n abi: OBSCURA_VOTE_ABI,\r\n functionName: \"getProposal\",\r\n args: [id],\r\n })) as readonly [Address, string, string, string[], bigint, bigint, boolean, bigint];\r\n\r\n return {\r\n id,\r\n creator: result[0],\r\n title: result[1],\r\n description: result[2],\r\n options: [...result[3]],\r\n startTime: result[4],\r\n endTime: result[5],\r\n finalized: result[6],\r\n winningOption: result[7],\r\n };\r\n }\r\n\r\n async buildCastVote(\r\n proposalId: bigint,\r\n optionIndex: number,\r\n encryptedOption?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n BigInt(optionIndex),\r\n this.deps.addresses.ObscuraVote,\r\n this.deps.fhe,\r\n encryptedOption,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ObscuraVote,\r\n OBSCURA_VOTE_ABI,\r\n \"castVote\",\r\n [proposalId, toContractInEuint64(enc)],\r\n );\r\n }\r\n\r\n buildDelegate(delegatee: Address): ContractCall {\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ObscuraVote,\r\n OBSCURA_VOTE_ABI,\r\n \"delegate\",\r\n [delegatee],\r\n );\r\n }\r\n}\r\n","import type { Address, Hex, PublicClient, WalletClient } from \"viem\";\r\nimport {\r\n ARBITRUM_SEPOLIA_CHAIN_ID,\r\n DEFAULT_API_URL,\r\n DEFAULT_RPC_URL,\r\n DEFAULT_SUPABASE_URL,\r\n mergeAddresses,\r\n type ObscuraAddresses,\r\n} from \"./config/defaults.js\";\r\nimport { HttpClient } from \"./core/http.js\";\r\nimport {\r\n createDefaultPublicClient,\r\n encodeCall,\r\n sendContractCall,\r\n} from \"./core/chain.js\";\r\nimport type { FheProvider } from \"./fhe/types.js\";\r\nimport { ActivityModule } from \"./modules/activity.js\";\r\nimport { CreditModule } from \"./modules/credit.js\";\r\nimport { NotificationsModule } from \"./modules/notifications.js\";\r\nimport { PayModule } from \"./modules/pay.js\";\r\nimport { ReputationModule } from \"./modules/reputation.js\";\r\nimport { VoteModule } from \"./modules/vote.js\";\r\nimport type { ContractCall, ObscuraSDKConfig } from \"./types/index.js\";\r\n\r\nexport class ObscuraSDK {\r\n readonly chainId: number;\r\n readonly addresses: ObscuraAddresses;\r\n readonly publicClient: PublicClient;\r\n readonly fhe?: FheProvider;\r\n\r\n readonly pay: PayModule;\r\n readonly credit: CreditModule;\r\n readonly vote: VoteModule;\r\n readonly reputation: ReputationModule;\r\n readonly activity: ActivityModule;\r\n readonly notifications: NotificationsModule;\r\n\r\n private readonly walletClient?: WalletClient;\r\n\r\n private constructor(config: ObscuraSDKConfig) {\r\n this.chainId = config.chainId ?? ARBITRUM_SEPOLIA_CHAIN_ID;\r\n this.addresses = mergeAddresses(config.addresses);\r\n this.fhe = config.fhe;\r\n this.walletClient = config.walletClient;\r\n\r\n const rpcUrl = config.rpcUrl ?? DEFAULT_RPC_URL;\r\n this.publicClient = config.publicClient ?? createDefaultPublicClient(rpcUrl, this.chainId);\r\n\r\n const apiUrl = config.apiUrl ?? DEFAULT_API_URL;\r\n const http = new HttpClient(apiUrl);\r\n\r\n const moduleDeps = {\r\n chainId: this.chainId,\r\n addresses: this.addresses,\r\n publicClient: this.publicClient,\r\n fhe: this.fhe,\r\n };\r\n\r\n this.pay = new PayModule(moduleDeps);\r\n this.credit = new CreditModule({\r\n chainId: this.chainId,\r\n addresses: this.addresses,\r\n publicClient: this.publicClient,\r\n fhe: this.fhe,\r\n });\r\n this.vote = new VoteModule(moduleDeps);\r\n this.reputation = new ReputationModule(http);\r\n this.notifications = new NotificationsModule(http);\r\n this.activity = new ActivityModule(\r\n config.supabaseUrl ?? DEFAULT_SUPABASE_URL,\r\n config.supabaseAnonKey,\r\n );\r\n }\r\n\r\n static create(config: ObscuraSDKConfig = {}): ObscuraSDK {\r\n return new ObscuraSDK(config);\r\n }\r\n\r\n encodeCall(call: ContractCall): Hex {\r\n return encodeCall(call);\r\n }\r\n\r\n async sendCall(call: ContractCall, account: Address): Promise<Hex> {\r\n if (!this.walletClient) {\r\n throw new Error(\"walletClient required for sendCall. Pass walletClient in ObscuraSDK.create().\");\r\n }\r\n return sendContractCall(call, this.walletClient, account);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/defaults.ts","../src/fhe/types.ts","../src/core/utils.ts","../src/core/http.ts","../src/core/chain.ts","../src/config/activity-filters.ts","../src/modules/activity.ts","../src/modules/agent.ts","../src/abis/index.ts","../src/modules/credit.ts","../src/modules/notifications.ts","../src/modules/pay.ts","../src/modules/reputation.ts","../src/modules/vote.ts","../src/client.ts"],"names":["arbitrumSepolia","createPublicClient","http","encodeFunctionData"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Address } from \"viem\";\r\n\r\n/** Arbitrum Sepolia deployment snapshot — sync from contracts-hardhat/deployments/arb-sepolia.json */\r\nexport interface ObscuraAddresses {\r\n ocUSDC_Pay: Address;\r\n ObscuraPay: Address;\r\n ObscuraPayStreamV3: Address;\r\n ObscuraConfidentialEscrow: Address;\r\n ObscuraInvoice: Address;\r\n ObscuraStealthRegistry: Address;\r\n ObscuraVote: Address;\r\n ObscuraTreasury: Address;\r\n ObscuraRewards: Address;\r\n ObscuraCreditFactory: Address;\r\n ObscuraCreditOracle: Address;\r\n ObscuraCreditIRM: Address;\r\n ObscuraCreditAuction: Address;\r\n ObscuraCreditScoreV2: Address;\r\n CreditCanonicalPayOcUSDCMarket: Address;\r\n v2_ConservativeVault: Address;\r\n v2_BalancedVault: Address;\r\n ObscuraGovernor: Address;\r\n ObscuraTimelock: Address;\r\n}\r\n\r\nexport const ARBITRUM_SEPOLIA_CHAIN_ID = 421614;\r\n\r\nexport const DEFAULT_RPC_URL = \"https://sepolia-rollup.arbitrum.io/rpc\";\r\nexport const DEFAULT_API_URL = \"https://obscura-api-n62v.onrender.com\";\r\nexport const DEFAULT_SUPABASE_URL = \"https://quoovjkjwgtdqwdofubh.supabase.co\";\r\n\r\nexport const DEFAULT_ADDRESSES: ObscuraAddresses = {\r\n ocUSDC_Pay: \"0xEd46020Df8abe7BB1E096f27d089F4326D223a53\",\r\n ObscuraPay: \"0x91CdD9a481C732bEB09Ce039da23DC11e83547a4\",\r\n ObscuraPayStreamV3: \"0xE4328F139F03138D63f7fdF90A8Ef240e04653fA\",\r\n ObscuraConfidentialEscrow: \"0x293810A2081114CcE0c98A709a0c31aE07c01D75\",\r\n ObscuraInvoice: \"0x62a86C8d68fF32ea41Faf349db6EF7EF496620b7\",\r\n ObscuraStealthRegistry: \"0xa36e791a611D36e2C817a7DA0f41547D30D4917d\",\r\n ObscuraVote: \"0xe358776AfdbA95d7c9F040e6ef1f5A021aF91730\",\r\n ObscuraTreasury: \"0x89252ee3f920978EEfDB650760fe56BA1Ede8c08\",\r\n ObscuraRewards: \"0x435ea117404553A6868fbe728A7A284FCEd15BC2\",\r\n ObscuraCreditFactory: \"0x5aDC1965D155f4b18119222CBA7a7A4be4F45680\",\r\n ObscuraCreditOracle: \"0x5F00910533AB6fc12a35a87BaFe856EF2cb323c3\",\r\n ObscuraCreditIRM: \"0xA072c038cE98dEC8F5350D451145fB98F5EA57Bc\",\r\n ObscuraCreditAuction: \"0x205FfC0A3b8207B645c1a6B1b4805eb3FfC828F0\",\r\n ObscuraCreditScoreV2: \"0xe5B0c6c06C0B1fd7d7CD5D2e93997693863d3D4D\",\r\n CreditCanonicalPayOcUSDCMarket: \"0x1Ec113297c7F9516A6604aa3b18C180559a6f551\",\r\n v2_ConservativeVault: \"0xCEBb042ae8FDE217a9FdE5b8a82E23827FdBB898\",\r\n v2_BalancedVault: \"0xF508315bD4C5EC4c71C5E431AE972C0dC6B78Bbc\",\r\n ObscuraGovernor: \"0xE4807C9F90a0da8F5B5bafa4361B15ff855b7186\",\r\n ObscuraTimelock: \"0x07b7961627f433a1d9001F82Ac4af9F19b9a9E05\",\r\n};\r\n\r\nexport function mergeAddresses(partial?: Partial<ObscuraAddresses>): ObscuraAddresses {\r\n return { ...DEFAULT_ADDRESSES, ...partial };\r\n}\r\n","import type { Address } from \"viem\";\r\nimport type { InEuint64 } from \"../types/index.js\";\r\n\r\nexport interface FheEncryptOptions {\r\n contractAddress: Address;\r\n onStep?: (step: string) => void;\r\n}\r\n\r\n/** Injectable FHE adapter — host supplies @cofhe/sdk or custom implementation */\r\nexport interface FheProvider {\r\n encryptUint64(value: bigint, options: FheEncryptOptions): Promise<InEuint64>;\r\n decryptCtHash?(ctHash: bigint, contractAddress: Address): Promise<bigint>;\r\n}\r\n\r\nexport class FheRequiredError extends Error {\r\n constructor(operation: string) {\r\n super(\r\n `FHE provider required for ${operation}. Pass fhe in ObscuraSDK.create() or supply a pre-encrypted InEuint64.`,\r\n );\r\n this.name = \"FheRequiredError\";\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type { InEuint64 } from \"../types/index.js\";\r\nimport { FheRequiredError } from \"../fhe/types.js\";\r\n\r\nexport async function resolveInEuint64(\r\n value: bigint,\r\n contractAddress: Address,\r\n fhe: FheProvider | undefined,\r\n preEncrypted?: InEuint64,\r\n): Promise<InEuint64> {\r\n if (preEncrypted) return preEncrypted;\r\n if (!fhe) throw new FheRequiredError(\"encrypted amount\");\r\n return fhe.encryptUint64(value, { contractAddress });\r\n}\r\n\r\n/** Serialize InEuint64 for viem contract args (bigint ctHash) */\r\nexport function toContractInEuint64(input: InEuint64): {\r\n ctHash: bigint;\r\n securityZone: number;\r\n utype: number;\r\n signature: `0x${string}`;\r\n} {\r\n return {\r\n ctHash: input.ctHash,\r\n securityZone: input.securityZone,\r\n utype: input.utype,\r\n signature: input.signature,\r\n };\r\n}\r\n\r\nexport function normalizeWallet(wallet: string): Address | null {\r\n if (!/^0x[0-9a-fA-F]{40}$/.test(wallet)) return null;\r\n return wallet.toLowerCase() as Address;\r\n}\r\n\r\nexport function stripTrailingSlash(url: string): string {\r\n return url.replace(/\\/$/, \"\");\r\n}\r\n","import { stripTrailingSlash } from \"./utils.js\";\r\n\r\nexport class HttpClient {\r\n constructor(\r\n private readonly baseUrl: string,\r\n private readonly agentToken?: string,\r\n ) {}\r\n\r\n get url(): string {\r\n return stripTrailingSlash(this.baseUrl);\r\n }\r\n\r\n hasAgentToken(): boolean {\r\n return Boolean(this.agentToken);\r\n }\r\n\r\n private authHeaders(extra?: Record<string, string>): Record<string, string> {\r\n return {\r\n Accept: \"application/json\",\r\n ...(this.agentToken ? { Authorization: `Bearer ${this.agentToken}` } : {}),\r\n ...extra,\r\n };\r\n }\r\n\r\n async get<T>(path: string, init?: { headers?: Record<string, string> }): Promise<T> {\r\n const response = await fetch(`${this.url}${path}`, {\r\n ...init,\r\n method: \"GET\",\r\n headers: this.authHeaders(init?.headers),\r\n });\r\n if (!response.ok) {\r\n const body = await response.text().catch(() => \"\");\r\n throw new HttpError(response.status, `GET ${path} failed (${response.status})${body ? `: ${body}` : \"\"}`);\r\n }\r\n return response.json() as Promise<T>;\r\n }\r\n\r\n async post<T>(path: string, body: unknown, init?: { headers?: Record<string, string> }): Promise<T> {\r\n const response = await fetch(`${this.url}${path}`, {\r\n ...init,\r\n method: \"POST\",\r\n headers: {\r\n ...this.authHeaders({\r\n \"Content-Type\": \"application/json\",\r\n }),\r\n ...init?.headers,\r\n },\r\n body: JSON.stringify(body),\r\n });\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => \"\");\r\n throw new HttpError(response.status, `POST ${path} failed (${response.status})${text ? `: ${text}` : \"\"}`);\r\n }\r\n return response.json() as Promise<T>;\r\n }\r\n\r\n async delete<T>(path: string, body?: unknown, init?: { headers?: Record<string, string> }): Promise<T> {\r\n const response = await fetch(`${this.url}${path}`, {\r\n ...init,\r\n method: \"DELETE\",\r\n headers: {\r\n ...this.authHeaders({\r\n \"Content-Type\": \"application/json\",\r\n }),\r\n ...init?.headers,\r\n },\r\n body: body !== undefined ? JSON.stringify(body) : undefined,\r\n });\r\n if (!response.ok) {\r\n const text = await response.text().catch(() => \"\");\r\n throw new HttpError(response.status, `DELETE ${path} failed (${response.status})${text ? `: ${text}` : \"\"}`);\r\n }\r\n return response.json() as Promise<T>;\r\n }\r\n}\r\n\r\nexport class HttpError extends Error {\r\n constructor(\r\n readonly status: number,\r\n message: string,\r\n ) {\r\n super(message);\r\n this.name = \"HttpError\";\r\n }\r\n}\r\n","import {\r\n createPublicClient,\r\n encodeFunctionData,\r\n http,\r\n type Abi,\r\n type Address,\r\n type Chain,\r\n type Hex,\r\n type PublicClient,\r\n type WalletClient,\r\n} from \"viem\";\r\nimport { arbitrumSepolia } from \"viem/chains\";\r\nimport { ARBITRUM_SEPOLIA_CHAIN_ID, DEFAULT_RPC_URL } from \"../config/defaults.js\";\r\nimport type { ContractCall } from \"../types/index.js\";\r\n\r\nexport function resolveChain(chainId: number): Chain {\r\n if (chainId === ARBITRUM_SEPOLIA_CHAIN_ID) return arbitrumSepolia;\r\n return {\r\n ...arbitrumSepolia,\r\n id: chainId,\r\n };\r\n}\r\n\r\nexport function createDefaultPublicClient(rpcUrl: string, chainId: number): PublicClient {\r\n return createPublicClient({\r\n chain: resolveChain(chainId),\r\n transport: http(rpcUrl || DEFAULT_RPC_URL),\r\n });\r\n}\r\n\r\nexport function encodeCall(call: ContractCall): Hex {\r\n return encodeFunctionData({\r\n abi: call.abi as Abi,\r\n functionName: call.functionName,\r\n args: [...call.args],\r\n });\r\n}\r\n\r\nexport async function sendContractCall(\r\n call: ContractCall,\r\n walletClient: WalletClient,\r\n account: Address,\r\n): Promise<Hex> {\r\n const hash = await walletClient.writeContract({\r\n address: call.address,\r\n abi: call.abi as Abi,\r\n functionName: call.functionName,\r\n args: [...call.args],\r\n chain: resolveChain(call.chainId),\r\n account,\r\n });\r\n return hash;\r\n}\r\n\r\nexport function makeCall(\r\n chainId: number,\r\n address: Address,\r\n abi: readonly unknown[],\r\n functionName: string,\r\n args: readonly unknown[],\r\n): ContractCall {\r\n return { address, abi, functionName, args, chainId };\r\n}\r\n","import type { ActivityEventType } from \"../types/index.js\";\r\n\r\nconst CREDIT_ACTIVITY_EVENT_NAMES = [\r\n \"ObscuraCreditMarket.Supplied\",\r\n \"ObscuraCreditMarket.Withdrawn\",\r\n \"ObscuraCreditMarket.Borrowed\",\r\n \"ObscuraCreditMarket.Repaid\",\r\n \"ObscuraCreditMarket.Liquidated\",\r\n \"ObscuraCreditMarket.CollateralSupplied\",\r\n \"ObscuraCreditMarket.CollateralWithdrawn\",\r\n \"ObscuraCreditVault.Deposited\",\r\n \"ObscuraCreditVault.Withdrew\",\r\n \"ObscuraCreditAuction.AuctionCreated\",\r\n \"ObscuraCreditAuction.BidPlaced\",\r\n \"ObscuraCreditAuction.AuctionSettled\",\r\n \"ObscuraCreditScoreV2.ScoreUpdated\",\r\n];\r\n\r\nconst VOTE_ACTIVITY_EVENT_NAMES = [\r\n \"ObscuraVote.ProposalCreated\",\r\n \"ObscuraVote.VoteCast\",\r\n \"ObscuraVote.VoteChanged\",\r\n \"ObscuraVote.Delegated\",\r\n \"ObscuraVote.DelegationRemoved\",\r\n \"ObscuraVote.ProposalFinalized\",\r\n \"ObscuraTreasury.SpendAttached\",\r\n \"ObscuraTreasury.SpendExecuted\",\r\n \"ObscuraRewards.RewardAccrued\",\r\n \"ObscuraRewards.RewardWithdrawn\",\r\n];\r\n\r\nexport const ACTIVITY_EVENT_FILTERS: Record<ActivityEventType, readonly string[]> = {\r\n all: [],\r\n sent: [\"ObscuraPay.PaymentSent\"],\r\n received: [\"ObscuraPay.PaymentReceived\"],\r\n stream: [\r\n \"ObscuraPayStreamV2.StreamCreated\",\r\n \"ObscuraPayStreamV2.StreamCancelled\",\r\n \"ObscuraPayStreamV2.StreamWithdrawn\",\r\n \"ObscuraPayStreamV3.StreamCreated\",\r\n \"ObscuraPayStreamV3.StreamCancelled\",\r\n \"ObscuraPayStreamV3.CycleSettled\",\r\n ],\r\n invoice: [\"ObscuraInvoice.InvoiceCreated\", \"ObscuraInvoice.InvoicePaid\"],\r\n escrow: [\r\n \"ObscuraConfidentialEscrow.EscrowCreated\",\r\n \"ObscuraConfidentialEscrow.EscrowFunded\",\r\n \"ObscuraConfidentialEscrow.EscrowRedeemed\",\r\n \"ObscuraConfidentialEscrow.EscrowCancelled\",\r\n \"ObscuraConfidentialEscrow.EscrowRefunded\",\r\n ],\r\n stealth: [\"ObscuraStealthRegistry.Announcement\", \"ObscuraStealthRegistry.MetaAddressSet\"],\r\n credit: CREDIT_ACTIVITY_EVENT_NAMES,\r\n vote: VOTE_ACTIVITY_EVENT_NAMES,\r\n};\r\n\r\nexport type ActivityEventFilterMap = typeof ACTIVITY_EVENT_FILTERS;\r\n","import type { Address } from \"viem\";\r\nimport { ACTIVITY_EVENT_FILTERS, type ActivityEventFilterMap } from \"../config/activity-filters.js\";\r\nimport { HttpClient } from \"../core/http.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\nimport type {\r\n ActivityEventType,\r\n ActivityListOptions,\r\n ActivityListResult,\r\n} from \"../types/index.js\";\r\n\r\nconst DEFAULT_PAGE_SIZE = 20;\r\n\r\nexport class ActivityModule {\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n /** True when API-backed activity reads are available (always when SDK has default apiUrl). */\r\n isConfigured(): boolean {\r\n return Boolean(this.http.url);\r\n }\r\n\r\n hasAgentToken(): boolean {\r\n return this.http.hasAgentToken();\r\n }\r\n\r\n getEventFilters(): ActivityEventFilterMap {\r\n return ACTIVITY_EVENT_FILTERS;\r\n }\r\n\r\n /** Authenticated activity for the agent token wallet */\r\n async listAuthenticated(options: ActivityListOptions = {}): Promise<ActivityListResult> {\r\n if (!this.http.hasAgentToken()) {\r\n throw new Error(\"agentToken required — create one at /docs/agents\");\r\n }\r\n return this.listWithPath(\"/agent/activity\", options);\r\n }\r\n\r\n async listForWallet(wallet: Address, options: ActivityListOptions = {}): Promise<ActivityListResult> {\r\n if (this.http.hasAgentToken()) {\r\n return this.listAuthenticated(options);\r\n }\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n return this.listWithPath(`/activity/${normalized}`, options);\r\n }\r\n\r\n private async listWithPath(\r\n basePath: string,\r\n options: ActivityListOptions,\r\n ): Promise<ActivityListResult> {\r\n const filter: ActivityEventType = options.filter ?? \"all\";\r\n const page = options.page ?? 0;\r\n const pageSize = options.pageSize ?? DEFAULT_PAGE_SIZE;\r\n\r\n const params = new URLSearchParams();\r\n if (filter !== \"all\") params.set(\"filter\", filter);\r\n if (page > 0) params.set(\"page\", String(page));\r\n if (pageSize !== DEFAULT_PAGE_SIZE) params.set(\"pageSize\", String(pageSize));\r\n\r\n const qs = params.toString();\r\n const path = `${basePath}${qs ? `?${qs}` : \"\"}`;\r\n return this.http.get<ActivityListResult>(path);\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport { HttpClient } from \"../core/http.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\n\r\nexport type AgentPermission = \"activity:read\" | \"reputation:read\" | \"balance:read\";\r\n\r\nexport interface AgentTokenCreateResult {\r\n token: string;\r\n tokenId: string;\r\n wallet: Address;\r\n permissions: AgentPermission[];\r\n expiresAt: string;\r\n label: string | null;\r\n warning: string;\r\n}\r\n\r\nexport interface AgentTokenPublic {\r\n id: string;\r\n wallet: Address;\r\n label: string | null;\r\n permissions: AgentPermission[];\r\n createdAt: string;\r\n expiresAt: string;\r\n lastUsedAt: string | null;\r\n revokedAt: string | null;\r\n active: boolean;\r\n}\r\n\r\nexport interface AgentIdentity {\r\n wallet: Address;\r\n permissions: AgentPermission[];\r\n expiresAt: string;\r\n tokenId: string;\r\n}\r\n\r\nexport class AgentModule {\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n async validateToken(token: string): Promise<AgentIdentity> {\r\n return this.http.post<AgentIdentity>(\"/agent/validate\", { token });\r\n }\r\n\r\n async getIdentity(): Promise<AgentIdentity> {\r\n if (!this.http.hasAgentToken()) {\r\n throw new Error(\"agentToken required\");\r\n }\r\n return this.http.get<AgentIdentity>(\"/agent/me\");\r\n }\r\n\r\n async createToken(params: {\r\n wallet: Address;\r\n signature: `0x${string}`;\r\n timestamp: number;\r\n label?: string;\r\n permissions?: AgentPermission[];\r\n }): Promise<AgentTokenCreateResult> {\r\n const wallet = normalizeWallet(params.wallet);\r\n if (!wallet) throw new Error(\"Invalid wallet address\");\r\n return this.http.post<AgentTokenCreateResult>(\"/agent-tokens\", {\r\n wallet,\r\n signature: params.signature,\r\n timestamp: params.timestamp,\r\n label: params.label,\r\n permissions: params.permissions,\r\n });\r\n }\r\n\r\n async listTokens(params: {\r\n wallet: Address;\r\n signature: `0x${string}`;\r\n timestamp: number;\r\n }): Promise<{ wallet: Address; tokens: AgentTokenPublic[] }> {\r\n const wallet = normalizeWallet(params.wallet);\r\n if (!wallet) throw new Error(\"Invalid wallet address\");\r\n const qs = new URLSearchParams({\r\n wallet,\r\n signature: params.signature,\r\n timestamp: String(params.timestamp),\r\n });\r\n return this.http.get(`/agent-tokens?${qs.toString()}`);\r\n }\r\n\r\n async revokeToken(params: {\r\n tokenId: string;\r\n wallet: Address;\r\n signature: `0x${string}`;\r\n timestamp: number;\r\n }): Promise<{ ok: boolean; token: AgentTokenPublic }> {\r\n const wallet = normalizeWallet(params.wallet);\r\n if (!wallet) throw new Error(\"Invalid wallet address\");\r\n return this.http.delete(`/agent-tokens/${params.tokenId}`, {\r\n wallet,\r\n signature: params.signature,\r\n timestamp: params.timestamp,\r\n });\r\n }\r\n\r\n async regenerateToken(params: {\r\n tokenId: string;\r\n wallet: Address;\r\n signature: `0x${string}`;\r\n timestamp: number;\r\n label?: string;\r\n }): Promise<AgentTokenCreateResult & { revokedTokenId: string }> {\r\n const wallet = normalizeWallet(params.wallet);\r\n if (!wallet) throw new Error(\"Invalid wallet address\");\r\n return this.http.post(`/agent-tokens/${params.tokenId}/regenerate`, {\r\n wallet,\r\n signature: params.signature,\r\n timestamp: params.timestamp,\r\n label: params.label,\r\n });\r\n }\r\n}\r\n\r\n/** EIP-191 message for agent token wallet proof */\r\nexport function buildAgentTokenMessage(\r\n wallet: Address,\r\n timestamp: number,\r\n action: \"create\" | \"revoke\" | \"regenerate\" | \"list\",\r\n tokenId?: string,\r\n): string {\r\n const lines = [\r\n \"Obscura Agent Token Request\",\r\n `Wallet: ${wallet.toLowerCase()}`,\r\n `Timestamp: ${timestamp}`,\r\n `Action: ${action}`,\r\n ];\r\n if (tokenId) lines.push(`TokenId: ${tokenId}`);\r\n return lines.join(\"\\n\");\r\n}\r\n","/** Minimal ABI fragments for SDK v1 transaction builders and reads */\r\n\r\nexport const IN_EUINT64_COMPONENTS = [\r\n { name: \"ctHash\", type: \"uint256\" },\r\n { name: \"securityZone\", type: \"uint8\" },\r\n { name: \"utype\", type: \"uint8\" },\r\n { name: \"signature\", type: \"bytes\" },\r\n] as const;\r\n\r\nexport const OC_USDC_PAY_ABI = [\r\n {\r\n name: \"confidentialBalanceOf\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"account\", type: \"address\" }],\r\n outputs: [{ name: \"\", type: \"uint256\" }],\r\n },\r\n {\r\n name: \"shield\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"amount\", type: \"uint256\" },\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"unshield\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"to\", type: \"address\" },\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"confidentialTransfer\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"to\", type: \"address\" },\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n] as const;\r\n\r\nexport const CREDIT_MARKET_ABI = [\r\n {\r\n name: \"utilizationBps\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint256\" }],\r\n },\r\n {\r\n name: \"totalSupplyAssets\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"totalBorrowAssets\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"getPosition\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"user\", type: \"address\" }],\r\n outputs: [\r\n { name: \"encSupplyShares\", type: \"uint256\" },\r\n { name: \"borrowShares\", type: \"uint256\" },\r\n { name: \"collateral\", type: \"uint256\" },\r\n { name: \"disburseTo\", type: \"uint256\" },\r\n ],\r\n },\r\n {\r\n name: \"getPlainCollateral\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"user\", type: \"address\" }],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"getPlainBorrow\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"user\", type: \"address\" }],\r\n outputs: [{ name: \"\", type: \"uint128\" }],\r\n },\r\n {\r\n name: \"supplyCollateral\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"borrow\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"repay\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"encryptedAmount\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n] as const;\r\n\r\nexport const OBSCURA_VOTE_ABI = [\r\n {\r\n name: \"nextProposalId\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [],\r\n outputs: [{ name: \"\", type: \"uint256\" }],\r\n },\r\n {\r\n name: \"getProposal\",\r\n type: \"function\",\r\n stateMutability: \"view\",\r\n inputs: [{ name: \"proposalId\", type: \"uint256\" }],\r\n outputs: [\r\n { name: \"creator\", type: \"address\" },\r\n { name: \"title\", type: \"string\" },\r\n { name: \"description\", type: \"string\" },\r\n { name: \"options\", type: \"string[]\" },\r\n { name: \"startTime\", type: \"uint256\" },\r\n { name: \"endTime\", type: \"uint256\" },\r\n { name: \"finalized\", type: \"bool\" },\r\n { name: \"winningOption\", type: \"uint256\" },\r\n ],\r\n },\r\n {\r\n name: \"castVote\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [\r\n { name: \"proposalId\", type: \"uint256\" },\r\n { name: \"encryptedOption\", type: \"tuple\", components: [...IN_EUINT64_COMPONENTS] },\r\n ],\r\n outputs: [],\r\n },\r\n {\r\n name: \"delegate\",\r\n type: \"function\",\r\n stateMutability: \"nonpayable\",\r\n inputs: [{ name: \"delegatee\", type: \"address\" }],\r\n outputs: [],\r\n },\r\n] as const;\r\n","import type { Address, PublicClient } from \"viem\";\r\nimport { CREDIT_MARKET_ABI } from \"../abis/index.js\";\r\nimport { makeCall } from \"../core/chain.js\";\r\nimport { normalizeWallet, resolveInEuint64, toContractInEuint64 } from \"../core/utils.js\";\r\nimport type { ObscuraAddresses } from \"../config/defaults.js\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type {\r\n ContractCall,\r\n CreditMarketUtilization,\r\n CreditPositionHandles,\r\n InEuint64,\r\n} from \"../types/index.js\";\r\n\r\nconst PLAINTEXT_SHADOW_WARNING =\r\n \"Plaintext shadows are public testnet UI hints only — not encrypted balances. \" +\r\n \"Do not treat as private position size. Omit on mainnet strict privacy mode.\";\r\n\r\nexport interface CreditModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n publicClient: PublicClient;\r\n fhe?: FheProvider;\r\n}\r\n\r\nfunction bigintToHandleHex(value: bigint): `0x${string}` {\r\n const hex = value.toString(16).padStart(64, \"0\");\r\n return `0x${hex}` as `0x${string}`;\r\n}\r\n\r\nexport class CreditModule {\r\n constructor(private readonly deps: CreditModuleDeps) {}\r\n\r\n getMarketAddress(override?: Address): Address {\r\n return override ?? this.deps.addresses.CreditCanonicalPayOcUSDCMarket;\r\n }\r\n\r\n /** Public pool aggregates — no wallet required */\r\n async getMarketUtilization(marketAddress?: Address): Promise<CreditMarketUtilization> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const [utilizationBps, totalSupplyAssets, totalBorrowAssets] = await Promise.all([\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"utilizationBps\",\r\n }) as Promise<bigint>,\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"totalSupplyAssets\",\r\n }) as Promise<bigint>,\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"totalBorrowAssets\",\r\n }) as Promise<bigint>,\r\n ]);\r\n\r\n return {\r\n marketAddress: market,\r\n utilizationBps,\r\n totalSupplyAssets,\r\n totalBorrowAssets,\r\n };\r\n }\r\n\r\n /**\r\n * Returns encrypted position handles as opaque hex strings.\r\n * Plaintext shadows are optional and labeled with an explicit warning.\r\n */\r\n async getPositionHandles(\r\n wallet: Address,\r\n options: { marketAddress?: Address; includePlaintextShadows?: boolean } = {},\r\n ): Promise<CreditPositionHandles> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n const market = this.getMarketAddress(options.marketAddress);\r\n const position = (await this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"getPosition\",\r\n args: [normalized],\r\n })) as readonly [bigint, bigint, bigint, bigint];\r\n\r\n const result: CreditPositionHandles = {\r\n marketAddress: market,\r\n wallet: normalized,\r\n encryptedSupplySharesHandle: bigintToHandleHex(position[0]),\r\n encryptedBorrowSharesHandle: bigintToHandleHex(position[1]),\r\n encryptedCollateralHandle: bigintToHandleHex(position[2]),\r\n };\r\n\r\n if (options.includePlaintextShadows) {\r\n const [plainCollateral, plainBorrow] = await Promise.all([\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"getPlainCollateral\",\r\n args: [normalized],\r\n }) as Promise<bigint>,\r\n this.deps.publicClient.readContract({\r\n address: market,\r\n abi: CREDIT_MARKET_ABI,\r\n functionName: \"getPlainBorrow\",\r\n args: [normalized],\r\n }) as Promise<bigint>,\r\n ]);\r\n result.plaintextShadowWarning = PLAINTEXT_SHADOW_WARNING;\r\n result.plainCollateral = plainCollateral;\r\n result.plainBorrow = plainBorrow;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async buildSupplyCollateral(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n marketAddress?: Address,\r\n ): Promise<ContractCall> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);\r\n return makeCall(this.deps.chainId, market, CREDIT_MARKET_ABI, \"supplyCollateral\", [\r\n toContractInEuint64(enc),\r\n ]);\r\n }\r\n\r\n async buildBorrow(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n marketAddress?: Address,\r\n ): Promise<ContractCall> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);\r\n return makeCall(this.deps.chainId, market, CREDIT_MARKET_ABI, \"borrow\", [\r\n toContractInEuint64(enc),\r\n ]);\r\n }\r\n\r\n async buildRepay(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n marketAddress?: Address,\r\n ): Promise<ContractCall> {\r\n const market = this.getMarketAddress(marketAddress);\r\n const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);\r\n return makeCall(this.deps.chainId, market, CREDIT_MARKET_ABI, \"repay\", [\r\n toContractInEuint64(enc),\r\n ]);\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport { HttpClient, HttpError } from \"../core/http.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\nimport type { NotificationPrefs, PushSubscriptionJSON } from \"../types/index.js\";\r\n\r\ninterface VapidResponse {\r\n publicKey: string;\r\n}\r\n\r\ninterface OkResponse {\r\n ok: boolean;\r\n}\r\n\r\nexport class NotificationsModule {\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n async getVapidPublicKey(): Promise<string> {\r\n const { publicKey } = await this.http.get<VapidResponse>(\"/vapid-public-key\");\r\n return publicKey;\r\n }\r\n\r\n async getPrefs(wallet: Address): Promise<NotificationPrefs | null> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n try {\r\n return await this.http.get<NotificationPrefs>(`/prefs/${normalized}`);\r\n } catch (err) {\r\n if (err instanceof HttpError && err.status === 404) return null;\r\n throw err;\r\n }\r\n }\r\n\r\n async savePrefs(prefs: NotificationPrefs): Promise<void> {\r\n const normalized = normalizeWallet(prefs.wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n await this.http.post<OkResponse>(\"/prefs\", {\r\n ...prefs,\r\n wallet: normalized,\r\n });\r\n }\r\n\r\n async subscribe(wallet: Address, subscription: PushSubscriptionJSON): Promise<void> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n if (!subscription?.endpoint) throw new Error(\"subscription.endpoint is required\");\r\n\r\n await this.http.post<OkResponse>(\"/subscribe\", { wallet: normalized, subscription });\r\n }\r\n\r\n async unsubscribe(wallet: Address): Promise<void> {\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) throw new Error(\"Invalid wallet address\");\r\n\r\n await this.http.delete<OkResponse>(\"/subscribe\", { wallet: normalized });\r\n }\r\n}\r\n","import type { Address, PublicClient } from \"viem\";\r\nimport { OC_USDC_PAY_ABI } from \"../abis/index.js\";\r\nimport { makeCall } from \"../core/chain.js\";\r\nimport { resolveInEuint64, toContractInEuint64 } from \"../core/utils.js\";\r\nimport type { ObscuraAddresses } from \"../config/defaults.js\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type { ContractCall, InEuint64 } from \"../types/index.js\";\r\n\r\nexport interface PayModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n publicClient: PublicClient;\r\n fhe?: FheProvider;\r\n}\r\n\r\nexport class PayModule {\r\n constructor(private readonly deps: PayModuleDeps) {}\r\n\r\n get ocUsdcAddress(): Address {\r\n return this.deps.addresses.ocUSDC_Pay;\r\n }\r\n\r\n /** Returns encrypted balance ctHash (uint256) for account */\r\n async getShieldedBalance(account: Address): Promise<bigint> {\r\n return this.deps.publicClient.readContract({\r\n address: this.deps.addresses.ocUSDC_Pay,\r\n abi: OC_USDC_PAY_ABI,\r\n functionName: \"confidentialBalanceOf\",\r\n args: [account],\r\n }) as Promise<bigint>;\r\n }\r\n\r\n async buildShield(\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n amount,\r\n this.deps.addresses.ocUSDC_Pay,\r\n this.deps.fhe,\r\n encryptedAmount,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ocUSDC_Pay,\r\n OC_USDC_PAY_ABI,\r\n \"shield\",\r\n [amount, toContractInEuint64(enc)],\r\n );\r\n }\r\n\r\n async buildUnshield(\r\n to: Address,\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n amount,\r\n this.deps.addresses.ocUSDC_Pay,\r\n this.deps.fhe,\r\n encryptedAmount,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ocUSDC_Pay,\r\n OC_USDC_PAY_ABI,\r\n \"unshield\",\r\n [to, toContractInEuint64(enc)],\r\n );\r\n }\r\n\r\n async buildTransfer(\r\n to: Address,\r\n amount: bigint,\r\n encryptedAmount?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n amount,\r\n this.deps.addresses.ocUSDC_Pay,\r\n this.deps.fhe,\r\n encryptedAmount,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ocUSDC_Pay,\r\n OC_USDC_PAY_ABI,\r\n \"confidentialTransfer\",\r\n [to, toContractInEuint64(enc)],\r\n );\r\n }\r\n}\r\n","import type { Address } from \"viem\";\r\nimport type { HttpClient } from \"../core/http.js\";\r\nimport { normalizeWallet } from \"../core/utils.js\";\r\nimport type { ReputationSummary } from \"../types/index.js\";\r\n\r\nexport class ReputationModule {\r\n constructor(private readonly http: HttpClient) {}\r\n\r\n /** True when an agent token is configured for authenticated reads */\r\n hasAgentToken(): boolean {\r\n return this.http.hasAgentToken();\r\n }\r\n\r\n /** Authenticated reputation for the agent token wallet */\r\n async getAuthenticatedSummary(): Promise<ReputationSummary> {\r\n if (!this.http.hasAgentToken()) {\r\n throw new Error(\"agentToken required — create one at /docs/agents\");\r\n }\r\n return this.http.get<ReputationSummary>(\"/agent/reputation\");\r\n }\r\n\r\n async getSummary(wallet?: Address): Promise<ReputationSummary> {\r\n if (this.http.hasAgentToken()) {\r\n return this.getAuthenticatedSummary();\r\n }\r\n if (!wallet) {\r\n throw new Error(\"Invalid wallet address\");\r\n }\r\n const normalized = normalizeWallet(wallet);\r\n if (!normalized) {\r\n throw new Error(\"Invalid wallet address\");\r\n }\r\n return this.http.get<ReputationSummary>(`/reputation/${normalized}`);\r\n }\r\n}\r\n","import type { Address, PublicClient } from \"viem\";\r\nimport { OBSCURA_VOTE_ABI } from \"../abis/index.js\";\r\nimport { makeCall } from \"../core/chain.js\";\r\nimport { resolveInEuint64, toContractInEuint64 } from \"../core/utils.js\";\r\nimport type { ObscuraAddresses } from \"../config/defaults.js\";\r\nimport type { FheProvider } from \"../fhe/types.js\";\r\nimport type { ContractCall, InEuint64, ProposalState } from \"../types/index.js\";\r\n\r\nexport interface VoteModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n publicClient: PublicClient;\r\n fhe?: FheProvider;\r\n}\r\n\r\nexport class VoteModule {\r\n constructor(private readonly deps: VoteModuleDeps) {}\r\n\r\n get voteAddress(): Address {\r\n return this.deps.addresses.ObscuraVote;\r\n }\r\n\r\n /** Returns total proposals created (= public `nextProposalId` on ObscuraVote). */\r\n async getProposalCount(): Promise<bigint> {\r\n return this.deps.publicClient.readContract({\r\n address: this.deps.addresses.ObscuraVote,\r\n abi: OBSCURA_VOTE_ABI,\r\n functionName: \"nextProposalId\",\r\n }) as Promise<bigint>;\r\n }\r\n\r\n async getProposal(id: bigint): Promise<ProposalState> {\r\n const result = (await this.deps.publicClient.readContract({\r\n address: this.deps.addresses.ObscuraVote,\r\n abi: OBSCURA_VOTE_ABI,\r\n functionName: \"getProposal\",\r\n args: [id],\r\n })) as readonly [Address, string, string, string[], bigint, bigint, boolean, bigint];\r\n\r\n return {\r\n id,\r\n creator: result[0],\r\n title: result[1],\r\n description: result[2],\r\n options: [...result[3]],\r\n startTime: result[4],\r\n endTime: result[5],\r\n finalized: result[6],\r\n winningOption: result[7],\r\n };\r\n }\r\n\r\n async buildCastVote(\r\n proposalId: bigint,\r\n optionIndex: number,\r\n encryptedOption?: InEuint64,\r\n ): Promise<ContractCall> {\r\n const enc = await resolveInEuint64(\r\n BigInt(optionIndex),\r\n this.deps.addresses.ObscuraVote,\r\n this.deps.fhe,\r\n encryptedOption,\r\n );\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ObscuraVote,\r\n OBSCURA_VOTE_ABI,\r\n \"castVote\",\r\n [proposalId, toContractInEuint64(enc)],\r\n );\r\n }\r\n\r\n buildDelegate(delegatee: Address): ContractCall {\r\n return makeCall(\r\n this.deps.chainId,\r\n this.deps.addresses.ObscuraVote,\r\n OBSCURA_VOTE_ABI,\r\n \"delegate\",\r\n [delegatee],\r\n );\r\n }\r\n}\r\n","import type { Address, Hex, PublicClient, WalletClient } from \"viem\";\r\nimport {\r\n ARBITRUM_SEPOLIA_CHAIN_ID,\r\n DEFAULT_API_URL,\r\n DEFAULT_RPC_URL,\r\n mergeAddresses,\r\n type ObscuraAddresses,\r\n} from \"./config/defaults.js\";\r\nimport { HttpClient } from \"./core/http.js\";\r\nimport {\r\n createDefaultPublicClient,\r\n encodeCall,\r\n sendContractCall,\r\n} from \"./core/chain.js\";\r\nimport type { FheProvider } from \"./fhe/types.js\";\r\nimport { ActivityModule } from \"./modules/activity.js\";\r\nimport { AgentModule } from \"./modules/agent.js\";\r\nimport { CreditModule } from \"./modules/credit.js\";\r\nimport { NotificationsModule } from \"./modules/notifications.js\";\r\nimport { PayModule } from \"./modules/pay.js\";\r\nimport { ReputationModule } from \"./modules/reputation.js\";\r\nimport { VoteModule } from \"./modules/vote.js\";\r\nimport type { ContractCall, ObscuraSDKConfig } from \"./types/index.js\";\r\n\r\nexport class ObscuraSDK {\r\n readonly chainId: number;\r\n readonly addresses: ObscuraAddresses;\r\n readonly publicClient: PublicClient;\r\n readonly fhe?: FheProvider;\r\n\r\n readonly pay: PayModule;\r\n readonly credit: CreditModule;\r\n readonly vote: VoteModule;\r\n readonly reputation: ReputationModule;\r\n readonly activity: ActivityModule;\r\n readonly agent: AgentModule;\r\n readonly notifications: NotificationsModule;\r\n\r\n private readonly walletClient?: WalletClient;\r\n\r\n private constructor(config: ObscuraSDKConfig) {\r\n this.chainId = config.chainId ?? ARBITRUM_SEPOLIA_CHAIN_ID;\r\n this.addresses = mergeAddresses(config.addresses);\r\n this.fhe = config.fhe;\r\n this.walletClient = config.walletClient;\r\n\r\n const rpcUrl = config.rpcUrl ?? DEFAULT_RPC_URL;\r\n this.publicClient = config.publicClient ?? createDefaultPublicClient(rpcUrl, this.chainId);\r\n\r\n const apiUrl = config.apiUrl ?? DEFAULT_API_URL;\r\n const http = new HttpClient(apiUrl, config.agentToken);\r\n\r\n const moduleDeps = {\r\n chainId: this.chainId,\r\n addresses: this.addresses,\r\n publicClient: this.publicClient,\r\n fhe: this.fhe,\r\n };\r\n\r\n this.pay = new PayModule(moduleDeps);\r\n this.credit = new CreditModule({\r\n chainId: this.chainId,\r\n addresses: this.addresses,\r\n publicClient: this.publicClient,\r\n fhe: this.fhe,\r\n });\r\n this.vote = new VoteModule(moduleDeps);\r\n this.reputation = new ReputationModule(http);\r\n this.agent = new AgentModule(http);\r\n this.notifications = new NotificationsModule(http);\r\n this.activity = new ActivityModule(http);\r\n }\r\n\r\n static create(config: ObscuraSDKConfig = {}): ObscuraSDK {\r\n return new ObscuraSDK(config);\r\n }\r\n\r\n encodeCall(call: ContractCall): Hex {\r\n return encodeCall(call);\r\n }\r\n\r\n async sendCall(call: ContractCall, account: Address): Promise<Hex> {\r\n if (!this.walletClient) {\r\n throw new Error(\"walletClient required for sendCall. Pass walletClient in ObscuraSDK.create().\");\r\n }\r\n return sendContractCall(call, this.walletClient, account);\r\n }\r\n}\r\n"]}
|