@magicblock-labs/ephemeral-rollups-kit 0.3.6

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.
Files changed (58) hide show
  1. package/README.md +18 -0
  2. package/lib/__test__/connection.test.d.ts +2 -0
  3. package/lib/__test__/connection.test.d.ts.map +1 -0
  4. package/lib/__test__/connection.test.js +205 -0
  5. package/lib/__test__/connection.test.js.map +1 -0
  6. package/lib/confirmation.d.ts +19 -0
  7. package/lib/confirmation.d.ts.map +1 -0
  8. package/lib/confirmation.js +100 -0
  9. package/lib/confirmation.js.map +1 -0
  10. package/lib/connection.d.ts +43 -0
  11. package/lib/connection.d.ts.map +1 -0
  12. package/lib/connection.js +160 -0
  13. package/lib/connection.js.map +1 -0
  14. package/lib/constants.d.ts +4 -0
  15. package/lib/constants.d.ts.map +1 -0
  16. package/lib/constants.js +8 -0
  17. package/lib/constants.js.map +1 -0
  18. package/lib/index.d.ts +8 -0
  19. package/lib/index.d.ts.map +1 -0
  20. package/lib/index.js +24 -0
  21. package/lib/index.js.map +1 -0
  22. package/lib/instructions/delegate.d.ts +25 -0
  23. package/lib/instructions/delegate.d.ts.map +1 -0
  24. package/lib/instructions/delegate.js +108 -0
  25. package/lib/instructions/delegate.js.map +1 -0
  26. package/lib/pda.d.ts +5 -0
  27. package/lib/pda.d.ts.map +1 -0
  28. package/lib/pda.js +35 -0
  29. package/lib/pda.js.map +1 -0
  30. package/lib/privacy/auth.d.ts +3 -0
  31. package/lib/privacy/auth.d.ts.map +1 -0
  32. package/lib/privacy/auth.js +25 -0
  33. package/lib/privacy/auth.js.map +1 -0
  34. package/lib/privacy/constants.d.ts +4 -0
  35. package/lib/privacy/constants.d.ts.map +1 -0
  36. package/lib/privacy/constants.js +7 -0
  37. package/lib/privacy/constants.js.map +1 -0
  38. package/lib/privacy/index.d.ts +5 -0
  39. package/lib/privacy/index.d.ts.map +1 -0
  40. package/lib/privacy/index.js +21 -0
  41. package/lib/privacy/index.js.map +1 -0
  42. package/lib/privacy/pda.d.ts +4 -0
  43. package/lib/privacy/pda.d.ts.map +1 -0
  44. package/lib/privacy/pda.js +25 -0
  45. package/lib/privacy/pda.js.map +1 -0
  46. package/lib/privacy/verify.d.ts +2 -0
  47. package/lib/privacy/verify.d.ts.map +1 -0
  48. package/lib/privacy/verify.js +29 -0
  49. package/lib/privacy/verify.js.map +1 -0
  50. package/lib/resolver.d.ts +28 -0
  51. package/lib/resolver.d.ts.map +1 -0
  52. package/lib/resolver.js +103 -0
  53. package/lib/resolver.js.map +1 -0
  54. package/lib/utils.d.ts +6 -0
  55. package/lib/utils.d.ts.map +1 -0
  56. package/lib/utils.js +56 -0
  57. package/lib/utils.js.map +1 -0
  58. package/package.json +54 -0
