@1upmonster/duel 0.2.1 → 0.2.3
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/README.md +120 -59
- package/dist/admin.d.ts +8 -1
- package/dist/admin.js +52 -9
- package/dist/generated/duel/errors/duel.d.ts +1 -3
- package/dist/generated/duel/errors/duel.js +2 -4
- package/dist/generated/duel/instructions/index.d.ts +2 -0
- package/dist/generated/duel/instructions/index.js +3 -1
- package/dist/generated/duel/instructions/joinQueue.d.ts +1 -1
- package/dist/generated/duel/instructions/joinQueue.js +3 -3
- package/dist/generated/duel/instructions/setupQueuePermission.d.ts +51 -0
- package/dist/generated/duel/instructions/setupQueuePermission.js +63 -0
- package/dist/generated/duel/instructions/setupTicketPermission.d.ts +54 -0
- package/dist/generated/duel/instructions/setupTicketPermission.js +63 -0
- package/dist/generated/duel/programs/duel.d.ts +11 -3
- package/dist/generated/duel/programs/duel.js +19 -3
- package/dist/player.d.ts +8 -1
- package/dist/player.js +56 -5
- package/dist/tee.d.ts +4 -3
- package/dist/tee.js +17 -23
- package/dist/transaction.d.ts +2 -0
- package/dist/transaction.js +30 -19
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +28 -1
- package/package.json +1 -1
- package/src/admin.ts +67 -7
- package/src/duel.json +57 -5
- package/src/generated/duel/errors/duel.ts +2 -4
- package/src/generated/duel/instructions/index.ts +3 -1
- package/src/generated/duel/instructions/joinQueue.ts +3 -3
- package/src/generated/duel/instructions/setupQueuePermission.ts +112 -0
- package/src/generated/duel/instructions/setupTicketPermission.ts +115 -0
- package/src/generated/duel/programs/duel.ts +12 -4
- package/src/player.ts +72 -1
- package/src/tee.ts +18 -22
- package/src/transaction.ts +33 -18
- package/src/utils.ts +34 -0
- package/src/encryption.ts +0 -154
- package/src/idl/private_matchmaking.json +0 -1027
- package/src/idl/private_matchmaking.ts +0 -1033
package/dist/player.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare class MatchmakingPlayer {
|
|
|
8
8
|
getTicket(ticketPda: Address): Promise<import("@solana/accounts").MaybeAccount<import("./generated/duel/index.js").MatchTicket, string>>;
|
|
9
9
|
createTicket(tenant: Address): Promise<string>;
|
|
10
10
|
delegateTicket(player: Address, tenant: Address, validator?: Address): Promise<string>;
|
|
11
|
-
joinQueue(queue: Address, tenant: Address, playerData: Address): Promise<string>;
|
|
11
|
+
joinQueue(queue: Address, tenant: Address, playerData: Address, callbackProgram?: Address): Promise<string>;
|
|
12
12
|
cancelTicket(tenant: Address): Promise<string>;
|
|
13
13
|
closeTicket(tenant: Address): Promise<string>;
|
|
14
14
|
/**
|
|
@@ -19,6 +19,13 @@ export declare class MatchmakingPlayer {
|
|
|
19
19
|
opponent: Address;
|
|
20
20
|
matchId: bigint;
|
|
21
21
|
} | null>;
|
|
22
|
+
/**
|
|
23
|
+
* High-level: full matchmaking TEE entry flow.
|
|
24
|
+
* Creates ticket on L1, sets up permission PDA (so only player + queue authority can read it),
|
|
25
|
+
* delegates the permission PDA and ticket to TEE, then joins the queue.
|
|
26
|
+
* Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
|
|
27
|
+
*/
|
|
28
|
+
enterQueue(tenant: Address, queue: Address, playerData: Address, teeRpc: Rpc<SolanaRpcApi>, teeUrlWithToken: string, validator?: Address, callbackProgram?: Address): Promise<Address>;
|
|
22
29
|
/** Create a new MatchmakingPlayer pointing at a TEE RPC endpoint. */
|
|
23
30
|
withRpc(teeUrl: string): MatchmakingPlayer;
|
|
24
31
|
}
|
package/dist/player.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createSolanaRpc, } from "@solana/kit";
|
|
2
|
-
import { getCreateTicketInstructionAsync, getDelegateTicketInstructionAsync, getJoinQueueInstructionAsync, getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, fetchMaybeMatchTicket, accountType, } from "./generated/duel/index.js";
|
|
1
|
+
import { createSolanaRpc, AccountRole, } from "@solana/kit";
|
|
2
|
+
import { getCreateTicketInstructionAsync, getDelegateTicketInstructionAsync, getSetupTicketPermissionInstructionAsync, getJoinQueueInstructionAsync, getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, fetchMaybeMatchTicket, accountType, } from "./generated/duel/index.js";
|
|
3
3
|
import { sendInstruction } from "./transaction.js";
|
|
4
4
|
import * as utils from "./utils.js";
|
|
5
5
|
const DUEL_PROGRAM_ID = "EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X";
|
|
@@ -32,14 +32,18 @@ export class MatchmakingPlayer {
|
|
|
32
32
|
}, { programAddress: this.programId });
|
|
33
33
|
return sendInstruction(this.rpc, ix, this.signer);
|
|
34
34
|
}
|
|
35
|
-
async joinQueue(queue, tenant, playerData) {
|
|
35
|
+
async joinQueue(queue, tenant, playerData, callbackProgram) {
|
|
36
36
|
const ix = await getJoinQueueInstructionAsync({
|
|
37
37
|
queue,
|
|
38
38
|
tenant,
|
|
39
39
|
playerData,
|
|
40
40
|
signer: this.signer,
|
|
41
41
|
}, { programAddress: this.programId });
|
|
42
|
-
|
|
42
|
+
const ixFinal = callbackProgram
|
|
43
|
+
? { ...ix, accounts: [...ix.accounts, { address: callbackProgram, role: 0 }] }
|
|
44
|
+
: ix;
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
|
+
return sendInstruction(this.rpc, ixFinal, this.signer);
|
|
43
47
|
}
|
|
44
48
|
async cancelTicket(tenant) {
|
|
45
49
|
const ix = await getCancelTicketInstructionAsync({
|
|
@@ -79,9 +83,56 @@ export class MatchmakingPlayer {
|
|
|
79
83
|
}
|
|
80
84
|
return null;
|
|
81
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* High-level: full matchmaking TEE entry flow.
|
|
88
|
+
* Creates ticket on L1, sets up permission PDA (so only player + queue authority can read it),
|
|
89
|
+
* delegates the permission PDA and ticket to TEE, then joins the queue.
|
|
90
|
+
* Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
|
|
91
|
+
*/
|
|
92
|
+
async enterQueue(tenant, queue, playerData, teeRpc, teeUrlWithToken, validator, callbackProgram) {
|
|
93
|
+
const player = this.signer.address;
|
|
94
|
+
const ticketPda = await this.getTicketPda(player, tenant);
|
|
95
|
+
// 1. Create ticket on L1
|
|
96
|
+
await this.createTicket(tenant);
|
|
97
|
+
// 2. Create Permission PDA for the ticket (CPI from duel program with invoke_signed)
|
|
98
|
+
const permissionPda = await utils.derivePermissionPda(ticketPda);
|
|
99
|
+
const setupIx = await getSetupTicketPermissionInstructionAsync({
|
|
100
|
+
player: this.signer,
|
|
101
|
+
tenant,
|
|
102
|
+
permission: permissionPda,
|
|
103
|
+
permissionProgram: utils.PERMISSION_PROGRAM,
|
|
104
|
+
}, { programAddress: this.programId });
|
|
105
|
+
await sendInstruction(this.rpc, setupIx, this.signer);
|
|
106
|
+
// 3. Delegate Permission PDA to TEE (called on permission program, player signs)
|
|
107
|
+
const { delegationBuffer, delegationRecord, delegationMetadata } = await utils.derivePermissionDelegationPdas(permissionPda);
|
|
108
|
+
const delegatePermIx = {
|
|
109
|
+
programAddress: utils.PERMISSION_PROGRAM,
|
|
110
|
+
data: new Uint8Array([3, 0, 0, 0, 0, 0, 0, 0]),
|
|
111
|
+
accounts: [
|
|
112
|
+
{ address: this.signer.address, role: AccountRole.WRITABLE_SIGNER },
|
|
113
|
+
{ address: this.signer.address, role: AccountRole.READONLY_SIGNER },
|
|
114
|
+
{ address: ticketPda, role: AccountRole.READONLY },
|
|
115
|
+
{ address: permissionPda, role: AccountRole.WRITABLE },
|
|
116
|
+
{ address: "11111111111111111111111111111111", role: AccountRole.READONLY },
|
|
117
|
+
{ address: utils.PERMISSION_PROGRAM, role: AccountRole.READONLY },
|
|
118
|
+
{ address: delegationBuffer, role: AccountRole.WRITABLE },
|
|
119
|
+
{ address: delegationRecord, role: AccountRole.WRITABLE },
|
|
120
|
+
{ address: delegationMetadata, role: AccountRole.WRITABLE },
|
|
121
|
+
{ address: utils.DELEGATION_PROGRAM, role: AccountRole.READONLY },
|
|
122
|
+
...(validator ? [{ address: validator, role: AccountRole.READONLY }] : []),
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
await sendInstruction(this.rpc, delegatePermIx, this.signer);
|
|
126
|
+
// 4. Delegate ticket to TEE
|
|
127
|
+
await this.delegateTicket(player, tenant, validator);
|
|
128
|
+
// 5. Join the queue on TEE
|
|
129
|
+
const teeClient = new MatchmakingPlayer(teeRpc, this.signer, this.programId);
|
|
130
|
+
await teeClient.joinQueue(queue, tenant, playerData, callbackProgram);
|
|
131
|
+
return ticketPda;
|
|
132
|
+
}
|
|
82
133
|
/** Create a new MatchmakingPlayer pointing at a TEE RPC endpoint. */
|
|
83
134
|
withRpc(teeUrl) {
|
|
84
135
|
return new MatchmakingPlayer(createSolanaRpc(teeUrl), this.signer, this.programId);
|
|
85
136
|
}
|
|
86
137
|
}
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxHQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsV0FBVyxHQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sZUFBZSxHQUFHLDhDQUF5RCxDQUFDO0FBRWxGLE1BQU0sT0FBTyxpQkFBaUI7SUFLNUIsWUFDRSxHQUFzQixFQUN0QixNQUF5QixFQUN6QixZQUFxQixlQUFlO1FBRXBDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZSxFQUFFLE1BQWU7UUFDakQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQWtCO1FBQ2hDLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFlO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sK0JBQStCLENBQUM7WUFDL0MsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE1BQU07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QU07b0JBQUUsU0FBUztnQkFDbEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHlDQUF5QztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGZldGNoTWF5YmVNYXRjaFRpY2tldCxcbiAgYWNjb3VudFR5cGUsXG59IGZyb20gXCIuL2dlbmVyYXRlZC9kdWVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZW5kSW5zdHJ1Y3Rpb24gfSBmcm9tIFwiLi90cmFuc2FjdGlvbi5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuY29uc3QgRFVFTF9QUk9HUkFNX0lEID0gXCJFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WFwiIGFzIEFkZHJlc3M7XG5cbmV4cG9ydCBjbGFzcyBNYXRjaG1ha2luZ1BsYXllciB7XG4gIHB1YmxpYyBycGM6IFJwYzxTb2xhbmFScGNBcGk+O1xuICBwdWJsaWMgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjtcbiAgcHVibGljIHByb2dyYW1JZDogQWRkcmVzcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBycGM6IFJwYzxTb2xhbmFScGNBcGk+LFxuICAgIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4gICAgcHJvZ3JhbUlkOiBBZGRyZXNzID0gRFVFTF9QUk9HUkFNX0lELFxuICApIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNpZ25lciA9IHNpZ25lcjtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldCh0aWNrZXRQZGE6IEFkZHJlc3MpIHtcbiAgICByZXR1cm4gZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGVnYXRlVGlja2V0KFxuICAgIHBsYXllcjogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdmFsaWRhdG9yPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiB0aWNrZXRQZGEsXG4gICAgICBwYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB2YWxpZGF0b3IsXG4gICAgICBhY2NvdW50VHlwZTogYWNjb3VudFR5cGUoXCJUaWNrZXRcIiwgeyBwbGF5ZXIsIHRlbmFudCB9KSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgam9pblF1ZXVlKFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICBwbGF5ZXJEYXRhOiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBxdWV1ZSxcbiAgICAgIHRlbmFudCxcbiAgICAgIHBsYXllckRhdGEsXG4gICAgICBzaWduZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjYW5jZWxUaWNrZXQodGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGxheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudCxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VUaWNrZXQodGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwbGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICAvKipcbiAgICogUG9sbCBMMSBmb3IgdGlja2V0IHN0YXR1cy5cbiAgICogUmV0dXJucyBtYXRjaCBpbmZvIHdoZW4gc3RhdHVzIGJlY29tZXMgTWF0Y2hlZC5cbiAgICovXG4gIGFzeW5jIHBvbGxGb3JNYXRjaChcbiAgICB0aWNrZXRQZGE6IEFkZHJlc3MsXG4gICAgbWF4QXR0ZW1wdHMgPSA2MCxcbiAgICBwb2xsSW50ZXJ2YWwgPSAyMDAwLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPHsgb3Bwb25lbnQ6IEFkZHJlc3M7IG1hdGNoSWQ6IGJpZ2ludCB9IHwgbnVsbD4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4QXR0ZW1wdHM7IGkrKykge1xuICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIG51bGw7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBwb2xsSW50ZXJ2YWwpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1heWJlVGlja2V0ID0gYXdhaXQgZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICAgICAgICBpZiAoIW1heWJlVGlja2V0LmV4aXN0cykgY29udGludWU7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG1heWJlVGlja2V0LmRhdGEuc3RhdHVzO1xuICAgICAgICBpZiAoc3RhdHVzLl9fa2luZCA9PT0gXCJNYXRjaGVkXCIpIHtcbiAgICAgICAgICByZXR1cm4geyBvcHBvbmVudDogc3RhdHVzLm9wcG9uZW50LCBtYXRjaElkOiBzdGF0dXMubWF0Y2hJZCB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIGRlY29kZSBlcnJvcnMgZHVyaW5nIHRyYW5zaXRpb25cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nUGxheWVyIHBvaW50aW5nIGF0IGEgVEVFIFJQQyBlbmRwb2ludC4gKi9cbiAgd2l0aFJwYyh0ZWVVcmw6IHN0cmluZyk6IE1hdGNobWFraW5nUGxheWVyIHtcbiAgICByZXR1cm4gbmV3IE1hdGNobWFraW5nUGxheWVyKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFdBQVcsR0FNWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFrQjtRQUNoQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxNQUFNLCtCQUErQixDQUFDO1lBQy9DLE1BQU0sRUFBRSxJQUFJ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QWM7UUFDcEIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcmVhdGVTb2xhbmFScGMsXG4gIEFjY291bnRSb2xlLFxuICB0eXBlIEFkZHJlc3MsXG4gIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsXG4gIHR5cGUgUnBjLFxuICB0eXBlIFNvbGFuYVJwY0FwaSxcbiAgdHlwZSBJbnN0cnVjdGlvbixcbn0gZnJvbSBcIkBzb2xhbmEva2l0XCI7XG5pbXBvcnQge1xuICBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uQXN5bmMsXG4gIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZmV0Y2hNYXliZU1hdGNoVGlja2V0LFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nUGxheWVyIHtcbiAgcHVibGljIHJwYzogUnBjPFNvbGFuYVJwY0FwaT47XG4gIHB1YmxpYyBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyO1xuICBwdWJsaWMgcHJvZ3JhbUlkOiBBZGRyZXNzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJwYzogUnBjPFNvbGFuYVJwY0FwaT4sXG4gICAgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcixcbiAgICBwcm9ncmFtSWQ6IEFkZHJlc3MgPSBEVUVMX1BST0dSQU1fSUQsXG4gICkge1xuICAgIHRoaXMucnBjID0gcnBjO1xuICAgIHRoaXMuc2lnbmVyID0gc2lnbmVyO1xuICAgIHRoaXMucHJvZ3JhbUlkID0gcHJvZ3JhbUlkO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGlja2V0UGRhKHBsYXllcjogQWRkcmVzcywgdGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRpY2tldFBkYSh0aGlzLnByb2dyYW1JZCwgcGxheWVyLCB0ZW5hbnQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGlja2V0KHRpY2tldFBkYTogQWRkcmVzcykge1xuICAgIHJldHVybiBmZXRjaE1heWJlTWF0Y2hUaWNrZXQodGhpcy5ycGMsIHRpY2tldFBkYSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVUaWNrZXQodGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGxheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudCxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgZGVsZWdhdGVUaWNrZXQoXG4gICAgcGxheWVyOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpY2tldFBkYSA9IGF3YWl0IHRoaXMuZ2V0VGlja2V0UGRhKHBsYXllciwgdGVuYW50KTtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwZGE6IHRpY2tldFBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlRpY2tldFwiLCB7IHBsYXllciwgdGVuYW50IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBqb2luUXVldWUoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgY2FsbGJhY2tQcm9ncmFtPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcXVldWUsXG4gICAgICB0ZW5hbnQsXG4gICAgICBwbGF5ZXJEYXRhLFxuICAgICAgc2lnbmVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICBjb25zdCBpeEZpbmFsID0gY2FsbGJhY2tQcm9ncmFtXG4gICAgICA/IHsgLi4uaXgsIGFjY291bnRzOiBbLi4uaXguYWNjb3VudHMsIHsgYWRkcmVzczogY2FsbGJhY2tQcm9ncmFtLCByb2xlOiAwIGFzIGNvbnN0IH1dIH1cbiAgICAgIDogaXg7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeEZpbmFsIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGxheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudCxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGwgTDEgZm9yIHRpY2tldCBzdGF0dXMuXG4gICAqIFJldHVybnMgbWF0Y2ggaW5mbyB3aGVuIHN0YXR1cyBiZWNvbWVzIE1hdGNoZWQuXG4gICAqL1xuICBhc3luYyBwb2xsRm9yTWF0Y2goXG4gICAgdGlja2V0UGRhOiBBZGRyZXNzLFxuICAgIG1heEF0dGVtcHRzID0gNjAsXG4gICAgcG9sbEludGVydmFsID0gMjAwMCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx7IG9wcG9uZW50OiBBZGRyZXNzOyBtYXRjaElkOiBiaWdpbnQgfSB8IG51bGw+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEF0dGVtcHRzOyBpKyspIHtcbiAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHJldHVybiBudWxsO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgcG9sbEludGVydmFsKSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtYXliZVRpY2tldCA9IGF3YWl0IGZldGNoTWF5YmVNYXRjaFRpY2tldCh0aGlzLnJwYywgdGlja2V0UGRhKTtcbiAgICAgICAgaWYgKCFtYXliZVRpY2tldC5leGlzdHMpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBtYXliZVRpY2tldC5kYXRhLnN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cy5fX2tpbmQgPT09IFwiTWF0Y2hlZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIHsgb3Bwb25lbnQ6IHN0YXR1cy5vcHBvbmVudCwgbWF0Y2hJZDogc3RhdHVzLm1hdGNoSWQgfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBkZWNvZGUgZXJyb3JzIGR1cmluZyB0cmFuc2l0aW9uXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWw6IGZ1bGwgbWF0Y2htYWtpbmcgVEVFIGVudHJ5IGZsb3cuXG4gICAqIENyZWF0ZXMgdGlja2V0IG9uIEwxLCBzZXRzIHVwIHBlcm1pc3Npb24gUERBIChzbyBvbmx5IHBsYXllciArIHF1ZXVlIGF1dGhvcml0eSBjYW4gcmVhZCBpdCksXG4gICAqIGRlbGVnYXRlcyB0aGUgcGVybWlzc2lvbiBQREEgYW5kIHRpY2tldCB0byBURUUsIHRoZW4gam9pbnMgdGhlIHF1ZXVlLlxuICAgKiBVc2UgaW5kaXZpZHVhbCBtZXRob2RzIChjcmVhdGVUaWNrZXQsIGRlbGVnYXRlVGlja2V0LCBqb2luUXVldWUpIGFzIGVzY2FwZSBoYXRjaGVzIGlmIG5lZWRlZC5cbiAgICovXG4gIGFzeW5jIGVudGVyUXVldWUoXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgdGVlUnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzcztcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG5cbiAgICAvLyAxLiBDcmVhdGUgdGlja2V0IG9uIEwxXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVUaWNrZXQodGVuYW50KTtcblxuICAgIC8vIDIuIENyZWF0ZSBQZXJtaXNzaW9uIFBEQSBmb3IgdGhlIHRpY2tldCAoQ1BJIGZyb20gZHVlbCBwcm9ncmFtIHdpdGggaW52b2tlX3NpZ25lZClcbiAgICBjb25zdCBwZXJtaXNzaW9uUGRhID0gYXdhaXQgdXRpbHMuZGVyaXZlUGVybWlzc2lvblBkYSh0aWNrZXRQZGEpO1xuICAgIGNvbnN0IHNldHVwSXggPSBhd2FpdCBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uUGRhLFxuICAgICAgcGVybWlzc2lvblByb2dyYW06IHV0aWxzLlBFUk1JU1NJT05fUFJPR1JBTSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICBhd2FpdCBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIHNldHVwSXgsIHRoaXMuc2lnbmVyKTtcblxuICAgIC8vIDMuIERlbGVnYXRlIFBlcm1pc3Npb24gUERBIHRvIFRFRSAoY2FsbGVkIG9uIHBlcm1pc3Npb24gcHJvZ3JhbSwgcGxheWVyIHNpZ25zKVxuICAgIGNvbnN0IHsgZGVsZWdhdGlvbkJ1ZmZlciwgZGVsZWdhdGlvblJlY29yZCwgZGVsZWdhdGlvbk1ldGFkYXRhIH0gPVxuICAgICAgYXdhaXQgdXRpbHMuZGVyaXZlUGVybWlzc2lvbkRlbGVnYXRpb25QZGFzKHBlcm1pc3Npb25QZGEpO1xuICAgIGNvbnN0IGRlbGVnYXRlUGVybUl4OiBJbnN0cnVjdGlvbiA9IHtcbiAgICAgIHByb2dyYW1BZGRyZXNzOiB1dGlscy5QRVJNSVNTSU9OX1BST0dSQU0sXG4gICAgICBkYXRhOiBuZXcgVWludDhBcnJheShbMywgMCwgMCwgMCwgMCwgMCwgMCwgMF0pLFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgeyBhZGRyZXNzOiB0aGlzLnNpZ25lci5hZGRyZXNzLCByb2xlOiBBY2NvdW50Um9sZS5XUklUQUJMRV9TSUdORVIgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB0aGlzLnNpZ25lci5hZGRyZXNzLCByb2xlOiBBY2NvdW50Um9sZS5SRUFET05MWV9TSUdORVIgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB0aWNrZXRQZGEsIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIHsgYWRkcmVzczogcGVybWlzc2lvblBkYSwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiBcIjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXCIgYXMgQWRkcmVzcywgcm9sZTogQWNjb3VudFJvbGUuUkVBRE9OTFkgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB1dGlscy5QRVJNSVNTSU9OX1BST0dSQU0sIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIHsgYWRkcmVzczogZGVsZWdhdGlvbkJ1ZmZlciwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiBkZWxlZ2F0aW9uUmVjb3JkLCByb2xlOiBBY2NvdW50Um9sZS5XUklUQUJMRSB9LFxuICAgICAgICB7IGFkZHJlc3M6IGRlbGVnYXRpb25NZXRhZGF0YSwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB1dGlscy5ERUxFR0FUSU9OX1BST0dSQU0sIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIC4uLih2YWxpZGF0b3IgPyBbeyBhZGRyZXNzOiB2YWxpZGF0b3IsIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH1dIDogW10pLFxuICAgICAgXSxcbiAgICB9O1xuICAgIGF3YWl0IHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgZGVsZWdhdGVQZXJtSXgsIHRoaXMuc2lnbmVyKTtcblxuICAgIC8vIDQuIERlbGVnYXRlIHRpY2tldCB0byBURUVcbiAgICBhd2FpdCB0aGlzLmRlbGVnYXRlVGlja2V0KHBsYXllciwgdGVuYW50LCB2YWxpZGF0b3IpO1xuXG4gICAgLy8gNS4gSm9pbiB0aGUgcXVldWUgb24gVEVFXG4gICAgY29uc3QgdGVlQ2xpZW50ID0gbmV3IE1hdGNobWFraW5nUGxheWVyKHRlZVJwYywgdGhpcy5zaWduZXIsIHRoaXMucHJvZ3JhbUlkKTtcbiAgICBhd2FpdCB0ZWVDbGllbnQuam9pblF1ZXVlKHF1ZXVlLCB0ZW5hbnQsIHBsYXllckRhdGEsIGNhbGxiYWNrUHJvZ3JhbSk7XG5cbiAgICByZXR1cm4gdGlja2V0UGRhO1xuICB9XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBNYXRjaG1ha2luZ1BsYXllciBwb2ludGluZyBhdCBhIFRFRSBSUEMgZW5kcG9pbnQuICovXG4gIHdpdGhScGModGVlVXJsOiBzdHJpbmcpOiBNYXRjaG1ha2luZ1BsYXllciB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ1BsYXllcihjcmVhdGVTb2xhbmFScGModGVlVXJsKSwgdGhpcy5zaWduZXIsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxufVxuIl19
|
package/dist/tee.d.ts
CHANGED
|
@@ -8,7 +8,8 @@ export declare function getAuthToken(rpcUrl: string, signer: MessagePartialSigne
|
|
|
8
8
|
expiresAt: number;
|
|
9
9
|
}>;
|
|
10
10
|
/**
|
|
11
|
-
* Poll the TEE
|
|
12
|
-
*
|
|
11
|
+
* Poll the TEE until the Permission PDA for the given account is active (authorizedUsers non-empty).
|
|
12
|
+
* This confirms the TEE has picked up the delegated Permission PDA and is enforcing access control.
|
|
13
|
+
* Returns true if active before timeout, false otherwise.
|
|
13
14
|
*/
|
|
14
|
-
export declare function
|
|
15
|
+
export declare function waitForPermission(teeUrlWithToken: string, accountAddress: Address, timeoutMs?: number): Promise<boolean>;
|
package/dist/tee.js
CHANGED
|
@@ -29,34 +29,28 @@ export async function getAuthToken(rpcUrl, signer) {
|
|
|
29
29
|
return { token: authJson.token, expiresAt };
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* Poll the TEE
|
|
33
|
-
*
|
|
32
|
+
* Poll the TEE until the Permission PDA for the given account is active (authorizedUsers non-empty).
|
|
33
|
+
* This confirms the TEE has picked up the delegated Permission PDA and is enforcing access control.
|
|
34
|
+
* Returns true if active before timeout, false otherwise.
|
|
34
35
|
*/
|
|
35
|
-
export async function
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
else {
|
|
43
|
-
permissionUrl = `${baseUrl}/permission?pubkey=${pda}`;
|
|
44
|
-
}
|
|
45
|
-
const start = Date.now();
|
|
46
|
-
while (Date.now() - start < timeoutMs) {
|
|
36
|
+
export async function waitForPermission(teeUrlWithToken, accountAddress, timeoutMs = 10000) {
|
|
37
|
+
const [baseUrl, token] = teeUrlWithToken.replace("/?", "?").split("?");
|
|
38
|
+
const permUrl = token
|
|
39
|
+
? `${baseUrl}/permission?${token}&pubkey=${accountAddress}`
|
|
40
|
+
: `${baseUrl}/permission?pubkey=${accountAddress}`;
|
|
41
|
+
const deadline = Date.now() + timeoutMs;
|
|
42
|
+
while (Date.now() < deadline) {
|
|
47
43
|
try {
|
|
48
|
-
const res = await fetch(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
44
|
+
const res = await fetch(permUrl);
|
|
45
|
+
const json = (await res.json());
|
|
46
|
+
if (json.authorizedUsers && json.authorizedUsers.length > 0)
|
|
47
|
+
return true;
|
|
54
48
|
}
|
|
55
49
|
catch {
|
|
56
|
-
// ignore transient errors
|
|
50
|
+
// ignore transient errors
|
|
57
51
|
}
|
|
58
|
-
await new Promise((r) => setTimeout(r,
|
|
52
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
59
53
|
}
|
|
60
54
|
return false;
|
|
61
55
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHFCQUFxQixHQUd0QixNQUFNLGFBQWEsQ0FBQztBQUlyQjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxNQUFjLEVBQ2QsTUFBNEI7SUFFNUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQzlCLEdBQUcsTUFBTSwwQkFBMEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUNwRCxDQUFDO0lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQTBCLENBQUM7SUFFM0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQWtCLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sYUFBYSxFQUFFO1FBQ25ELE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1FBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN0QixTQUFTO1lBQ1QsU0FBUyxFQUFFLGVBQWU7U0FDM0IsQ0FBQztLQUNILENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQTBELENBQUM7SUFDbEcsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLGVBQXVCLEVBQ3ZCLGNBQXVCLEVBQ3ZCLFNBQVMsR0FBRyxLQUFLO0lBRWpCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLEdBQUcsT0FBTyxlQUFlLEtBQUssV0FBVyxjQUFjLEVBQUU7UUFDM0QsQ0FBQyxDQUFDLEdBQUcsT0FBTyxzQkFBc0IsY0FBYyxFQUFFLENBQUM7SUFFckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUN4QyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUEyQyxDQUFDO1lBQzFFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwwQkFBMEI7UUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0QmFzZTU4RGVjb2RlcixcbiAgY3JlYXRlU2lnbmFibGVNZXNzYWdlLFxuICB0eXBlIEFkZHJlc3MsXG4gIHR5cGUgTWVzc2FnZVBhcnRpYWxTaWduZXIsXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuXG5leHBvcnQgdHlwZSB7IE1lc3NhZ2VQYXJ0aWFsU2lnbmVyIGFzIE1lc3NhZ2VTaWduZXIgfTtcblxuLyoqXG4gKiBBdXRoZW50aWNhdGUgd2l0aCB0aGUgTWFnaWNCbG9jayBURUUgdmlhIGNoYWxsZW5nZS1zaWduIGZsb3cuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdXRoVG9rZW4oXG4gIHJwY1VybDogc3RyaW5nLFxuICBzaWduZXI6IE1lc3NhZ2VQYXJ0aWFsU2lnbmVyLFxuKTogUHJvbWlzZTx7IHRva2VuOiBzdHJpbmc7IGV4cGlyZXNBdDogbnVtYmVyIH0+IHtcbiAgY29uc3QgY2hhbGxlbmdlUmVzID0gYXdhaXQgZmV0Y2goXG4gICAgYCR7cnBjVXJsfS9hdXRoL2NoYWxsZW5nZT9wdWJrZXk9JHtzaWduZXIuYWRkcmVzc31gXG4gICk7XG4gIGlmICghY2hhbGxlbmdlUmVzLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBURUUgY2hhbGxlbmdlIGZhaWxlZDogJHtjaGFsbGVuZ2VSZXMuc3RhdHVzVGV4dH1gKTtcbiAgfVxuICBjb25zdCB7IGNoYWxsZW5nZSB9ID0gKGF3YWl0IGNoYWxsZW5nZVJlcy5qc29uKCkpIGFzIHsgY2hhbGxlbmdlOiBzdHJpbmcgfTtcblxuICBjb25zdCBjaGFsbGVuZ2VCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjaGFsbGVuZ2UpO1xuICBjb25zdCBbc2lnRGljdF0gPSBhd2FpdCBzaWduZXIuc2lnbk1lc3NhZ2VzKFtjcmVhdGVTaWduYWJsZU1lc3NhZ2UoY2hhbGxlbmdlQnl0ZXMpXSk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ0RpY3Rbc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzc107XG4gIGNvbnN0IHNpZ25hdHVyZVN0cmluZyA9IGdldEJhc2U1OERlY29kZXIoKS5kZWNvZGUoc2lnbmF0dXJlKTtcblxuICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IGZldGNoKGAke3JwY1VybH0vYXV0aC9sb2dpbmAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBwdWJrZXk6IHNpZ25lci5hZGRyZXNzLFxuICAgICAgY2hhbGxlbmdlLFxuICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmVTdHJpbmcsXG4gICAgfSksXG4gIH0pO1xuICBjb25zdCBhdXRoSnNvbiA9IChhd2FpdCB0b2tlblJlcy5qc29uKCkpIGFzIHsgdG9rZW46IHN0cmluZzsgZXhwaXJlc0F0PzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9O1xuICBpZiAodG9rZW5SZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBhdXRoZW50aWNhdGU6ICR7YXV0aEpzb24uZXJyb3J9YCk7XG4gIH1cbiAgY29uc3QgZXhwaXJlc0F0ID0gYXV0aEpzb24uZXhwaXJlc0F0ID8/IERhdGUubm93KCkgKyAxMDAwICogNjAgKiA2MCAqIDI0ICogMzA7XG4gIHJldHVybiB7IHRva2VuOiBhdXRoSnNvbi50b2tlbiwgZXhwaXJlc0F0IH07XG59XG5cbi8qKlxuICogUG9sbCB0aGUgVEVFIHVudGlsIHRoZSBQZXJtaXNzaW9uIFBEQSBmb3IgdGhlIGdpdmVuIGFjY291bnQgaXMgYWN0aXZlIChhdXRob3JpemVkVXNlcnMgbm9uLWVtcHR5KS5cbiAqIFRoaXMgY29uZmlybXMgdGhlIFRFRSBoYXMgcGlja2VkIHVwIHRoZSBkZWxlZ2F0ZWQgUGVybWlzc2lvbiBQREEgYW5kIGlzIGVuZm9yY2luZyBhY2Nlc3MgY29udHJvbC5cbiAqIFJldHVybnMgdHJ1ZSBpZiBhY3RpdmUgYmVmb3JlIHRpbWVvdXQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JQZXJtaXNzaW9uKFxuICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgYWNjb3VudEFkZHJlc3M6IEFkZHJlc3MsXG4gIHRpbWVvdXRNcyA9IDEwMDAwLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IFtiYXNlVXJsLCB0b2tlbl0gPSB0ZWVVcmxXaXRoVG9rZW4ucmVwbGFjZShcIi8/XCIsIFwiP1wiKS5zcGxpdChcIj9cIik7XG4gIGNvbnN0IHBlcm1VcmwgPSB0b2tlblxuICAgID8gYCR7YmFzZVVybH0vcGVybWlzc2lvbj8ke3Rva2VufSZwdWJrZXk9JHthY2NvdW50QWRkcmVzc31gXG4gICAgOiBgJHtiYXNlVXJsfS9wZXJtaXNzaW9uP3B1YmtleT0ke2FjY291bnRBZGRyZXNzfWA7XG5cbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1zO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHBlcm1VcmwpO1xuICAgICAgY29uc3QganNvbiA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7IGF1dGhvcml6ZWRVc2Vycz86IHVua25vd25bXSB8IG51bGwgfTtcbiAgICAgIGlmIChqc29uLmF1dGhvcml6ZWRVc2VycyAmJiBqc29uLmF1dGhvcml6ZWRVc2Vycy5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZSB0cmFuc2llbnQgZXJyb3JzXG4gICAgfVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwMCkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuIl19
|
package/dist/transaction.d.ts
CHANGED
|
@@ -2,10 +2,12 @@ import { type Instruction, type SolanaRpcApi, type Rpc, type TransactionSigner }
|
|
|
2
2
|
type SolanaRpc = Rpc<SolanaRpcApi>;
|
|
3
3
|
/**
|
|
4
4
|
* Build, sign with a Kit keypair signer, and send a single instruction.
|
|
5
|
+
* Throws if the transaction is rejected or times out.
|
|
5
6
|
*/
|
|
6
7
|
export declare function sendInstruction(rpc: SolanaRpc, instruction: Instruction, signer: TransactionSigner): Promise<string>;
|
|
7
8
|
/**
|
|
8
9
|
* Build, sign, and send multiple instructions in a single transaction.
|
|
10
|
+
* Throws if the transaction is rejected or times out.
|
|
9
11
|
*/
|
|
10
12
|
export declare function sendInstructions(rpc: SolanaRpc, instructions: Instruction[], signer: TransactionSigner): Promise<string>;
|
|
11
13
|
export {};
|
package/dist/transaction.js
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import { createTransactionMessage, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, appendTransactionMessageInstruction, appendTransactionMessageInstructions, signTransactionMessageWithSigners, getBase64EncodedWireTransaction, pipe, } from "@solana/kit";
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3
|
+
const bigIntReplacer = (_, v) => typeof v === 'bigint' ? v.toString() : v;
|
|
4
|
+
/**
|
|
5
|
+
* Poll for transaction confirmation and throw if it failed.
|
|
6
|
+
* This ensures callers always know immediately when a transaction is rejected.
|
|
7
|
+
*/
|
|
8
|
+
async function confirmTransaction(rpc, sig) {
|
|
9
|
+
for (let i = 0; i < 8; i++) {
|
|
10
|
+
await new Promise(r => setTimeout(r, 1000));
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
const statuses = await rpc.getSignatureStatuses([sig], { searchTransactionHistory: false }).send().catch(() => null);
|
|
13
|
+
const status = statuses?.value?.[0];
|
|
14
|
+
if (status) {
|
|
15
|
+
if (status.err) {
|
|
16
|
+
throw new Error(`[TX] ${sig.slice(0, 16)}... FAILED: ${JSON.stringify(status.err, bigIntReplacer)}`);
|
|
17
|
+
}
|
|
18
|
+
console.log(`[TX] ${sig.slice(0, 16)}... ${status.confirmationStatus}`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// No status after 8s — treat as timeout rather than silently succeeding
|
|
23
|
+
throw new Error(`[TX] ${sig.slice(0, 16)}... confirmation timeout (no status after 8s)`);
|
|
24
|
+
}
|
|
2
25
|
/**
|
|
3
26
|
* Build, sign with a Kit keypair signer, and send a single instruction.
|
|
27
|
+
* Throws if the transaction is rejected or times out.
|
|
4
28
|
*/
|
|
5
29
|
export async function sendInstruction(rpc, instruction, signer) {
|
|
6
30
|
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
|
|
@@ -13,27 +37,12 @@ export async function sendInstruction(rpc, instruction, signer) {
|
|
|
13
37
|
encoding: "base64",
|
|
14
38
|
skipPreflight: true,
|
|
15
39
|
}).send();
|
|
16
|
-
|
|
17
|
-
for (let i = 0; i < 8; i++) {
|
|
18
|
-
await new Promise(r => setTimeout(r, 1000));
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
-
const statuses = await rpc.getSignatureStatuses([sig], { searchTransactionHistory: false }).send().catch(() => null);
|
|
21
|
-
const status = statuses?.value?.[0];
|
|
22
|
-
if (status) {
|
|
23
|
-
if (status.err) {
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
-
console.error(`[TX] ${sig.slice(0, 16)}... FAILED:`, JSON.stringify(status.err, (_, v) => typeof v === 'bigint' ? v.toString() : v));
|
|
26
|
-
}
|
|
27
|
-
else if (status.confirmationStatus) {
|
|
28
|
-
console.log(`[TX] ${sig.slice(0, 16)}... ${status.confirmationStatus}`);
|
|
29
|
-
}
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
40
|
+
await confirmTransaction(rpc, sig);
|
|
33
41
|
return sig;
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
36
44
|
* Build, sign, and send multiple instructions in a single transaction.
|
|
45
|
+
* Throws if the transaction is rejected or times out.
|
|
37
46
|
*/
|
|
38
47
|
export async function sendInstructions(rpc, instructions, signer) {
|
|
39
48
|
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
|
|
@@ -42,9 +51,11 @@ export async function sendInstructions(rpc, instructions, signer) {
|
|
|
42
51
|
const signedTx = await signTransactionMessageWithSigners(tx);
|
|
43
52
|
const encoded = getBase64EncodedWireTransaction(signedTx);
|
|
44
53
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
|
-
|
|
54
|
+
const sig = await rpc.sendTransaction(encoded, {
|
|
46
55
|
encoding: "base64",
|
|
47
56
|
skipPreflight: true,
|
|
48
57
|
}).send();
|
|
58
|
+
await confirmTransaction(rpc, sig);
|
|
59
|
+
return sig;
|
|
49
60
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMsMkNBQTJDLEVBQzNDLG1DQUFtQyxFQUNuQyxvQ0FBb0MsRUFDcEMsaUNBQWlDLEVBQ2pDLCtCQUErQixFQUMvQixJQUFJLEdBS0wsTUFBTSxhQUFhLENBQUM7QUFJckIsOERBQThEO0FBQzlELE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBUyxFQUFFLENBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUUzRjs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsa0JBQWtCLENBQUMsR0FBYyxFQUFFLEdBQVc7SUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsOERBQThEO1FBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU8sR0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5SCxNQUFNLE1BQU0sR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxD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UUFDckQsUUFBUSxFQUFFLFFBQVE7UUFDbEIsYUFBYSxFQUFFLElBQUk7S0FDcEIsQ0FBQyxDQUFDLElBQUksRUFBc0IsQ0FBQztJQUU5QixNQUFNLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcmVhdGVUcmFuc2FjdGlvbk1lc3NhZ2UsXG4gIHNldFRyYW5zYWN0aW9uTWVzc2FnZUZlZVBheWVyU2lnbmVyLFxuICBzZXRUcmFuc2FjdGlvbk1lc3NhZ2VMaWZldGltZVVzaW5nQmxvY2toYXNoLFxuICBhcHBlbmRUcmFuc2FjdGlvbk1lc3NhZ2VJbnN0cnVjdGlvbixcbiAgYXBwZW5kVHJhbnNhY3Rpb25NZXNzYWdlSW5zdHJ1Y3Rpb25zLFxuICBzaWduVHJhbnNhY3Rpb25NZXNzYWdlV2l0aFNpZ25lcnMsXG4gIGdldEJhc2U2NEVuY29kZWRXaXJlVHJhbnNhY3Rpb24sXG4gIHBpcGUsXG4gIHR5cGUgSW5zdHJ1Y3Rpb24sXG4gIHR5cGUgU29sYW5hUnBjQXBpLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBUcmFuc2FjdGlvblNpZ25lcixcbn0gZnJvbSBcIkBzb2xhbmEva2l0XCI7XG5cbnR5cGUgU29sYW5hUnBjID0gUnBjPFNvbGFuYVJwY0FwaT47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBiaWdJbnRSZXBsYWNlciA9IChfOiBzdHJpbmcsIHY6IHVua25vd24pID0+IHR5cGVvZiB2ID09PSAnYmlnaW50JyA/IHYudG9TdHJpbmcoKSA6IHY7XG5cbi8qKlxuICogUG9sbCBmb3IgdHJhbnNhY3Rpb24gY29uZmlybWF0aW9uIGFuZCB0aHJvdyBpZiBpdCBmYWlsZWQuXG4gKiBUaGlzIGVuc3VyZXMgY2FsbGVycyBhbHdheXMga25vdyBpbW1lZGlhdGVseSB3aGVuIGEgdHJhbnNhY3Rpb24gaXMgcmVqZWN0ZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2FjdGlvbihycGM6IFNvbGFuYVJwYywgc2lnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3Qgc3RhdHVzZXMgPSBhd2FpdCAocnBjIGFzIGFueSkuZ2V0U2lnbmF0dXJlU3RhdHVzZXMoW3NpZ10sIHsgc2VhcmNoVHJhbnNhY3Rpb25IaXN0b3J5OiBmYWxzZSB9KS5zZW5kKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgY29uc3Qgc3RhdHVzID0gc3RhdHVzZXM/LnZhbHVlPy5bMF07XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgaWYgKHN0YXR1cy5lcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbVFhdICR7c2lnLnNsaWNlKDAsIDE2KX0uLi4gRkFJTEVEOiAke0pTT04uc3RyaW5naWZ5KHN0YXR1cy5lcnIsIGJpZ0ludFJlcGxhY2VyKX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKGBbVFhdICR7c2lnLnNsaWNlKDAsIDE2KX0uLi4gJHtzdGF0dXMuY29uZmlybWF0aW9uU3RhdHVzfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvLyBObyBzdGF0dXMgYWZ0ZXIgOHMg4oCUIHRyZWF0IGFzIHRpbWVvdXQgcmF0aGVyIHRoYW4gc2lsZW50bHkgc3VjY2VlZGluZ1xuICB0aHJvdyBuZXcgRXJyb3IoYFtUWF0gJHtzaWcuc2xpY2UoMCwgMTYpfS4uLiBjb25maXJtYXRpb24gdGltZW91dCAobm8gc3RhdHVzIGFmdGVyIDhzKWApO1xufVxuXG4vKipcbiAqIEJ1aWxkLCBzaWduIHdpdGggYSBLaXQga2V5cGFpciBzaWduZXIsIGFuZCBzZW5kIGEgc2luZ2xlIGluc3RydWN0aW9uLlxuICogVGhyb3dzIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyByZWplY3RlZCBvciB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kSW5zdHJ1Y3Rpb24oXG4gIHJwYzogU29sYW5hUnBjLFxuICBpbnN0cnVjdGlvbjogSW5zdHJ1Y3Rpb24sXG4gIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHZhbHVlOiBsYXRlc3RCbG9ja2hhc2ggfSA9IGF3YWl0IHJwYy5nZXRMYXRlc3RCbG9ja2hhc2goKS5zZW5kKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgdHg6IGFueSA9IHBpcGUoXG4gICAgY3JlYXRlVHJhbnNhY3Rpb25NZXNzYWdlKHsgdmVyc2lvbjogMCBhcyBjb25zdCB9KSxcbiAgICAobSkgPT4gc2V0VHJhbnNhY3Rpb25NZXNzYWdlRmVlUGF5ZXJTaWduZXIoc2lnbmVyLCBtKSxcbiAgICAobSkgPT4gc2V0VHJhbnNhY3Rpb25NZXNzYWdlTGlmZXRpbWVVc2luZ0Jsb2NraGFzaChsYXRlc3RCbG9ja2hhc2gsIG0pLFxuICAgIChtKSA9PiBhcHBlbmRUcmFuc2FjdGlvbk1lc3NhZ2VJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgbSksXG4gICk7XG5cbiAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBzaWduVHJhbnNhY3Rpb25NZXNzYWdlV2l0aFNpZ25lcnModHgpO1xuICBjb25zdCBlbmNvZGVkID0gZ2V0QmFzZTY0RW5jb2RlZFdpcmVUcmFuc2FjdGlvbihzaWduZWRUeCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3Qgc2lnID0gYXdhaXQgKHJwYy5zZW5kVHJhbnNhY3Rpb24oZW5jb2RlZCBhcyBhbnksIHtcbiAgICBlbmNvZGluZzogXCJiYXNlNjRcIixcbiAgICBza2lwUHJlZmxpZ2h0OiB0cnVlLFxuICB9KS5zZW5kKCkgYXMgUHJvbWlzZTxzdHJpbmc+KTtcblxuICBhd2FpdCBjb25maXJtVHJhbnNhY3Rpb24ocnBjLCBzaWcpO1xuICByZXR1cm4gc2lnO1xufVxuXG4vKipcbiAqIEJ1aWxkLCBzaWduLCBhbmQgc2VuZCBtdWx0aXBsZSBpbnN0cnVjdGlvbnMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uXG4gKiBUaHJvd3MgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHJlamVjdGVkIG9yIHRpbWVzIG91dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRJbnN0cnVjdGlvbnMoXG4gIHJwYzogU29sYW5hUnBjLFxuICBpbnN0cnVjdGlvbnM6IEluc3RydWN0aW9uW10sXG4gIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHZhbHVlOiBsYXRlc3RCbG9ja2hhc2ggfSA9IGF3YWl0IHJwYy5nZXRMYXRlc3RCbG9ja2hhc2goKS5zZW5kKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgdHg6IGFueSA9IHBpcGUoXG4gICAgY3JlYXRlVHJhbnNhY3Rpb25NZXNzYWdlKHsgdmVyc2lvbjogMCBhcyBjb25zdCB9KSxcbiAgICAobSkgPT4gc2V0VHJhbnNhY3Rpb25NZXNzYWdlRmVlUGF5ZXJTaWduZXIoc2lnbmVyLCBtKSxcbiAgICAobSkgPT4gc2V0VHJhbnNhY3Rpb25NZXNzYWdlTGlmZXRpbWVVc2luZ0Jsb2NraGFzaChsYXRlc3RCbG9ja2hhc2gsIG0pLFxuICAgIChtKSA9PiBhcHBlbmRUcmFuc2FjdGlvbk1lc3NhZ2VJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zLCBtKSxcbiAgKTtcblxuICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHNpZ25UcmFuc2FjdGlvbk1lc3NhZ2VXaXRoU2lnbmVycyh0eCk7XG4gIGNvbnN0IGVuY29kZWQgPSBnZXRCYXNlNjRFbmNvZGVkV2lyZVRyYW5zYWN0aW9uKHNpZ25lZFR4KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBzaWcgPSBhd2FpdCAocnBjLnNlbmRUcmFuc2FjdGlvbihlbmNvZGVkIGFzIGFueSwge1xuICAgIGVuY29kaW5nOiBcImJhc2U2NFwiLFxuICAgIHNraXBQcmVmbGlnaHQ6IHRydWUsXG4gIH0pLnNlbmQoKSBhcyBQcm9taXNlPHN0cmluZz4pO1xuXG4gIGF3YWl0IGNvbmZpcm1UcmFuc2FjdGlvbihycGMsIHNpZyk7XG4gIHJldHVybiBzaWc7XG59XG4iXX0=
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import { type Address } from "@solana/kit";
|
|
2
|
+
export declare const PERMISSION_PROGRAM: Address;
|
|
3
|
+
export declare const DELEGATION_PROGRAM: Address;
|
|
4
|
+
/** Derives the Permission PDA for a given permissioned account. */
|
|
5
|
+
export declare function derivePermissionPda(accountAddress: Address): Promise<Address>;
|
|
6
|
+
/** Derives the DELeGG delegation PDAs for the Permission PDA (used in DelegatePermission ix). */
|
|
7
|
+
export declare function derivePermissionDelegationPdas(permissionPda: Address): Promise<{
|
|
8
|
+
delegationBuffer: Address;
|
|
9
|
+
delegationRecord: Address;
|
|
10
|
+
delegationMetadata: Address;
|
|
11
|
+
}>;
|
|
2
12
|
export declare const QUEUE_SEED = "queue";
|
|
3
13
|
export declare const TENANT_SEED = "tenant";
|
|
4
14
|
export declare const TICKET_SEED = "ticket";
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
import { getProgramDerivedAddress, getAddressEncoder, getUtf8Encoder, } from "@solana/kit";
|
|
2
2
|
const addressEncoder = getAddressEncoder();
|
|
3
3
|
const utf8Encoder = getUtf8Encoder();
|
|
4
|
+
export const PERMISSION_PROGRAM = "ACLseoPoyC3cBqoUtkbjZ4aDrkurZW86v19pXz2XQnp1";
|
|
5
|
+
export const DELEGATION_PROGRAM = "DELeGGvXpWV2fqJUhqcF5ZSYMS4JTLjteaAMARRSaeSh";
|
|
6
|
+
/** Derives the Permission PDA for a given permissioned account. */
|
|
7
|
+
export async function derivePermissionPda(accountAddress) {
|
|
8
|
+
const [pda] = await getProgramDerivedAddress({
|
|
9
|
+
programAddress: PERMISSION_PROGRAM,
|
|
10
|
+
seeds: [utf8Encoder.encode("permission:"), addressEncoder.encode(accountAddress)],
|
|
11
|
+
});
|
|
12
|
+
return pda;
|
|
13
|
+
}
|
|
14
|
+
/** Derives the DELeGG delegation PDAs for the Permission PDA (used in DelegatePermission ix). */
|
|
15
|
+
export async function derivePermissionDelegationPdas(permissionPda) {
|
|
16
|
+
const [delegationRecord] = await getProgramDerivedAddress({
|
|
17
|
+
programAddress: DELEGATION_PROGRAM,
|
|
18
|
+
seeds: [utf8Encoder.encode("delegation"), addressEncoder.encode(permissionPda)],
|
|
19
|
+
});
|
|
20
|
+
const [delegationMetadata] = await getProgramDerivedAddress({
|
|
21
|
+
programAddress: DELEGATION_PROGRAM,
|
|
22
|
+
seeds: [utf8Encoder.encode("delegation-metadata"), addressEncoder.encode(permissionPda)],
|
|
23
|
+
});
|
|
24
|
+
// Buffer PDA is under the ownerProgram (PERMISSION_PROGRAM for the Permission PDA)
|
|
25
|
+
const [delegationBuffer] = await getProgramDerivedAddress({
|
|
26
|
+
programAddress: PERMISSION_PROGRAM,
|
|
27
|
+
seeds: [utf8Encoder.encode("buffer"), addressEncoder.encode(permissionPda)],
|
|
28
|
+
});
|
|
29
|
+
return { delegationBuffer, delegationRecord, delegationMetadata };
|
|
30
|
+
}
|
|
4
31
|
export const QUEUE_SEED = "queue";
|
|
5
32
|
export const TENANT_SEED = "tenant";
|
|
6
33
|
export const TICKET_SEED = "ticket";
|
|
@@ -29,4 +56,4 @@ export async function deriveTicketPda(programId, player, tenant) {
|
|
|
29
56
|
});
|
|
30
57
|
return pda;
|
|
31
58
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsY0FBYyxHQUVmLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7QUFDM0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsOENBQXlELENBQUM7QUFDNUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsOENBQXlELENBQUM7QUFFNUYsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsY0FBdUI7SUFDL0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7UUFDM0MsY0FBYyxFQUFFLGtCQUFrQjtRQUNsQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDbEYsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsaUdBQWlHO0FBQ2pHLE1BQU0sQ0FBQyxLQUFLLFVBQVUsOEJBQThCLENBQUMsYUFBc0I7SUFLekUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQztRQUN4RCxjQUFjLEVBQUUsa0JBQWtCO1FBQ2xDLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNoRixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLHdCQUF3QixDQUFDO1FBQzFELGNBQWMsRUFBRSxrQkFBa0I7UUFDbEMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDekYsQ0FBQyxDQUFDO0lBQ0gsbUZBQW1GO0lBQ25GLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7UUFDeEQsY0FBYyxFQUFFLGtCQUFrQjtRQUNsQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDNUUsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDbEMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQztBQUNwQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLFNBQWtCLEVBQUUsU0FBa0I7SUFDekUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7UUFDM0MsY0FBYyxFQUFFLFNBQVM7UUFDekIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzFFLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLFNBQWtCLEVBQUUsU0FBa0I7SUFDMUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sd0JBQXdCLENBQUM7UUFDM0MsY0FBYyxFQUFFLFNBQVM7UUFDekIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNFLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUNuQyxTQUFrQixFQUNsQixNQUFlLEVBQ2YsTUFBZTtJQUVmLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLHdCQUF3QixDQUFDO1FBQzNDLGNBQWMsRUFBRSxTQUFTO1FBQ3pCLEtBQUssRUFBRTtZQUNMLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQy9CLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzdCLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQzlCO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzLFxuICBnZXRBZGRyZXNzRW5jb2RlcixcbiAgZ2V0VXRmOEVuY29kZXIsXG4gIHR5cGUgQWRkcmVzcyxcbn0gZnJvbSBcIkBzb2xhbmEva2l0XCI7XG5cbmNvbnN0IGFkZHJlc3NFbmNvZGVyID0gZ2V0QWRkcmVzc0VuY29kZXIoKTtcbmNvbnN0IHV0ZjhFbmNvZGVyID0gZ2V0VXRmOEVuY29kZXIoKTtcblxuZXhwb3J0IGNvbnN0IFBFUk1JU1NJT05fUFJPR1JBTSA9IFwiQUNMc2VvUG95QzNjQnFvVXRrYmpaNGFEcmt1clpXODZ2MTlwWHoyWFFucDFcIiBhcyBBZGRyZXNzO1xuZXhwb3J0IGNvbnN0IERFTEVHQVRJT05fUFJPR1JBTSA9IFwiREVMZUdHdlhwV1YyZnFKVWhxY0Y1WlNZTVM0SlRManRlYUFNQVJSU2FlU2hcIiBhcyBBZGRyZXNzO1xuXG4vKiogRGVyaXZlcyB0aGUgUGVybWlzc2lvbiBQREEgZm9yIGEgZ2l2ZW4gcGVybWlzc2lvbmVkIGFjY291bnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVyaXZlUGVybWlzc2lvblBkYShhY2NvdW50QWRkcmVzczogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICBjb25zdCBbcGRhXSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7XG4gICAgcHJvZ3JhbUFkZHJlc3M6IFBFUk1JU1NJT05fUFJPR1JBTSxcbiAgICBzZWVkczogW3V0ZjhFbmNvZGVyLmVuY29kZShcInBlcm1pc3Npb246XCIpLCBhZGRyZXNzRW5jb2Rlci5lbmNvZGUoYWNjb3VudEFkZHJlc3MpXSxcbiAgfSk7XG4gIHJldHVybiBwZGE7XG59XG5cbi8qKiBEZXJpdmVzIHRoZSBERUxlR0cgZGVsZWdhdGlvbiBQREFzIGZvciB0aGUgUGVybWlzc2lvbiBQREEgKHVzZWQgaW4gRGVsZWdhdGVQZXJtaXNzaW9uIGl4KS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZXJpdmVQZXJtaXNzaW9uRGVsZWdhdGlvblBkYXMocGVybWlzc2lvblBkYTogQWRkcmVzcyk6IFByb21pc2U8e1xuICBkZWxlZ2F0aW9uQnVmZmVyOiBBZGRyZXNzO1xuICBkZWxlZ2F0aW9uUmVjb3JkOiBBZGRyZXNzO1xuICBkZWxlZ2F0aW9uTWV0YWRhdGE6IEFkZHJlc3M7XG59PiB7XG4gIGNvbnN0IFtkZWxlZ2F0aW9uUmVjb3JkXSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7XG4gICAgcHJvZ3JhbUFkZHJlc3M6IERFTEVHQVRJT05fUFJPR1JBTSxcbiAgICBzZWVkczogW3V0ZjhFbmNvZGVyLmVuY29kZShcImRlbGVnYXRpb25cIiksIGFkZHJlc3NFbmNvZGVyLmVuY29kZShwZXJtaXNzaW9uUGRhKV0sXG4gIH0pO1xuICBjb25zdCBbZGVsZWdhdGlvbk1ldGFkYXRhXSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7XG4gICAgcHJvZ3JhbUFkZHJlc3M6IERFTEVHQVRJT05fUFJPR1JBTSxcbiAgICBzZWVkczogW3V0ZjhFbmNvZGVyLmVuY29kZShcImRlbGVnYXRpb24tbWV0YWRhdGFcIiksIGFkZHJlc3NFbmNvZGVyLmVuY29kZShwZXJtaXNzaW9uUGRhKV0sXG4gIH0pO1xuICAvLyBCdWZmZXIgUERBIGlzIHVuZGVyIHRoZSBvd25lclByb2dyYW0gKFBFUk1JU1NJT05fUFJPR1JBTSBmb3IgdGhlIFBlcm1pc3Npb24gUERBKVxuICBjb25zdCBbZGVsZWdhdGlvbkJ1ZmZlcl0gPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3Moe1xuICAgIHByb2dyYW1BZGRyZXNzOiBQRVJNSVNTSU9OX1BST0dSQU0sXG4gICAgc2VlZHM6IFt1dGY4RW5jb2Rlci5lbmNvZGUoXCJidWZmZXJcIiksIGFkZHJlc3NFbmNvZGVyLmVuY29kZShwZXJtaXNzaW9uUGRhKV0sXG4gIH0pO1xuICByZXR1cm4geyBkZWxlZ2F0aW9uQnVmZmVyLCBkZWxlZ2F0aW9uUmVjb3JkLCBkZWxlZ2F0aW9uTWV0YWRhdGEgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFFVRVVFX1NFRUQgPSBcInF1ZXVlXCI7XG5leHBvcnQgY29uc3QgVEVOQU5UX1NFRUQgPSBcInRlbmFudFwiO1xuZXhwb3J0IGNvbnN0IFRJQ0tFVF9TRUVEID0gXCJ0aWNrZXRcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcml2ZVF1ZXVlUGRhKHByb2dyYW1JZDogQWRkcmVzcywgYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gIGNvbnN0IFtwZGFdID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHtcbiAgICBwcm9ncmFtQWRkcmVzczogcHJvZ3JhbUlkLFxuICAgIHNlZWRzOiBbdXRmOEVuY29kZXIuZW5jb2RlKFFVRVVFX1NFRUQpLCBhZGRyZXNzRW5jb2Rlci5lbmNvZGUoYXV0aG9yaXR5KV0sXG4gIH0pO1xuICByZXR1cm4gcGRhO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVyaXZlVGVuYW50UGRhKHByb2dyYW1JZDogQWRkcmVzcywgYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gIGNvbnN0IFtwZGFdID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHtcbiAgICBwcm9ncmFtQWRkcmVzczogcHJvZ3JhbUlkLFxuICAgIHNlZWRzOiBbdXRmOEVuY29kZXIuZW5jb2RlKFRFTkFOVF9TRUVEKSwgYWRkcmVzc0VuY29kZXIuZW5jb2RlKGF1dGhvcml0eSldLFxuICB9KTtcbiAgcmV0dXJuIHBkYTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcml2ZVRpY2tldFBkYShcbiAgcHJvZ3JhbUlkOiBBZGRyZXNzLFxuICBwbGF5ZXI6IEFkZHJlc3MsXG4gIHRlbmFudDogQWRkcmVzc1xuKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gIGNvbnN0IFtwZGFdID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHtcbiAgICBwcm9ncmFtQWRkcmVzczogcHJvZ3JhbUlkLFxuICAgIHNlZWRzOiBbXG4gICAgICB1dGY4RW5jb2Rlci5lbmNvZGUoVElDS0VUX1NFRUQpLFxuICAgICAgYWRkcmVzc0VuY29kZXIuZW5jb2RlKHBsYXllciksXG4gICAgICBhZGRyZXNzRW5jb2Rlci5lbmNvZGUodGVuYW50KSxcbiAgICBdLFxuICB9KTtcbiAgcmV0dXJuIHBkYTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
package/src/admin.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSolanaRpc,
|
|
3
|
+
AccountRole,
|
|
3
4
|
type Address,
|
|
4
5
|
type TransactionSigner,
|
|
5
6
|
type Rpc,
|
|
6
7
|
type SolanaRpcApi,
|
|
8
|
+
type Instruction,
|
|
7
9
|
} from "@solana/kit";
|
|
8
10
|
import {
|
|
9
11
|
getInitializeTenantInstructionAsync,
|
|
10
12
|
getInitializeQueueInstructionAsync,
|
|
11
13
|
getDelegateQueueInstructionAsync,
|
|
14
|
+
getSetupQueuePermissionInstructionAsync,
|
|
12
15
|
getFlushMatchesInstruction,
|
|
13
16
|
getCommitTicketsInstruction,
|
|
14
17
|
fetchQueue,
|
|
@@ -114,6 +117,39 @@ export class MatchmakingAdmin {
|
|
|
114
117
|
validator?: Address,
|
|
115
118
|
): Promise<string> {
|
|
116
119
|
const queuePda = await this.getQueuePda(authority);
|
|
120
|
+
|
|
121
|
+
// 1. Create Permission PDA for the queue (CPI from duel program with invoke_signed)
|
|
122
|
+
const permissionPda = await utils.derivePermissionPda(queuePda);
|
|
123
|
+
const setupIx = await getSetupQueuePermissionInstructionAsync({
|
|
124
|
+
authority: this.signer,
|
|
125
|
+
permission: permissionPda,
|
|
126
|
+
permissionProgram: utils.PERMISSION_PROGRAM,
|
|
127
|
+
}, { programAddress: this.programId });
|
|
128
|
+
await sendInstruction(this.rpc, setupIx, this.signer);
|
|
129
|
+
|
|
130
|
+
// 2. Delegate Permission PDA to TEE (called on permission program, authority signs)
|
|
131
|
+
const { delegationBuffer, delegationRecord, delegationMetadata } =
|
|
132
|
+
await utils.derivePermissionDelegationPdas(permissionPda);
|
|
133
|
+
const delegatePermIx: Instruction = {
|
|
134
|
+
programAddress: utils.PERMISSION_PROGRAM,
|
|
135
|
+
data: new Uint8Array([3, 0, 0, 0, 0, 0, 0, 0]), // discriminator = 3 (DelegatePermission)
|
|
136
|
+
accounts: [
|
|
137
|
+
{ address: this.signer.address, role: AccountRole.WRITABLE_SIGNER }, // payer
|
|
138
|
+
{ address: this.signer.address, role: AccountRole.READONLY_SIGNER }, // authority
|
|
139
|
+
{ address: queuePda, role: AccountRole.READONLY }, // permissionedAccount (not signer)
|
|
140
|
+
{ address: permissionPda, role: AccountRole.WRITABLE }, // permission PDA
|
|
141
|
+
{ address: "11111111111111111111111111111111" as Address, role: AccountRole.READONLY }, // system_program
|
|
142
|
+
{ address: utils.PERMISSION_PROGRAM, role: AccountRole.READONLY }, // owner_program
|
|
143
|
+
{ address: delegationBuffer, role: AccountRole.WRITABLE },
|
|
144
|
+
{ address: delegationRecord, role: AccountRole.WRITABLE },
|
|
145
|
+
{ address: delegationMetadata, role: AccountRole.WRITABLE },
|
|
146
|
+
{ address: utils.DELEGATION_PROGRAM, role: AccountRole.READONLY },
|
|
147
|
+
...(validator ? [{ address: validator, role: AccountRole.READONLY }] : []),
|
|
148
|
+
],
|
|
149
|
+
};
|
|
150
|
+
await sendInstruction(this.rpc, delegatePermIx, this.signer);
|
|
151
|
+
|
|
152
|
+
// 3. Delegate queue PDA to TEE (existing DELeGG flow)
|
|
117
153
|
const ix = await getDelegateQueueInstructionAsync({
|
|
118
154
|
pda: queuePda,
|
|
119
155
|
payer: this.signer,
|
|
@@ -127,7 +163,6 @@ export class MatchmakingAdmin {
|
|
|
127
163
|
queue: Address,
|
|
128
164
|
tenant: Address,
|
|
129
165
|
ticketPdas: Address[],
|
|
130
|
-
callbackProgram?: Address,
|
|
131
166
|
): Promise<string> {
|
|
132
167
|
const ix = getFlushMatchesInstruction({
|
|
133
168
|
queue,
|
|
@@ -135,14 +170,12 @@ export class MatchmakingAdmin {
|
|
|
135
170
|
signer: this.signer,
|
|
136
171
|
}, { programAddress: this.programId });
|
|
137
172
|
|
|
138
|
-
const remainingAccounts = [
|
|
139
|
-
...ticketPdas.map((address) => ({ address, role: 1 as const })),
|
|
140
|
-
...(callbackProgram ? [{ address: callbackProgram, role: 0 as const }] : []),
|
|
141
|
-
];
|
|
142
|
-
|
|
143
173
|
const ixWithRemaining = {
|
|
144
174
|
...ix,
|
|
145
|
-
accounts: [
|
|
175
|
+
accounts: [
|
|
176
|
+
...ix.accounts,
|
|
177
|
+
...ticketPdas.map((address) => ({ address, role: 1 as const })),
|
|
178
|
+
],
|
|
146
179
|
};
|
|
147
180
|
|
|
148
181
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -170,6 +203,33 @@ export class MatchmakingAdmin {
|
|
|
170
203
|
return sendInstruction(this.rpc, ixWithRemaining as any, this.signer);
|
|
171
204
|
}
|
|
172
205
|
|
|
206
|
+
/**
|
|
207
|
+
* High-level: full match resolution flow (runs on TEE).
|
|
208
|
+
* Reads the queue's pending matches, flushes them (updating opponent tickets),
|
|
209
|
+
* waits for TEE settlement, then commits all tickets back to L1.
|
|
210
|
+
* Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
|
|
211
|
+
*/
|
|
212
|
+
async resolveMatches(
|
|
213
|
+
queue: Address,
|
|
214
|
+
tenant: Address,
|
|
215
|
+
ticketPdas: Address[],
|
|
216
|
+
settlementDelayMs = 3000,
|
|
217
|
+
): Promise<void> {
|
|
218
|
+
const queueData = await this.getQueue(queue);
|
|
219
|
+
const pendingTicketPdas = await Promise.all(
|
|
220
|
+
queueData.data.pendingMatches.map((pm) =>
|
|
221
|
+
utils.deriveTicketPda(this.programId, pm.player, tenant),
|
|
222
|
+
),
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
if (pendingTicketPdas.length > 0) {
|
|
226
|
+
await this.flushMatches(queue, tenant, pendingTicketPdas);
|
|
227
|
+
await new Promise((r) => setTimeout(r, settlementDelayMs));
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
await this.commitTickets(tenant, ticketPdas);
|
|
231
|
+
}
|
|
232
|
+
|
|
173
233
|
/** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
|
|
174
234
|
withRpc(teeUrl: string): MatchmakingAdmin {
|
|
175
235
|
return new MatchmakingAdmin(createSolanaRpc(teeUrl), this.signer, this.programId);
|