@obscura-fhe/sdk 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to `@obscura-fhe/sdk` are documented in this file.
4
4
 
5
+ ## [1.0.1] - 2026-05-29
6
+
7
+ ### Fixed
8
+
9
+ - **Vote module:** `getProposalCount()` now reads on-chain `nextProposalId()` instead of non-existent `proposalCount()` (verified against Arbitrum Sepolia ObscuraVote `0xe358…1730`)
10
+
11
+ ### Added
12
+
13
+ - `ActivityModule.isConfigured()` — check Supabase credentials before querying
14
+ - Clearer activity error messages with default Supabase URL and setup instructions
15
+ - Module examples: `reputation`, `activity`, `notifications`, `pay`, `credit`, `vote`
16
+ - README: requirements matrix, viem rpcUrl/transport examples, TypeScript `verbatimModuleSyntax` guidance
17
+
18
+ ### Docs
19
+
20
+ - Developer portal quick-start, SDK onboarding, and SDK reference updated with hidden requirements
21
+
5
22
  ## [1.0.0] - 2026-05-29
6
23
 
7
24
  ### Added
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # @obscura-fhe/sdk
2
2
 
3
- Official TypeScript SDK for **Obscura Pay**, **Credit**, and Vote on Arbitrum Sepolia.
3
+ Official TypeScript SDK for **Obscura Pay**, **Credit**, and **Vote** on Arbitrum Sepolia.
4
4
 
5
- Privacy-first DeFi with FHE (Fully Homomorphic Encryption). Framework-agnostic — works in Node.js, browsers, and automation scripts.
5
+ Privacy-first DeFi with FHE (Fully Homomorphic Encryption). Framework-agnostic — works in Node.js, browsers, Vite, Next.js, and automation scripts.
6
6
 
7
7
  ## Install
8
8
 
@@ -10,7 +10,22 @@ Privacy-first DeFi with FHE (Fully Homomorphic Encryption). Framework-agnostic
10
10
  npm install @obscura-fhe/sdk viem