package/lib/index.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants.js"), exports);
18
+ __exportStar(require("./instructions/delegate.js"), exports);
19
+ __exportStar(require("./pda.js"), exports);
20
+ __exportStar(require("./utils.js"), exports);
21
+ __exportStar(require("./resolver.js"), exports);
22
+ __exportStar(require("./connection.js"), exports);
23
+ __exportStar(require("./confirmation.js"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,6DAA2C;AAC3C,2CAAyB;AACzB,6CAA2B;AAC3B,gDAA8B;AAC9B,kDAAgC;AAChC,oDAAkC"}
@@ -0,0 +1,25 @@
1
+ import * as beet from "@metaplex-foundation/beet";
2
+ import { AccountMeta, Address, Instruction } from "@solana/kit";
3
+ export declare const delegateStruct: beet.FixableBeetArgsStruct<{
4
+ instructionDiscriminator: number[];
5
+ commit_frequency_ms: beet.bignum;
6
+ seeds: number[][];
7
+ validator?: beet.COption<Uint8Array>;
8
+ }>;
9
+ export declare const delegateInstructionDiscriminator: number[];
10
+ interface DelegateAccountArgs {
11
+ commit_frequency_ms: number;
12
+ seeds: Uint8Array[][];
13
+ validator?: Address;
14
+ }
15
+ export declare function createDelegateInstruction(accountsInput: {
16
+ payer: Address;
17
+ delegatedAccount: Address;
18
+ ownerProgram: Address;
19
+ delegationRecord?: Address;
20
+ delegationMetadata?: Address;
21
+ systemProgram?: Address;
22
+ validator?: Address;
23
+ }, args?: DelegateAccountArgs, programId?: Address<"DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh">): Promise<Instruction<string, readonly (import("@solana/kit").AccountLookupMeta<string, string> | AccountMeta<string>)[]>>;
24
+ export {};
25
+ //# sourceMappingURL=delegate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/instructions/delegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAe,WAAW,EAAE,MAAM,aAAa,CAAC;AAS7E,eAAO,MAAM,cAAc;8BACC,MAAM,EAAE;yBACb,IAAI,CAAC,MAAM;WACzB,MAAM,EAAE,EAAE;gBACL,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;EASrC,CAAC;AACF,eAAO,MAAM,gCAAgC,UAA2B,CAAC;AAGzE,UAAU,mBAAmB;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE;IACb,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,EACD,IAAI,CAAC,EAAE,mBAAmB,EAC1B,SAAS,0DAAwB,4HAyElC"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.delegateInstructionDiscriminator = exports.delegateStruct = void 0;
37
+ exports.createDelegateInstruction = createDelegateInstruction;
38
+ const beet = __importStar(require("@metaplex-foundation/beet"));
39
+ const kit_1 = require("@solana/kit");
40
+ const system_1 = require("@solana-program/system");
41
+ const constants_1 = require("../constants");
42
+ const pda_1 = require("../pda");
43
+ exports.delegateStruct = new beet.FixableBeetArgsStruct([
44
+ ["instructionDiscriminator", beet.uniformFixedSizeArray(beet.u8, 8)],
45
+ ["commit_frequency_ms", beet.u32],
46
+ ["seeds", beet.array(beet.array(beet.u8))],
47
+ ["validator", beet.coption(beet.uniformFixedSizeArray(beet.u8, 32))],
48
+ ], "DelegateInstructionArgs");
49
+ exports.delegateInstructionDiscriminator = [0, 0, 0, 0, 0, 0, 0, 0];
50
+ async function createDelegateInstruction(accountsInput, args, programId = constants_1.DELEGATION_PROGRAM_ID) {
51
+ const delegateBufferPda = await (0, pda_1.delegateBufferPdaFromDelegatedAccountAndOwnerProgram)(accountsInput.delegatedAccount, accountsInput.ownerProgram);
52
+ const delegationRecordPda = await (0, pda_1.delegationRecordPdaFromDelegatedAccount)(accountsInput.delegatedAccount);
53
+ const delegationMetadataPda = await (0, pda_1.delegationMetadataPdaFromDelegatedAccount)(accountsInput.delegatedAccount);
54
+ args = args ?? {
55
+ commit_frequency_ms: 4294967295,
56
+ seeds: [],
57
+ };
58
+ const accounts = [
59
+ {
60
+ address: accountsInput.payer,
61
+ role: kit_1.AccountRole.READONLY_SIGNER,
62
+ },
63
+ {
64
+ address: accountsInput.delegatedAccount,
65
+ role: kit_1.AccountRole.WRITABLE_SIGNER,
66
+ },
67
+ {
68
+ address: accountsInput.ownerProgram,
69
+ role: kit_1.AccountRole.READONLY,
70
+ },
71
+ {
72
+ address: delegateBufferPda,
73
+ role: kit_1.AccountRole.WRITABLE,
74
+ },
75
+ {
76
+ address: accountsInput.delegationRecord ?? delegationRecordPda,
77
+ role: kit_1.AccountRole.WRITABLE,
78
+ },
79
+ {
80
+ address: accountsInput.delegationMetadata ?? delegationMetadataPda,
81
+ role: kit_1.AccountRole.WRITABLE,
82
+ },
83
+ {
84
+ address: accountsInput.systemProgram ?? system_1.SYSTEM_PROGRAM_ADDRESS,
85
+ role: kit_1.AccountRole.READONLY,
86
+ },
87
+ ...(accountsInput.validator
88
+ ? [
89
+ {
90
+ address: accountsInput.validator,
91
+ role: kit_1.AccountRole.READONLY,
92
+ },
93
+ ]
94
+ : []),
95
+ ];
96
+ const [data] = exports.delegateStruct.serialize({
97
+ instructionDiscriminator: exports.delegateInstructionDiscriminator,
98
+ commit_frequency_ms: args.commit_frequency_ms,
99
+ seeds: args.seeds.map((seed) => seed.map(Number)),
100
+ });
101
+ const delegateInstruction = {
102
+ accounts,
103
+ data,
104
+ programAddress: programId,
105
+ };
106
+ return delegateInstruction;
107
+ }
108
+ //# sourceMappingURL=delegate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../../src/instructions/delegate.ts"],"names":[],"mappings":"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"}
package/lib/pda.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { Address } from "@solana/kit";
2
+ export declare function delegationRecordPdaFromDelegatedAccount(delegatedAccount: Address): Promise<Address<string>>;
3
+ export declare function delegationMetadataPdaFromDelegatedAccount(delegatedAccount: Address): Promise<Address<string>>;
4
+ export declare function delegateBufferPdaFromDelegatedAccountAndOwnerProgram(delegatedAccount: Address, ownerProgramId: Address): Promise<Address<string>>;
5
+ //# sourceMappingURL=pda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAGR,MAAM,aAAa,CAAC;AAGrB,wBAAsB,uCAAuC,CAC3D,gBAAgB,EAAE,OAAO,4BAQ1B;AAED,wBAAsB,yCAAyC,CAC7D,gBAAgB,EAAE,OAAO,4BAY1B;AAED,wBAAsB,oDAAoD,CACxE,gBAAgB,EAAE,OAAO,EACzB,cAAc,EAAE,OAAO,4BAQxB"}
package/lib/pda.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.delegationRecordPdaFromDelegatedAccount = delegationRecordPdaFromDelegatedAccount;
4
+ exports.delegationMetadataPdaFromDelegatedAccount = delegationMetadataPdaFromDelegatedAccount;
5
+ exports.delegateBufferPdaFromDelegatedAccountAndOwnerProgram = delegateBufferPdaFromDelegatedAccountAndOwnerProgram;
6
+ const kit_1 = require("@solana/kit");
7
+ const constants_1 = require("./constants");
8
+ async function delegationRecordPdaFromDelegatedAccount(delegatedAccount) {
9
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
10
+ const [delegationRecordPda] = await (0, kit_1.getProgramDerivedAddress)({
11
+ programAddress: constants_1.DELEGATION_PROGRAM_ID,
12
+ seeds: [Buffer.from("delegation"), addressEncoder.encode(delegatedAccount)],
13
+ });
14
+ return delegationRecordPda;
15
+ }
16
+ async function delegationMetadataPdaFromDelegatedAccount(delegatedAccount) {
17
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
18
+ const [delegationMetadataPda] = await (0, kit_1.getProgramDerivedAddress)({
19
+ programAddress: constants_1.DELEGATION_PROGRAM_ID,
20
+ seeds: [
21
+ Buffer.from("delegation-metadata"),
22
+ addressEncoder.encode(delegatedAccount),
23
+ ],
24
+ });
25
+ return delegationMetadataPda;
26
+ }
27
+ async function delegateBufferPdaFromDelegatedAccountAndOwnerProgram(delegatedAccount, ownerProgramId) {
28
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
29
+ const [delegateBufferPda] = await (0, kit_1.getProgramDerivedAddress)({
30
+ programAddress: ownerProgramId,
31
+ seeds: [Buffer.from("buffer"), addressEncoder.encode(delegatedAccount)],
32
+ });
33
+ return delegateBufferPda;
34
+ }
35
+ //# sourceMappingURL=pda.js.map
package/lib/pda.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.js","sourceRoot":"","sources":["../src/pda.ts"],"names":[],"mappings":";;AAOA,0FASC;AAED,8FAaC;AAED,oHAUC;AA3CD,qCAIqB;AACrB,2CAAoD;AAE7C,KAAK,UAAU,uCAAuC,CAC3D,gBAAyB;IAEzB,MAAM,cAAc,GAAG,IAAA,uBAAiB,GAAE,CAAC;IAC3C,MAAM,CAAC,mBAAmB,CAAC,GAAG,MAAM,IAAA,8BAAwB,EAAC;QAC3D,cAAc,EAAE,iCAAqB;QACrC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;KAC5E,CAAC,CAAC;IACH,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,yCAAyC,CAC7D,gBAAyB;IAEzB,MAAM,cAAc,GAAG,IAAA,uBAAiB,GAAE,CAAC;IAC3C,MAAM,CAAC,qBAAqB,CAAC,GAAG,MAAM,IAAA,8BAAwB,EAAC;QAC7D,cAAc,EAAE,iCAAqB;QACrC,KAAK,EAAE;YACL,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;YAClC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC;SACxC;KACF,CAAC,CAAC;IAEH,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,oDAAoD,CACxE,gBAAyB,EACzB,cAAuB;IAEvB,MAAM,cAAc,GAAG,IAAA,uBAAiB,GAAE,CAAC;IAC3C,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,IAAA,8BAAwB,EAAC;QACzD,cAAc,EAAE,cAAc;QAC9B,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;KACxE,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Address } from "@solana/kit";
2
+ export declare function getAuthToken(rpcUrl: string, publicKey: Address, signMessage: (message: Uint8Array) => Promise<Uint8Array>): Promise<string>;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/privacy/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAkBtC,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,OAAO,EAClB,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,mBAkC1D"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAuthToken = getAuthToken;
4
+ async function getAuthToken(rpcUrl, publicKey, signMessage) {
5
+ const bs58 = (await import("bs58")).default;
6
+ const challengeResponse = await fetch(`${rpcUrl}/auth/challenge?pubkey=${publicKey.toString()}`);
7
+ const { challenge } = await challengeResponse.json();
8
+ const signature = await signMessage(new Uint8Array(Buffer.from(challenge, "utf-8")));
9
+ const signatureString = bs58.encode(signature);
10
+ const authResponse = await fetch(`${rpcUrl}/auth/login`, {
11
+ method: "POST",
12
+ headers: { "Content-Type": "application/json" },
13
+ body: JSON.stringify({
14
+ pubkey: publicKey.toString(),
15
+ challenge,
16
+ signature: signatureString,
17
+ }),
18
+ });
19
+ const authJson = await authResponse.json();
20
+ if (authResponse.status !== 200) {
21
+ throw new Error(`Failed to authenticate: ${authJson.error}`);
22
+ }
23
+ return authJson.token;
24
+ }
25
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/privacy/auth.ts"],"names":[],"mappings":";;AAkBA,oCAqCC;AArCM,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,SAAkB,EAClB,WAAyD;IAGzD,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAG5C,MAAM,iBAAiB,GAAG,MAAM,KAAK,CACnC,GAAG,MAAM,0BAA0B,SAAS,CAAC,QAAQ,EAAE,EAAE,CAC1D,CAAC;IACF,MAAM,EAAE,SAAS,EAAE,GAA0B,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAG5E,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAChD,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAG/C,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC5B,SAAS;YACT,SAAS,EAAE,eAAe;SAC3B,CAAC;KACH,CAAC,CAAC;IACH,MAAM,QAAQ,GAAsB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;IAE9D,IAAI,YAAY,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,QAAQ,CAAC,KAAK,CAAC;AACxB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Address } from "@solana/kit";
2
+ export declare const SESSION_DURATION: number;
3
+ export declare const PERMISSION_PROGRAM_ID: Address;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/privacy/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,gBAAgB,QAA2B,CAAC;AAEzD,eAAO,MAAM,qBAAqB,EAAE,OAEnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PERMISSION_PROGRAM_ID = exports.SESSION_DURATION = void 0;
4
+ const kit_1 = require("@solana/kit");
5
+ exports.SESSION_DURATION = 1000 * 60 * 60 * 24 * 30;
6
+ exports.PERMISSION_PROGRAM_ID = (0, kit_1.address)("BTWAqWNBmF2TboMh3fxMJfgR16xGHYD7Kgr2dPwbRPBi");
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/privacy/constants.ts"],"names":[],"mappings":";;;AAAA,qCAA+C;AAElC,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE5C,QAAA,qBAAqB,GAAY,IAAA,aAAO,EACnD,8CAA8C,CAC/C,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./pda.js";
2
+ export * from "./auth.js";
3
+ export * from "./verify.js";
4
+ export * from "./constants.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/privacy/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./pda.js"), exports);
18
+ __exportStar(require("./auth.js"), exports);
19
+ __exportStar(require("./verify.js"), exports);
20
+ __exportStar(require("./constants.js"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/privacy/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B;AAC5B,iDAA+B"}
@@ -0,0 +1,4 @@
1
+ import { Address } from "@solana/kit";
2
+ export declare function permissionPdaFromAccount(account: Address): Promise<Address<string>>;
3
+ export declare function groupPdaFromId(id: Address): Promise<Address<string>>;
4
+ //# sourceMappingURL=pda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.d.ts","sourceRoot":"","sources":["../../src/privacy/pda.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAGR,MAAM,aAAa,CAAC;AAWrB,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,OAAO,4BAO9D;AAOD,wBAAsB,cAAc,CAAC,EAAE,EAAE,OAAO,4BAO/C"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.permissionPdaFromAccount = permissionPdaFromAccount;
4
+ exports.groupPdaFromId = groupPdaFromId;
5
+ const kit_1 = require("@solana/kit");
6
+ const constants_1 = require("./constants");
7
+ const PERMISSION_SEED = Buffer.from("permission:");
8
+ const GROUP_SEED = Buffer.from("group:");
9
+ async function permissionPdaFromAccount(account) {
10
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
11
+ const [permissionPda] = await (0, kit_1.getProgramDerivedAddress)({
12
+ programAddress: constants_1.PERMISSION_PROGRAM_ID,
13
+ seeds: [PERMISSION_SEED, addressEncoder.encode(account)],
14
+ });
15
+ return permissionPda;
16
+ }
17
+ async function groupPdaFromId(id) {
18
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
19
+ const [groupPda] = await (0, kit_1.getProgramDerivedAddress)({
20
+ programAddress: constants_1.PERMISSION_PROGRAM_ID,
21
+ seeds: [GROUP_SEED, addressEncoder.encode(id)],
22
+ });
23
+ return groupPda;
24
+ }
25
+ //# sourceMappingURL=pda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pda.js","sourceRoot":"","sources":["../../src/privacy/pda.ts"],"names":[],"mappings":";;AAeA,4DAOC;AAOD,wCAOC;AApCD,qCAIqB;AACrB,2CAAoD;AAEpD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAOlC,KAAK,UAAU,wBAAwB,CAAC,OAAgB;IAC7D,MAAM,cAAc,GAAG,IAAA,uBAAiB,GAAE,CAAC;IAC3C,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,IAAA,8BAAwB,EAAC;QACrD,cAAc,EAAE,iCAAqB;QACrC,KAAK,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACzD,CAAC,CAAC;IACH,OAAO,aAAa,CAAC;AACvB,CAAC;AAOM,KAAK,UAAU,cAAc,CAAC,EAAW;IAC9C,MAAM,cAAc,GAAG,IAAA,uBAAiB,GAAE,CAAC;IAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAA,8BAAwB,EAAC;QAChD,cAAc,EAAE,iCAAqB;QACrC,KAAK,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC/C,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function verifyTeeRpcIntegrity(rpcUrl: string): Promise<boolean>;
2
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/privacy/verify.ts"],"names":[],"mappings":"AAcA,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4C5E"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verifyTeeRpcIntegrity = verifyTeeRpcIntegrity;
4
+ async function verifyTeeRpcIntegrity(rpcUrl) {
5
+ const { default: init, js_get_collateral: jsGetCollateral, js_verify: jsVerify, } = await import("@phala/dcap-qvl-web");
6
+ const challengeBytes = Buffer.from(Uint8Array.from(Array(32)
7
+ .fill(0)
8
+ .map(() => Math.floor(Math.random() * 256))));
9
+ const challenge = challengeBytes.toString("base64");
10
+ const url = `${rpcUrl}/quote?challenge=${encodeURIComponent(challenge)}`;
11
+ const response = await fetch(url);
12
+ const responseBody = await response.json();
13
+ if (response.status !== 200 || !("quote" in responseBody)) {
14
+ throw new Error(responseBody.error ?? "Failed to get quote");
15
+ }
16
+ await init();
17
+ const rawQuote = Uint8Array.from(Buffer.from(responseBody.quote, "base64"));
18
+ const pccsUrl = "https://pccs.phala.network/tdx/certification/v4";
19
+ const quoteCollateral = await jsGetCollateral(pccsUrl, rawQuote);
20
+ const now = BigInt(Math.floor(Date.now() / 1000));
21
+ try {
22
+ jsVerify(rawQuote, quoteCollateral, now);
23
+ return true;
24
+ }
25
+ catch (error) {
26
+ return false;
27
+ }
28
+ }
29
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/privacy/verify.ts"],"names":[],"mappings":";;AAcA,sDA4CC;AA5CM,KAAK,UAAU,qBAAqB,CAAC,MAAc;IAExD,MAAM,EACJ,OAAO,EAAE,IAAI,EACb,iBAAiB,EAAE,eAAe,EAClC,SAAS,EAAE,QAAQ,GACpB,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAExC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAChC,UAAU,CAAC,IAAI,CACb,KAAK,CAAC,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,CAAC;SACP,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAC9C,CACF,CAAC;IACF,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,GAAG,MAAM,oBAAoB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,YAAY,GAAkC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE1E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,YAAY,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAGD,MAAM,IAAI,EAAE,CAAC;IAEb,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAG5E,MAAM,OAAO,GAAG,iDAAiD,CAAC;IAClE,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAGjE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAGlD,IAAI,CAAC;QACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Address, TransactionMessage, Rpc, SolanaRpcApiDevnet } from "@solana/kit";
2
+ export interface Configuration {
3
+ chain: string;
4
+ websocket: string;
5
+ }
6
+ declare enum DelegationStatus {
7
+ Delegated = 0,
8
+ Undelegated = 1
9
+ }
10
+ type DelegationRecord = {
11
+ status: DelegationStatus.Delegated;
12
+ validator: Address;
13
+ } | {
14
+ status: DelegationStatus.Undelegated;
15
+ };
16
+ export declare class Resolver {
17
+ private readonly routes;
18
+ private readonly delegations;
19
+ private readonly chain;
20
+ private readonly ws;
21
+ constructor(config: Configuration, routes: Map<string, string>);
22
+ trackAccount(pubkey: Address): Promise<DelegationRecord>;
23
+ resolve(pubkey: Address): Promise<Rpc<SolanaRpcApiDevnet> | undefined>;
24
+ resolveForTransaction(tx: TransactionMessage): Promise<Rpc<SolanaRpcApiDevnet> | undefined>;
25
+ private updateStatus;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAOP,kBAAkB,EAIlB,GAAG,EACH,kBAAkB,EAMnB,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,aAAa;IAE5B,KAAK,EAAE,MAAM,CAAC;IAEd,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,aAAK,gBAAgB;IACnB,SAAS,IAAA;IACT,WAAW,IAAA;CACZ;AAGD,KAAK,gBAAgB,GACjB;IAAE,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAA;CAAE,CAAC;AAG7C,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;IACrE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAA8C;gBAErD,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAajD,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8CxD,OAAO,CAClB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAelC,qBAAqB,CAChC,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAoB/C,OAAO,CAAC,YAAY;CAuBrB"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Resolver = void 0;
4
+ const kit_1 = require("@solana/kit");
5
+ const constants_js_1 = require("./constants.js");
6
+ var DelegationStatus;
7
+ (function (DelegationStatus) {
8
+ DelegationStatus[DelegationStatus["Delegated"] = 0] = "Delegated";
9
+ DelegationStatus[DelegationStatus["Undelegated"] = 1] = "Undelegated";
10
+ })(DelegationStatus || (DelegationStatus = {}));
11
+ class Resolver {
12
+ constructor(config, routes) {
13
+ this.routes = new Map();
14
+ this.delegations = new Map();
15
+ this.chain = (0, kit_1.createSolanaRpc)(config.chain);
16
+ this.ws = (0, kit_1.createSolanaRpcSubscriptions)(config.websocket);
17
+ this.routes = new Map([...routes.entries()].map(([k, v]) => [k, (0, kit_1.createSolanaRpc)(v)]));
18
+ }
19
+ async trackAccount(pubkey) {
20
+ const pubkeyStr = pubkey.toString();
21
+ if (this.delegations.has(pubkeyStr)) {
22
+ const record = this.delegations.get(pubkeyStr);
23
+ if (record !== undefined) {
24
+ return record;
25
+ }
26
+ throw new Error(`Expected a delegation record for ${pubkeyStr}, but found undefined.`);
27
+ }
28
+ const addressEncoder = (0, kit_1.getAddressEncoder)();
29
+ const [delegationRecord] = await (0, kit_1.getProgramDerivedAddress)({
30
+ programAddress: constants_js_1.DELEGATION_PROGRAM_ID,
31
+ seeds: [Buffer.from("delegation"), addressEncoder.encode(pubkey)],
32
+ });
33
+ const abortController = new AbortController();
34
+ const accountNotifications = await this.ws
35
+ .accountNotifications(delegationRecord, {
36
+ commitment: "confirmed",
37
+ encoding: "base64",
38
+ })
39
+ .subscribe({ abortSignal: abortController.signal });
40
+ for await (const accountNotification of accountNotifications) {
41
+ this.updateStatus(accountNotification.value, pubkey);
42
+ abortController.abort();
43
+ }
44
+ const accountInfo = await this.chain
45
+ .getAccountInfo(delegationRecord, {
46
+ commitment: "confirmed",
47
+ encoding: "base64",
48
+ })
49
+ .send();
50
+ return this.updateStatus(accountInfo.value, pubkey);
51
+ }
52
+ async resolve(pubkey) {
53
+ let record = this.delegations.get(pubkey);
54
+ if (!record) {
55
+ record = await this.trackAccount(pubkey);
56
+ }
57
+ return record.status === DelegationStatus.Delegated
58
+ ? this.routes.get(record.validator)
59
+ : this.chain;
60
+ }
61
+ async resolveForTransaction(tx) {
62
+ const validators = new Set();
63
+ for (const account of tx.instructions.flatMap((i) => i.accounts)) {
64
+ if (!account)
65
+ continue;
66
+ const { address, role } = account;
67
+ if (role === kit_1.AccountRole.READONLY || role === kit_1.AccountRole.READONLY_SIGNER)
68
+ continue;
69
+ const record = await this.trackAccount(address);
70
+ if (record.status === DelegationStatus.Delegated) {
71
+ validators.add(record.validator.toString());
72
+ }
73
+ }
74
+ const vs = [...validators];
75
+ return vs.length === 1
76
+ ? this.routes.get(vs[0])
77
+ : validators.size === 0
78
+ ? this.chain
79
+ : undefined;
80
+ }
81
+ updateStatus(account, pubkey) {
82
+ const isDelegated = account !== null &&
83
+ account.owner === constants_js_1.DELEGATION_PROGRAM_ID &&
84
+ account.lamports !== (0, kit_1.lamports)(BigInt(0));
85
+ const record = isDelegated
86
+ ? {
87
+ status: DelegationStatus.Delegated,
88
+ validator: (() => {
89
+ const decodedData = delegationRecordCodec.decode(Buffer.from(account.data[0], "base64"));
90
+ return (0, kit_1.address)(decodedData.validator);
91
+ })(),
92
+ }
93
+ : { status: DelegationStatus.Undelegated };
94
+ this.delegations.set(pubkey.toString(), record);
95
+ return record;
96
+ }
97
+ }
98
+ exports.Resolver = Resolver;
99
+ const delegationRecordCodec = (0, kit_1.getStructCodec)([
100
+ ["delegationStatus", (0, kit_1.getU8Codec)()],
101
+ ["validator", (0, kit_1.getAddressCodec)()],
102
+ ]);
103
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
package/lib/utils.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { Signature, TransactionMessage } from "@solana/kit";
2
+ export declare function getWritableAccounts(transactionMessage: TransactionMessage): string[];
3
+ export declare function isRouter(clusterUrlHttp: string): Promise<boolean>;
4
+ export declare function parseScheduleCommitsLogsMessage(logMessages: readonly string[]): Signature | null;
5
+ export declare function parseCommitsLogsMessage(logMessages: readonly string[]): Signature | null;
6
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQzE,wBAAgB,mBAAmB,CACjC,kBAAkB,EAAE,kBAAkB,GACrC,MAAM,EAAE,CAeV;AAQD,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBvE;AAWD,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,SAAS,GAAG,IAAI,CAQlB;AAWD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,SAAS,GAAG,IAAI,CAQlB"}
package/lib/utils.js ADDED
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWritableAccounts = getWritableAccounts;
4
+ exports.isRouter = isRouter;
5
+ exports.parseScheduleCommitsLogsMessage = parseScheduleCommitsLogsMessage;
6
+ exports.parseCommitsLogsMessage = parseCommitsLogsMessage;
7
+ const kit_1 = require("@solana/kit");
8
+ function getWritableAccounts(transactionMessage) {
9
+ const writableAccounts = new Set();
10
+ for (const instruction of transactionMessage.instructions) {
11
+ if (instruction.accounts) {
12
+ for (const account of instruction.accounts) {
13
+ if (account.role === kit_1.AccountRole.WRITABLE ||
14
+ account.role === kit_1.AccountRole.WRITABLE_SIGNER) {
15
+ writableAccounts.add(account.address.toString());
16
+ }
17
+ }
18
+ }
19
+ }
20
+ return Array.from(writableAccounts);
21
+ }
22
+ async function isRouter(clusterUrlHttp) {
23
+ const response = await fetch(clusterUrlHttp, {
24
+ method: "POST",
25
+ headers: { "Content-Type": "application/json" },
26
+ body: JSON.stringify({
27
+ jsonrpc: "2.0",
28
+ id: 1,
29
+ method: "getBlockhashForAccounts",
30
+ params: [[]],
31
+ }),
32
+ });
33
+ const { result } = (await response.json());
34
+ return (result != null &&
35
+ typeof result.blockhash === "string" &&
36
+ result.blockhash.length > 0);
37
+ }
38
+ function parseScheduleCommitsLogsMessage(logMessages) {
39
+ for (const message of logMessages) {
40
+ const signaturePrefix = "ScheduledCommitSent signature: ";
41
+ if (message.includes(signaturePrefix)) {
42
+ return message.split(signaturePrefix)[1];
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ function parseCommitsLogsMessage(logMessages) {
48
+ for (const message of logMessages) {
49
+ const signaturePrefix = "ScheduledCommitSent signature[0]: ";
50
+ if (message.includes(signaturePrefix)) {
51
+ return message.split(signaturePrefix)[1];
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAQA,kDAiBC;AAQD,4BAqBC;AAWD,0EAUC;AAWD,0DAUC;AAhGD,qCAAyE;AAQzE,SAAgB,mBAAmB,CACjC,kBAAsC;IAEtC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,KAAK,MAAM,WAAW,IAAI,kBAAkB,CAAC,YAAY,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IACE,OAAO,CAAC,IAAI,KAAK,iBAAW,CAAC,QAAQ;oBACrC,OAAO,CAAC,IAAI,KAAK,iBAAW,CAAC,eAAe,EAC5C,CAAC;oBACD,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC;AAQM,KAAK,UAAU,QAAQ,CAAC,cAAsB;IACnD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,yBAAyB;YACjC,MAAM,EAAE,CAAC,EAAE,CAAC;SACb,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAExC,CAAC;IAEF,OAAO,CACL,MAAM,IAAI,IAAI;QACd,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QACpC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAC5B,CAAC;AACJ,CAAC;AAWD,SAAgB,+BAA+B,CAC7C,WAA8B;IAE9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,iCAAiC,CAAC;QAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAc,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAWD,SAAgB,uBAAuB,CACrC,WAA8B;IAE9B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,oCAAoC,CAAC;QAC7D,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAc,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}