@1upmonster/duel 0.1.8 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +110 -59
  2. package/dist/admin.d.ts +25 -40
  3. package/dist/admin.js +93 -114
  4. package/dist/encryption.js +1 -2
  5. package/dist/generated/duel/accounts/index.d.ts +10 -0
  6. package/dist/generated/duel/accounts/index.js +11 -0
  7. package/dist/generated/duel/accounts/matchTicket.d.ts +38 -0
  8. package/dist/generated/duel/accounts/matchTicket.js +45 -0
  9. package/dist/generated/duel/accounts/queue.d.ts +42 -0
  10. package/dist/generated/duel/accounts/queue.js +45 -0
  11. package/dist/generated/duel/accounts/tenant.d.ts +41 -0
  12. package/dist/generated/duel/accounts/tenant.js +44 -0
  13. package/dist/generated/duel/errors/duel.d.ts +31 -0
  14. package/dist/generated/duel/errors/duel.js +35 -0
  15. package/dist/generated/duel/errors/index.d.ts +8 -0
  16. package/dist/generated/duel/errors/index.js +9 -0
  17. package/dist/generated/duel/index.d.ts +12 -0
  18. package/dist/generated/duel/index.js +13 -0
  19. package/dist/generated/duel/instructions/cancelTicket.d.ts +45 -0
  20. package/dist/generated/duel/instructions/cancelTicket.js +56 -0
  21. package/dist/generated/duel/instructions/closeTicket.d.ts +45 -0
  22. package/dist/generated/duel/instructions/closeTicket.js +56 -0
  23. package/dist/generated/duel/instructions/commitTickets.d.ts +39 -0
  24. package/dist/generated/duel/instructions/commitTickets.js +50 -0
  25. package/dist/generated/duel/instructions/createTicket.d.ts +48 -0
  26. package/dist/generated/duel/instructions/createTicket.js +63 -0
  27. package/dist/generated/duel/instructions/delegateQueue.d.ts +69 -0
  28. package/dist/generated/duel/instructions/delegateQueue.js +90 -0
  29. package/dist/generated/duel/instructions/delegateTicket.d.ts +69 -0
  30. package/dist/generated/duel/instructions/delegateTicket.js +90 -0
  31. package/dist/generated/duel/instructions/flushMatches.d.ts +37 -0
  32. package/dist/generated/duel/instructions/flushMatches.js +43 -0
  33. package/dist/generated/duel/instructions/index.d.ts +19 -0
  34. package/dist/generated/duel/instructions/index.js +20 -0
  35. package/dist/generated/duel/instructions/initializeQueue.d.ts +48 -0
  36. package/dist/generated/duel/instructions/initializeQueue.js +63 -0
  37. package/dist/generated/duel/instructions/initializeTenant.d.ts +70 -0
  38. package/dist/generated/duel/instructions/initializeTenant.js +67 -0
  39. package/dist/generated/duel/instructions/joinQueue.d.ts +51 -0
  40. package/dist/generated/duel/instructions/joinQueue.js +56 -0
  41. package/dist/generated/duel/instructions/processUndelegation.d.ts +43 -0
  42. package/dist/generated/duel/instructions/processUndelegation.js +49 -0
  43. package/dist/generated/duel/instructions/setupTicketPermission.d.ts +54 -0
  44. package/dist/generated/duel/instructions/setupTicketPermission.js +63 -0
  45. package/dist/generated/duel/programs/duel.d.ts +92 -0
  46. package/dist/generated/duel/programs/duel.js +146 -0
  47. package/dist/generated/duel/programs/index.d.ts +8 -0
  48. package/dist/generated/duel/programs/index.js +9 -0
  49. package/dist/generated/duel/types/accountType.d.ts +25 -0
  50. package/dist/generated/duel/types/accountType.js +25 -0
  51. package/dist/generated/duel/types/index.d.ts +13 -0
  52. package/dist/generated/duel/types/index.js +14 -0
  53. package/dist/generated/duel/types/matchEntry.d.ts +23 -0
  54. package/dist/generated/duel/types/matchEntry.js +18 -0
  55. package/dist/generated/duel/types/matchFound.d.ts +23 -0
  56. package/dist/generated/duel/types/matchFound.js +18 -0
  57. package/dist/generated/duel/types/pendingMatch.d.ts +21 -0
  58. package/dist/generated/duel/types/pendingMatch.js +18 -0
  59. package/dist/generated/duel/types/queueEntry.d.ts +19 -0
  60. package/dist/generated/duel/types/queueEntry.js +18 -0
  61. package/dist/generated/duel/types/ticketStatus.d.ts +40 -0
  62. package/dist/generated/duel/types/ticketStatus.js +25 -0
  63. package/dist/generated/rps-game/accounts/gameSession.d.ts +40 -0
  64. package/dist/generated/rps-game/accounts/gameSession.js +45 -0
  65. package/dist/generated/rps-game/accounts/index.d.ts +9 -0
  66. package/dist/generated/rps-game/accounts/index.js +10 -0
  67. package/dist/generated/rps-game/accounts/playerProfile.d.ts +36 -0
  68. package/dist/generated/rps-game/accounts/playerProfile.js +47 -0
  69. package/dist/generated/rps-game/errors/index.d.ts +8 -0
  70. package/dist/generated/rps-game/errors/index.js +9 -0
  71. package/dist/generated/rps-game/errors/rpsGame.d.ts +25 -0
  72. package/dist/generated/rps-game/errors/rpsGame.js +29 -0
  73. package/dist/generated/rps-game/index.d.ts +12 -0
  74. package/dist/generated/rps-game/index.js +13 -0
  75. package/dist/generated/rps-game/instructions/closePlayer.d.ts +45 -0
  76. package/dist/generated/rps-game/instructions/closePlayer.js +56 -0
  77. package/dist/generated/rps-game/instructions/delegatePda.d.ts +69 -0
  78. package/dist/generated/rps-game/instructions/delegatePda.js +90 -0
  79. package/dist/generated/rps-game/instructions/index.d.ts +16 -0
  80. package/dist/generated/rps-game/instructions/index.js +17 -0
  81. package/dist/generated/rps-game/instructions/initializePlayer.d.ts +48 -0
  82. package/dist/generated/rps-game/instructions/initializePlayer.js +63 -0
  83. package/dist/generated/rps-game/instructions/makeChoice.d.ts +44 -0
  84. package/dist/generated/rps-game/instructions/makeChoice.js +46 -0
  85. package/dist/generated/rps-game/instructions/onMatchFound.d.ts +43 -0
  86. package/dist/generated/rps-game/instructions/onMatchFound.js +45 -0
  87. package/dist/generated/rps-game/instructions/persistResults.d.ts +43 -0
  88. package/dist/generated/rps-game/instructions/persistResults.js +50 -0
  89. package/dist/generated/rps-game/instructions/processUndelegation.d.ts +43 -0
  90. package/dist/generated/rps-game/instructions/processUndelegation.js +49 -0
  91. package/dist/generated/rps-game/instructions/startGame.d.ts +54 -0
  92. package/dist/generated/rps-game/instructions/startGame.js +67 -0
  93. package/dist/generated/rps-game/instructions/startGameWithTicket.d.ts +57 -0
  94. package/dist/generated/rps-game/instructions/startGameWithTicket.js +67 -0
  95. package/dist/generated/rps-game/programs/index.d.ts +8 -0
  96. package/dist/generated/rps-game/programs/index.js +9 -0
  97. package/dist/generated/rps-game/programs/rpsGame.d.ts +78 -0
  98. package/dist/generated/rps-game/programs/rpsGame.js +118 -0
  99. package/dist/generated/rps-game/types/accountType.d.ts +34 -0
  100. package/dist/generated/rps-game/types/accountType.js +25 -0
  101. package/dist/generated/rps-game/types/choice.d.ts +17 -0
  102. package/dist/generated/rps-game/types/choice.js +25 -0
  103. package/dist/generated/rps-game/types/gameResult.d.ts +26 -0
  104. package/dist/generated/rps-game/types/gameResult.js +25 -0
  105. package/dist/generated/rps-game/types/index.d.ts +10 -0
  106. package/dist/generated/rps-game/types/index.js +11 -0
  107. package/dist/index.d.ts +2 -1
  108. package/dist/index.js +3 -2
  109. package/dist/player.d.ts +25 -46
  110. package/dist/player.js +81 -140
  111. package/dist/tee.d.ts +14 -0
  112. package/dist/tee.js +62 -0
  113. package/dist/transaction.d.ts +11 -0
  114. package/dist/transaction.js +50 -0
  115. package/dist/utils.d.ts +4 -4
  116. package/dist/utils.js +23 -8
  117. package/package.json +3 -6
  118. package/src/admin.ts +151 -161
  119. package/src/duel.json +66 -7
  120. package/src/encryption.ts +0 -3
  121. package/src/generated/duel/accounts/index.ts +11 -0
  122. package/src/generated/duel/accounts/matchTicket.ts +77 -0
  123. package/src/generated/duel/accounts/queue.ts +77 -0
  124. package/src/generated/duel/accounts/tenant.ts +76 -0
  125. package/src/generated/duel/errors/duel.ts +46 -0
  126. package/src/generated/duel/errors/index.ts +9 -0
  127. package/src/generated/duel/index.ts +13 -0
  128. package/src/generated/duel/instructions/cancelTicket.ts +100 -0
  129. package/src/generated/duel/instructions/closeTicket.ts +100 -0
  130. package/src/generated/duel/instructions/commitTickets.ts +84 -0
  131. package/src/generated/duel/instructions/createTicket.ts +109 -0
  132. package/src/generated/duel/instructions/delegateQueue.ts +157 -0
  133. package/src/generated/duel/instructions/delegateTicket.ts +157 -0
  134. package/src/generated/duel/instructions/flushMatches.ts +76 -0
  135. package/src/generated/duel/instructions/index.ts +20 -0
  136. package/src/generated/duel/instructions/initializeQueue.ts +109 -0
  137. package/src/generated/duel/instructions/initializeTenant.ts +126 -0
  138. package/src/generated/duel/instructions/joinQueue.ts +106 -0
  139. package/src/generated/duel/instructions/processUndelegation.ts +86 -0
  140. package/src/generated/duel/instructions/setupTicketPermission.ts +115 -0
  141. package/src/generated/duel/programs/duel.ts +108 -0
  142. package/src/generated/duel/programs/index.ts +9 -0
  143. package/src/generated/duel/types/accountType.ts +36 -0
  144. package/src/generated/duel/types/index.ts +14 -0
  145. package/src/generated/duel/types/matchEntry.ts +25 -0
  146. package/src/generated/duel/types/matchFound.ts +25 -0
  147. package/src/generated/duel/types/pendingMatch.ts +25 -0
  148. package/src/generated/duel/types/queueEntry.ts +25 -0
  149. package/src/generated/duel/types/ticketStatus.ts +38 -0
  150. package/src/generated/rps-game/accounts/gameSession.ts +77 -0
  151. package/src/generated/rps-game/accounts/index.ts +10 -0
  152. package/src/generated/rps-game/accounts/playerProfile.ts +80 -0
  153. package/src/generated/rps-game/errors/index.ts +9 -0
  154. package/src/generated/rps-game/errors/rpsGame.ts +40 -0
  155. package/src/generated/rps-game/index.ts +13 -0
  156. package/src/generated/rps-game/instructions/closePlayer.ts +100 -0
  157. package/src/generated/rps-game/instructions/delegatePda.ts +157 -0
  158. package/src/generated/rps-game/instructions/index.ts +17 -0
  159. package/src/generated/rps-game/instructions/initializePlayer.ts +109 -0
  160. package/src/generated/rps-game/instructions/makeChoice.ts +84 -0
  161. package/src/generated/rps-game/instructions/onMatchFound.ts +79 -0
  162. package/src/generated/rps-game/instructions/persistResults.ts +88 -0
  163. package/src/generated/rps-game/instructions/processUndelegation.ts +86 -0
  164. package/src/generated/rps-game/instructions/startGame.ts +118 -0
  165. package/src/generated/rps-game/instructions/startGameWithTicket.ts +121 -0
  166. package/src/generated/rps-game/programs/index.ts +9 -0
  167. package/src/generated/rps-game/programs/rpsGame.ts +95 -0
  168. package/src/generated/rps-game/types/accountType.ts +36 -0
  169. package/src/generated/rps-game/types/choice.ts +25 -0
  170. package/src/generated/rps-game/types/gameResult.ts +37 -0
  171. package/src/generated/rps-game/types/index.ts +11 -0
  172. package/src/index.ts +2 -1
  173. package/src/player.ts +129 -192
  174. package/src/{idl/private_matchmaking.json → rps_game.json} +547 -583
  175. package/src/tee.ts +79 -0
  176. package/src/transaction.ts +90 -0
  177. package/src/utils.ts +35 -20
  178. package/tsconfig.json +2 -2
  179. package/dist/client.d.ts +0 -54
  180. package/dist/client.js +0 -265
  181. package/dist/duel.json +0 -1207
  182. package/dist/private_matchmaking.json +0 -534
  183. package/dist/types.d.ts +0 -635
  184. package/dist/types.js +0 -2
  185. package/src/idl/private_matchmaking.ts +0 -1033
  186. package/src/types.ts +0 -300
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { combineCodec, getAddressDecoder, getAddressEncoder, getDiscriminatedUnionDecoder, getDiscriminatedUnionEncoder, getStructDecoder, getStructEncoder, getU64Decoder, getU64Encoder } from '@solana/kit';
9
+ export function getAccountTypeEncoder() {
10
+ return getDiscriminatedUnionEncoder([['PlayerProfile', getStructEncoder([['player', getAddressEncoder()]])], ['GameSession', getStructEncoder([['p1', getAddressEncoder()], ['p2', getAddressEncoder()], ['id', getU64Encoder()]])]]);
11
+ }
12
+ export function getAccountTypeDecoder() {
13
+ return getDiscriminatedUnionDecoder([['PlayerProfile', getStructDecoder([['player', getAddressDecoder()]])], ['GameSession', getStructDecoder([['p1', getAddressDecoder()], ['p2', getAddressDecoder()], ['id', getU64Decoder()]])]]);
14
+ }
15
+ export function getAccountTypeCodec() {
16
+ return combineCodec(getAccountTypeEncoder(), getAccountTypeDecoder());
17
+ }
18
+ export function accountType(kind, data) {
19
+ return Array.isArray(data) ? { __kind: kind, fields: data } : { __kind: kind, ...(data ?? {}) };
20
+ }
21
+ export function isAccountType(kind, value) {
22
+ return value.__kind === kind;
23
+ }
24
+ ;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudFR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL3Jwcy1nYW1lL3R5cGVzL2FjY291bnRUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBcUksTUFBTSxhQUFhLENBQUM7QUFNbFYsTUFBTSxVQUFVLHFCQUFxQjtJQUNqQyxPQUFPLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFPLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCO0lBQ2pDLE9BQU8sNEJBQTRCLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMU8sQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDL0IsT0FBTyxZQUFZLENBQUMscUJBQXFCLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUtELE1BQU0sVUFBVSxXQUFXLENBQTRDLElBQU8sRUFBRSxJQUFXO0lBQ3pGLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsRyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBa0MsSUFBTyxFQUFFLEtBQWtCO0lBQ3hGLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7QUFDL0IsQ0FBQztBQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY29kZSB3YXMgQVVUT0dFTkVSQVRFRCB1c2luZyB0aGUgQ29kYW1hIGxpYnJhcnkuXG4gKiBQbGVhc2UgRE8gTk9UIEVESVQgVEhJUyBGSUxFLCBpbnN0ZWFkIHVzZSB2aXNpdG9yc1xuICogdG8gYWRkIGZlYXR1cmVzLCB0aGVuIHJlcnVuIENvZGFtYSB0byB1cGRhdGUgaXQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29kYW1hLWlkbC9jb2RhbWFcbiAqL1xuXG5pbXBvcnQgeyBjb21iaW5lQ29kZWMsIGdldEFkZHJlc3NEZWNvZGVyLCBnZXRBZGRyZXNzRW5jb2RlciwgZ2V0RGlzY3JpbWluYXRlZFVuaW9uRGVjb2RlciwgZ2V0RGlzY3JpbWluYXRlZFVuaW9uRW5jb2RlciwgZ2V0U3RydWN0RGVjb2RlciwgZ2V0U3RydWN0RW5jb2RlciwgZ2V0VTY0RGVjb2RlciwgZ2V0VTY0RW5jb2RlciwgdHlwZSBBZGRyZXNzLCB0eXBlIENvZGVjLCB0eXBlIERlY29kZXIsIHR5cGUgRW5jb2RlciwgdHlwZSBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50LCB0eXBlIEdldERpc2NyaW1pbmF0ZWRVbmlvblZhcmlhbnRDb250ZW50IH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuXG5leHBvcnQgdHlwZSBBY2NvdW50VHlwZSA9IHsgX19raW5kOiBcIlBsYXllclByb2ZpbGVcIiwgcGxheWVyOiBBZGRyZXNzOyAgfSB8IHsgX19raW5kOiBcIkdhbWVTZXNzaW9uXCIsIHAxOiBBZGRyZXNzOyBwMjogQWRkcmVzczsgaWQ6IGJpZ2ludDsgIH07XG5cbmV4cG9ydCB0eXBlIEFjY291bnRUeXBlQXJncyA9IHsgX19raW5kOiBcIlBsYXllclByb2ZpbGVcIiwgcGxheWVyOiBBZGRyZXNzOyAgfSB8IHsgX19raW5kOiBcIkdhbWVTZXNzaW9uXCIsIHAxOiBBZGRyZXNzOyBwMjogQWRkcmVzczsgaWQ6IG51bWJlciB8IGJpZ2ludDsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2NvdW50VHlwZUVuY29kZXIoKTogRW5jb2RlcjxBY2NvdW50VHlwZUFyZ3M+IHtcbiAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRlZFVuaW9uRW5jb2RlcihbWydQbGF5ZXJQcm9maWxlJywgZ2V0U3RydWN0RW5jb2RlcihbWydwbGF5ZXInLCBnZXRBZGRyZXNzRW5jb2RlcigpXV0pXSwgWydHYW1lU2Vzc2lvbicsIGdldFN0cnVjdEVuY29kZXIoW1sncDEnLCBnZXRBZGRyZXNzRW5jb2RlcigpXSwgWydwMicsIGdldEFkZHJlc3NFbmNvZGVyKCldLCBbJ2lkJywgZ2V0VTY0RW5jb2RlcigpXV0pXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjb3VudFR5cGVEZWNvZGVyKCk6IERlY29kZXI8QWNjb3VudFR5cGU+IHtcbiAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRlZFVuaW9uRGVjb2RlcihbWydQbGF5ZXJQcm9maWxlJywgZ2V0U3RydWN0RGVjb2RlcihbWydwbGF5ZXInLCBnZXRBZGRyZXNzRGVjb2RlcigpXV0pXSwgWydHYW1lU2Vzc2lvbicsIGdldFN0cnVjdERlY29kZXIoW1sncDEnLCBnZXRBZGRyZXNzRGVjb2RlcigpXSwgWydwMicsIGdldEFkZHJlc3NEZWNvZGVyKCldLCBbJ2lkJywgZ2V0VTY0RGVjb2RlcigpXV0pXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjb3VudFR5cGVDb2RlYygpOiBDb2RlYzxBY2NvdW50VHlwZUFyZ3MsIEFjY291bnRUeXBlPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXRBY2NvdW50VHlwZUVuY29kZXIoKSwgZ2V0QWNjb3VudFR5cGVEZWNvZGVyKCkpO1xufVxuXG4vLyBEYXRhIEVudW0gSGVscGVycy5cbmV4cG9ydCBmdW5jdGlvbiBhY2NvdW50VHlwZShraW5kOiAnUGxheWVyUHJvZmlsZScsIGRhdGE6IEdldERpc2NyaW1pbmF0ZWRVbmlvblZhcmlhbnRDb250ZW50PEFjY291bnRUeXBlQXJncywgJ19fa2luZCcsICdQbGF5ZXJQcm9maWxlJz4pOiBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50PEFjY291bnRUeXBlQXJncywgJ19fa2luZCcsICdQbGF5ZXJQcm9maWxlJz47XG5leHBvcnQgZnVuY3Rpb24gYWNjb3VudFR5cGUoa2luZDogJ0dhbWVTZXNzaW9uJywgZGF0YTogR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudENvbnRlbnQ8QWNjb3VudFR5cGVBcmdzLCAnX19raW5kJywgJ0dhbWVTZXNzaW9uJz4pOiBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50PEFjY291bnRUeXBlQXJncywgJ19fa2luZCcsICdHYW1lU2Vzc2lvbic+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjY291bnRUeXBlPEsgZXh0ZW5kcyBBY2NvdW50VHlwZUFyZ3NbJ19fa2luZCddLCBEYXRhPihraW5kOiBLLCBkYXRhPzogRGF0YSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhKSA/IHsgX19raW5kOiBraW5kLCBmaWVsZHM6IGRhdGEgfSA6IHsgX19raW5kOiBraW5kLCAuLi4oZGF0YSA/PyB7fSkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWNjb3VudFR5cGU8SyBleHRlbmRzIEFjY291bnRUeXBlWydfX2tpbmQnXT4oa2luZDogSywgdmFsdWU6IEFjY291bnRUeXBlKTogdmFsdWUgaXMgQWNjb3VudFR5cGUgJiB7IF9fa2luZDogSyB9IHtcbiAgcmV0dXJuIHZhbHVlLl9fa2luZCA9PT0ga2luZDtcbn07XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder } from '@solana/kit';
9
+ export declare enum Choice {
10
+ Rock = 0,
11
+ Paper = 1,
12
+ Scissors = 2
13
+ }
14
+ export type ChoiceArgs = Choice;
15
+ export declare function getChoiceEncoder(): FixedSizeEncoder<ChoiceArgs>;
16
+ export declare function getChoiceDecoder(): FixedSizeDecoder<Choice>;
17
+ export declare function getChoiceCodec(): FixedSizeCodec<ChoiceArgs, Choice>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { combineCodec, getEnumDecoder, getEnumEncoder } from '@solana/kit';
9
+ export var Choice;
10
+ (function (Choice) {
11
+ Choice[Choice["Rock"] = 0] = "Rock";
12
+ Choice[Choice["Paper"] = 1] = "Paper";
13
+ Choice[Choice["Scissors"] = 2] = "Scissors";
14
+ })(Choice || (Choice = {}));
15
+ ;
16
+ export function getChoiceEncoder() {
17
+ return getEnumEncoder(Choice);
18
+ }
19
+ export function getChoiceDecoder() {
20
+ return getEnumDecoder(Choice);
21
+ }
22
+ export function getChoiceCodec() {
23
+ return combineCodec(getChoiceEncoder(), getChoiceDecoder());
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvaWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9ycHMtZ2FtZS90eXBlcy9jaG9pY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFxRSxNQUFNLGFBQWEsQ0FBQztBQUU5SSxNQUFNLENBQU4sSUFBWSxNQUFnQztBQUE1QyxXQUFZLE1BQU07SUFBRyxtQ0FBSSxDQUFBO0lBQUUscUNBQUssQ0FBQTtJQUFFLDJDQUFRLENBQUE7QUFBQyxDQUFDLEVBQWhDLE1BQU0sS0FBTixNQUFNLFFBQTBCO0FBQUEsQ0FBQztBQUk3QyxNQUFNLFVBQVUsZ0JBQWdCO0lBQzVCLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzVCLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUMxQixPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBnZXRFbnVtRGVjb2RlciwgZ2V0RW51bUVuY29kZXIsIHR5cGUgRml4ZWRTaXplQ29kZWMsIHR5cGUgRml4ZWRTaXplRGVjb2RlciwgdHlwZSBGaXhlZFNpemVFbmNvZGVyIH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuXG5leHBvcnQgZW51bSBDaG9pY2UgeyBSb2NrLCBQYXBlciwgU2Npc3NvcnMgfTtcblxuZXhwb3J0IHR5cGUgQ2hvaWNlQXJncyA9IENob2ljZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENob2ljZUVuY29kZXIoKTogRml4ZWRTaXplRW5jb2RlcjxDaG9pY2VBcmdzPiB7XG4gICAgcmV0dXJuIGdldEVudW1FbmNvZGVyKENob2ljZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaG9pY2VEZWNvZGVyKCk6IEZpeGVkU2l6ZURlY29kZXI8Q2hvaWNlPiB7XG4gICAgcmV0dXJuIGdldEVudW1EZWNvZGVyKENob2ljZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaG9pY2VDb2RlYygpOiBGaXhlZFNpemVDb2RlYzxDaG9pY2VBcmdzLCBDaG9pY2U+IHtcbiAgICByZXR1cm4gY29tYmluZUNvZGVjKGdldENob2ljZUVuY29kZXIoKSwgZ2V0Q2hvaWNlRGVjb2RlcigpKTtcbn0iXX0=
@@ -0,0 +1,26 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type Address, type Codec, type Decoder, type Encoder, type GetDiscriminatedUnionVariant, type GetDiscriminatedUnionVariantContent } from '@solana/kit';
9
+ export type GameResult = {
10
+ __kind: "Winner";
11
+ fields: readonly [Address];
12
+ } | {
13
+ __kind: "Tie";
14
+ } | {
15
+ __kind: "None";
16
+ };
17
+ export type GameResultArgs = GameResult;
18
+ export declare function getGameResultEncoder(): Encoder<GameResultArgs>;
19
+ export declare function getGameResultDecoder(): Decoder<GameResult>;
20
+ export declare function getGameResultCodec(): Codec<GameResultArgs, GameResult>;
21
+ export declare function gameResult(kind: 'Winner', data: GetDiscriminatedUnionVariantContent<GameResultArgs, '__kind', 'Winner'>['fields']): GetDiscriminatedUnionVariant<GameResultArgs, '__kind', 'Winner'>;
22
+ export declare function gameResult(kind: 'Tie'): GetDiscriminatedUnionVariant<GameResultArgs, '__kind', 'Tie'>;
23
+ export declare function gameResult(kind: 'None'): GetDiscriminatedUnionVariant<GameResultArgs, '__kind', 'None'>;
24
+ export declare function isGameResult<K extends GameResult['__kind']>(kind: K, value: GameResult): value is GameResult & {
25
+ __kind: K;
26
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { combineCodec, getAddressDecoder, getAddressEncoder, getDiscriminatedUnionDecoder, getDiscriminatedUnionEncoder, getStructDecoder, getStructEncoder, getTupleDecoder, getTupleEncoder, getUnitDecoder, getUnitEncoder } from '@solana/kit';
9
+ export function getGameResultEncoder() {
10
+ return getDiscriminatedUnionEncoder([['Winner', getStructEncoder([['fields', getTupleEncoder([getAddressEncoder()])]])], ['Tie', getUnitEncoder()], ['None', getUnitEncoder()]]);
11
+ }
12
+ export function getGameResultDecoder() {
13
+ return getDiscriminatedUnionDecoder([['Winner', getStructDecoder([['fields', getTupleDecoder([getAddressDecoder()])]])], ['Tie', getUnitDecoder()], ['None', getUnitDecoder()]]);
14
+ }
15
+ export function getGameResultCodec() {
16
+ return combineCodec(getGameResultEncoder(), getGameResultDecoder());
17
+ }
18
+ export function gameResult(kind, data) {
19
+ return Array.isArray(data) ? { __kind: kind, fields: data } : { __kind: kind, ...(data ?? {}) };
20
+ }
21
+ export function isGameResult(kind, value) {
22
+ return value.__kind === kind;
23
+ }
24
+ ;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZVJlc3VsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvcnBzLWdhbWUvdHlwZXMvZ2FtZVJlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBcUksTUFBTSxhQUFhLENBQUM7QUFNdFgsTUFBTSxVQUFVLG9CQUFvQjtJQUNoQyxPQUFPLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckwsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDaEMsT0FBTyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JMLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCO0lBQzlCLE9BQU8sWUFBWSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFNRCxNQUFNLFVBQVUsVUFBVSxDQUEyQyxJQUFPLEVBQUUsSUFBVztJQUN2RixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEcsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQWlDLElBQU8sRUFBRSxLQUFpQjtJQUNyRixPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFBQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBnZXRBZGRyZXNzRGVjb2RlciwgZ2V0QWRkcmVzc0VuY29kZXIsIGdldERpc2NyaW1pbmF0ZWRVbmlvbkRlY29kZXIsIGdldERpc2NyaW1pbmF0ZWRVbmlvbkVuY29kZXIsIGdldFN0cnVjdERlY29kZXIsIGdldFN0cnVjdEVuY29kZXIsIGdldFR1cGxlRGVjb2RlciwgZ2V0VHVwbGVFbmNvZGVyLCBnZXRVbml0RGVjb2RlciwgZ2V0VW5pdEVuY29kZXIsIHR5cGUgQWRkcmVzcywgdHlwZSBDb2RlYywgdHlwZSBEZWNvZGVyLCB0eXBlIEVuY29kZXIsIHR5cGUgR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudCwgdHlwZSBHZXREaXNjcmltaW5hdGVkVW5pb25WYXJpYW50Q29udGVudCB9IGZyb20gJ0Bzb2xhbmEva2l0JztcblxuZXhwb3J0IHR5cGUgR2FtZVJlc3VsdCA9IHsgX19raW5kOiBcIldpbm5lclwiLCBmaWVsZHM6IHJlYWRvbmx5IFtBZGRyZXNzXTsgIH0gfCB7IF9fa2luZDogXCJUaWVcIiB9IHwgeyBfX2tpbmQ6IFwiTm9uZVwiIH07XG5cbmV4cG9ydCB0eXBlIEdhbWVSZXN1bHRBcmdzID0gR2FtZVJlc3VsdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdhbWVSZXN1bHRFbmNvZGVyKCk6IEVuY29kZXI8R2FtZVJlc3VsdEFyZ3M+IHtcbiAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRlZFVuaW9uRW5jb2RlcihbWydXaW5uZXInLCBnZXRTdHJ1Y3RFbmNvZGVyKFtbJ2ZpZWxkcycsIGdldFR1cGxlRW5jb2RlcihbZ2V0QWRkcmVzc0VuY29kZXIoKV0pXV0pXSwgWydUaWUnLCBnZXRVbml0RW5jb2RlcigpXSwgWydOb25lJywgZ2V0VW5pdEVuY29kZXIoKV1dKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdhbWVSZXN1bHREZWNvZGVyKCk6IERlY29kZXI8R2FtZVJlc3VsdD4ge1xuICAgIHJldHVybiBnZXREaXNjcmltaW5hdGVkVW5pb25EZWNvZGVyKFtbJ1dpbm5lcicsIGdldFN0cnVjdERlY29kZXIoW1snZmllbGRzJywgZ2V0VHVwbGVEZWNvZGVyKFtnZXRBZGRyZXNzRGVjb2RlcigpXSldXSldLCBbJ1RpZScsIGdldFVuaXREZWNvZGVyKCldLCBbJ05vbmUnLCBnZXRVbml0RGVjb2RlcigpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2FtZVJlc3VsdENvZGVjKCk6IENvZGVjPEdhbWVSZXN1bHRBcmdzLCBHYW1lUmVzdWx0PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXRHYW1lUmVzdWx0RW5jb2RlcigpLCBnZXRHYW1lUmVzdWx0RGVjb2RlcigpKTtcbn1cblxuLy8gRGF0YSBFbnVtIEhlbHBlcnMuXG5leHBvcnQgZnVuY3Rpb24gZ2FtZVJlc3VsdChraW5kOiAnV2lubmVyJywgZGF0YTogR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudENvbnRlbnQ8R2FtZVJlc3VsdEFyZ3MsICdfX2tpbmQnLCAnV2lubmVyJz5bJ2ZpZWxkcyddKTogR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudDxHYW1lUmVzdWx0QXJncywgJ19fa2luZCcsICdXaW5uZXInPjtcbmV4cG9ydCBmdW5jdGlvbiBnYW1lUmVzdWx0KGtpbmQ6ICdUaWUnKTogR2V0RGlzY3JpbWluYXRlZFVuaW9uVmFyaWFudDxHYW1lUmVzdWx0QXJncywgJ19fa2luZCcsICdUaWUnPjtcbmV4cG9ydCBmdW5jdGlvbiBnYW1lUmVzdWx0KGtpbmQ6ICdOb25lJyk6IEdldERpc2NyaW1pbmF0ZWRVbmlvblZhcmlhbnQ8R2FtZVJlc3VsdEFyZ3MsICdfX2tpbmQnLCAnTm9uZSc+O1xuZXhwb3J0IGZ1bmN0aW9uIGdhbWVSZXN1bHQ8SyBleHRlbmRzIEdhbWVSZXN1bHRBcmdzWydfX2tpbmQnXSwgRGF0YT4oa2luZDogSywgZGF0YT86IERhdGEpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSkgPyB7IF9fa2luZDoga2luZCwgZmllbGRzOiBkYXRhIH0gOiB7IF9fa2luZDoga2luZCwgLi4uKGRhdGEgPz8ge30pIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dhbWVSZXN1bHQ8SyBleHRlbmRzIEdhbWVSZXN1bHRbJ19fa2luZCddPihraW5kOiBLLCB2YWx1ZTogR2FtZVJlc3VsdCk6IHZhbHVlIGlzIEdhbWVSZXN1bHQgJiB7IF9fa2luZDogSyB9IHtcbiAgcmV0dXJuIHZhbHVlLl9fa2luZCA9PT0ga2luZDtcbn07XG4iXX0=
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ export * from './accountType';
9
+ export * from './choice';
10
+ export * from './gameResult';
@@ -0,0 +1,11 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the Codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun Codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ export * from './accountType';
9
+ export * from './choice';
10
+ export * from './gameResult';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL3Jwcy1nYW1lL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50VHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2Nob2ljZSc7XG5leHBvcnQgKiBmcm9tICcuL2dhbWVSZXN1bHQnOyJdfQ==
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./admin.js";
2
2
  export * from "./player.js";
3
- export * from "./types.js";
3
+ export * from "./tee.js";
4
4
  export * as utils from "./utils.js";
5
+ export { fetchMaybeTenant, fetchTenant, fetchMaybeQueue, fetchQueue } from "./generated/duel/index.js";
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./admin.js";
2
2
  export * from "./player.js";
3
- export * from "./types.js";
3
+ export * from "./tee.js";
4
4
  export * as utils from "./utils.js";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hZG1pbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxheWVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcbiJdfQ==
5
+ export { fetchMaybeTenant, fetchTenant, fetchMaybeQueue, fetchQueue } from "./generated/duel/index.js";
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUM7QUFDekIsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hZG1pbi5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGxheWVyLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZWUuanNcIjtcbmV4cG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5leHBvcnQgeyBmZXRjaE1heWJlVGVuYW50LCBmZXRjaFRlbmFudCwgZmV0Y2hNYXliZVF1ZXVlLCBmZXRjaFF1ZXVlIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbiJdfQ==
package/dist/player.d.ts CHANGED
@@ -1,51 +1,30 @@
1
- import * as anchor from "@coral-xyz/anchor";
2
- import * as web3 from "@solana/web3.js";
3
- import type { Duel } from "./types.js";
1
+ import { type Address, type TransactionSigner, type Rpc, type SolanaRpcApi } from "@solana/kit";
4
2
  export declare class MatchmakingPlayer {
5
- program: anchor.Program<Duel>;
6
- provider: anchor.AnchorProvider;
7
- constructor(provider: anchor.AnchorProvider, programId: web3.PublicKey | string);
8
- /**
9
- * Derive MatchTicket PDA
10
- */
11
- getTicketPda(player: web3.PublicKey, tenant: web3.PublicKey): web3.PublicKey;
12
- /**
13
- * Fetch MatchTicket account data
14
- */
15
- getTicket(ticketPda: web3.PublicKey): Promise<any>;
16
- /**
17
- * Create MatchTicket PDA on L1
18
- */
19
- createTicket(tenant: web3.PublicKey, confirmOptions?: web3.ConfirmOptions, signers?: web3.Keypair[]): Promise<web3.TransactionSignature>;
20
- /**
21
- * Delegate ticket into TEE (becomes invisible on L1)
22
- */
23
- delegateTicket(player: web3.PublicKey, tenant: web3.PublicKey, validator?: web3.PublicKey, confirmOptions?: web3.ConfirmOptions, signers?: web3.Keypair[]): Promise<web3.TransactionSignature>;
24
- /**
25
- * Join Queue (TEE Aware) - now requires ticket
26
- */
27
- joinQueue(queue: web3.PublicKey, tenant: web3.PublicKey, playerData: web3.PublicKey, confirmOptions?: web3.ConfirmOptions, signers?: web3.Keypair[]): Promise<web3.TransactionSignature>;
28
- /**
29
- * Cancel search, marks ticket as Cancelled (runs in TEE)
30
- */
31
- cancelTicket(tenant: web3.PublicKey, confirmOptions?: web3.ConfirmOptions, signers?: web3.Keypair[]): Promise<web3.TransactionSignature>;
32
- /**
33
- * Close ticket and reclaim rent (L1, after match consumed or cancelled)
34
- */
35
- closeTicket(tenant: web3.PublicKey, confirmOptions?: web3.ConfirmOptions, signers?: web3.Keypair[]): Promise<web3.TransactionSignature>;
36
- /**
37
- * Wait for match by subscribing to ticket PDA changes on L1.
38
- * Returns match info when ticket status changes to Matched.
39
- */
40
- waitForMatch(ticketPda: web3.PublicKey, connection: web3.Connection, timeoutMs?: number): Promise<{
41
- opponent: web3.PublicKey;
42
- matchId: anchor.BN;
3
+ rpc: Rpc<SolanaRpcApi>;
4
+ signer: TransactionSigner;
5
+ programId: Address;
6
+ constructor(rpc: Rpc<SolanaRpcApi>, signer: TransactionSigner, programId?: Address);
7
+ getTicketPda(player: Address, tenant: Address): Promise<Address>;
8
+ getTicket(ticketPda: Address): Promise<import("@solana/accounts").MaybeAccount<import("./generated/duel/index.js").MatchTicket, string>>;
9
+ createTicket(tenant: Address): Promise<string>;
10
+ delegateTicket(player: Address, tenant: Address, validator?: Address): Promise<string>;
11
+ joinQueue(queue: Address, tenant: Address, playerData: Address, callbackProgram?: Address): Promise<string>;
12
+ cancelTicket(tenant: Address): Promise<string>;
13
+ closeTicket(tenant: Address): Promise<string>;
14
+ /**
15
+ * Poll L1 for ticket status.
16
+ * Returns match info when status becomes Matched.
17
+ */
18
+ pollForMatch(ticketPda: Address, maxAttempts?: number, pollInterval?: number, signal?: AbortSignal): Promise<{
19
+ opponent: Address;
20
+ matchId: bigint;
43
21
  } | null>;
44
22
  /**
45
- * Poll L1 for ticket status (fallback for environments without websocket)
23
+ * High-level: full matchmaking TEE entry flow.
24
+ * Creates ticket on L1, delegates it to TEE, waits for activation, then joins the queue.
25
+ * Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
46
26
  */
47
- pollForMatch(ticketPda: web3.PublicKey, connection: web3.Connection, maxAttempts?: number, pollInterval?: number, signal?: AbortSignal): Promise<{
48
- opponent: web3.PublicKey;
49
- matchId: anchor.BN;
50
- } | null>;
27
+ enterQueue(tenant: Address, queue: Address, playerData: Address, teeRpc: Rpc<SolanaRpcApi>, teeUrlWithToken: string, validator?: Address, callbackProgram?: Address): Promise<Address>;
28
+ /** Create a new MatchmakingPlayer pointing at a TEE RPC endpoint. */
29
+ withRpc(teeUrl: string): MatchmakingPlayer;
51
30
  }
package/dist/player.js CHANGED
@@ -1,166 +1,107 @@
1
- import * as anchor from "@coral-xyz/anchor";
2
- import * as web3 from "@solana/web3.js";
3
- import IDL from "./duel.json" with { type: "json" };
1
+ import { createSolanaRpc, } from "@solana/kit";
2
+ import { getCreateTicketInstructionAsync, getDelegateTicketInstructionAsync, getJoinQueueInstructionAsync, getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, fetchMaybeMatchTicket, accountType, } from "./generated/duel/index.js";
3
+ import { sendInstruction } from "./transaction.js";
4
+ import { waitUntilPermissionActive } from "./tee.js";
4
5
  import * as utils from "./utils.js";
6
+ const DUEL_PROGRAM_ID = "EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X";
5
7
  export class MatchmakingPlayer {
6
- constructor(provider, programId) {
7
- const address = typeof programId === "string" ? programId : programId.toBase58();
8
- const idl = { ...IDL, address };
9
- this.program = new anchor.Program(idl, provider);
10
- this.provider = provider;
8
+ constructor(rpc, signer, programId = DUEL_PROGRAM_ID) {
9
+ this.rpc = rpc;
10
+ this.signer = signer;
11
+ this.programId = programId;
11
12
  }
12
- /**
13
- * Derive MatchTicket PDA
14
- */
15
- getTicketPda(player, tenant) {
16
- return utils.deriveTicketPda(this.program.programId, player, tenant);
13
+ async getTicketPda(player, tenant) {
14
+ return utils.deriveTicketPda(this.programId, player, tenant);
17
15
  }
18
- /**
19
- * Fetch MatchTicket account data
20
- */
21
16
  async getTicket(ticketPda) {
22
- return await this.program.account.matchTicket.fetch(ticketPda);
17
+ return fetchMaybeMatchTicket(this.rpc, ticketPda);
23
18
  }
24
- /**
25
- * Create MatchTicket PDA on L1
26
- */
27
- async createTicket(tenant, confirmOptions, signers = []) {
28
- const ticketPda = this.getTicketPda(this.provider.publicKey, tenant);
29
- return await this.program.methods
30
- .createTicket()
31
- .accountsPartial({
32
- ticket: ticketPda,
33
- tenant: tenant,
34
- player: this.provider.publicKey,
35
- })
36
- .signers(signers)
37
- .rpc(confirmOptions);
19
+ async createTicket(tenant) {
20
+ const ix = await getCreateTicketInstructionAsync({
21
+ player: this.signer,
22
+ tenant,
23
+ }, { programAddress: this.programId });
24
+ return sendInstruction(this.rpc, ix, this.signer);
38
25
  }
39
- /**
40
- * Delegate ticket into TEE (becomes invisible on L1)
41
- */
42
- async delegateTicket(player, tenant, validator = new web3.PublicKey("FnE6VJT5QNZdedZPnCoLsARgBwoE6DeJNjBs2H1gySXA"), confirmOptions, signers = []) {
43
- const ticketPda = this.getTicketPda(player, tenant);
44
- return await this.program.methods
45
- .delegateTicket({ ticket: { player, tenant } })
46
- .accounts({
26
+ async delegateTicket(player, tenant, validator) {
27
+ const ticketPda = await this.getTicketPda(player, tenant);
28
+ const ix = await getDelegateTicketInstructionAsync({
47
29
  pda: ticketPda,
48
- payer: this.provider.publicKey,
49
- validator: validator,
50
- })
51
- .signers(signers)
52
- .rpc(confirmOptions);
53
- }
54
- /**
55
- * Join Queue (TEE Aware) - now requires ticket
56
- */
57
- async joinQueue(queue, tenant, playerData, confirmOptions, signers = []) {
58
- const ticketPda = this.getTicketPda(this.provider.publicKey, tenant);
59
- return await this.program.methods
60
- .joinQueue()
61
- .accountsPartial({
62
- queue: queue,
63
- tenant: tenant,
64
- playerData: playerData,
65
- playerTicket: ticketPda,
66
- signer: this.provider.publicKey,
67
- })
68
- .signers(signers)
69
- .rpc(confirmOptions);
30
+ payer: this.signer,
31
+ validator,
32
+ accountType: accountType("Ticket", { player, tenant }),
33
+ }, { programAddress: this.programId });
34
+ return sendInstruction(this.rpc, ix, this.signer);
70
35
  }
71
- /**
72
- * Cancel search, marks ticket as Cancelled (runs in TEE)
73
- */
74
- async cancelTicket(tenant, confirmOptions, signers = []) {
75
- const ticketPda = this.getTicketPda(this.provider.publicKey, tenant);
76
- return await this.program.methods
77
- .cancelTicket()
78
- .accountsPartial({
79
- ticket: ticketPda,
80
- tenant: tenant,
81
- player: this.provider.publicKey,
82
- })
83
- .signers(signers)
84
- .rpc(confirmOptions);
36
+ async joinQueue(queue, tenant, playerData, callbackProgram) {
37
+ const ix = await getJoinQueueInstructionAsync({
38
+ queue,
39
+ tenant,
40
+ playerData,
41
+ signer: this.signer,
42
+ }, { programAddress: this.programId });
43
+ const ixFinal = callbackProgram
44
+ ? { ...ix, accounts: [...ix.accounts, { address: callbackProgram, role: 0 }] }
45
+ : ix;
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ return sendInstruction(this.rpc, ixFinal, this.signer);
85
48
  }
86
- /**
87
- * Close ticket and reclaim rent (L1, after match consumed or cancelled)
88
- */
89
- async closeTicket(tenant, confirmOptions, signers = []) {
90
- const ticketPda = this.getTicketPda(this.provider.publicKey, tenant);
91
- return await this.program.methods
92
- .closeTicket()
93
- .accountsPartial({
94
- ticket: ticketPda,
95
- tenant: tenant,
96
- player: this.provider.publicKey,
97
- })
98
- .signers(signers)
99
- .rpc(confirmOptions);
49
+ async cancelTicket(tenant) {
50
+ const ix = await getCancelTicketInstructionAsync({
51
+ player: this.signer,
52
+ tenant,
53
+ }, { programAddress: this.programId });
54
+ return sendInstruction(this.rpc, ix, this.signer);
100
55
  }
101
- /**
102
- * Wait for match by subscribing to ticket PDA changes on L1.
103
- * Returns match info when ticket status changes to Matched.
104
- */
105
- async waitForMatch(ticketPda, connection, timeoutMs = 120000) {
106
- return new Promise((resolve, reject) => {
107
- let subscriptionId = null;
108
- let timeoutId = null;
109
- const cleanup = () => {
110
- if (timeoutId)
111
- clearTimeout(timeoutId);
112
- if (subscriptionId !== null) {
113
- connection.removeAccountChangeListener(subscriptionId);
114
- }
115
- };
116
- // Set timeout
117
- timeoutId = setTimeout(() => {
118
- cleanup();
119
- resolve(null);
120
- }, timeoutMs);
121
- // Subscribe to account changes on L1
122
- subscriptionId = connection.onAccountChange(ticketPda, (accountInfo) => {
123
- try {
124
- const decoded = this.program.coder.accounts.decode("matchTicket", accountInfo.data);
125
- if (decoded.status.matched) {
126
- cleanup();
127
- resolve({
128
- opponent: decoded.status.matched.opponent,
129
- matchId: decoded.status.matched.matchId,
130
- });
131
- }
132
- }
133
- catch (e) {
134
- // Ignore decode errors (account may be in transition)
135
- }
136
- }, "confirmed");
137
- });
56
+ async closeTicket(tenant) {
57
+ const ix = await getCloseTicketInstructionAsync({
58
+ player: this.signer,
59
+ tenant,
60
+ }, { programAddress: this.programId });
61
+ return sendInstruction(this.rpc, ix, this.signer);
138
62
  }
139
63
  /**
140
- * Poll L1 for ticket status (fallback for environments without websocket)
64
+ * Poll L1 for ticket status.
65
+ * Returns match info when status becomes Matched.
141
66
  */
142
- async pollForMatch(ticketPda, connection, maxAttempts = 60, pollInterval = 2000, signal) {
67
+ async pollForMatch(ticketPda, maxAttempts = 60, pollInterval = 2000, signal) {
143
68
  for (let i = 0; i < maxAttempts; i++) {
144
69
  if (signal?.aborted)
145
70
  return null;
146
- await new Promise(resolve => setTimeout(resolve, pollInterval));
71
+ await new Promise((r) => setTimeout(r, pollInterval));
147
72
  try {
148
- const accountInfo = await connection.getAccountInfo(ticketPda);
149
- if (!accountInfo)
73
+ const maybeTicket = await fetchMaybeMatchTicket(this.rpc, ticketPda);
74
+ if (!maybeTicket.exists)
150
75
  continue;
151
- const decoded = this.program.coder.accounts.decode("matchTicket", accountInfo.data);
152
- if (decoded.status.matched) {
153
- return {
154
- opponent: decoded.status.matched.opponent,
155
- matchId: decoded.status.matched.matchId,
156
- };
76
+ const status = maybeTicket.data.status;
77
+ if (status.__kind === "Matched") {
78
+ return { opponent: status.opponent, matchId: status.matchId };
157
79
  }
158
80
  }
159
- catch (e) {
160
- // Account may not exist yet or be in transition
81
+ catch {
82
+ // Ignore decode errors during transition
161
83
  }
162
84
  }
163
85
  return null;
164
86
  }
87
+ /**
88
+ * High-level: full matchmaking TEE entry flow.
89
+ * Creates ticket on L1, delegates it to TEE, waits for activation, 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
+ await this.createTicket(tenant);
96
+ await this.delegateTicket(player, tenant, validator);
97
+ await waitUntilPermissionActive(teeUrlWithToken, ticketPda);
98
+ const teeClient = new MatchmakingPlayer(teeRpc, this.signer, this.programId);
99
+ await teeClient.joinQueue(queue, tenant, playerData, callbackProgram);
100
+ return ticketPda;
101
+ }
102
+ /** Create a new MatchmakingPlayer pointing at a TEE RPC endpoint. */
103
+ withRpc(teeUrl) {
104
+ return new MatchmakingPlayer(createSolanaRpc(teeUrl), this.signer, this.programId);
105
+ }
165
106
  }
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0saUJBQWlCLENBQUM7QUFFeEMsT0FBTyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsWUFBWSxRQUErQixFQUFFLFNBQWtDO1FBQzdFLE1BQU0sT0FBTyxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakYsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLE1BQXNCLEVBQUUsTUFBc0I7UUFDekQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQXlCO1FBQ3ZDLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUss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LFFBQVEsQ0FBQyxNQUFNLENBQ2hELGFBQWEsRUFDYixXQUFXLENBQUMsSUFBSSxDQUNqQixDQUFDO2dCQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDM0IsT0FBTzt3QkFDTCxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUTt3QkFDekMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87cUJBQ3hDLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLGdEQUFnRDtZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYW5jaG9yIGZyb20gXCJAY29yYWwteHl6L2FuY2hvclwiO1xuaW1wb3J0ICogYXMgd2ViMyBmcm9tIFwiQHNvbGFuYS93ZWIzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IER1ZWwgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IElETCBmcm9tIFwiLi9kdWVsLmpzb25cIiB3aXRoIHsgdHlwZTogXCJqc29uXCIgfTtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXRjaG1ha2luZ1BsYXllciB7XG4gIHB1YmxpYyBwcm9ncmFtOiBhbmNob3IuUHJvZ3JhbTxEdWVsPjtcbiAgcHVibGljIHByb3ZpZGVyOiBhbmNob3IuQW5jaG9yUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IocHJvdmlkZXI6IGFuY2hvci5BbmNob3JQcm92aWRlciwgcHJvZ3JhbUlkOiB3ZWIzLlB1YmxpY0tleSB8IHN0cmluZykge1xuICAgIGNvbnN0IGFkZHJlc3MgPSB0eXBlb2YgcHJvZ3JhbUlkID09PSBcInN0cmluZ1wiID8gcHJvZ3JhbUlkIDogcHJvZ3JhbUlkLnRvQmFzZTU4KCk7XG4gICAgY29uc3QgaWRsID0geyAuLi5JREwsIGFkZHJlc3MgfTtcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgYW5jaG9yLlByb2dyYW0oaWRsIGFzIGFueSwgcHJvdmlkZXIpO1xuICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgTWF0Y2hUaWNrZXQgUERBXG4gICAqL1xuICBnZXRUaWNrZXRQZGEocGxheWVyOiB3ZWIzLlB1YmxpY0tleSwgdGVuYW50OiB3ZWIzLlB1YmxpY0tleSk6IHdlYjMuUHVibGljS2V5IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlVGlja2V0UGRhKHRoaXMucHJvZ3JhbS5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBNYXRjaFRpY2tldCBhY2NvdW50IGRhdGFcbiAgICovXG4gIGFzeW5jIGdldFRpY2tldCh0aWNrZXRQZGE6IHdlYjMuUHVibGljS2V5KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLmFjY291bnQubWF0Y2hUaWNrZXQuZmV0Y2godGlja2V0UGRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgTWF0Y2hUaWNrZXQgUERBIG9uIEwxXG4gICAqL1xuICBhc3luYyBjcmVhdGVUaWNrZXQoXG4gICAgdGVuYW50OiB3ZWIzLlB1YmxpY0tleSxcbiAgICBjb25maXJtT3B0aW9ucz86IHdlYjMuQ29uZmlybU9wdGlvbnMsXG4gICAgc2lnbmVyczogd2ViMy5LZXlwYWlyW10gPSBbXVxuICApOiBQcm9taXNlPHdlYjMuVHJhbnNhY3Rpb25TaWduYXR1cmU+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSB0aGlzLmdldFRpY2tldFBkYSh0aGlzLnByb3ZpZGVyLnB1YmxpY0tleSwgdGVuYW50KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jcmVhdGVUaWNrZXQoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIHRpY2tldDogdGlja2V0UGRhLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudCxcbiAgICAgICAgcGxheWVyOiB0aGlzLnByb3ZpZGVyLnB1YmxpY0tleSxcbiAgICAgIH0pXG4gICAgICAuc2lnbmVycyhzaWduZXJzKVxuICAgICAgLnJwYyhjb25maXJtT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZWdhdGUgdGlja2V0IGludG8gVEVFIChiZWNvbWVzIGludmlzaWJsZSBvbiBMMSlcbiAgICovXG4gIGFzeW5jIGRlbGVnYXRlVGlja2V0KFxuICAgIHBsYXllcjogd2ViMy5QdWJsaWNLZXksXG4gICAgdGVuYW50OiB3ZWIzLlB1YmxpY0tleSxcbiAgICB2YWxpZGF0b3I6IHdlYjMuUHVibGljS2V5ID0gbmV3IHdlYjMuUHVibGljS2V5KFwiRm5FNlZKVDVRTlpkZWRaUG5Db0xzQVJnQndvRTZEZUpOakJzMkgxZ3lTWEFcIiksXG4gICAgY29uZmlybU9wdGlvbnM/OiB3ZWIzLkNvbmZpcm1PcHRpb25zLFxuICAgIHNpZ25lcnM6IHdlYjMuS2V5cGFpcltdID0gW11cbiAgKTogUHJvbWlzZTx3ZWIzLlRyYW5zYWN0aW9uU2lnbmF0dXJlPiB7XG4gICAgY29uc3QgdGlja2V0UGRhID0gdGhpcy5nZXRUaWNrZXRQZGEocGxheWVyLCB0ZW5hbnQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmRlbGVnYXRlVGlja2V0KHsgdGlja2V0OiB7IHBsYXllciwgdGVuYW50IH0gfSBhcyBhbnkpXG4gICAgICAuYWNjb3VudHMoe1xuICAgICAgICBwZGE6IHRpY2tldFBkYSxcbiAgICAgICAgcGF5ZXI6IHRoaXMucHJvdmlkZXIucHVibGljS2V5LFxuICAgICAgICB2YWxpZGF0b3I6IHZhbGlkYXRvcixcbiAgICAgIH0gYXMgYW55KVxuICAgICAgLnNpZ25lcnMoc2lnbmVycylcbiAgICAgIC5ycGMoY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEpvaW4gUXVldWUgKFRFRSBBd2FyZSkgLSBub3cgcmVxdWlyZXMgdGlja2V0XG4gICAqL1xuICBhc3luYyBqb2luUXVldWUoXG4gICAgcXVldWU6IHdlYjMuUHVibGljS2V5LFxuICAgIHRlbmFudDogd2ViMy5QdWJsaWNLZXksXG4gICAgcGxheWVyRGF0YTogd2ViMy5QdWJsaWNLZXksXG4gICAgY29uZmlybU9wdGlvbnM/OiB3ZWIzLkNvbmZpcm1PcHRpb25zLFxuICAgIHNpZ25lcnM6IHdlYjMuS2V5cGFpcltdID0gW11cbiAgKTogUHJvbWlzZTx3ZWIzLlRyYW5zYWN0aW9uU2lnbmF0dXJlPiB7XG4gICAgY29uc3QgdGlja2V0UGRhID0gdGhpcy5nZXRUaWNrZXRQZGEodGhpcy5wcm92aWRlci5wdWJsaWNLZXksIHRlbmFudCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvZ3JhbS5tZXRob2RzXG4gICAgICAuam9pblF1ZXVlKClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICBxdWV1ZTogcXVldWUsXG4gICAgICAgIHRlbmFudDogdGVuYW50LFxuICAgICAgICBwbGF5ZXJEYXRhOiBwbGF5ZXJEYXRhLFxuICAgICAgICBwbGF5ZXJUaWNrZXQ6IHRpY2tldFBkYSxcbiAgICAgICAgc2lnbmVyOiB0aGlzLnByb3ZpZGVyLnB1YmxpY0tleSxcbiAgICAgIH0pXG4gICAgICAuc2lnbmVycyhzaWduZXJzKVxuICAgICAgLnJwYyhjb25maXJtT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIHNlYXJjaCwgbWFya3MgdGlja2V0IGFzIENhbmNlbGxlZCAocnVucyBpbiBURUUpXG4gICAqL1xuICBhc3luYyBjYW5jZWxUaWNrZXQoXG4gICAgdGVuYW50OiB3ZWIzLlB1YmxpY0tleSxcbiAgICBjb25maXJtT3B0aW9ucz86IHdlYjMuQ29uZmlybU9wdGlvbnMsXG4gICAgc2lnbmVyczogd2ViMy5LZXlwYWlyW10gPSBbXVxuICApOiBQcm9taXNlPHdlYjMuVHJhbnNhY3Rpb25TaWduYXR1cmU+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSB0aGlzLmdldFRpY2tldFBkYSh0aGlzLnByb3ZpZGVyLnB1YmxpY0tleSwgdGVuYW50KTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9ncmFtLm1ldGhvZHNcbiAgICAgIC5jYW5jZWxUaWNrZXQoKVxuICAgICAgLmFjY291bnRzUGFydGlhbCh7XG4gICAgICAgIHRpY2tldDogdGlja2V0UGRhLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudCxcbiAgICAgICAgcGxheWVyOiB0aGlzLnByb3ZpZGVyLnB1YmxpY0tleSxcbiAgICAgIH0pXG4gICAgICAuc2lnbmVycyhzaWduZXJzKVxuICAgICAgLnJwYyhjb25maXJtT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGlja2V0IGFuZCByZWNsYWltIHJlbnQgKEwxLCBhZnRlciBtYXRjaCBjb25zdW1lZCBvciBjYW5jZWxsZWQpXG4gICAqL1xuICBhc3luYyBjbG9zZVRpY2tldChcbiAgICB0ZW5hbnQ6IHdlYjMuUHVibGljS2V5LFxuICAgIGNvbmZpcm1PcHRpb25zPzogd2ViMy5Db25maXJtT3B0aW9ucyxcbiAgICBzaWduZXJzOiB3ZWIzLktleXBhaXJbXSA9IFtdXG4gICk6IFByb21pc2U8d2ViMy5UcmFuc2FjdGlvblNpZ25hdHVyZT4ge1xuICAgIGNvbnN0IHRpY2tldFBkYSA9IHRoaXMuZ2V0VGlja2V0UGRhKHRoaXMucHJvdmlkZXIucHVibGljS2V5LCB0ZW5hbnQpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2dyYW0ubWV0aG9kc1xuICAgICAgLmNsb3NlVGlja2V0KClcbiAgICAgIC5hY2NvdW50c1BhcnRpYWwoe1xuICAgICAgICB0aWNrZXQ6IHRpY2tldFBkYSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnQsXG4gICAgICAgIHBsYXllcjogdGhpcy5wcm92aWRlci5wdWJsaWNLZXksXG4gICAgICB9KVxuICAgICAgLnNpZ25lcnMoc2lnbmVycylcbiAgICAgIC5ycGMoY29uZmlybU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIG1hdGNoIGJ5IHN1YnNjcmliaW5nIHRvIHRpY2tldCBQREEgY2hhbmdlcyBvbiBMMS5cbiAgICogUmV0dXJucyBtYXRjaCBpbmZvIHdoZW4gdGlja2V0IHN0YXR1cyBjaGFuZ2VzIHRvIE1hdGNoZWQuXG4gICAqL1xuICBhc3luYyB3YWl0Rm9yTWF0Y2goXG4gICAgdGlja2V0UGRhOiB3ZWIzLlB1YmxpY0tleSxcbiAgICBjb25uZWN0aW9uOiB3ZWIzLkNvbm5lY3Rpb24sXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSAxMjAwMDBcbiAgKTogUHJvbWlzZTx7IG9wcG9uZW50OiB3ZWIzLlB1YmxpY0tleTsgbWF0Y2hJZDogYW5jaG9yLkJOIH0gfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBzdWJzY3JpcHRpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBpZiAodGltZW91dElkKSBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbklkICE9PSBudWxsKSB7XG4gICAgICAgICAgY29ubmVjdGlvbi5yZW1vdmVBY2NvdW50Q2hhbmdlTGlzdGVuZXIoc3Vic2NyaXB0aW9uSWQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBTZXQgdGltZW91dFxuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH0sIHRpbWVvdXRNcyk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBhY2NvdW50IGNoYW5nZXMgb24gTDFcbiAgICAgIHN1YnNjcmlwdGlvbklkID0gY29ubmVjdGlvbi5vbkFjY291bnRDaGFuZ2UoXG4gICAgICAgIHRpY2tldFBkYSxcbiAgICAgICAgKGFjY291bnRJbmZvOiB3ZWIzLkFjY291bnRJbmZvPEJ1ZmZlcj4pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IHRoaXMucHJvZ3JhbS5jb2Rlci5hY2NvdW50cy5kZWNvZGUoXG4gICAgICAgICAgICAgIFwibWF0Y2hUaWNrZXRcIixcbiAgICAgICAgICAgICAgYWNjb3VudEluZm8uZGF0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkZWNvZGVkLnN0YXR1cy5tYXRjaGVkKSB7XG4gICAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgb3Bwb25lbnQ6IGRlY29kZWQuc3RhdHVzLm1hdGNoZWQub3Bwb25lbnQsXG4gICAgICAgICAgICAgICAgbWF0Y2hJZDogZGVjb2RlZC5zdGF0dXMubWF0Y2hlZC5tYXRjaElkLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgZGVjb2RlIGVycm9ycyAoYWNjb3VudCBtYXkgYmUgaW4gdHJhbnNpdGlvbilcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiY29uZmlybWVkXCJcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbCBMMSBmb3IgdGlja2V0IHN0YXR1cyAoZmFsbGJhY2sgZm9yIGVudmlyb25tZW50cyB3aXRob3V0IHdlYnNvY2tldClcbiAgICovXG4gIGFzeW5jIHBvbGxGb3JNYXRjaChcbiAgICB0aWNrZXRQZGE6IHdlYjMuUHVibGljS2V5LFxuICAgIGNvbm5lY3Rpb246IHdlYjMuQ29ubmVjdGlvbixcbiAgICBtYXhBdHRlbXB0czogbnVtYmVyID0gNjAsXG4gICAgcG9sbEludGVydmFsOiBudW1iZXIgPSAyMDAwLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsXG4gICk6IFByb21pc2U8eyBvcHBvbmVudDogd2ViMy5QdWJsaWNLZXk7IG1hdGNoSWQ6IGFuY2hvci5CTiB9IHwgbnVsbD4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4QXR0ZW1wdHM7IGkrKykge1xuICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBwb2xsSW50ZXJ2YWwpKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYWNjb3VudEluZm8gPSBhd2FpdCBjb25uZWN0aW9uLmdldEFjY291bnRJbmZvKHRpY2tldFBkYSk7XG4gICAgICAgIGlmICghYWNjb3VudEluZm8pIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLnByb2dyYW0uY29kZXIuYWNjb3VudHMuZGVjb2RlKFxuICAgICAgICAgIFwibWF0Y2hUaWNrZXRcIixcbiAgICAgICAgICBhY2NvdW50SW5mby5kYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRlY29kZWQuc3RhdHVzLm1hdGNoZWQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3Bwb25lbnQ6IGRlY29kZWQuc3RhdHVzLm1hdGNoZWQub3Bwb25lbnQsXG4gICAgICAgICAgICBtYXRjaElkOiBkZWNvZGVkLnN0YXR1cy5tYXRjaGVkLm1hdGNoSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBBY2NvdW50IG1heSBub3QgZXhpc3QgeWV0IG9yIGJlIGluIHRyYW5zaXRpb25cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxHQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsV0FBVyxHQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFrQjtRQUNoQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxNQUFNLCtCQUErQixDQUFD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QUFNLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFdEUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGZldGNoTWF5YmVNYXRjaFRpY2tldCxcbiAgYWNjb3VudFR5cGUsXG59IGZyb20gXCIuL2dlbmVyYXRlZC9kdWVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZW5kSW5zdHJ1Y3Rpb24gfSBmcm9tIFwiLi90cmFuc2FjdGlvbi5qc1wiO1xuaW1wb3J0IHsgd2FpdFVudGlsUGVybWlzc2lvbkFjdGl2ZSB9IGZyb20gXCIuL3RlZS5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuY29uc3QgRFVFTF9QUk9HUkFNX0lEID0gXCJFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WFwiIGFzIEFkZHJlc3M7XG5cbmV4cG9ydCBjbGFzcyBNYXRjaG1ha2luZ1BsYXllciB7XG4gIHB1YmxpYyBycGM6IFJwYzxTb2xhbmFScGNBcGk+O1xuICBwdWJsaWMgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjtcbiAgcHVibGljIHByb2dyYW1JZDogQWRkcmVzcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBycGM6IFJwYzxTb2xhbmFScGNBcGk+LFxuICAgIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4gICAgcHJvZ3JhbUlkOiBBZGRyZXNzID0gRFVFTF9QUk9HUkFNX0lELFxuICApIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNpZ25lciA9IHNpZ25lcjtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldCh0aWNrZXRQZGE6IEFkZHJlc3MpIHtcbiAgICByZXR1cm4gZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGVnYXRlVGlja2V0KFxuICAgIHBsYXllcjogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdmFsaWRhdG9yPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiB0aWNrZXRQZGEsXG4gICAgICBwYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB2YWxpZGF0b3IsXG4gICAgICBhY2NvdW50VHlwZTogYWNjb3VudFR5cGUoXCJUaWNrZXRcIiwgeyBwbGF5ZXIsIHRlbmFudCB9KSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgam9pblF1ZXVlKFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICBwbGF5ZXJEYXRhOiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHF1ZXVlLFxuICAgICAgdGVuYW50LFxuICAgICAgcGxheWVyRGF0YSxcbiAgICAgIHNpZ25lcjogdGhpcy5zaWduZXIsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgY29uc3QgaXhGaW5hbCA9IGNhbGxiYWNrUHJvZ3JhbVxuICAgICAgPyB7IC4uLml4LCBhY2NvdW50czogWy4uLml4LmFjY291bnRzLCB7IGFkZHJlc3M6IGNhbGxiYWNrUHJvZ3JhbSwgcm9sZTogMCBhcyBjb25zdCB9XSB9XG4gICAgICA6IGl4O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhGaW5hbCBhcyBhbnksIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbFRpY2tldCh0ZW5hbnQ6IEFkZHJlc3MpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Q2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwbGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjbG9zZVRpY2tldCh0ZW5hbnQ6IEFkZHJlc3MpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Q2xvc2VUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xsIEwxIGZvciB0aWNrZXQgc3RhdHVzLlxuICAgKiBSZXR1cm5zIG1hdGNoIGluZm8gd2hlbiBzdGF0dXMgYmVjb21lcyBNYXRjaGVkLlxuICAgKi9cbiAgYXN5bmMgcG9sbEZvck1hdGNoKFxuICAgIHRpY2tldFBkYTogQWRkcmVzcyxcbiAgICBtYXhBdHRlbXB0cyA9IDYwLFxuICAgIHBvbGxJbnRlcnZhbCA9IDIwMDAsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyBvcHBvbmVudDogQWRkcmVzczsgbWF0Y2hJZDogYmlnaW50IH0gfCBudWxsPiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhBdHRlbXB0czsgaSsrKSB7XG4gICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gbnVsbDtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHBvbGxJbnRlcnZhbCkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWF5YmVUaWNrZXQgPSBhd2FpdCBmZXRjaE1heWJlTWF0Y2hUaWNrZXQodGhpcy5ycGMsIHRpY2tldFBkYSk7XG4gICAgICAgIGlmICghbWF5YmVUaWNrZXQuZXhpc3RzKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbWF5YmVUaWNrZXQuZGF0YS5zdGF0dXM7XG4gICAgICAgIGlmIChzdGF0dXMuX19raW5kID09PSBcIk1hdGNoZWRcIikge1xuICAgICAgICAgIHJldHVybiB7IG9wcG9uZW50OiBzdGF0dXMub3Bwb25lbnQsIG1hdGNoSWQ6IHN0YXR1cy5tYXRjaElkIH07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgZGVjb2RlIGVycm9ycyBkdXJpbmcgdHJhbnNpdGlvblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWdoLWxldmVsOiBmdWxsIG1hdGNobWFraW5nIFRFRSBlbnRyeSBmbG93LlxuICAgKiBDcmVhdGVzIHRpY2tldCBvbiBMMSwgZGVsZWdhdGVzIGl0IHRvIFRFRSwgd2FpdHMgZm9yIGFjdGl2YXRpb24sIHRoZW4gam9pbnMgdGhlIHF1ZXVlLlxuICAgKiBVc2UgaW5kaXZpZHVhbCBtZXRob2RzIChjcmVhdGVUaWNrZXQsIGRlbGVnYXRlVGlja2V0LCBqb2luUXVldWUpIGFzIGVzY2FwZSBoYXRjaGVzIGlmIG5lZWRlZC5cbiAgICovXG4gIGFzeW5jIGVudGVyUXVldWUoXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgdGVlUnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzcztcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVRpY2tldCh0ZW5hbnQpO1xuICAgIGF3YWl0IHRoaXMuZGVsZWdhdGVUaWNrZXQocGxheWVyLCB0ZW5hbnQsIHZhbGlkYXRvcik7XG4gICAgYXdhaXQgd2FpdFVudGlsUGVybWlzc2lvbkFjdGl2ZSh0ZWVVcmxXaXRoVG9rZW4sIHRpY2tldFBkYSk7XG5cbiAgICBjb25zdCB0ZWVDbGllbnQgPSBuZXcgTWF0Y2htYWtpbmdQbGF5ZXIodGVlUnBjLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICAgIGF3YWl0IHRlZUNsaWVudC5qb2luUXVldWUocXVldWUsIHRlbmFudCwgcGxheWVyRGF0YSwgY2FsbGJhY2tQcm9ncmFtKTtcblxuICAgIHJldHVybiB0aWNrZXRQZGE7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nUGxheWVyIHBvaW50aW5nIGF0IGEgVEVFIFJQQyBlbmRwb2ludC4gKi9cbiAgd2l0aFJwYyh0ZWVVcmw6IHN0cmluZyk6IE1hdGNobWFraW5nUGxheWVyIHtcbiAgICByZXR1cm4gbmV3IE1hdGNobWFraW5nUGxheWVyKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
package/dist/tee.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { type Address, type MessagePartialSigner } from "@solana/kit";
2
+ export type { MessagePartialSigner as MessageSigner };
3
+ /**
4
+ * Authenticate with the MagicBlock TEE via challenge-sign flow.
5
+ */
6
+ export declare function getAuthToken(rpcUrl: string, signer: MessagePartialSigner): Promise<{
7
+ token: string;
8
+ expiresAt: number;
9
+ }>;
10
+ /**
11
+ * Poll the TEE /permission endpoint until the given PDA has authorized users,
12
+ * indicating delegation is active. Returns false on timeout (does not throw).
13
+ */
14
+ export declare function waitUntilPermissionActive(teeUrlWithToken: string, pda: Address, timeoutMs?: number): Promise<boolean>;