11
11
  ```
12
12
 
13
- `viem` is a peer dependency (v2+).
13
+ `viem` is a **peer dependency** (v2+). You must install it alongside the SDK.
14
+
15
+ ## Requirements at a glance
16
+
17
+ | Module | Wallet | RPC / chain | Supabase | FHE provider |
18
+ |--------|--------|-------------|----------|--------------|
19
+ | `reputation` | No | No | No | No |
20
+ | `notifications` | No | No | No | No |
21
+ | `activity` | No | No | **Yes** (URL + anon key) | No |
22
+ | `pay` / `credit` / `vote` reads | No | **Yes** (default RPC) | No | No |
23
+ | Encrypted writes (`buildShield`, etc.) | Optional* | Yes | No | **Yes** (or pre-encrypted input) |
24
+ | `sendCall()` | **Yes** (`walletClient`) | Yes | No | If write needs FHE |
25
+
26
+ \*Use `encodeCall()` and sign externally if you do not inject `walletClient`.
27
+
28
+ **Network:** Arbitrum Sepolia (`chainId` **421614**) by default.
14
29
 
15
30
  ## Quick start
16
31
 
@@ -18,49 +33,153 @@ npm install @obscura-fhe/sdk viem
18
33
  import { ObscuraSDK } from "@obscura-fhe/sdk";
19
34
 
20
35
  const sdk = ObscuraSDK.create({
21
- supabaseAnonKey: process.env.OBSCURA_SUPABASE_ANON_KEY, // required for activity feed
36
+ // Required for activity feed only:
37
+ supabaseAnonKey: process.env.OBSCURA_SUPABASE_ANON_KEY,
38
+ // supabaseUrl defaults to Obscura production project
22
39
  });
23
40
 
24
- // Reputation (off-chain, obscura-api)
41
+ // Reputation — no wallet, no Supabase
25
42
  const summary = await sdk.reputation.getSummary("0xYourWallet...");
26
43
  console.log(summary.tier, summary.totalCappedWeight);
27
44
 
28
- // Activity feed (Supabase)
29
- const { items, hasMore } = await sdk.activity.listForWallet("0xYourWallet...", {
30
- filter: "credit",
45
+ // Activity requires supabaseAnonKey
46
+ if (sdk.activity.isConfigured()) {
47
+ const { items } = await sdk.activity.listForWallet("0xYourWallet...", { filter: "credit" });
48
+ console.log(items.length);
49
+ }
50
+
51
+ // On-chain read — uses default Arbitrum Sepolia RPC
52
+ const proposalCount = await sdk.vote.getProposalCount(); // reads nextProposalId()
53
+ const balanceCt = await sdk.pay.getShieldedBalance("0xYourWallet...");
54
+ ```
55
+
56
+ ## viem integration (recommended)
57
+
58
+ Pass an explicit RPC URL and viem clients when you need custom transport, account abstraction, or `sendCall()`:
59
+
60
+ ```typescript
61
+ import { ObscuraSDK } from "@obscura-fhe/sdk";
62
+ import { createPublicClient, createWalletClient, http, custom } from "viem";
63
+ import { arbitrumSepolia } from "viem/chains";
64
+ import { privateKeyToAccount } from "viem/accounts";
65
+
66
+ const rpcUrl = process.env.ARB_SEPOLIA_RPC_URL ?? "https://sepolia-rollup.arbitrum.io/rpc";
67
+
68
+ const publicClient = createPublicClient({
69
+ chain: arbitrumSepolia,
70
+ transport: http(rpcUrl),
71
+ });
72
+
73
+ // Browser wallet (MetaMask, etc.)
74
+ const walletClient = createWalletClient({
75
+ chain: arbitrumSepolia,
76
+ transport: custom(window.ethereum),
77
+ });
78
+
79
+ // Or Node with private key
80
+ // const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
81
+ // const walletClient = createWalletClient({ account, chain: arbitrumSepolia, transport: http(rpcUrl) });
82
+
83
+ const sdk = ObscuraSDK.create({
84
+ chainId: 421614,
85
+ rpcUrl,
86
+ publicClient,
87
+ walletClient,
88
+ supabaseUrl: process.env.OBSCURA_SUPABASE_URL,
89
+ supabaseAnonKey: process.env.OBSCURA_SUPABASE_ANON_KEY,
90
+ });
91
+
92
+ // Shorthand — SDK creates publicClient from rpcUrl when publicClient omitted:
93
+ const sdkMinimal = ObscuraSDK.create({ rpcUrl: "https://sepolia-rollup.arbitrum.io/rpc" });
94
+ ```
95
+
96
+ ## Activity module — Supabase setup
97
+
98
+ The activity feed reads indexed on-chain events from Supabase (`obscura_activity`). **Both** credentials are required:
99
+
100
+ ```typescript
101
+ import { ObscuraSDK, DEFAULT_SUPABASE_URL } from "@obscura-fhe/sdk";
102
+
103
+ const sdk = ObscuraSDK.create({
104
+ supabaseUrl: process.env.OBSCURA_SUPABASE_URL ?? DEFAULT_SUPABASE_URL,
105
+ supabaseAnonKey: process.env.OBSCURA_SUPABASE_ANON_KEY!, // required
106
+ });
107
+
108
+ if (!sdk.activity.isConfigured()) {
109
+ throw new Error("Set OBSCURA_SUPABASE_ANON_KEY for activity queries");
110
+ }
111
+
112
+ const { items, hasMore } = await sdk.activity.listForWallet(wallet, {
113
+ filter: "vote", // all | pay | credit | vote | stream | ...
31
114
  page: 0,
115
+ pageSize: 20,
32
116
  });
117
+ ```
33
118
 
34
- // Notifications
35
- const vapidKey = await sdk.notifications.getVapidPublicKey();
36
- const prefs = await sdk.notifications.getPrefs("0xYourWallet...");
119
+ **Environment variables:**
37
120
 
38
- // On-chain reads
39
- const balanceCtHash = await sdk.pay.getShieldedBalance("0xYourWallet...");
40
- const proposalCount = await sdk.vote.getProposalCount();
121
+ ```bash
122
+ OBSCURA_SUPABASE_URL=https://quoovjkjwgtdqwdofubh.supabase.co # optional this is the default
123
+ OBSCURA_SUPABASE_ANON_KEY=eyJ... # required for activity
124
+ ```
125
+
126
+ Get the anon key from Supabase → Project Settings → API → `anon` `public` key.
127
+
128
+ ## TypeScript setup
129
+
130
+ The SDK ships ESM + CJS with `.d.ts` types. Recommended `tsconfig.json`:
41
131
 
