@obscura-fhe/sdk 1.0.1 → 1.0.2
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 +8 -0
- package/dist/index.cjs +122 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +106 -1
- package/dist/index.d.ts +106 -1
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@obscura-fhe/sdk` are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.0.2] - 2026-05-30
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **Credit module:** `getMarketUtilization()` — public pool aggregates (`utilizationBps`, `totalSupplyAssets`, `totalBorrowAssets`)
|
|
10
|
+
- **Credit module:** `getPositionHandles()` — encrypted position handles as opaque hex; optional plaintext shadows with explicit warning
|
|
11
|
+
- Exported types: `CreditMarketUtilization`, `CreditPositionHandles`
|
|
12
|
+
|
|
5
13
|
## [1.0.1] - 2026-05-29
|
|
6
14
|
|
|
7
15
|
### Fixed
|
package/dist/index.cjs
CHANGED
|
@@ -317,6 +317,53 @@ var OC_USDC_PAY_ABI = [
|
|
|
317
317
|
}
|
|
318
318
|
];
|
|
319
319
|
var CREDIT_MARKET_ABI = [
|
|
320
|
+
{
|
|
321
|
+
name: "utilizationBps",
|
|
322
|
+
type: "function",
|
|
323
|
+
stateMutability: "view",
|
|
324
|
+
inputs: [],
|
|
325
|
+
outputs: [{ name: "", type: "uint256" }]
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
name: "totalSupplyAssets",
|
|
329
|
+
type: "function",
|
|
330
|
+
stateMutability: "view",
|
|
331
|
+
inputs: [],
|
|
332
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
name: "totalBorrowAssets",
|
|
336
|
+
type: "function",
|
|
337
|
+
stateMutability: "view",
|
|
338
|
+
inputs: [],
|
|
339
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
name: "getPosition",
|
|
343
|
+
type: "function",
|
|
344
|
+
stateMutability: "view",
|
|
345
|
+
inputs: [{ name: "user", type: "address" }],
|
|
346
|
+
outputs: [
|
|
347
|
+
{ name: "encSupplyShares", type: "uint256" },
|
|
348
|
+
{ name: "borrowShares", type: "uint256" },
|
|
349
|
+
{ name: "collateral", type: "uint256" },
|
|
350
|
+
{ name: "disburseTo", type: "uint256" }
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
name: "getPlainCollateral",
|
|
355
|
+
type: "function",
|
|
356
|
+
stateMutability: "view",
|
|
357
|
+
inputs: [{ name: "user", type: "address" }],
|
|
358
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
name: "getPlainBorrow",
|
|
362
|
+
type: "function",
|
|
363
|
+
stateMutability: "view",
|
|
364
|
+
inputs: [{ name: "user", type: "address" }],
|
|
365
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
366
|
+
},
|
|
320
367
|
{
|
|
321
368
|
name: "supplyCollateral",
|
|
322
369
|
type: "function",
|
|
@@ -389,6 +436,11 @@ var OBSCURA_VOTE_ABI = [
|
|
|
389
436
|
];
|
|
390
437
|
|
|
391
438
|
// src/modules/credit.ts
|
|
439
|
+
var PLAINTEXT_SHADOW_WARNING = "Plaintext shadows are public testnet UI hints only \u2014 not encrypted balances. Do not treat as private position size. Omit on mainnet strict privacy mode.";
|
|
440
|
+
function bigintToHandleHex(value) {
|
|
441
|
+
const hex = value.toString(16).padStart(64, "0");
|
|
442
|
+
return `0x${hex}`;
|
|
443
|
+
}
|
|
392
444
|
var CreditModule = class {
|
|
393
445
|
constructor(deps) {
|
|
394
446
|
this.deps = deps;
|
|
@@ -397,6 +449,75 @@ var CreditModule = class {
|
|
|
397
449
|
getMarketAddress(override) {
|
|
398
450
|
return override ?? this.deps.addresses.CreditCanonicalPayOcUSDCMarket;
|
|
399
451
|
}
|
|
452
|
+
/** Public pool aggregates — no wallet required */
|
|
453
|
+
async getMarketUtilization(marketAddress) {
|
|
454
|
+
const market = this.getMarketAddress(marketAddress);
|
|
455
|
+
const [utilizationBps, totalSupplyAssets, totalBorrowAssets] = await Promise.all([
|
|
456
|
+
this.deps.publicClient.readContract({
|
|
457
|
+
address: market,
|
|
458
|
+
abi: CREDIT_MARKET_ABI,
|
|
459
|
+
functionName: "utilizationBps"
|
|
460
|
+
}),
|
|
461
|
+
this.deps.publicClient.readContract({
|
|
462
|
+
address: market,
|
|
463
|
+
abi: CREDIT_MARKET_ABI,
|
|
464
|
+
functionName: "totalSupplyAssets"
|
|
465
|
+
}),
|
|
466
|
+
this.deps.publicClient.readContract({
|
|
467
|
+
address: market,
|
|
468
|
+
abi: CREDIT_MARKET_ABI,
|
|
469
|
+
functionName: "totalBorrowAssets"
|
|
470
|
+
})
|
|
471
|
+
]);
|
|
472
|
+
return {
|
|
473
|
+
marketAddress: market,
|
|
474
|
+
utilizationBps,
|
|
475
|
+
totalSupplyAssets,
|
|
476
|
+
totalBorrowAssets
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Returns encrypted position handles as opaque hex strings.
|
|
481
|
+
* Plaintext shadows are optional and labeled with an explicit warning.
|
|
482
|
+
*/
|
|
483
|
+
async getPositionHandles(wallet, options = {}) {
|
|
484
|
+
const normalized = normalizeWallet(wallet);
|
|
485
|
+
if (!normalized) throw new Error("Invalid wallet address");
|
|
486
|
+
const market = this.getMarketAddress(options.marketAddress);
|
|
487
|
+
const position = await this.deps.publicClient.readContract({
|
|
488
|
+
address: market,
|
|
489
|
+
abi: CREDIT_MARKET_ABI,
|
|
490
|
+
functionName: "getPosition",
|
|
491
|
+
args: [normalized]
|
|
492
|
+
});
|
|
493
|
+
const result = {
|
|
494
|
+
marketAddress: market,
|
|
495
|
+
wallet: normalized,
|
|
496
|
+
encryptedSupplySharesHandle: bigintToHandleHex(position[0]),
|
|
497
|
+
encryptedBorrowSharesHandle: bigintToHandleHex(position[1]),
|
|
498
|
+
encryptedCollateralHandle: bigintToHandleHex(position[2])
|
|
499
|
+
};
|
|
500
|
+
if (options.includePlaintextShadows) {
|
|
501
|
+
const [plainCollateral, plainBorrow] = await Promise.all([
|
|
502
|
+
this.deps.publicClient.readContract({
|
|
503
|
+
address: market,
|
|
504
|
+
abi: CREDIT_MARKET_ABI,
|
|
505
|
+
functionName: "getPlainCollateral",
|
|
506
|
+
args: [normalized]
|
|
507
|
+
}),
|
|
508
|
+
this.deps.publicClient.readContract({
|
|
509
|
+
address: market,
|
|
510
|
+
abi: CREDIT_MARKET_ABI,
|
|
511
|
+
functionName: "getPlainBorrow",
|
|
512
|
+
args: [normalized]
|
|
513
|
+
})
|
|
514
|
+
]);
|
|
515
|
+
result.plaintextShadowWarning = PLAINTEXT_SHADOW_WARNING;
|
|
516
|
+
result.plainCollateral = plainCollateral;
|
|
517
|
+
result.plainBorrow = plainBorrow;
|
|
518
|
+
}
|
|
519
|
+
return result;
|
|
520
|
+
}
|
|
400
521
|
async buildSupplyCollateral(amount, encryptedAmount, marketAddress) {
|
|
401
522
|
const market = this.getMarketAddress(marketAddress);
|
|
402
523
|
const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);
|
|
@@ -635,6 +756,7 @@ var ObscuraSDK = class _ObscuraSDK {
|
|
|
635
756
|
this.credit = new CreditModule({
|
|
636
757
|
chainId: this.chainId,
|
|
637
758
|
addresses: this.addresses,
|
|
759
|
+
publicClient: this.publicClient,
|
|
638
760
|
fhe: this.fhe
|
|
639
761
|
});
|
|
640
762
|
this.vote = new VoteModule(moduleDeps);
|
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":"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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(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: \"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 } from \"viem\";\r\nimport { CREDIT_MARKET_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 CreditModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n fhe?: FheProvider;\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 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 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/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":"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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(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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -111,6 +111,28 @@ interface ProposalState {
|
|
|
111
111
|
finalized: boolean;
|
|
112
112
|
winningOption: bigint;
|
|
113
113
|
}
|
|
114
|
+
/** Public aggregate market metrics — safe to expose without wallet context */
|
|
115
|
+
interface CreditMarketUtilization {
|
|
116
|
+
marketAddress: Address;
|
|
117
|
+
utilizationBps: bigint;
|
|
118
|
+
totalSupplyAssets: bigint;
|
|
119
|
+
totalBorrowAssets: bigint;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Encrypted position handles (opaque ctHash). Never decrypted by the SDK.
|
|
123
|
+
* Plaintext shadows are optional testnet-only hints — not private balances.
|
|
124
|
+
*/
|
|
125
|
+
interface CreditPositionHandles {
|
|
126
|
+
marketAddress: Address;
|
|
127
|
+
wallet: Address;
|
|
128
|
+
encryptedSupplySharesHandle: `0x${string}`;
|
|
129
|
+
encryptedBorrowSharesHandle: `0x${string}`;
|
|
130
|
+
encryptedCollateralHandle: `0x${string}`;
|
|
131
|
+
/** Set when includePlaintextShadows=true */
|
|
132
|
+
plaintextShadowWarning?: string;
|
|
133
|
+
plainCollateral?: bigint;
|
|
134
|
+
plainBorrow?: bigint;
|
|
135
|
+
}
|
|
114
136
|
interface ObscuraSDKConfig {
|
|
115
137
|
chainId?: number;
|
|
116
138
|
rpcUrl?: string;
|
|
@@ -153,12 +175,23 @@ declare class ActivityModule {
|
|
|
153
175
|
interface CreditModuleDeps {
|
|
154
176
|
chainId: number;
|
|
155
177
|
addresses: ObscuraAddresses;
|
|
178
|
+
publicClient: PublicClient;
|
|
156
179
|
fhe?: FheProvider;
|
|
157
180
|
}
|
|
158
181
|
declare class CreditModule {
|
|
159
182
|
private readonly deps;
|
|
160
183
|
constructor(deps: CreditModuleDeps);
|
|
161
184
|
getMarketAddress(override?: Address): Address;
|
|
185
|
+
/** Public pool aggregates — no wallet required */
|
|
186
|
+
getMarketUtilization(marketAddress?: Address): Promise<CreditMarketUtilization>;
|
|
187
|
+
/**
|
|
188
|
+
* Returns encrypted position handles as opaque hex strings.
|
|
189
|
+
* Plaintext shadows are optional and labeled with an explicit warning.
|
|
190
|
+
*/
|
|
191
|
+
getPositionHandles(wallet: Address, options?: {
|
|
192
|
+
marketAddress?: Address;
|
|
193
|
+
includePlaintextShadows?: boolean;
|
|
194
|
+
}): Promise<CreditPositionHandles>;
|
|
162
195
|
buildSupplyCollateral(amount: bigint, encryptedAmount?: InEuint64, marketAddress?: Address): Promise<ContractCall>;
|
|
163
196
|
buildBorrow(amount: bigint, encryptedAmount?: InEuint64, marketAddress?: Address): Promise<ContractCall>;
|
|
164
197
|
buildRepay(amount: bigint, encryptedAmount?: InEuint64, marketAddress?: Address): Promise<ContractCall>;
|
|
@@ -346,6 +379,78 @@ declare const OC_USDC_PAY_ABI: readonly [{
|
|
|
346
379
|
readonly outputs: readonly [];
|
|
347
380
|
}];
|
|
348
381
|
declare const CREDIT_MARKET_ABI: readonly [{
|
|
382
|
+
readonly name: "utilizationBps";
|
|
383
|
+
readonly type: "function";
|
|
384
|
+
readonly stateMutability: "view";
|
|
385
|
+
readonly inputs: readonly [];
|
|
386
|
+
readonly outputs: readonly [{
|
|
387
|
+
readonly name: "";
|
|
388
|
+
readonly type: "uint256";
|
|
389
|
+
}];
|
|
390
|
+
}, {
|
|
391
|
+
readonly name: "totalSupplyAssets";
|
|
392
|
+
readonly type: "function";
|
|
393
|
+
readonly stateMutability: "view";
|
|
394
|
+
readonly inputs: readonly [];
|
|
395
|
+
readonly outputs: readonly [{
|
|
396
|
+
readonly name: "";
|
|
397
|
+
readonly type: "uint128";
|
|
398
|
+
}];
|
|
399
|
+
}, {
|
|
400
|
+
readonly name: "totalBorrowAssets";
|
|
401
|
+
readonly type: "function";
|
|
402
|
+
readonly stateMutability: "view";
|
|
403
|
+
readonly inputs: readonly [];
|
|
404
|
+
readonly outputs: readonly [{
|
|
405
|
+
readonly name: "";
|
|
406
|
+
readonly type: "uint128";
|
|
407
|
+
}];
|
|
408
|
+
}, {
|
|
409
|
+
readonly name: "getPosition";
|
|
410
|
+
readonly type: "function";
|
|
411
|
+
readonly stateMutability: "view";
|
|
412
|
+
readonly inputs: readonly [{
|
|
413
|
+
readonly name: "user";
|
|
414
|
+
readonly type: "address";
|
|
415
|
+
}];
|
|
416
|
+
readonly outputs: readonly [{
|
|
417
|
+
readonly name: "encSupplyShares";
|
|
418
|
+
readonly type: "uint256";
|
|
419
|
+
}, {
|
|
420
|
+
readonly name: "borrowShares";
|
|
421
|
+
readonly type: "uint256";
|
|
422
|
+
}, {
|
|
423
|
+
readonly name: "collateral";
|
|
424
|
+
readonly type: "uint256";
|
|
425
|
+
}, {
|
|
426
|
+
readonly name: "disburseTo";
|
|
427
|
+
readonly type: "uint256";
|
|
428
|
+
}];
|
|
429
|
+
}, {
|
|
430
|
+
readonly name: "getPlainCollateral";
|
|
431
|
+
readonly type: "function";
|
|
432
|
+
readonly stateMutability: "view";
|
|
433
|
+
readonly inputs: readonly [{
|
|
434
|
+
readonly name: "user";
|
|
435
|
+
readonly type: "address";
|
|
436
|
+
}];
|
|
437
|
+
readonly outputs: readonly [{
|
|
438
|
+
readonly name: "";
|
|
439
|
+
readonly type: "uint128";
|
|
440
|
+
}];
|
|
441
|
+
}, {
|
|
442
|
+
readonly name: "getPlainBorrow";
|
|
443
|
+
readonly type: "function";
|
|
444
|
+
readonly stateMutability: "view";
|
|
445
|
+
readonly inputs: readonly [{
|
|
446
|
+
readonly name: "user";
|
|
447
|
+
readonly type: "address";
|
|
448
|
+
}];
|
|
449
|
+
readonly outputs: readonly [{
|
|
450
|
+
readonly name: "";
|
|
451
|
+
readonly type: "uint128";
|
|
452
|
+
}];
|
|
453
|
+
}, {
|
|
349
454
|
readonly name: "supplyCollateral";
|
|
350
455
|
readonly type: "function";
|
|
351
456
|
readonly stateMutability: "nonpayable";
|
|
@@ -490,4 +595,4 @@ declare const OBSCURA_VOTE_ABI: readonly [{
|
|
|
490
595
|
readonly outputs: readonly [];
|
|
491
596
|
}];
|
|
492
597
|
|
|
493
|
-
export { ACTIVITY_EVENT_FILTERS, ARBITRUM_SEPOLIA_CHAIN_ID, type ActivityEventFilterMap, type ActivityEventType, type ActivityItem, type ActivityListOptions, type ActivityListResult, ActivityModule, CREDIT_MARKET_ABI, type ContractCall, CreditModule, DEFAULT_ADDRESSES, DEFAULT_API_URL, DEFAULT_RPC_URL, DEFAULT_SUPABASE_URL, type FheEncryptOptions, type FheProvider, FheRequiredError, HttpError, type InEuint64, type NotificationPrefs, NotificationsModule, OBSCURA_VOTE_ABI, OC_USDC_PAY_ABI, type ObscuraAddresses, ObscuraSDK, type ObscuraSDKConfig, PayModule, type ProposalState, type PushSubscriptionJSON, ReputationModule, type ReputationSignalSummary, type ReputationSourceApp, type ReputationSummary, type ReputationTier, VoteModule, createDefaultPublicClient, encodeCall, normalizeWallet, toContractInEuint64 };
|
|
598
|
+
export { ACTIVITY_EVENT_FILTERS, ARBITRUM_SEPOLIA_CHAIN_ID, type ActivityEventFilterMap, type ActivityEventType, type ActivityItem, type ActivityListOptions, type ActivityListResult, ActivityModule, CREDIT_MARKET_ABI, type ContractCall, type CreditMarketUtilization, CreditModule, type CreditPositionHandles, DEFAULT_ADDRESSES, DEFAULT_API_URL, DEFAULT_RPC_URL, DEFAULT_SUPABASE_URL, type FheEncryptOptions, type FheProvider, FheRequiredError, HttpError, type InEuint64, type NotificationPrefs, NotificationsModule, OBSCURA_VOTE_ABI, OC_USDC_PAY_ABI, type ObscuraAddresses, ObscuraSDK, type ObscuraSDKConfig, PayModule, type ProposalState, type PushSubscriptionJSON, ReputationModule, type ReputationSignalSummary, type ReputationSourceApp, type ReputationSummary, type ReputationTier, VoteModule, createDefaultPublicClient, encodeCall, normalizeWallet, toContractInEuint64 };
|
package/dist/index.d.ts
CHANGED
|
@@ -111,6 +111,28 @@ interface ProposalState {
|
|
|
111
111
|
finalized: boolean;
|
|
112
112
|
winningOption: bigint;
|
|
113
113
|
}
|
|
114
|
+
/** Public aggregate market metrics — safe to expose without wallet context */
|
|
115
|
+
interface CreditMarketUtilization {
|
|
116
|
+
marketAddress: Address;
|
|
117
|
+
utilizationBps: bigint;
|
|
118
|
+
totalSupplyAssets: bigint;
|
|
119
|
+
totalBorrowAssets: bigint;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Encrypted position handles (opaque ctHash). Never decrypted by the SDK.
|
|
123
|
+
* Plaintext shadows are optional testnet-only hints — not private balances.
|
|
124
|
+
*/
|
|
125
|
+
interface CreditPositionHandles {
|
|
126
|
+
marketAddress: Address;
|
|
127
|
+
wallet: Address;
|
|
128
|
+
encryptedSupplySharesHandle: `0x${string}`;
|
|
129
|
+
encryptedBorrowSharesHandle: `0x${string}`;
|
|
130
|
+
encryptedCollateralHandle: `0x${string}`;
|
|
131
|
+
/** Set when includePlaintextShadows=true */
|
|
132
|
+
plaintextShadowWarning?: string;
|
|
133
|
+
plainCollateral?: bigint;
|
|
134
|
+
plainBorrow?: bigint;
|
|
135
|
+
}
|
|
114
136
|
interface ObscuraSDKConfig {
|
|
115
137
|
chainId?: number;
|
|
116
138
|
rpcUrl?: string;
|
|
@@ -153,12 +175,23 @@ declare class ActivityModule {
|
|
|
153
175
|
interface CreditModuleDeps {
|
|
154
176
|
chainId: number;
|
|
155
177
|
addresses: ObscuraAddresses;
|
|
178
|
+
publicClient: PublicClient;
|
|
156
179
|
fhe?: FheProvider;
|
|
157
180
|
}
|
|
158
181
|
declare class CreditModule {
|
|
159
182
|
private readonly deps;
|
|
160
183
|
constructor(deps: CreditModuleDeps);
|
|
161
184
|
getMarketAddress(override?: Address): Address;
|
|
185
|
+
/** Public pool aggregates — no wallet required */
|
|
186
|
+
getMarketUtilization(marketAddress?: Address): Promise<CreditMarketUtilization>;
|
|
187
|
+
/**
|
|
188
|
+
* Returns encrypted position handles as opaque hex strings.
|
|
189
|
+
* Plaintext shadows are optional and labeled with an explicit warning.
|
|
190
|
+
*/
|
|
191
|
+
getPositionHandles(wallet: Address, options?: {
|
|
192
|
+
marketAddress?: Address;
|
|
193
|
+
includePlaintextShadows?: boolean;
|
|
194
|
+
}): Promise<CreditPositionHandles>;
|
|
162
195
|
buildSupplyCollateral(amount: bigint, encryptedAmount?: InEuint64, marketAddress?: Address): Promise<ContractCall>;
|
|
163
196
|
buildBorrow(amount: bigint, encryptedAmount?: InEuint64, marketAddress?: Address): Promise<ContractCall>;
|
|
164
197
|
buildRepay(amount: bigint, encryptedAmount?: InEuint64, marketAddress?: Address): Promise<ContractCall>;
|
|
@@ -346,6 +379,78 @@ declare const OC_USDC_PAY_ABI: readonly [{
|
|
|
346
379
|
readonly outputs: readonly [];
|
|
347
380
|
}];
|
|
348
381
|
declare const CREDIT_MARKET_ABI: readonly [{
|
|
382
|
+
readonly name: "utilizationBps";
|
|
383
|
+
readonly type: "function";
|
|
384
|
+
readonly stateMutability: "view";
|
|
385
|
+
readonly inputs: readonly [];
|
|
386
|
+
readonly outputs: readonly [{
|
|
387
|
+
readonly name: "";
|
|
388
|
+
readonly type: "uint256";
|
|
389
|
+
}];
|
|
390
|
+
}, {
|
|
391
|
+
readonly name: "totalSupplyAssets";
|
|
392
|
+
readonly type: "function";
|
|
393
|
+
readonly stateMutability: "view";
|
|
394
|
+
readonly inputs: readonly [];
|
|
395
|
+
readonly outputs: readonly [{
|
|
396
|
+
readonly name: "";
|
|
397
|
+
readonly type: "uint128";
|
|
398
|
+
}];
|
|
399
|
+
}, {
|
|
400
|
+
readonly name: "totalBorrowAssets";
|
|
401
|
+
readonly type: "function";
|
|
402
|
+
readonly stateMutability: "view";
|
|
403
|
+
readonly inputs: readonly [];
|
|
404
|
+
readonly outputs: readonly [{
|
|
405
|
+
readonly name: "";
|
|
406
|
+
readonly type: "uint128";
|
|
407
|
+
}];
|
|
408
|
+
}, {
|
|
409
|
+
readonly name: "getPosition";
|
|
410
|
+
readonly type: "function";
|
|
411
|
+
readonly stateMutability: "view";
|
|
412
|
+
readonly inputs: readonly [{
|
|
413
|
+
readonly name: "user";
|
|
414
|
+
readonly type: "address";
|
|
415
|
+
}];
|
|
416
|
+
readonly outputs: readonly [{
|
|
417
|
+
readonly name: "encSupplyShares";
|
|
418
|
+
readonly type: "uint256";
|
|
419
|
+
}, {
|
|
420
|
+
readonly name: "borrowShares";
|
|
421
|
+
readonly type: "uint256";
|
|
422
|
+
}, {
|
|
423
|
+
readonly name: "collateral";
|
|
424
|
+
readonly type: "uint256";
|
|
425
|
+
}, {
|
|
426
|
+
readonly name: "disburseTo";
|
|
427
|
+
readonly type: "uint256";
|
|
428
|
+
}];
|
|
429
|
+
}, {
|
|
430
|
+
readonly name: "getPlainCollateral";
|
|
431
|
+
readonly type: "function";
|
|
432
|
+
readonly stateMutability: "view";
|
|
433
|
+
readonly inputs: readonly [{
|
|
434
|
+
readonly name: "user";
|
|
435
|
+
readonly type: "address";
|
|
436
|
+
}];
|
|
437
|
+
readonly outputs: readonly [{
|
|
438
|
+
readonly name: "";
|
|
439
|
+
readonly type: "uint128";
|
|
440
|
+
}];
|
|
441
|
+
}, {
|
|
442
|
+
readonly name: "getPlainBorrow";
|
|
443
|
+
readonly type: "function";
|
|
444
|
+
readonly stateMutability: "view";
|
|
445
|
+
readonly inputs: readonly [{
|
|
446
|
+
readonly name: "user";
|
|
447
|
+
readonly type: "address";
|
|
448
|
+
}];
|
|
449
|
+
readonly outputs: readonly [{
|
|
450
|
+
readonly name: "";
|
|
451
|
+
readonly type: "uint128";
|
|
452
|
+
}];
|
|
453
|
+
}, {
|
|
349
454
|
readonly name: "supplyCollateral";
|
|
350
455
|
readonly type: "function";
|
|
351
456
|
readonly stateMutability: "nonpayable";
|
|
@@ -490,4 +595,4 @@ declare const OBSCURA_VOTE_ABI: readonly [{
|
|
|
490
595
|
readonly outputs: readonly [];
|
|
491
596
|
}];
|
|
492
597
|
|
|
493
|
-
export { ACTIVITY_EVENT_FILTERS, ARBITRUM_SEPOLIA_CHAIN_ID, type ActivityEventFilterMap, type ActivityEventType, type ActivityItem, type ActivityListOptions, type ActivityListResult, ActivityModule, CREDIT_MARKET_ABI, type ContractCall, CreditModule, DEFAULT_ADDRESSES, DEFAULT_API_URL, DEFAULT_RPC_URL, DEFAULT_SUPABASE_URL, type FheEncryptOptions, type FheProvider, FheRequiredError, HttpError, type InEuint64, type NotificationPrefs, NotificationsModule, OBSCURA_VOTE_ABI, OC_USDC_PAY_ABI, type ObscuraAddresses, ObscuraSDK, type ObscuraSDKConfig, PayModule, type ProposalState, type PushSubscriptionJSON, ReputationModule, type ReputationSignalSummary, type ReputationSourceApp, type ReputationSummary, type ReputationTier, VoteModule, createDefaultPublicClient, encodeCall, normalizeWallet, toContractInEuint64 };
|
|
598
|
+
export { ACTIVITY_EVENT_FILTERS, ARBITRUM_SEPOLIA_CHAIN_ID, type ActivityEventFilterMap, type ActivityEventType, type ActivityItem, type ActivityListOptions, type ActivityListResult, ActivityModule, CREDIT_MARKET_ABI, type ContractCall, type CreditMarketUtilization, CreditModule, type CreditPositionHandles, DEFAULT_ADDRESSES, DEFAULT_API_URL, DEFAULT_RPC_URL, DEFAULT_SUPABASE_URL, type FheEncryptOptions, type FheProvider, FheRequiredError, HttpError, type InEuint64, type NotificationPrefs, NotificationsModule, OBSCURA_VOTE_ABI, OC_USDC_PAY_ABI, type ObscuraAddresses, ObscuraSDK, type ObscuraSDKConfig, PayModule, type ProposalState, type PushSubscriptionJSON, ReputationModule, type ReputationSignalSummary, type ReputationSourceApp, type ReputationSummary, type ReputationTier, VoteModule, createDefaultPublicClient, encodeCall, normalizeWallet, toContractInEuint64 };
|
package/dist/index.js
CHANGED
|
@@ -315,6 +315,53 @@ var OC_USDC_PAY_ABI = [
|
|
|
315
315
|
}
|
|
316
316
|
];
|
|
317
317
|
var CREDIT_MARKET_ABI = [
|
|
318
|
+
{
|
|
319
|
+
name: "utilizationBps",
|
|
320
|
+
type: "function",
|
|
321
|
+
stateMutability: "view",
|
|
322
|
+
inputs: [],
|
|
323
|
+
outputs: [{ name: "", type: "uint256" }]
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: "totalSupplyAssets",
|
|
327
|
+
type: "function",
|
|
328
|
+
stateMutability: "view",
|
|
329
|
+
inputs: [],
|
|
330
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
name: "totalBorrowAssets",
|
|
334
|
+
type: "function",
|
|
335
|
+
stateMutability: "view",
|
|
336
|
+
inputs: [],
|
|
337
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: "getPosition",
|
|
341
|
+
type: "function",
|
|
342
|
+
stateMutability: "view",
|
|
343
|
+
inputs: [{ name: "user", type: "address" }],
|
|
344
|
+
outputs: [
|
|
345
|
+
{ name: "encSupplyShares", type: "uint256" },
|
|
346
|
+
{ name: "borrowShares", type: "uint256" },
|
|
347
|
+
{ name: "collateral", type: "uint256" },
|
|
348
|
+
{ name: "disburseTo", type: "uint256" }
|
|
349
|
+
]
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
name: "getPlainCollateral",
|
|
353
|
+
type: "function",
|
|
354
|
+
stateMutability: "view",
|
|
355
|
+
inputs: [{ name: "user", type: "address" }],
|
|
356
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
name: "getPlainBorrow",
|
|
360
|
+
type: "function",
|
|
361
|
+
stateMutability: "view",
|
|
362
|
+
inputs: [{ name: "user", type: "address" }],
|
|
363
|
+
outputs: [{ name: "", type: "uint128" }]
|
|
364
|
+
},
|
|
318
365
|
{
|
|
319
366
|
name: "supplyCollateral",
|
|
320
367
|
type: "function",
|
|
@@ -387,6 +434,11 @@ var OBSCURA_VOTE_ABI = [
|
|
|
387
434
|
];
|
|
388
435
|
|
|
389
436
|
// src/modules/credit.ts
|
|
437
|
+
var PLAINTEXT_SHADOW_WARNING = "Plaintext shadows are public testnet UI hints only \u2014 not encrypted balances. Do not treat as private position size. Omit on mainnet strict privacy mode.";
|
|
438
|
+
function bigintToHandleHex(value) {
|
|
439
|
+
const hex = value.toString(16).padStart(64, "0");
|
|
440
|
+
return `0x${hex}`;
|
|
441
|
+
}
|
|
390
442
|
var CreditModule = class {
|
|
391
443
|
constructor(deps) {
|
|
392
444
|
this.deps = deps;
|
|
@@ -395,6 +447,75 @@ var CreditModule = class {
|
|
|
395
447
|
getMarketAddress(override) {
|
|
396
448
|
return override ?? this.deps.addresses.CreditCanonicalPayOcUSDCMarket;
|
|
397
449
|
}
|
|
450
|
+
/** Public pool aggregates — no wallet required */
|
|
451
|
+
async getMarketUtilization(marketAddress) {
|
|
452
|
+
const market = this.getMarketAddress(marketAddress);
|
|
453
|
+
const [utilizationBps, totalSupplyAssets, totalBorrowAssets] = await Promise.all([
|
|
454
|
+
this.deps.publicClient.readContract({
|
|
455
|
+
address: market,
|
|
456
|
+
abi: CREDIT_MARKET_ABI,
|
|
457
|
+
functionName: "utilizationBps"
|
|
458
|
+
}),
|
|
459
|
+
this.deps.publicClient.readContract({
|
|
460
|
+
address: market,
|
|
461
|
+
abi: CREDIT_MARKET_ABI,
|
|
462
|
+
functionName: "totalSupplyAssets"
|
|
463
|
+
}),
|
|
464
|
+
this.deps.publicClient.readContract({
|
|
465
|
+
address: market,
|
|
466
|
+
abi: CREDIT_MARKET_ABI,
|
|
467
|
+
functionName: "totalBorrowAssets"
|
|
468
|
+
})
|
|
469
|
+
]);
|
|
470
|
+
return {
|
|
471
|
+
marketAddress: market,
|
|
472
|
+
utilizationBps,
|
|
473
|
+
totalSupplyAssets,
|
|
474
|
+
totalBorrowAssets
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Returns encrypted position handles as opaque hex strings.
|
|
479
|
+
* Plaintext shadows are optional and labeled with an explicit warning.
|
|
480
|
+
*/
|
|
481
|
+
async getPositionHandles(wallet, options = {}) {
|
|
482
|
+
const normalized = normalizeWallet(wallet);
|
|
483
|
+
if (!normalized) throw new Error("Invalid wallet address");
|
|
484
|
+
const market = this.getMarketAddress(options.marketAddress);
|
|
485
|
+
const position = await this.deps.publicClient.readContract({
|
|
486
|
+
address: market,
|
|
487
|
+
abi: CREDIT_MARKET_ABI,
|
|
488
|
+
functionName: "getPosition",
|
|
489
|
+
args: [normalized]
|
|
490
|
+
});
|
|
491
|
+
const result = {
|
|
492
|
+
marketAddress: market,
|
|
493
|
+
wallet: normalized,
|
|
494
|
+
encryptedSupplySharesHandle: bigintToHandleHex(position[0]),
|
|
495
|
+
encryptedBorrowSharesHandle: bigintToHandleHex(position[1]),
|
|
496
|
+
encryptedCollateralHandle: bigintToHandleHex(position[2])
|
|
497
|
+
};
|
|
498
|
+
if (options.includePlaintextShadows) {
|
|
499
|
+
const [plainCollateral, plainBorrow] = await Promise.all([
|
|
500
|
+
this.deps.publicClient.readContract({
|
|
501
|
+
address: market,
|
|
502
|
+
abi: CREDIT_MARKET_ABI,
|
|
503
|
+
functionName: "getPlainCollateral",
|
|
504
|
+
args: [normalized]
|
|
505
|
+
}),
|
|
506
|
+
this.deps.publicClient.readContract({
|
|
507
|
+
address: market,
|
|
508
|
+
abi: CREDIT_MARKET_ABI,
|
|
509
|
+
functionName: "getPlainBorrow",
|
|
510
|
+
args: [normalized]
|
|
511
|
+
})
|
|
512
|
+
]);
|
|
513
|
+
result.plaintextShadowWarning = PLAINTEXT_SHADOW_WARNING;
|
|
514
|
+
result.plainCollateral = plainCollateral;
|
|
515
|
+
result.plainBorrow = plainBorrow;
|
|
516
|
+
}
|
|
517
|
+
return result;
|
|
518
|
+
}
|
|
398
519
|
async buildSupplyCollateral(amount, encryptedAmount, marketAddress) {
|
|
399
520
|
const market = this.getMarketAddress(marketAddress);
|
|
400
521
|
const enc = await resolveInEuint64(amount, market, this.deps.fhe, encryptedAmount);
|
|
@@ -633,6 +754,7 @@ var ObscuraSDK = class _ObscuraSDK {
|
|
|
633
754
|
this.credit = new CreditModule({
|
|
634
755
|
chainId: this.chainId,
|
|
635
756
|
addresses: this.addresses,
|
|
757
|
+
publicClient: this.publicClient,
|
|
636
758
|
fhe: this.fhe
|
|
637
759
|
});
|
|
638
760
|
this.vote = new VoteModule(moduleDeps);
|
package/dist/index.js.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":["http"],"mappings":"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","file":"index.js","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: \"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 } from \"viem\";\r\nimport { CREDIT_MARKET_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 CreditModuleDeps {\r\n chainId: number;\r\n addresses: ObscuraAddresses;\r\n fhe?: FheProvider;\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 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 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/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":["http"],"mappings":"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","file":"index.js","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"]}
|