@magicblock-console/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +98 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +96 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +94 -0
- package/dist/config.js.map +1 -0
- package/dist/connection.d.ts +42 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +82 -0
- package/dist/connection.js.map +1 -0
- package/dist/cranks.d.ts +14 -0
- package/dist/cranks.d.ts.map +1 -0
- package/dist/cranks.js +128 -0
- package/dist/cranks.js.map +1 -0
- package/dist/er.d.ts +17 -0
- package/dist/er.d.ts.map +1 -0
- package/dist/er.js +314 -0
- package/dist/er.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/monitor.d.ts +21 -0
- package/dist/monitor.d.ts.map +1 -0
- package/dist/monitor.js +170 -0
- package/dist/monitor.js.map +1 -0
- package/dist/oracle.d.ts +13 -0
- package/dist/oracle.d.ts.map +1 -0
- package/dist/oracle.js +215 -0
- package/dist/oracle.js.map +1 -0
- package/dist/privacy.d.ts +14 -0
- package/dist/privacy.d.ts.map +1 -0
- package/dist/privacy.js +177 -0
- package/dist/privacy.js.map +1 -0
- package/dist/projects.d.ts +9 -0
- package/dist/projects.d.ts.map +1 -0
- package/dist/projects.js +94 -0
- package/dist/projects.js.map +1 -0
- package/dist/storage.d.ts +37 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +150 -0
- package/dist/storage.js.map +1 -0
- package/dist/types.d.ts +180 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +18 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +43 -0
- package/dist/utils.js.map +1 -0
- package/dist/vrf.d.ts +42 -0
- package/dist/vrf.d.ts.map +1 -0
- package/dist/vrf.js +117 -0
- package/dist/vrf.js.map +1 -0
- package/package.json +30 -0
package/dist/er.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Storage } from './storage.js';
|
|
2
|
+
import type { Network, Region } from './types.js';
|
|
3
|
+
import type { ErNamespace } from './client.js';
|
|
4
|
+
import type { BlockchainConnection } from './connection.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create a fully-functional `ErNamespace` backed by the given Storage.
|
|
7
|
+
*
|
|
8
|
+
* When a `getConnection` callback is provided and returns a valid
|
|
9
|
+
* `BlockchainConnection`, real on-chain transactions are built and sent
|
|
10
|
+
* via the MagicBlock SDK. Otherwise, operations fall back to simulated
|
|
11
|
+
* behavior with locally-generated signatures.
|
|
12
|
+
*
|
|
13
|
+
* Storage metadata is maintained in both modes so that monitor/accounts
|
|
14
|
+
* remain consistent regardless of connection state.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createErNamespace(storage: Storage, network: Network, resolveProjectRegion: (project: string) => Promise<Region>, getConnection?: () => BlockchainConnection | undefined): ErNamespace;
|
|
17
|
+
//# sourceMappingURL=er.d.ts.map
|
package/dist/er.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"er.d.ts","sourceRoot":"","sources":["../src/er.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAOV,OAAO,EACP,MAAM,EAGP,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAqC5D;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EAC1D,aAAa,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,GACrD,WAAW,CA4Zb"}
|
package/dist/er.js
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { VALIDATORS, REGIONS, PROGRAM_IDS } from './config.js';
|
|
2
|
+
import { generateSignature } from './utils.js';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Key helpers
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
const DELEGATION_PREFIX = 'delegation:';
|
|
7
|
+
const ACCOUNT_INDEX_PREFIX = 'account-index:';
|
|
8
|
+
function delegationKey(account) {
|
|
9
|
+
return `${DELEGATION_PREFIX}${account}`;
|
|
10
|
+
}
|
|
11
|
+
/** Account index: stores a JSON array of delegated account addresses per project. */
|
|
12
|
+
function accountIndexKey(project) {
|
|
13
|
+
return `${ACCOUNT_INDEX_PREFIX}${project}`;
|
|
14
|
+
}
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Factory
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Create a fully-functional `ErNamespace` backed by the given Storage.
|
|
20
|
+
*
|
|
21
|
+
* When a `getConnection` callback is provided and returns a valid
|
|
22
|
+
* `BlockchainConnection`, real on-chain transactions are built and sent
|
|
23
|
+
* via the MagicBlock SDK. Otherwise, operations fall back to simulated
|
|
24
|
+
* behavior with locally-generated signatures.
|
|
25
|
+
*
|
|
26
|
+
* Storage metadata is maintained in both modes so that monitor/accounts
|
|
27
|
+
* remain consistent regardless of connection state.
|
|
28
|
+
*/
|
|
29
|
+
export function createErNamespace(storage, network, resolveProjectRegion, getConnection) {
|
|
30
|
+
// Helper: read the account index for a project
|
|
31
|
+
async function getAccountIndex(project) {
|
|
32
|
+
const data = await storage.get(accountIndexKey(project));
|
|
33
|
+
return data ? JSON.parse(data) : [];
|
|
34
|
+
}
|
|
35
|
+
// Helper: write the account index for a project
|
|
36
|
+
async function setAccountIndex(project, accounts) {
|
|
37
|
+
await storage.set(accountIndexKey(project), JSON.stringify(accounts));
|
|
38
|
+
}
|
|
39
|
+
// Helper: read and validate a delegation record
|
|
40
|
+
async function getDelegationRecord(account, project) {
|
|
41
|
+
const data = await storage.get(delegationKey(account));
|
|
42
|
+
if (!data) {
|
|
43
|
+
throw new Error(`Account ${account} is not delegated`);
|
|
44
|
+
}
|
|
45
|
+
const record = JSON.parse(data);
|
|
46
|
+
if (project && record.project !== project) {
|
|
47
|
+
throw new Error(`Account ${account} is delegated to project "${record.project}", not "${project}"`);
|
|
48
|
+
}
|
|
49
|
+
return record;
|
|
50
|
+
}
|
|
51
|
+
// Helper: persist delegation metadata in storage
|
|
52
|
+
async function persistDelegation(account, project, validator, validatorPubkey, now) {
|
|
53
|
+
const record = {
|
|
54
|
+
account,
|
|
55
|
+
project,
|
|
56
|
+
validator,
|
|
57
|
+
validatorPubkey,
|
|
58
|
+
delegatedAt: now.toISOString(),
|
|
59
|
+
};
|
|
60
|
+
await storage.set(delegationKey(account), JSON.stringify(record));
|
|
61
|
+
const index = await getAccountIndex(project);
|
|
62
|
+
if (!index.includes(account)) {
|
|
63
|
+
index.push(account);
|
|
64
|
+
await setAccountIndex(project, index);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Helper: remove delegation metadata from storage
|
|
68
|
+
async function removeDelegation(account, project) {
|
|
69
|
+
await storage.delete(delegationKey(account));
|
|
70
|
+
const index = await getAccountIndex(project);
|
|
71
|
+
const filtered = index.filter((a) => a !== account);
|
|
72
|
+
await setAccountIndex(project, filtered);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
async delegate(options) {
|
|
76
|
+
// Prevent double-delegation
|
|
77
|
+
const existing = await storage.get(delegationKey(options.account));
|
|
78
|
+
if (existing) {
|
|
79
|
+
throw new Error(`Account ${options.account} is already delegated`);
|
|
80
|
+
}
|
|
81
|
+
// Resolve project region to determine target validator
|
|
82
|
+
const region = await resolveProjectRegion(options.project);
|
|
83
|
+
const validatorPubkey = VALIDATORS[network][region];
|
|
84
|
+
const validator = REGIONS[region][network].http;
|
|
85
|
+
const conn = getConnection?.();
|
|
86
|
+
// When a signer is available, ownerProgram is required for real delegation
|
|
87
|
+
if (conn?.signer && !options.ownerProgram) {
|
|
88
|
+
throw new Error('ownerProgram is required for real blockchain delegation. ' +
|
|
89
|
+
'Pass --owner-program <pubkey> or set ownerProgram in options.');
|
|
90
|
+
}
|
|
91
|
+
// Real blockchain path
|
|
92
|
+
if (conn?.signer && options.ownerProgram) {
|
|
93
|
+
try {
|
|
94
|
+
const { PublicKey, Transaction } = await import('@solana/web3.js');
|
|
95
|
+
const { createDelegateInstruction } = await import('@magicblock-labs/ephemeral-rollups-sdk');
|
|
96
|
+
const accountPk = new PublicKey(options.account);
|
|
97
|
+
const ownerProgramPk = new PublicKey(options.ownerProgram);
|
|
98
|
+
const validatorPk = new PublicKey(validatorPubkey);
|
|
99
|
+
const ix = createDelegateInstruction({
|
|
100
|
+
payer: conn.signer.publicKey,
|
|
101
|
+
delegatedAccount: accountPk,
|
|
102
|
+
ownerProgram: ownerProgramPk,
|
|
103
|
+
validator: validatorPk,
|
|
104
|
+
}, { commitFrequencyMs: 30_000, validator: validatorPk });
|
|
105
|
+
const tx = new Transaction().add(ix);
|
|
106
|
+
tx.feePayer = conn.signer.publicKey;
|
|
107
|
+
// Delegation is a base chain operation
|
|
108
|
+
tx.recentBlockhash = (await conn.baseConnection.getLatestBlockhash()).blockhash;
|
|
109
|
+
const signed = await conn.signer.signTransaction(tx);
|
|
110
|
+
const signature = await conn.baseConnection.sendRawTransaction(signed.serialize());
|
|
111
|
+
const now = new Date();
|
|
112
|
+
await persistDelegation(options.account, options.project, validator, validatorPubkey, now);
|
|
113
|
+
return { signature, validator, delegatedAt: now, simulated: false };
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
// Fall through to simulated on network error
|
|
117
|
+
console.warn(`[mb-console] Real delegation failed, using simulated mode: ${err instanceof Error ? err.message : String(err)}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Simulated fallback
|
|
121
|
+
const now = new Date();
|
|
122
|
+
await persistDelegation(options.account, options.project, validator, validatorPubkey, now);
|
|
123
|
+
return {
|
|
124
|
+
signature: generateSignature(),
|
|
125
|
+
validator,
|
|
126
|
+
delegatedAt: now,
|
|
127
|
+
simulated: true,
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
async undelegate(options) {
|
|
131
|
+
const record = await getDelegationRecord(options.account, options.project);
|
|
132
|
+
const conn = getConnection?.();
|
|
133
|
+
// Real blockchain: commit + undelegate
|
|
134
|
+
if (conn?.signer) {
|
|
135
|
+
try {
|
|
136
|
+
const { PublicKey, Transaction } = await import('@solana/web3.js');
|
|
137
|
+
const { createCommitAndUndelegateInstruction } = await import('@magicblock-labs/ephemeral-rollups-sdk');
|
|
138
|
+
const accountPk = new PublicKey(options.account);
|
|
139
|
+
// Determine which ER connection to use for the commit+undelegate
|
|
140
|
+
const region = await resolveProjectRegion(options.project);
|
|
141
|
+
const erConn = conn.erConnections[region] ?? conn.routerConnection;
|
|
142
|
+
const ix = createCommitAndUndelegateInstruction(conn.signer.publicKey, [accountPk]);
|
|
143
|
+
const tx = new Transaction().add(ix);
|
|
144
|
+
tx.feePayer = conn.signer.publicKey;
|
|
145
|
+
tx.recentBlockhash = (await erConn.getLatestBlockhash()).blockhash;
|
|
146
|
+
const signed = await conn.signer.signTransaction(tx);
|
|
147
|
+
const signature = await erConn.sendRawTransaction(signed.serialize());
|
|
148
|
+
await removeDelegation(options.account, options.project);
|
|
149
|
+
return {
|
|
150
|
+
signature,
|
|
151
|
+
validator: record.validator,
|
|
152
|
+
delegatedAt: new Date(record.delegatedAt),
|
|
153
|
+
simulated: false,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
console.warn(`[mb-console] Real undelegation failed, using simulated mode: ${err instanceof Error ? err.message : String(err)}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Simulated fallback
|
|
161
|
+
await removeDelegation(options.account, options.project);
|
|
162
|
+
return {
|
|
163
|
+
signature: generateSignature(),
|
|
164
|
+
validator: record.validator,
|
|
165
|
+
delegatedAt: new Date(record.delegatedAt),
|
|
166
|
+
simulated: true,
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
async commit(options) {
|
|
170
|
+
// Validate the account is delegated to this project
|
|
171
|
+
await getDelegationRecord(options.account, options.project);
|
|
172
|
+
const conn = getConnection?.();
|
|
173
|
+
// Real blockchain: schedule commit on the ER
|
|
174
|
+
if (conn?.signer) {
|
|
175
|
+
try {
|
|
176
|
+
const { PublicKey, Transaction } = await import('@solana/web3.js');
|
|
177
|
+
const { createCommitInstruction } = await import('@magicblock-labs/ephemeral-rollups-sdk');
|
|
178
|
+
const accountPk = new PublicKey(options.account);
|
|
179
|
+
const region = await resolveProjectRegion(options.project);
|
|
180
|
+
const erConn = conn.erConnections[region] ?? conn.routerConnection;
|
|
181
|
+
const ix = createCommitInstruction(conn.signer.publicKey, [accountPk]);
|
|
182
|
+
const tx = new Transaction().add(ix);
|
|
183
|
+
tx.feePayer = conn.signer.publicKey;
|
|
184
|
+
tx.recentBlockhash = (await erConn.getLatestBlockhash()).blockhash;
|
|
185
|
+
const signed = await conn.signer.signTransaction(tx);
|
|
186
|
+
const signature = await erConn.sendRawTransaction(signed.serialize());
|
|
187
|
+
const slot = (await erConn.getSlot()) ?? Math.floor(Date.now() / 400);
|
|
188
|
+
return { signature, slot, simulated: false };
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
console.warn(`[mb-console] Real commit failed, using simulated mode: ${err instanceof Error ? err.message : String(err)}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Simulated fallback
|
|
195
|
+
return {
|
|
196
|
+
signature: generateSignature(),
|
|
197
|
+
slot: Math.floor(Date.now() / 400),
|
|
198
|
+
simulated: true,
|
|
199
|
+
};
|
|
200
|
+
},
|
|
201
|
+
async status(account) {
|
|
202
|
+
const conn = getConnection?.();
|
|
203
|
+
// Real blockchain: check if the account is owned by the Delegation Program
|
|
204
|
+
if (conn) {
|
|
205
|
+
try {
|
|
206
|
+
const { PublicKey } = await import('@solana/web3.js');
|
|
207
|
+
const accountPk = new PublicKey(account);
|
|
208
|
+
const accountInfo = await conn.baseConnection.getAccountInfo(accountPk);
|
|
209
|
+
if (accountInfo) {
|
|
210
|
+
const delegationProgramId = new PublicKey(PROGRAM_IDS.delegation);
|
|
211
|
+
if (accountInfo.owner.equals(delegationProgramId)) {
|
|
212
|
+
// Account is delegated — enrich with local storage data
|
|
213
|
+
const data = await storage.get(delegationKey(account));
|
|
214
|
+
if (data) {
|
|
215
|
+
const record = JSON.parse(data);
|
|
216
|
+
return {
|
|
217
|
+
isDelegated: true,
|
|
218
|
+
validator: record.validator,
|
|
219
|
+
validatorPubkey: record.validatorPubkey,
|
|
220
|
+
delegatedAt: new Date(record.delegatedAt),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return { isDelegated: true };
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return { isDelegated: false };
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
console.warn(`[mb-console] Real status check failed, using local storage: ${err instanceof Error ? err.message : String(err)}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Simulated fallback: check local storage
|
|
233
|
+
const data = await storage.get(delegationKey(account));
|
|
234
|
+
if (!data) {
|
|
235
|
+
return { isDelegated: false };
|
|
236
|
+
}
|
|
237
|
+
const record = JSON.parse(data);
|
|
238
|
+
return {
|
|
239
|
+
isDelegated: true,
|
|
240
|
+
validator: record.validator,
|
|
241
|
+
validatorPubkey: record.validatorPubkey,
|
|
242
|
+
delegatedAt: new Date(record.delegatedAt),
|
|
243
|
+
};
|
|
244
|
+
},
|
|
245
|
+
async accounts(project) {
|
|
246
|
+
const index = await getAccountIndex(project);
|
|
247
|
+
const result = [];
|
|
248
|
+
for (const account of index) {
|
|
249
|
+
const data = await storage.get(delegationKey(account));
|
|
250
|
+
if (data) {
|
|
251
|
+
const record = JSON.parse(data);
|
|
252
|
+
result.push({
|
|
253
|
+
address: record.account,
|
|
254
|
+
validator: record.validator,
|
|
255
|
+
delegatedAt: new Date(record.delegatedAt),
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return result;
|
|
260
|
+
},
|
|
261
|
+
async diff(account) {
|
|
262
|
+
const conn = getConnection?.();
|
|
263
|
+
// Real blockchain: compare base layer vs ER account data
|
|
264
|
+
if (conn) {
|
|
265
|
+
try {
|
|
266
|
+
const { PublicKey } = await import('@solana/web3.js');
|
|
267
|
+
// Check local storage for delegation record to know which ER to query
|
|
268
|
+
const data = await storage.get(delegationKey(account));
|
|
269
|
+
const accountPk = new PublicKey(account);
|
|
270
|
+
const baseInfo = await conn.baseConnection.getAccountInfo(accountPk);
|
|
271
|
+
const baseData = baseInfo?.data
|
|
272
|
+
? Buffer.from(baseInfo.data).toString('base64')
|
|
273
|
+
: '<not found>';
|
|
274
|
+
let erData = '<not delegated>';
|
|
275
|
+
let erLamports;
|
|
276
|
+
if (data) {
|
|
277
|
+
const record = JSON.parse(data);
|
|
278
|
+
// Find the matching ER connection
|
|
279
|
+
const regionKey = Object.entries(REGIONS).find(([, config]) => config[network].http === record.validator)?.[0];
|
|
280
|
+
const erConn = regionKey
|
|
281
|
+
? conn.erConnections[regionKey]
|
|
282
|
+
: conn.routerConnection;
|
|
283
|
+
const erInfo = await erConn.getAccountInfo(accountPk);
|
|
284
|
+
erData = erInfo?.data
|
|
285
|
+
? Buffer.from(erInfo.data).toString('base64')
|
|
286
|
+
: '<not found on ER>';
|
|
287
|
+
erLamports = erInfo?.lamports;
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
account,
|
|
291
|
+
baseLayerData: baseData,
|
|
292
|
+
erData,
|
|
293
|
+
isDifferent: baseData !== erData,
|
|
294
|
+
baseLayerLamports: baseInfo?.lamports,
|
|
295
|
+
erLamports,
|
|
296
|
+
owner: baseInfo?.owner?.toBase58(),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
console.warn(`[mb-console] Real diff failed, using simulated mode: ${err instanceof Error ? err.message : String(err)}`);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Simulated fallback: validate delegation exists in local storage
|
|
304
|
+
await getDelegationRecord(account);
|
|
305
|
+
return {
|
|
306
|
+
account,
|
|
307
|
+
baseLayerData: '<base layer data>',
|
|
308
|
+
erData: '<ephemeral rollup data>',
|
|
309
|
+
isDifferent: true,
|
|
310
|
+
};
|
|
311
|
+
},
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=er.js.map
|
package/dist/er.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"er.js","sourceRoot":"","sources":["../src/er.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const VERSION = "0.1.0";
|
|
2
|
+
export { createClient, ConsoleClient } from './client.js';
|
|
3
|
+
export type { ProjectsNamespace, ErNamespace, VrfNamespace, PrivacyNamespace, CranksNamespace, OracleNamespace, MonitorNamespace, NamespaceOverrides, } from './client.js';
|
|
4
|
+
export * from './types.js';
|
|
5
|
+
export * from './config.js';
|
|
6
|
+
export { MemoryStorage, FileStorage, BrowserStorage } from './storage.js';
|
|
7
|
+
export type { Storage } from './storage.js';
|
|
8
|
+
export type { BlockchainConnection, SolanaSignerAdapter, } from './connection.js';
|
|
9
|
+
export { createProjectsNamespace } from './projects.js';
|
|
10
|
+
export { createErNamespace } from './er.js';
|
|
11
|
+
export { createVrfNamespace, vrf } from './vrf.js';
|
|
12
|
+
export { createPrivacyNamespace } from './privacy.js';
|
|
13
|
+
export { createCranksNamespace } from './cranks.js';
|
|
14
|
+
export { createOracleNamespace } from './oracle.js';
|
|
15
|
+
export { createMonitorNamespace, appendLog } from './monitor.js';
|
|
16
|
+
export { generateSignature, generateBase58, isValidPubkey, assertPubkey } from './utils.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,YAAY,EACV,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const VERSION = '0.1.0';
|
|
2
|
+
export { createClient, ConsoleClient } from './client.js';
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
export * from './config.js';
|
|
5
|
+
export { MemoryStorage, FileStorage, BrowserStorage } from './storage.js';
|
|
6
|
+
export { createProjectsNamespace } from './projects.js';
|
|
7
|
+
export { createErNamespace } from './er.js';
|
|
8
|
+
export { createVrfNamespace, vrf } from './vrf.js';
|
|
9
|
+
export { createPrivacyNamespace } from './privacy.js';
|
|
10
|
+
export { createCranksNamespace } from './cranks.js';
|
|
11
|
+
export { createOracleNamespace } from './oracle.js';
|
|
12
|
+
export { createMonitorNamespace, appendLog } from './monitor.js';
|
|
13
|
+
export { generateSignature, generateBase58, isValidPubkey, assertPubkey } from './utils.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAY1D,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAW1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Storage } from './storage.js';
|
|
2
|
+
import type { LogEntry, Network } from './types.js';
|
|
3
|
+
import type { MonitorNamespace } from './client.js';
|
|
4
|
+
/**
|
|
5
|
+
* Append a log entry for a project.
|
|
6
|
+
*
|
|
7
|
+
* Keeps at most {@link MAX_LOG_ENTRIES} entries (oldest are pruned).
|
|
8
|
+
* This utility is exported so other namespaces can record events.
|
|
9
|
+
*/
|
|
10
|
+
export declare function appendLog(storage: Storage, project: string, entry: Omit<LogEntry, 'timestamp'>): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Create a fully-functional `MonitorNamespace` backed by the given Storage.
|
|
13
|
+
*
|
|
14
|
+
* The monitor aggregates data that other namespaces (projects, er) have
|
|
15
|
+
* persisted: project records, delegation indexes, and log entries.
|
|
16
|
+
*
|
|
17
|
+
* NOTE: Cost calculations and uptime are simulated for hackathon purposes.
|
|
18
|
+
* The structure is ready for real telemetry data to be plugged in.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createMonitorNamespace(storage: Storage, _network: Network): MonitorNamespace;
|
|
21
|
+
//# sourceMappingURL=monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAGV,QAAQ,EACR,OAAO,EAGR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAuEpD;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAoBf;AAMD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,GAChB,gBAAgB,CAsHlB"}
|
package/dist/monitor.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Key helpers
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
const PROJECT_PREFIX = 'project:';
|
|
5
|
+
const ACCOUNT_INDEX_PREFIX = 'account-index:';
|
|
6
|
+
const DELEGATION_PREFIX = 'delegation:';
|
|
7
|
+
const LOGS_PREFIX = 'logs:';
|
|
8
|
+
const MAX_LOG_ENTRIES = 1000;
|
|
9
|
+
const DEFAULT_LOG_LIMIT = 50;
|
|
10
|
+
function projectKey(name) {
|
|
11
|
+
return `${PROJECT_PREFIX}${name}`;
|
|
12
|
+
}
|
|
13
|
+
function accountIndexKey(project) {
|
|
14
|
+
return `${ACCOUNT_INDEX_PREFIX}${project}`;
|
|
15
|
+
}
|
|
16
|
+
function delegationKey(account) {
|
|
17
|
+
return `${DELEGATION_PREFIX}${account}`;
|
|
18
|
+
}
|
|
19
|
+
function logsKey(project) {
|
|
20
|
+
return `${LOGS_PREFIX}${project}`;
|
|
21
|
+
}
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Serialization helpers
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
function deserializeProject(json) {
|
|
26
|
+
const raw = JSON.parse(json);
|
|
27
|
+
return { ...raw, createdAt: new Date(raw.createdAt) };
|
|
28
|
+
}
|
|
29
|
+
function deserializeLogEntry(raw) {
|
|
30
|
+
return {
|
|
31
|
+
timestamp: new Date(raw.timestamp),
|
|
32
|
+
type: raw.type,
|
|
33
|
+
message: raw.message,
|
|
34
|
+
...(raw.data !== undefined ? { data: raw.data } : {}),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Log append utility
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
/**
|
|
41
|
+
* Append a log entry for a project.
|
|
42
|
+
*
|
|
43
|
+
* Keeps at most {@link MAX_LOG_ENTRIES} entries (oldest are pruned).
|
|
44
|
+
* This utility is exported so other namespaces can record events.
|
|
45
|
+
*/
|
|
46
|
+
export async function appendLog(storage, project, entry) {
|
|
47
|
+
const key = logsKey(project);
|
|
48
|
+
const data = await storage.get(key);
|
|
49
|
+
const logs = data
|
|
50
|
+
? JSON.parse(data)
|
|
51
|
+
: [];
|
|
52
|
+
logs.push({
|
|
53
|
+
timestamp: new Date().toISOString(),
|
|
54
|
+
type: entry.type,
|
|
55
|
+
message: entry.message,
|
|
56
|
+
...(entry.data !== undefined ? { data: entry.data } : {}),
|
|
57
|
+
});
|
|
58
|
+
// Prune oldest entries when exceeding the cap
|
|
59
|
+
if (logs.length > MAX_LOG_ENTRIES) {
|
|
60
|
+
logs.splice(0, logs.length - MAX_LOG_ENTRIES);
|
|
61
|
+
}
|
|
62
|
+
await storage.set(key, JSON.stringify(logs));
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Factory
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/**
|
|
68
|
+
* Create a fully-functional `MonitorNamespace` backed by the given Storage.
|
|
69
|
+
*
|
|
70
|
+
* The monitor aggregates data that other namespaces (projects, er) have
|
|
71
|
+
* persisted: project records, delegation indexes, and log entries.
|
|
72
|
+
*
|
|
73
|
+
* NOTE: Cost calculations and uptime are simulated for hackathon purposes.
|
|
74
|
+
* The structure is ready for real telemetry data to be plugged in.
|
|
75
|
+
*/
|
|
76
|
+
export function createMonitorNamespace(storage, _network) {
|
|
77
|
+
// -----------------------------------------------------------------------
|
|
78
|
+
// Shared helpers
|
|
79
|
+
// -----------------------------------------------------------------------
|
|
80
|
+
/** Read and validate that a project exists, returning its data. */
|
|
81
|
+
async function getProject(name) {
|
|
82
|
+
const data = await storage.get(projectKey(name));
|
|
83
|
+
if (!data) {
|
|
84
|
+
throw new Error(`Project "${name}" not found`);
|
|
85
|
+
}
|
|
86
|
+
return deserializeProject(data);
|
|
87
|
+
}
|
|
88
|
+
/** Read the account index for a project (may be empty). */
|
|
89
|
+
async function getAccountIndex(project) {
|
|
90
|
+
const data = await storage.get(accountIndexKey(project));
|
|
91
|
+
return data ? JSON.parse(data) : [];
|
|
92
|
+
}
|
|
93
|
+
/** Resolve delegation records for all indexed accounts. */
|
|
94
|
+
async function getDelegatedAccounts(project) {
|
|
95
|
+
const index = await getAccountIndex(project);
|
|
96
|
+
const accounts = [];
|
|
97
|
+
for (const account of index) {
|
|
98
|
+
const data = await storage.get(delegationKey(account));
|
|
99
|
+
if (data) {
|
|
100
|
+
const record = JSON.parse(data);
|
|
101
|
+
accounts.push({
|
|
102
|
+
address: record.account,
|
|
103
|
+
validator: record.validator,
|
|
104
|
+
delegatedAt: new Date(record.delegatedAt),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return accounts;
|
|
109
|
+
}
|
|
110
|
+
/** Read all log entries for a project (already serialized). */
|
|
111
|
+
async function readLogs(project) {
|
|
112
|
+
const data = await storage.get(logsKey(project));
|
|
113
|
+
return data ? JSON.parse(data) : [];
|
|
114
|
+
}
|
|
115
|
+
// -----------------------------------------------------------------------
|
|
116
|
+
// Namespace methods
|
|
117
|
+
// -----------------------------------------------------------------------
|
|
118
|
+
return {
|
|
119
|
+
async status(project) {
|
|
120
|
+
const projectData = await getProject(project);
|
|
121
|
+
const accounts = await getDelegatedAccounts(project);
|
|
122
|
+
const logs = await readLogs(project);
|
|
123
|
+
// Count transaction-type log entries for the transaction counter
|
|
124
|
+
const transactionCount = logs.filter((l) => l.type === 'transaction' || l.type === 'delegation' || l.type === 'commit').length || logs.length;
|
|
125
|
+
return {
|
|
126
|
+
project: projectData.name,
|
|
127
|
+
region: projectData.region,
|
|
128
|
+
features: projectData.features,
|
|
129
|
+
accounts,
|
|
130
|
+
uptime: 99.9, // simulated
|
|
131
|
+
transactionCount,
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
async costs(project, period) {
|
|
135
|
+
// Validate project exists
|
|
136
|
+
await getProject(project);
|
|
137
|
+
const accounts = await getDelegatedAccounts(project);
|
|
138
|
+
const logs = await readLogs(project);
|
|
139
|
+
// Count logged events by type for cost calculation
|
|
140
|
+
const txCount = logs.filter((l) => l.type === 'transaction').length ||
|
|
141
|
+
accounts.length * 12;
|
|
142
|
+
const commitCount = logs.filter((l) => l.type === 'commit').length ||
|
|
143
|
+
accounts.length * 3;
|
|
144
|
+
const sessionCount = logs.filter((l) => l.type === 'session').length ||
|
|
145
|
+
Math.max(accounts.length, 1);
|
|
146
|
+
const txCost = txCount * 0.000005;
|
|
147
|
+
const commitCost = commitCount * 0.0001;
|
|
148
|
+
const sessionCost = sessionCount * 0.0003;
|
|
149
|
+
return {
|
|
150
|
+
transactions: { count: txCount, cost: txCost },
|
|
151
|
+
commits: { count: commitCount, cost: commitCost },
|
|
152
|
+
sessions: { count: sessionCount, cost: sessionCost },
|
|
153
|
+
total: txCost + commitCost + sessionCost,
|
|
154
|
+
period: period ?? '30d',
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
async logs(project, limit) {
|
|
158
|
+
// Validate project exists
|
|
159
|
+
await getProject(project);
|
|
160
|
+
const logs = await readLogs(project);
|
|
161
|
+
const effectiveLimit = limit ?? DEFAULT_LOG_LIMIT;
|
|
162
|
+
// Return last N entries, newest first
|
|
163
|
+
return logs
|
|
164
|
+
.slice(-effectiveLimit)
|
|
165
|
+
.reverse()
|
|
166
|
+
.map(deserializeLogEntry);
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../src/monitor.ts"],"names":[],"mappings":"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"}
|
package/dist/oracle.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Storage } from './storage.js';
|
|
2
|
+
import type { Network } from './types.js';
|
|
3
|
+
import type { OracleNamespace } from './client.js';
|
|
4
|
+
import type { BlockchainConnection } from './connection.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create a fully-functional `OracleNamespace` backed by the given Storage.
|
|
7
|
+
*
|
|
8
|
+
* When a `getConnection` callback returns a valid `BlockchainConnection`,
|
|
9
|
+
* attempts to read real Pyth Lazer price data from on-chain PDAs.
|
|
10
|
+
* Falls back to simulated prices on any error or missing connection.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createOracleNamespace(storage: Storage, _network: Network, getConnection?: () => BlockchainConnection | undefined): OracleNamespace;
|
|
13
|
+
//# sourceMappingURL=oracle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EACV,OAAO,EAIR,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAyI5D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,EACjB,aAAa,CAAC,EAAE,MAAM,oBAAoB,GAAG,SAAS,GACrD,eAAe,CA2GjB"}
|