42
- // Transaction builders (return ContractCall — sign with your wallet)
43
- const call = await sdk.pay.buildTransfer(to, amount, encryptedAmount);
44
- const calldata = sdk.encodeCall(call);
132
+ ```json
133
+ {
134
+ "compilerOptions": {
135
+ "target": "ES2022",
136
+ "module": "ESNext",
137
+ "moduleResolution": "bundler",
138
+ "strict": true,
139
+ "skipLibCheck": true,
140
+ "esModuleInterop": true,
141
+ "verbatimModuleSyntax": true
142
+ }
143
+ }
45
144
  ```
46
145
 
47
- ## Modules
146
+ ### `verbatimModuleSyntax`
48
147
 
49
- | Module | Methods | Backend |
50
- |--------|---------|---------|
51
- | `pay` | `getShieldedBalance`, `buildShield`, `buildUnshield`, `buildTransfer` | On-chain (ocUSDC_Pay) |
52
- | `credit` | `getMarketAddress`, `buildSupplyCollateral`, `buildBorrow`, `buildRepay` | On-chain (credit market) |
53
- | `vote` | `getProposalCount`, `getProposal`, `buildCastVote`, `buildDelegate` | On-chain (ObscuraVote) |
54
- | `reputation` | `getSummary` | obscura-api REST |
55
- | `activity` | `listForWallet`, `getEventFilters` | Supabase |
56
- | `notifications` | `getVapidPublicKey`, `getPrefs`, `savePrefs`, `subscribe`, `unsubscribe` | obscura-api REST |
148
+ With `verbatimModuleSyntax: true`, TypeScript requires **type-only imports** for types:
149
+
150
+ ```typescript
151
+ // Correct
152
+ import { ObscuraSDK } from "@obscura-fhe/sdk";
153
+ import type { FheProvider, ReputationSummary, ContractCall } from "@obscura-fhe/sdk";
154
+
155
+ // Wrong TS1363 error under verbatimModuleSyntax
156
+ import { FheProvider, ReputationSummary } from "@obscura-fhe/sdk";
157
+ ```
158
+
159
+ If you cannot use type-only imports, set `"verbatimModuleSyntax": false` or use `"isolatedModules": true` without verbatim (Vite/Next default).
160
+
161
+ ## Module examples
162
+
163
+ See [`examples/`](./examples/) for runnable scripts:
57
164
 
58
- ## Configuration
165
+ | File | Module |
166
+ |------|--------|
167
+ | `examples/reputation.ts` | Reputation summary |
168
+ | `examples/activity.ts` | Activity feed (Supabase) |
169
+ | `examples/notifications.ts` | VAPID + prefs |
170
+ | `examples/pay.ts` | Shielded balance + transfer builder |
171
+ | `examples/credit.ts` | Market address + borrow builder |
172
+ | `examples/vote.ts` | Proposal count + delegate |
173
+ | `examples/basic-usage.ts` | Combined smoke test |
174
+
175
+ Run: `npm run example:basic` or `npx tsx examples/reputation.ts`
176
+
177
+ ## Configuration reference
59
178
 
60
179
  ```typescript
61
180
  ObscuraSDK.create({
62
181
  chainId: 421614, // default: Arbitrum Sepolia
63
- rpcUrl: "https://...", // default: Arbitrum Sepolia RPC
182
+ rpcUrl: "https://...", // default: Arbitrum Sepolia public RPC
64
183
  apiUrl: "https://...", // default: obscura-api production
65
184
  supabaseUrl: "https://...", // default: Obscura Supabase project
66
185
  supabaseAnonKey: "...", // required for activity module
@@ -73,14 +192,14 @@ ObscuraSDK.create({
73
192
 
74
193
  ## FHE (encrypted writes)
75
194
 
76
- Encrypted contract inputs require a host-supplied `FheProvider` (typically wrapping `@cofhe/sdk`):
195
+ Encrypted contract inputs require a host-supplied `FheProvider` (typically wrapping `@fhenixprotocol/cofhe-sdk`):
77
196
 
78
197
  ```typescript
79
198
  import type { FheProvider } from "@obscura-fhe/sdk";
80
199
 
81
200
  const fhe: FheProvider = {
82
201
  async encryptUint64(value, { contractAddress }) {
83
- // wrap @cofhe/sdk encrypt here
202
+ // wrap CoFHE encrypt — user-triggered only
84
203
  return { ctHash, securityZone, utype, signature };
85
204
  },
86
205
  };
@@ -99,11 +218,24 @@ const call = sdk.vote.buildDelegate("0xDelegatee...");
99
218
  const hash = await sdk.sendCall(call, account); // requires walletClient
100
219
  ```
101
220
 
221
+ ## Modules
222
+
223
+ | Module | Methods | Backend |
224
+ |--------|---------|---------|
225
+ | `pay` | `getShieldedBalance`, `buildShield`, `buildUnshield`, `buildTransfer` | On-chain (ocUSDC_Pay) |
226
+ | `credit` | `getMarketAddress`, `buildSupplyCollateral`, `buildBorrow`, `buildRepay` | On-chain (credit market) |
227
+ | `vote` | `getProposalCount`, `getProposal`, `buildCastVote`, `buildDelegate` | On-chain (ObscuraVote) |
228
+ | `reputation` | `getSummary` | obscura-api REST |
229
+ | `activity` | `listForWallet`, `getEventFilters`, `isConfigured` | Supabase |
230
+ | `notifications` | `getVapidPublicKey`, `getPrefs`, `savePrefs`, `subscribe`, `unsubscribe` | obscura-api REST |
231
+
102
232
  ## Defaults (Arbitrum Sepolia)
103
233
 
104
234
  | Setting | Value |
105
235
  |---------|-------|
106
236
  | Chain ID | `421614` |
237
+ | RPC | `https://sepolia-rollup.arbitrum.io/rpc` |
238
+ | Supabase URL | `https://quoovjkjwgtdqwdofubh.supabase.co` |
107
239
  | ocUSDC_Pay | `0xEd46020Df8abe7BB1E096f27d089F4326D223a53` |
108
240
  | Vote | `0xe358776AfdbA95d7c9F040e6ef1f5A021aF91730` |
109
241
  | Credit market | `0x1Ec113297c7F9516A6604aa3b18C180559a6f551` |
@@ -115,7 +247,7 @@ Core: `ObscuraSDK`, `ObscuraSDKConfig`, `ContractCall`, `InEuint64`, `FheProvide
115
247
 
116
248
  Types: `ReputationSummary`, `ActivityItem`, `NotificationPrefs`, `ProposalState`, …
117
249
 
118
- Constants: `DEFAULT_ADDRESSES`, `ARBITRUM_SEPOLIA_CHAIN_ID`, `ACTIVITY_EVENT_FILTERS`
250
+ Constants: `DEFAULT_ADDRESSES`, `DEFAULT_SUPABASE_URL`, `ARBITRUM_SEPOLIA_CHAIN_ID`, `ACTIVITY_EVENT_FILTERS`
119
251
 
120
252
  Utilities: `encodeCall`, `normalizeWallet`, `toContractInEuint64`, `HttpError`
121
253
 
package/dist/index.cjs CHANGED
@@ -222,16 +222,30 @@ var ACTIVITY_EVENT_FILTERS = {
222
222
  var DEFAULT_PAGE_SIZE = 20;
223
223
  var ActivityModule = class {
224
224
  client;
225
+ supabaseUrl;
226
+ supabaseAnonKey;
225
227
  constructor(supabaseUrl, supabaseAnonKey) {
228
+ this.supabaseUrl = supabaseUrl;
229
+ this.supabaseAnonKey = supabaseAnonKey;
226
230
  this.client = supabaseUrl && supabaseAnonKey ? supabaseJs.createClient(supabaseUrl, supabaseAnonKey) : null;
227
231
  }
232
+ /** True when both Supabase URL and anon key were supplied at SDK init. */
233
+ isConfigured() {
234
+ return this.client !== null;
235
+ }
228
236
  getEventFilters() {
229
237
  return ACTIVITY_EVENT_FILTERS;
230
238
  }
231
239
  async listForWallet(wallet, options = {}) {
232
240
  if (!this.client) {
233
241
  throw new Error(
234
- "Supabase not configured. Pass supabaseUrl and supabaseAnonKey to ObscuraSDK.create()."
242
+ [
243
+ "Activity module requires Supabase credentials.",
244
+ `Pass supabaseAnonKey (and optionally supabaseUrl) to ObscuraSDK.create().`,
245
+ `Default URL: ${DEFAULT_SUPABASE_URL}`,
246
+ "Get the anon key from your Supabase project \u2192 Settings \u2192 API \u2192 anon public.",
247
+ "Reputation and notifications work without Supabase; activity does not."
248
+ ].join(" ")
235
249
  );
236
250
  }
237
251
  const normalized = normalizeWallet(wallet);
@@ -333,7 +347,7 @@ var CREDIT_MARKET_ABI = [
333
347
  ];
334
348
  var OBSCURA_VOTE_ABI = [
335
349
  {
336
- name: "proposalCount",
350
+ name: "nextProposalId",
337
351
  type: "function",
338
352
  stateMutability: "view",
339
353
  inputs: [],
@@ -536,11 +550,12 @@ var VoteModule = class {
536
550
  get voteAddress() {
537
551
  return this.deps.addresses.ObscuraVote;
538
552
  }
553
+ /** Returns total proposals created (= public `nextProposalId` on ObscuraVote). */
539
554
  async getProposalCount() {
540
555
  return this.deps.publicClient.readContract({
541
556
  address: this.deps.addresses.ObscuraVote,
542
557
  abi: OBSCURA_VOTE_ABI,
543
- functionName: "proposalCount"
558
+ functionName: "nextProposalId"
544
559
  });
545
560
  }
546
561
  async getProposal(id) {
@@ -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 { 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\r\n constructor(supabaseUrl: string | undefined, supabaseAnonKey: string | undefined) {\r\n this.client =\r\n supabaseUrl && supabaseAnonKey ? createClient(supabaseUrl, supabaseAnonKey) : 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 \"Supabase not configured. Pass supabaseUrl and supabaseAnonKey to ObscuraSDK.create().\",\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: \"proposalCount\",\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 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: \"proposalCount\",\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: \"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"]}
package/dist/index.d.cts CHANGED
@@ -141,7 +141,11 @@ type ActivityEventFilterMap = typeof ACTIVITY_EVENT_FILTERS;
141
141
 
142
142
  declare class ActivityModule {
143
143
  private readonly client;
144
+ readonly supabaseUrl: string | undefined;
145
+ readonly supabaseAnonKey: string | undefined;
144
146
  constructor(supabaseUrl: string | undefined, supabaseAnonKey: string | undefined);
147
+ /** True when both Supabase URL and anon key were supplied at SDK init. */
148
+ isConfigured(): boolean;
145
149
  getEventFilters(): ActivityEventFilterMap;
146
150
  listForWallet(wallet: Address, options?: ActivityListOptions): Promise<ActivityListResult>;
147
151
  }
@@ -216,6 +220,7 @@ declare class VoteModule {
216
220
  private readonly deps;
217
221
  constructor(deps: VoteModuleDeps);
218
222
  get voteAddress(): Address;
223
+ /** Returns total proposals created (= public `nextProposalId` on ObscuraVote). */
219
224
  getProposalCount(): Promise<bigint>;
220
225
  getProposal(id: bigint): Promise<ProposalState>;
221
226
  buildCastVote(proposalId: bigint, optionIndex: number, encryptedOption?: InEuint64): Promise<ContractCall>;
@@ -408,7 +413,7 @@ declare const CREDIT_MARKET_ABI: readonly [{
408
413
  readonly outputs: readonly [];
409
414
  }];
410
415
  declare const OBSCURA_VOTE_ABI: readonly [{
411
- readonly name: "proposalCount";
416
+ readonly name: "nextProposalId";
412
417
  readonly type: "function";
413
418
  readonly stateMutability: "view";
414
419
  readonly inputs: readonly [];
package/dist/index.d.ts CHANGED
@@ -141,7 +141,11 @@ type ActivityEventFilterMap = typeof ACTIVITY_EVENT_FILTERS;
141
141
 
142
142
  declare class ActivityModule {
143
143
  private readonly client;
144
+ readonly supabaseUrl: string | undefined;
145
+ readonly supabaseAnonKey: string | undefined;
144
146
  constructor(supabaseUrl: string | undefined, supabaseAnonKey: string | undefined);
147
+ /** True when both Supabase URL and anon key were supplied at SDK init. */
148
+ isConfigured(): boolean;
145
149
  getEventFilters(): ActivityEventFilterMap;
146
150
  listForWallet(wallet: Address, options?: ActivityListOptions): Promise<ActivityListResult>;
147
151
  }
@@ -216,6 +220,7 @@ declare class VoteModule {
216
220
  private readonly deps;
217
221
  constructor(deps: VoteModuleDeps);
218
222
  get voteAddress(): Address;
223
+ /** Returns total proposals created (= public `nextProposalId` on ObscuraVote). */
219
224
  getProposalCount(): Promise<bigint>;
220
225
  getProposal(id: bigint): Promise<ProposalState>;
221
226
  buildCastVote(proposalId: bigint, optionIndex: number, encryptedOption?: InEuint64): Promise<ContractCall>;
@@ -408,7 +413,7 @@ declare const CREDIT_MARKET_ABI: readonly [{
408
413
  readonly outputs: readonly [];
409
414
  }];
410
415
  declare const OBSCURA_VOTE_ABI: readonly [{
411
- readonly name: "proposalCount";
416
+ readonly name: "nextProposalId";
412
417
  readonly type: "function";
413
418
  readonly stateMutability: "view";
414
419
  readonly inputs: readonly [];
package/dist/index.js CHANGED
@@ -220,16 +220,30 @@ var ACTIVITY_EVENT_FILTERS = {
220
220
  var DEFAULT_PAGE_SIZE = 20;
221
221
  var ActivityModule = class {
222
222
  client;
223
+ supabaseUrl;
224
+ supabaseAnonKey;
223
225
  constructor(supabaseUrl, supabaseAnonKey) {
226
+ this.supabaseUrl = supabaseUrl;
227
+ this.supabaseAnonKey = supabaseAnonKey;
224
228
  this.client = supabaseUrl && supabaseAnonKey ? createClient(supabaseUrl, supabaseAnonKey) : null;
225
229
  }
230
+ /** True when both Supabase URL and anon key were supplied at SDK init. */
231
+ isConfigured() {
232
+ return this.client !== null;
233
+ }
226
234
  getEventFilters() {
227
235
  return ACTIVITY_EVENT_FILTERS;
228
236
  }
229
237
  async listForWallet(wallet, options = {}) {
230
238
  if (!this.client) {
231
239
  throw new Error(
232
- "Supabase not configured. Pass supabaseUrl and supabaseAnonKey to ObscuraSDK.create()."
240
+ [
241
+ "Activity module requires Supabase credentials.",
242
+ `Pass supabaseAnonKey (and optionally supabaseUrl) to ObscuraSDK.create().`,
243
+ `Default URL: ${DEFAULT_SUPABASE_URL}`,
244
+ "Get the anon key from your Supabase project \u2192 Settings \u2192 API \u2192 anon public.",
245
+ "Reputation and notifications work without Supabase; activity does not."
246
+ ].join(" ")
233
247
  );
234
248
  }
235
249
  const normalized = normalizeWallet(wallet);
@@ -331,7 +345,7 @@ var CREDIT_MARKET_ABI = [
331
345
  ];
332
346
  var OBSCURA_VOTE_ABI = [
333
347
  {
334
- name: "proposalCount",
348
+ name: "nextProposalId",
335
349
  type: "function",
336
350
  stateMutability: "view",
337
351
  inputs: [],
@@ -534,11 +548,12 @@ var VoteModule = class {
534
548
  get voteAddress() {
535
549
  return this.deps.addresses.ObscuraVote;
536
550
  }
551
+ /** Returns total proposals created (= public `nextProposalId` on ObscuraVote). */
537
552
  async getProposalCount() {
538
553
  return this.deps.publicClient.readContract({
539
554
  address: this.deps.addresses.ObscuraVote,
540
555
  abi: OBSCURA_VOTE_ABI,
541
- functionName: "proposalCount"
556
+ functionName: "nextProposalId"
542
557
  });
543
558
  }
544
559
  async getProposal(id) {
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 { 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\r\n constructor(supabaseUrl: string | undefined, supabaseAnonKey: string | undefined) {\r\n this.client =\r\n supabaseUrl && supabaseAnonKey ? createClient(supabaseUrl, supabaseAnonKey) : 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 \"Supabase not configured. Pass supabaseUrl and supabaseAnonKey to ObscuraSDK.create().\",\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: \"proposalCount\",\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 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: \"proposalCount\",\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: \"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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@obscura-fhe/sdk",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Official TypeScript SDK for Obscura Pay, Credit, and Vote on Arbitrum Sepolia",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -66,5 +66,10 @@
66
66
  "bugs": {
67
67
  "url": "https://github.com/mohamedwael201193/OBSCURA/issues"
68
68
  },
69
- "homepage": "https://github.com/mohamedwael201193/OBSCURA/tree/main/packages/sdk#readme"
69
+ "homepage": "https://github.com/mohamedwael201193/OBSCURA/tree/main/packages/sdk#readme",
70
+ "directories": {
71
+ "example": "examples",
72
+ "test": "tests"
73
+ },
74
+ "author": ""
70
75
  }