@intent-engine/core 0.1.23 → 0.1.27

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 (208) hide show
  1. package/dist/generated/client/accounts/claimBoard.d.ts +50 -0
  2. package/dist/generated/client/accounts/claimBoard.js +77 -0
  3. package/dist/generated/client/accounts/claimBoard.js.map +1 -0
  4. package/dist/generated/client/accounts/committee.d.ts +48 -0
  5. package/dist/generated/client/accounts/committee.js +75 -0
  6. package/dist/generated/client/accounts/committee.js.map +1 -0
  7. package/dist/generated/client/accounts/config.d.ts +2 -0
  8. package/dist/generated/client/accounts/config.js +4 -2
  9. package/dist/generated/client/accounts/config.js.map +1 -1
  10. package/dist/generated/client/accounts/index.d.ts +4 -0
  11. package/dist/generated/client/accounts/index.js +4 -0
  12. package/dist/generated/client/accounts/index.js.map +1 -1
  13. package/dist/generated/client/accounts/intent.d.ts +2 -0
  14. package/dist/generated/client/accounts/intent.js +4 -2
  15. package/dist/generated/client/accounts/intent.js.map +1 -1
  16. package/dist/generated/client/accounts/mintCap.d.ts +48 -0
  17. package/dist/generated/client/accounts/mintCap.js +75 -0
  18. package/dist/generated/client/accounts/mintCap.js.map +1 -0
  19. package/dist/generated/client/accounts/profile.d.ts +48 -0
  20. package/dist/generated/client/accounts/profile.js +81 -0
  21. package/dist/generated/client/accounts/profile.js.map +1 -0
  22. package/dist/generated/client/errors/intentEngine.d.ts +31 -1
  23. package/dist/generated/client/errors/intentEngine.js +45 -0
  24. package/dist/generated/client/errors/intentEngine.js.map +1 -1
  25. package/dist/generated/client/events/capsRequiredSet.d.ts +22 -0
  26. package/dist/generated/client/events/capsRequiredSet.js +32 -0
  27. package/dist/generated/client/events/capsRequiredSet.js.map +1 -0
  28. package/dist/generated/client/events/claimDropped.d.ts +28 -0
  29. package/dist/generated/client/events/claimDropped.js +40 -0
  30. package/dist/generated/client/events/claimDropped.js.map +1 -0
  31. package/dist/generated/client/events/claimsClosed.d.ts +23 -0
  32. package/dist/generated/client/events/claimsClosed.js +38 -0
  33. package/dist/generated/client/events/claimsClosed.js.map +1 -0
  34. package/dist/generated/client/events/claimsOpened.d.ts +30 -0
  35. package/dist/generated/client/events/claimsOpened.js +42 -0
  36. package/dist/generated/client/events/claimsOpened.js.map +1 -0
  37. package/dist/generated/client/events/committeeAttested.d.ts +24 -0
  38. package/dist/generated/client/events/committeeAttested.js +40 -0
  39. package/dist/generated/client/events/committeeAttested.js.map +1 -0
  40. package/dist/generated/client/events/committeeCreated.d.ts +25 -0
  41. package/dist/generated/client/events/committeeCreated.js +42 -0
  42. package/dist/generated/client/events/committeeCreated.js.map +1 -0
  43. package/dist/generated/client/events/index.d.ts +11 -0
  44. package/dist/generated/client/events/index.js +11 -0
  45. package/dist/generated/client/events/index.js.map +1 -1
  46. package/dist/generated/client/events/jobClaimed.d.ts +30 -0
  47. package/dist/generated/client/events/jobClaimed.js +42 -0
  48. package/dist/generated/client/events/jobClaimed.js.map +1 -0
  49. package/dist/generated/client/events/mintCapSet.d.ts +36 -0
  50. package/dist/generated/client/events/mintCapSet.js +48 -0
  51. package/dist/generated/client/events/mintCapSet.js.map +1 -0
  52. package/dist/generated/client/events/profileClosed.d.ts +22 -0
  53. package/dist/generated/client/events/profileClosed.js +32 -0
  54. package/dist/generated/client/events/profileClosed.js.map +1 -0
  55. package/dist/generated/client/events/profileSet.d.ts +26 -0
  56. package/dist/generated/client/events/profileSet.js +50 -0
  57. package/dist/generated/client/events/profileSet.js.map +1 -0
  58. package/dist/generated/client/events/stakeMoved.d.ts +32 -0
  59. package/dist/generated/client/events/stakeMoved.js +44 -0
  60. package/dist/generated/client/events/stakeMoved.js.map +1 -0
  61. package/dist/generated/client/instructions/claimJob.d.ts +72 -0
  62. package/dist/generated/client/instructions/claimJob.js +163 -0
  63. package/dist/generated/client/instructions/claimJob.js.map +1 -0
  64. package/dist/generated/client/instructions/closeProfile.d.ts +55 -0
  65. package/dist/generated/client/instructions/closeProfile.js +131 -0
  66. package/dist/generated/client/instructions/closeProfile.js.map +1 -0
  67. package/dist/generated/client/instructions/createCommittee.d.ts +76 -0
  68. package/dist/generated/client/instructions/createCommittee.js +163 -0
  69. package/dist/generated/client/instructions/createCommittee.js.map +1 -0
  70. package/dist/generated/client/instructions/createIntent.d.ts +13 -9
  71. package/dist/generated/client/instructions/createIntent.js +21 -2
  72. package/dist/generated/client/instructions/createIntent.js.map +1 -1
  73. package/dist/generated/client/instructions/createIntentByAgent.d.ts +13 -9
  74. package/dist/generated/client/instructions/createIntentByAgent.js +21 -2
  75. package/dist/generated/client/instructions/createIntentByAgent.js.map +1 -1
  76. package/dist/generated/client/instructions/createIntentSigned.d.ts +13 -9
  77. package/dist/generated/client/instructions/createIntentSigned.js +15 -2
  78. package/dist/generated/client/instructions/createIntentSigned.js.map +1 -1
  79. package/dist/generated/client/instructions/createProfile.d.ts +65 -0
  80. package/dist/generated/client/instructions/createProfile.js +162 -0
  81. package/dist/generated/client/instructions/createProfile.js.map +1 -0
  82. package/dist/generated/client/instructions/dropClaim.d.ts +59 -0
  83. package/dist/generated/client/instructions/dropClaim.js +128 -0
  84. package/dist/generated/client/instructions/dropClaim.js.map +1 -0
  85. package/dist/generated/client/instructions/fillAttested.d.ts +17 -9
  86. package/dist/generated/client/instructions/fillAttested.js +20 -2
  87. package/dist/generated/client/instructions/fillAttested.js.map +1 -1
  88. package/dist/generated/client/instructions/fillAttestedCommittee.d.ts +124 -0
  89. package/dist/generated/client/instructions/fillAttestedCommittee.js +271 -0
  90. package/dist/generated/client/instructions/fillAttestedCommittee.js.map +1 -0
  91. package/dist/generated/client/instructions/fillAttestedSplit.d.ts +22 -17
  92. package/dist/generated/client/instructions/fillAttestedSplit.js +24 -7
  93. package/dist/generated/client/instructions/fillAttestedSplit.js.map +1 -1
  94. package/dist/generated/client/instructions/fillAttestedSplitCommittee.d.ts +157 -0
  95. package/dist/generated/client/instructions/fillAttestedSplitCommittee.js +373 -0
  96. package/dist/generated/client/instructions/fillAttestedSplitCommittee.js.map +1 -0
  97. package/dist/generated/client/instructions/index.d.ts +12 -0
  98. package/dist/generated/client/instructions/index.js +12 -0
  99. package/dist/generated/client/instructions/index.js.map +1 -1
  100. package/dist/generated/client/instructions/openClaims.d.ts +72 -0
  101. package/dist/generated/client/instructions/openClaims.js +160 -0
  102. package/dist/generated/client/instructions/openClaims.js.map +1 -0
  103. package/dist/generated/client/instructions/setCapsRequired.d.ts +50 -0
  104. package/dist/generated/client/instructions/setCapsRequired.js +93 -0
  105. package/dist/generated/client/instructions/setCapsRequired.js.map +1 -0
  106. package/dist/generated/client/instructions/setMintCap.d.ts +84 -0
  107. package/dist/generated/client/instructions/setMintCap.js +188 -0
  108. package/dist/generated/client/instructions/setMintCap.js.map +1 -0
  109. package/dist/generated/client/instructions/settleClaims.d.ts +63 -0
  110. package/dist/generated/client/instructions/settleClaims.js +139 -0
  111. package/dist/generated/client/instructions/settleClaims.js.map +1 -0
  112. package/dist/generated/client/instructions/updateProfile.d.ts +61 -0
  113. package/dist/generated/client/instructions/updateProfile.js +140 -0
  114. package/dist/generated/client/instructions/updateProfile.js.map +1 -0
  115. package/dist/generated/client/pdas/board.d.ts +14 -0
  116. package/dist/generated/client/pdas/board.js +19 -0
  117. package/dist/generated/client/pdas/board.js.map +1 -0
  118. package/dist/generated/client/pdas/committee.d.ts +14 -0
  119. package/dist/generated/client/pdas/committee.js +19 -0
  120. package/dist/generated/client/pdas/committee.js.map +1 -0
  121. package/dist/generated/client/pdas/index.d.ts +4 -0
  122. package/dist/generated/client/pdas/index.js +4 -0
  123. package/dist/generated/client/pdas/index.js.map +1 -1
  124. package/dist/generated/client/pdas/mintCap.d.ts +14 -0
  125. package/dist/generated/client/pdas/mintCap.js +19 -0
  126. package/dist/generated/client/pdas/mintCap.js.map +1 -0
  127. package/dist/generated/client/pdas/profile.d.ts +14 -0
  128. package/dist/generated/client/pdas/profile.js +19 -0
  129. package/dist/generated/client/pdas/profile.js.map +1 -0
  130. package/dist/generated/client/programs/intentEngine.d.ts +190 -92
  131. package/dist/generated/client/programs/intentEngine.js +336 -91
  132. package/dist/generated/client/programs/intentEngine.js.map +1 -1
  133. package/dist/generated/client/types/index.d.ts +2 -0
  134. package/dist/generated/client/types/index.js +2 -0
  135. package/dist/generated/client/types/index.js.map +1 -1
  136. package/dist/generated/client/types/profileFields.d.ts +18 -0
  137. package/dist/generated/client/types/profileFields.js +34 -0
  138. package/dist/generated/client/types/profileFields.js.map +1 -0
  139. package/dist/generated/client/types/splitClaim.d.ts +16 -0
  140. package/dist/generated/client/types/splitClaim.js +24 -0
  141. package/dist/generated/client/types/splitClaim.js.map +1 -0
  142. package/dist/src/admin-builders.d.ts +49 -0
  143. package/dist/src/admin-builders.js +52 -0
  144. package/dist/src/admin-builders.js.map +1 -0
  145. package/dist/src/bounty.d.ts +3 -1
  146. package/dist/src/bounty.js +6 -2
  147. package/dist/src/bounty.js.map +1 -1
  148. package/dist/src/builder-accounts.d.ts +62 -0
  149. package/dist/src/builder-accounts.js +64 -0
  150. package/dist/src/builder-accounts.js.map +1 -0
  151. package/dist/src/builders.d.ts +5 -213
  152. package/dist/src/builders.js +5 -493
  153. package/dist/src/builders.js.map +1 -1
  154. package/dist/src/claims.d.ts +47 -0
  155. package/dist/src/claims.js +69 -0
  156. package/dist/src/claims.js.map +1 -0
  157. package/dist/src/committee.d.ts +40 -0
  158. package/dist/src/committee.js +145 -0
  159. package/dist/src/committee.js.map +1 -0
  160. package/dist/src/describe.d.ts +6 -1
  161. package/dist/src/describe.js +25 -3
  162. package/dist/src/describe.js.map +1 -1
  163. package/dist/src/errors.d.ts +2 -1
  164. package/dist/src/errors.js +44 -0
  165. package/dist/src/errors.js.map +1 -1
  166. package/dist/src/events.d.ts +12 -1
  167. package/dist/src/events.js +15 -1
  168. package/dist/src/events.js.map +1 -1
  169. package/dist/src/fee.d.ts +1 -0
  170. package/dist/src/fee.js +13 -5
  171. package/dist/src/fee.js.map +1 -1
  172. package/dist/src/fill-builders.d.ts +63 -0
  173. package/dist/src/fill-builders.js +151 -0
  174. package/dist/src/fill-builders.js.map +1 -0
  175. package/dist/src/index.d.ts +3 -0
  176. package/dist/src/index.js +3 -0
  177. package/dist/src/index.js.map +1 -1
  178. package/dist/src/intent-builders.d.ts +65 -0
  179. package/dist/src/intent-builders.js +159 -0
  180. package/dist/src/intent-builders.js.map +1 -0
  181. package/dist/src/mandate.js +2 -2
  182. package/dist/src/mandate.js.map +1 -1
  183. package/dist/src/math.d.ts +1 -0
  184. package/dist/src/math.js +9 -0
  185. package/dist/src/math.js.map +1 -1
  186. package/dist/src/memo.d.ts +11 -1
  187. package/dist/src/memo.js +40 -4
  188. package/dist/src/memo.js.map +1 -1
  189. package/dist/src/mint-caps.d.ts +31 -0
  190. package/dist/src/mint-caps.js +73 -0
  191. package/dist/src/mint-caps.js.map +1 -0
  192. package/dist/src/owner-builders.d.ts +52 -0
  193. package/dist/src/owner-builders.js +83 -0
  194. package/dist/src/owner-builders.js.map +1 -0
  195. package/dist/src/sig.d.ts +1 -0
  196. package/dist/src/sig.js +4 -0
  197. package/dist/src/sig.js.map +1 -1
  198. package/dist/src/state.d.ts +3 -0
  199. package/dist/src/state.js +5 -0
  200. package/dist/src/state.js.map +1 -1
  201. package/dist/src/validate.d.ts +2 -0
  202. package/dist/src/validate.js +15 -0
  203. package/dist/src/validate.js.map +1 -1
  204. package/generated/idl.json +1990 -63
  205. package/package.json +19 -6
  206. package/dist/generated/client/types/configSettings.d.ts +0 -25
  207. package/dist/generated/client/types/configSettings.js +0 -30
  208. package/dist/generated/client/types/configSettings.js.map +0 -1
@@ -0,0 +1,151 @@
1
+ import { getBeginFillInstructionAsync, getEndFillInstruction, getFillAttestedCommitteeInstructionAsync, getFillAttestedInstructionAsync, getFillAttestedSplitCommitteeInstructionAsync, getFillAttestedSplitInstructionAsync, getFillIntentInstructionAsync, } from "../generated/client/index.js";
2
+ import { agentAccount, events, fillExt, INSTRUCTIONS_SYSVAR_ADDRESS, intentOf, mandateAccounts, partnerAccount, } from "./builder-accounts.js";
3
+ import { MAX_SPLIT_RECIPIENTS } from "./bounty.js";
4
+ import { findAssociatedTokenAddress } from "./pdas.js";
5
+ export async function buildFillIntent(input) {
6
+ const feeTo = input.feeRecipient === undefined
7
+ ? undefined
8
+ : await findAssociatedTokenAddress({
9
+ owner: input.feeRecipient,
10
+ mint: input.inputMint,
11
+ tokenProgram: input.inputTokenProgram,
12
+ });
13
+ return getFillIntentInstructionAsync({
14
+ solver: input.solver,
15
+ intent: await intentOf(input.owner, input.nonce),
16
+ inputMint: input.inputMint,
17
+ outputMint: input.outputMint,
18
+ receiver: input.receiver,
19
+ solverOutput: input.solverOutput,
20
+ solverInput: input.solverInput,
21
+ ...(feeTo === undefined ? {} : { feeTo }),
22
+ ...(await partnerAccount(input)),
23
+ inputTokenProgram: input.inputTokenProgram,
24
+ outputTokenProgram: input.outputTokenProgram,
25
+ ...(await mandateAccounts(input)),
26
+ ...(await agentAccount(input)),
27
+ amountIn: input.amountIn,
28
+ amountOut: input.amountOut,
29
+ maxFeeBps: input.maxFeeBps,
30
+ ext: fillExt(input.ext),
31
+ ...(await events()),
32
+ });
33
+ }
34
+ async function ataOf(owner, input) {
35
+ return owner === undefined
36
+ ? undefined
37
+ : findAssociatedTokenAddress({ owner, mint: input.inputMint, tokenProgram: input.inputTokenProgram });
38
+ }
39
+ async function attestedAccounts(input) {
40
+ const feeTo = await ataOf(input.feeRecipient, input);
41
+ const judgeTo = await ataOf(input.judge, input);
42
+ return {
43
+ solver: input.solver,
44
+ intent: await intentOf(input.owner, input.nonce),
45
+ inputMint: input.inputMint,
46
+ ...(feeTo === undefined ? {} : { feeTo }),
47
+ ...(await partnerAccount(input)),
48
+ ...(judgeTo === undefined ? {} : { judgeTo }),
49
+ inputTokenProgram: input.inputTokenProgram,
50
+ instructions: INSTRUCTIONS_SYSVAR_ADDRESS,
51
+ ...(input.claims === undefined ? {} : { claims: input.claims }),
52
+ ...(input.stakeTo === undefined ? {} : { stakeTo: input.stakeTo }),
53
+ amountIn: input.amountIn,
54
+ result: input.result,
55
+ maxFeeBps: input.maxFeeBps,
56
+ ext: fillExt(input.ext),
57
+ ...(await events()),
58
+ };
59
+ }
60
+ export async function buildFillAttested(input) {
61
+ return getFillAttestedInstructionAsync({ ...(await attestedAccounts(input)), payee: input.payee });
62
+ }
63
+ export async function buildFillAttestedCommittee(input) {
64
+ return getFillAttestedCommitteeInstructionAsync({
65
+ ...(await attestedAccounts(input)),
66
+ payee: input.payee,
67
+ committee: input.committee,
68
+ signers: input.signers,
69
+ });
70
+ }
71
+ async function splitAccounts(input) {
72
+ if (input.recipients.length < 1 || input.recipients.length > MAX_SPLIT_RECIPIENTS) {
73
+ throw new Error(`split needs 1..=${MAX_SPLIT_RECIPIENTS} recipients, got ${input.recipients.length}`);
74
+ }
75
+ if (input.weights.length !== input.recipients.length) {
76
+ throw new Error(`split needs one weight per recipient, got ${input.weights.length} for ${input.recipients.length}`);
77
+ }
78
+ const slots = await Promise.all(input.recipients.map((owner) => ataOf(owner, input)));
79
+ return {
80
+ ...(await attestedAccounts(input)),
81
+ ...(slots[0] === undefined ? {} : { recipient0: slots[0] }),
82
+ ...(slots[1] === undefined ? {} : { recipient1: slots[1] }),
83
+ ...(slots[2] === undefined ? {} : { recipient2: slots[2] }),
84
+ ...(slots[3] === undefined ? {} : { recipient3: slots[3] }),
85
+ ...(slots[4] === undefined ? {} : { recipient4: slots[4] }),
86
+ ...(slots[5] === undefined ? {} : { recipient5: slots[5] }),
87
+ ...(slots[6] === undefined ? {} : { recipient6: slots[6] }),
88
+ ...(slots[7] === undefined ? {} : { recipient7: slots[7] }),
89
+ claim: { recipients: input.recipients, weights: input.weights },
90
+ };
91
+ }
92
+ export async function buildFillAttestedSplit(input) {
93
+ return getFillAttestedSplitInstructionAsync(await splitAccounts(input));
94
+ }
95
+ export async function buildFillAttestedSplitCommittee(input) {
96
+ return getFillAttestedSplitCommitteeInstructionAsync({
97
+ ...(await splitAccounts(input)),
98
+ committee: input.committee,
99
+ signers: input.signers,
100
+ });
101
+ }
102
+ export async function buildFlashFill(input) {
103
+ const baseIndex = input.baseIndex ?? 0;
104
+ if (!Number.isInteger(baseIndex) || baseIndex < 0) {
105
+ throw new RangeError(`baseIndex must be a non-negative integer, got ${baseIndex}`);
106
+ }
107
+ const prefix = input.prefix ?? [];
108
+ const route = input.route ?? [];
109
+ const endIndex = baseIndex + prefix.length + 1 + route.length;
110
+ if (endIndex > 0xffff) {
111
+ throw new RangeError(`a flash fill cannot end at instruction ${endIndex}`);
112
+ }
113
+ const intent = await intentOf(input.owner, input.nonce);
114
+ const feeTo = input.feeRecipient === undefined
115
+ ? undefined
116
+ : await findAssociatedTokenAddress({
117
+ owner: input.feeRecipient,
118
+ mint: input.inputMint,
119
+ tokenProgram: input.inputTokenProgram,
120
+ });
121
+ const begin = await getBeginFillInstructionAsync({
122
+ solver: input.solver,
123
+ intent,
124
+ inputMint: input.inputMint,
125
+ solverInput: input.solverInput,
126
+ ...(feeTo === undefined ? {} : { feeTo }),
127
+ ...(await partnerAccount(input)),
128
+ inputTokenProgram: input.inputTokenProgram,
129
+ instructions: INSTRUCTIONS_SYSVAR_ADDRESS,
130
+ ...(await mandateAccounts(input)),
131
+ ...(await agentAccount(input)),
132
+ amountIn: input.amountIn,
133
+ endIndex,
134
+ maxFeeBps: input.maxFeeBps,
135
+ ext: fillExt(input.beginExt),
136
+ ...(await events()),
137
+ });
138
+ const end = getEndFillInstruction({
139
+ intent,
140
+ solver: input.solver,
141
+ outputMint: input.outputMint,
142
+ receiver: input.receiver,
143
+ solverOutput: input.solverOutput,
144
+ outputTokenProgram: input.outputTokenProgram,
145
+ amountOut: input.amountOut,
146
+ ext: fillExt(input.endExt),
147
+ ...(await events()),
148
+ });
149
+ return [...prefix, begin, ...route, end];
150
+ }
151
+ //# sourceMappingURL=fill-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fill-builders.js","sourceRoot":"","sources":["../../src/fill-builders.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ export * from "../generated/client/index.js";
2
2
  export * from "../generated/identity.js";
3
3
  export * from "./bounty.js";
4
4
  export * from "./builders.js";
5
+ export * from "./claims.js";
6
+ export * from "./committee.js";
5
7
  export * from "./compute.js";
6
8
  export * from "./describe.js";
7
9
  export * from "./errors.js";
@@ -13,6 +15,7 @@ export * from "./mandate.js";
13
15
  export * from "./manifest.js";
14
16
  export * from "./math.js";
15
17
  export * from "./memo.js";
18
+ export * from "./mint-caps.js";
16
19
  export * from "./mints.js";
17
20
  export * from "./pdas.js";
18
21
  export * from "./sig.js";
package/dist/src/index.js CHANGED
@@ -2,6 +2,8 @@ export * from "../generated/client/index.js";
2
2
  export * from "../generated/identity.js";
3
3
  export * from "./bounty.js";
4
4
  export * from "./builders.js";
5
+ export * from "./claims.js";
6
+ export * from "./committee.js";
5
7
  export * from "./compute.js";
6
8
  export * from "./describe.js";
7
9
  export * from "./errors.js";
@@ -13,6 +15,7 @@ export * from "./mandate.js";
13
15
  export * from "./manifest.js";
14
16
  export * from "./math.js";
15
17
  export * from "./memo.js";
18
+ export * from "./mint-caps.js";
16
19
  export * from "./mints.js";
17
20
  export * from "./pdas.js";
18
21
  export * from "./sig.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,65 @@
1
+ import type { Address, TransactionSigner } from "@solana/kit";
2
+ import type { Partner } from "./ext.js";
3
+ import type { IntentParams } from "./kinds.js";
4
+ export type CreateIntentSpec = {
5
+ owner: TransactionSigner;
6
+ treasury: Address;
7
+ maxCreateFee: number;
8
+ maxBounty: number;
9
+ nonce: bigint;
10
+ params: IntentParams;
11
+ expiresAt: bigint;
12
+ flags?: number;
13
+ ext?: Uint8Array;
14
+ partner?: Partner;
15
+ inputMint: Address;
16
+ outputMint: Address;
17
+ inputTokenProgram: Address;
18
+ outputTokenProgram: Address;
19
+ ownerInput?: Address;
20
+ receiver?: Address;
21
+ receiverAuthority?: Address;
22
+ mintCap?: Address;
23
+ };
24
+ export declare function buildCreateIntent(input: CreateIntentSpec): Promise<import("../generated/client/index.js").CreateIntentInstruction<Address<"GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU">, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, "GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU", []>>;
25
+ type IntentRef = {
26
+ owner: Address;
27
+ nonce: bigint;
28
+ inputMint: Address;
29
+ tokenProgram: Address;
30
+ };
31
+ export declare function buildCancelIntent(input: Omit<IntentRef, "owner"> & {
32
+ owner: TransactionSigner;
33
+ refundTo?: Address;
34
+ ext?: Uint8Array;
35
+ }): Promise<import("../generated/client/index.js").CancelIntentInstruction<Address<"GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU">, string, string, string, string, string, string, string, "GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU", []>>;
36
+ export declare function buildExpireIntent(input: IntentRef & {
37
+ cranker: TransactionSigner;
38
+ refundTo?: Address;
39
+ ext?: Uint8Array;
40
+ }): Promise<import("../generated/client/index.js").ExpireIntentInstruction<Address<"GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU">, string, string, string, string, string, string, string, string, "GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU", []>>;
41
+ export declare function buildCloseIntent(input: IntentRef & {
42
+ cranker: TransactionSigner;
43
+ rentPayer?: Address;
44
+ intent?: {
45
+ rentPayer: Address;
46
+ };
47
+ refundTo?: Address;
48
+ ext?: Uint8Array;
49
+ }): Promise<import("../generated/client/index.js").CloseIntentInstruction<Address<"GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU">, string, string, string, string, string, string, string, string, string, string, "GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU", []>>;
50
+ export type CreateIntentSignedSpec = Omit<CreateIntentSpec, "owner"> & {
51
+ payer: TransactionSigner;
52
+ owner: Address;
53
+ submitBy: bigint;
54
+ relayerFee?: bigint;
55
+ relayerFeeAccount?: Address;
56
+ };
57
+ export declare function buildCreateIntentSigned(input: CreateIntentSignedSpec): Promise<import("../generated/client/index.js").CreateIntentSignedInstruction<Address<"GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU">, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, "Sysvar1nstructions1111111111111111111111111", string, string, "GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU", []>>;
58
+ export type CreateIntentByAgentSpec = Omit<CreateIntentSpec, "owner" | "treasury" | "receiverAuthority"> & {
59
+ agent: TransactionSigner;
60
+ owner: Address;
61
+ mandateId: bigint;
62
+ treasury: Address;
63
+ };
64
+ export declare function buildCreateIntentByAgent(input: CreateIntentByAgentSpec): Promise<import("../generated/client/index.js").CreateIntentByAgentInstruction<Address<"GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU">, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, string, "GHFB9q4fhhqRyCoycoivdxMhFkp1aLHJk5VvroUsgrJU", []>>;
65
+ export {};
@@ -0,0 +1,159 @@
1
+ import { findDelegatePda, getCancelIntentInstructionAsync, getCloseIntentInstructionAsync, getCreateIntentInstructionAsync, getCreateIntentByAgentInstructionAsync, getCreateIntentSignedInstructionAsync, getExpireIntentInstructionAsync, } from "../generated/client/index.js";
2
+ import { createArgs, events, INSTRUCTIONS_SYSVAR_ADDRESS, intentOf, settleExt } from "./builder-accounts.js";
3
+ import { mintCapSlot, withMintCap } from "./mint-caps.js";
4
+ import { findAssociatedTokenAddress, findMandatePda } from "./pdas.js";
5
+ export async function buildCreateIntent(input) {
6
+ const owner = input.owner.address;
7
+ const args = createArgs(input);
8
+ const ownerInput = input.ownerInput ??
9
+ (await findAssociatedTokenAddress({
10
+ owner,
11
+ mint: input.inputMint,
12
+ tokenProgram: input.inputTokenProgram,
13
+ }));
14
+ const receiver = input.receiver ??
15
+ (await findAssociatedTokenAddress({
16
+ owner,
17
+ mint: input.outputMint,
18
+ tokenProgram: input.outputTokenProgram,
19
+ }));
20
+ const create = await getCreateIntentInstructionAsync({
21
+ owner: input.owner,
22
+ intent: await intentOf(owner, input.nonce),
23
+ inputMint: input.inputMint,
24
+ outputMint: input.outputMint,
25
+ ownerInput,
26
+ receiver,
27
+ receiverAuthority: input.receiverAuthority ?? owner,
28
+ treasury: input.treasury,
29
+ inputTokenProgram: input.inputTokenProgram,
30
+ outputTokenProgram: input.outputTokenProgram,
31
+ args,
32
+ mintCap: mintCapSlot(input.mintCap),
33
+ ...(await events()),
34
+ });
35
+ return withMintCap(create, input.mintCap);
36
+ }
37
+ async function canonicalRefund(ref) {
38
+ return findAssociatedTokenAddress({
39
+ owner: ref.owner,
40
+ mint: ref.inputMint,
41
+ tokenProgram: ref.tokenProgram,
42
+ });
43
+ }
44
+ export async function buildCancelIntent(input) {
45
+ const ref = { ...input, owner: input.owner.address };
46
+ const ext = settleExt(input.ext);
47
+ return getCancelIntentInstructionAsync({
48
+ owner: input.owner,
49
+ intent: await intentOf(ref.owner, input.nonce),
50
+ inputMint: input.inputMint,
51
+ refundTo: input.refundTo ?? (await canonicalRefund(ref)),
52
+ tokenProgram: input.tokenProgram,
53
+ ext,
54
+ ...(await events()),
55
+ });
56
+ }
57
+ export async function buildExpireIntent(input) {
58
+ const ext = settleExt(input.ext);
59
+ return getExpireIntentInstructionAsync({
60
+ cranker: input.cranker,
61
+ intent: await intentOf(input.owner, input.nonce),
62
+ inputMint: input.inputMint,
63
+ refundTo: input.refundTo ?? (await canonicalRefund(input)),
64
+ canonicalRefund: await canonicalRefund(input),
65
+ tokenProgram: input.tokenProgram,
66
+ ext,
67
+ ...(await events()),
68
+ });
69
+ }
70
+ export async function buildCloseIntent(input) {
71
+ const ext = settleExt(input.ext);
72
+ return getCloseIntentInstructionAsync({
73
+ cranker: input.cranker,
74
+ intent: await intentOf(input.owner, input.nonce),
75
+ inputMint: input.inputMint,
76
+ refundTo: input.refundTo ?? (await canonicalRefund(input)),
77
+ canonicalRefund: await canonicalRefund(input),
78
+ owner: input.owner,
79
+ rentPayer: input.rentPayer ?? input.intent?.rentPayer ?? input.owner,
80
+ tokenProgram: input.tokenProgram,
81
+ ext,
82
+ ...(await events()),
83
+ });
84
+ }
85
+ async function feeAccount(name, fee, account, owner, input) {
86
+ if (fee === 0n) {
87
+ return {};
88
+ }
89
+ const address = account ?? (await findAssociatedTokenAddress({ owner, mint: input.inputMint, tokenProgram: input.inputTokenProgram }));
90
+ return { [name]: address };
91
+ }
92
+ export async function buildCreateIntentSigned(input) {
93
+ const owner = input.owner;
94
+ const relayerFee = input.relayerFee ?? 0n;
95
+ const args = createArgs(input);
96
+ const ownerInput = input.ownerInput ??
97
+ (await findAssociatedTokenAddress({
98
+ owner,
99
+ mint: input.inputMint,
100
+ tokenProgram: input.inputTokenProgram,
101
+ }));
102
+ const receiver = input.receiver ??
103
+ (await findAssociatedTokenAddress({
104
+ owner,
105
+ mint: input.outputMint,
106
+ tokenProgram: input.outputTokenProgram,
107
+ }));
108
+ const create = await getCreateIntentSignedInstructionAsync({
109
+ payer: input.payer,
110
+ owner,
111
+ intent: await intentOf(owner, input.nonce),
112
+ inputMint: input.inputMint,
113
+ outputMint: input.outputMint,
114
+ ownerInput,
115
+ receiver,
116
+ receiverAuthority: input.receiverAuthority ?? owner,
117
+ delegate: (await findDelegatePda({ owner }))[0],
118
+ treasury: input.treasury,
119
+ inputTokenProgram: input.inputTokenProgram,
120
+ outputTokenProgram: input.outputTokenProgram,
121
+ instructions: INSTRUCTIONS_SYSVAR_ADDRESS,
122
+ ...(await feeAccount("relayerFeeTo", relayerFee, input.relayerFeeAccount, input.payer.address, input)),
123
+ args,
124
+ submitBy: input.submitBy,
125
+ relayerFee,
126
+ mintCap: mintCapSlot(input.mintCap),
127
+ ...(await events()),
128
+ });
129
+ return withMintCap(create, input.mintCap);
130
+ }
131
+ export async function buildCreateIntentByAgent(input) {
132
+ const owner = input.owner;
133
+ const args = createArgs(input);
134
+ const ownerInput = input.ownerInput ??
135
+ (await findAssociatedTokenAddress({ owner, mint: input.inputMint, tokenProgram: input.inputTokenProgram }));
136
+ const receiver = input.receiver ??
137
+ (await findAssociatedTokenAddress({ owner, mint: input.outputMint, tokenProgram: input.outputTokenProgram }));
138
+ const [mandate] = await findMandatePda({ owner, agent: input.agent.address, id: input.mandateId });
139
+ const create = await getCreateIntentByAgentInstructionAsync({
140
+ agent: input.agent,
141
+ owner,
142
+ mandate,
143
+ intent: await intentOf(owner, input.nonce),
144
+ inputMint: input.inputMint,
145
+ outputMint: input.outputMint,
146
+ ownerInput,
147
+ receiver,
148
+ receiverAuthority: owner,
149
+ delegate: (await findDelegatePda({ owner }))[0],
150
+ treasury: input.treasury,
151
+ inputTokenProgram: input.inputTokenProgram,
152
+ outputTokenProgram: input.outputTokenProgram,
153
+ args,
154
+ mintCap: mintCapSlot(input.mintCap),
155
+ ...(await events()),
156
+ });
157
+ return withMintCap(create, input.mintCap);
158
+ }
159
+ //# sourceMappingURL=intent-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-builders.js","sourceRoot":"","sources":["../../src/intent-builders.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { formatAmount, formatTime, tokenOf } from "./describe.js";
1
+ import { formatAmount, formatTime, partnerFeeLine, tokenOf } from "./describe.js";
2
2
  import { encodePartner } from "./ext.js";
3
3
  import { Kind, kindBit } from "./kinds.js";
4
4
  export const MANDATE_KINDS = Number(kindBit(Kind.SwapExactIn) | kindBit(Kind.LimitOrder) | kindBit(Kind.DutchAuction));
@@ -68,7 +68,7 @@ export function describeMandate(spec, o) {
68
68
  `Price floor: at least ${formatAmount(spec.floorOut, o.outputDecimals)} of ${tokenOf(o.outputMint, o.outputName)} for every ${sell(spec.floorIn)}`,
69
69
  `Each intent expires within ${spec.maxTtl} seconds of its creation`,
70
70
  `Valid until: ${formatTime(spec.validUntil)}`,
71
- ...(spec.partner === undefined ? [] : [`Partner fee: ${spec.partner.bps} bps of the sold amount to ${spec.partner.key}`]),
71
+ ...(spec.partner === undefined ? [] : [partnerFeeLine(spec.partner.bps, spec.partner.key)]),
72
72
  ...(agentFee === 0n
73
73
  ? []
74
74
  : [
@@ -1 +1 @@
1
- {"version":3,"file":"mandate.js","sourceRoot":"","sources":["../../src/mandate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mandate.js","sourceRoot":"","sources":["../../src/mandate.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export declare const U64_MAX: bigint;
2
+ export declare function checkU64(value: bigint, name?: string): bigint;
2
3
  export declare function mulDivFloor(a: bigint, b: bigint, d: bigint): bigint;
3
4
  export declare function mulDivCeil(a: bigint, b: bigint, d: bigint): bigint;
package/dist/src/math.js CHANGED
@@ -1,6 +1,15 @@
1
1
  import { IntentCoreError } from "./errors.js";
2
2
  export const U64_MAX = (1n << 64n) - 1n;
3
+ export function checkU64(value, name = "amount") {
4
+ if (value < 0n || value > U64_MAX) {
5
+ throw new RangeError(`${name} ${String(value)} is not between 0 and ${U64_MAX}`);
6
+ }
7
+ return value;
8
+ }
3
9
  function quotient(a, b, d) {
10
+ checkU64(a, "operand");
11
+ checkU64(b, "operand");
12
+ checkU64(d, "divisor");
4
13
  if (d === 0n) {
5
14
  throw new IntentCoreError("DivideByZero");
6
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAExC,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC/C,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;QAChB,MAAM,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAExC,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,IAAI,GAAG,QAAQ;IACrD,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC/C,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;QAChB,MAAM,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACzD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -2,6 +2,8 @@ import { type Address } from "@solana/kit";
2
2
  export declare const SPEC_MEMO_PREFIX = "solive-spec:";
3
3
  export declare const DELIVERY_MEMO_PREFIX = "solive-delivery:";
4
4
  export declare const RELEASE_MEMO_PREFIX = "delivery sha256:";
5
+ export declare const FEEDBACK_MEMO_PREFIX = "solive-feedback:";
6
+ export declare const MAX_FEEDBACK_SCORE = 100;
5
7
  export declare const MAX_MEMO_URL = 200;
6
8
  export declare const MAX_DELIVERY_MEMO: number;
7
9
  export type SpecMemo = {
@@ -12,8 +14,14 @@ export type DeliveryMemo = {
12
14
  sha256: string;
13
15
  url: string;
14
16
  };
15
- export declare const MEMO_URL_RULE = "an https url of at most 200 printable characters without spaces, or http on localhost";
17
+ export type FeedbackMemo = {
18
+ intent: Address;
19
+ score: number;
20
+ note?: string;
21
+ };
22
+ export declare const MEMO_URL_RULE = "an https url of at most 200 printable characters without spaces or backslashes, or http on localhost, 127.0.0.1 or [::1], in canonical form: lowercase scheme and host, no default port, no . or .. path segments, a / path before any ? or #, and characters percent-encoded as new URL() would";
16
23
  export declare function isMemoUrl(url: string): boolean;
24
+ export declare function isLegacyMemoUrl(url: string): boolean;
17
25
  export declare function isSha256Hex(text: string): boolean;
18
26
  export declare function specMemo(url: string): string;
19
27
  export declare function parseSpecMemo(text: string): SpecMemo | null;
@@ -21,3 +29,5 @@ export declare function deliveryMemo({ intent, sha256, url }: DeliveryMemo): str
21
29
  export declare function parseDeliveryMemo(text: string): DeliveryMemo | null;
22
30
  export declare function releaseMemo(sha256: string): string;
23
31
  export declare function parseReleaseMemo(text: string): string | null;
32
+ export declare function feedbackMemo({ intent, score, note }: FeedbackMemo): string;
33
+ export declare function parseFeedbackMemo(text: string): FeedbackMemo | null;
package/dist/src/memo.js CHANGED
@@ -3,14 +3,24 @@ import { PRODUCT_SLUG } from "../generated/identity.js";
3
3
  export const SPEC_MEMO_PREFIX = `${PRODUCT_SLUG}-spec:`;
4
4
  export const DELIVERY_MEMO_PREFIX = `${PRODUCT_SLUG}-delivery:`;
5
5
  export const RELEASE_MEMO_PREFIX = "delivery sha256:";
6
+ export const FEEDBACK_MEMO_PREFIX = `${PRODUCT_SLUG}-feedback:`;
7
+ export const MAX_FEEDBACK_SCORE = 100;
6
8
  export const MAX_MEMO_URL = 200;
7
9
  export const MAX_DELIVERY_MEMO = DELIVERY_MEMO_PREFIX.length + 44 + 1 + 64 + 1 + MAX_MEMO_URL;
8
- export const MEMO_URL_RULE = `an https url of at most ${MAX_MEMO_URL} printable characters without spaces, or http on localhost`;
10
+ export const MEMO_URL_RULE = `an https url of at most ${MAX_MEMO_URL} printable characters without spaces or backslashes, or http on localhost, 127.0.0.1 or [::1], in canonical form: lowercase scheme and host, no default port, no . or .. path segments, a / path before any ? or #, and characters percent-encoded as new URL() would`;
9
11
  const PRINTABLE = /^[!-~]+$/;
10
12
  const SHA256 = /^[0-9a-f]{64}$/;
11
13
  const LOCAL_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]"]);
12
14
  export function isMemoUrl(url) {
13
- if (url.length > MAX_MEMO_URL || !PRINTABLE.test(url)) {
15
+ if (!isLegacyMemoUrl(url)) {
16
+ return false;
17
+ }
18
+ const parsed = new URL(url);
19
+ const bareOrigin = parsed.href === `${url}/` && parsed.pathname === "/" && parsed.search === "" && parsed.hash === "";
20
+ return parsed.href === url || bareOrigin;
21
+ }
22
+ export function isLegacyMemoUrl(url) {
23
+ if (url.length > MAX_MEMO_URL || !PRINTABLE.test(url) || url.includes("\\")) {
14
24
  return false;
15
25
  }
16
26
  let parsed;
@@ -42,7 +52,7 @@ export function parseSpecMemo(text) {
42
52
  return null;
43
53
  }
44
54
  const url = text.slice(SPEC_MEMO_PREFIX.length);
45
- return isMemoUrl(url) ? { url } : null;
55
+ return isLegacyMemoUrl(url) ? { url } : null;
46
56
  }
47
57
  export function deliveryMemo({ intent, sha256, url }) {
48
58
  if (!isAddress(intent)) {
@@ -68,7 +78,7 @@ export function parseDeliveryMemo(text) {
68
78
  const intent = rest.slice(0, split);
69
79
  const sha256 = rest.slice(split + 1, split + 65);
70
80
  const url = rest.slice(split + 66);
71
- if (rest[split + 65] !== ":" || !isAddress(intent) || !isSha256Hex(sha256) || !isMemoUrl(url)) {
81
+ if (rest[split + 65] !== ":" || !isAddress(intent) || !isSha256Hex(sha256) || !isLegacyMemoUrl(url)) {
72
82
  return null;
73
83
  }
74
84
  return { intent, sha256, url };
@@ -83,4 +93,30 @@ export function parseReleaseMemo(text) {
83
93
  const sha256 = text.slice(RELEASE_MEMO_PREFIX.length);
84
94
  return text.startsWith(RELEASE_MEMO_PREFIX) && isSha256Hex(sha256) ? sha256 : null;
85
95
  }
96
+ const SCORE = /^(0|[1-9][0-9]{0,2})$/;
97
+ export function feedbackMemo({ intent, score, note }) {
98
+ if (!isAddress(intent)) {
99
+ throw new RangeError("feedback names its intent by a base58 address");
100
+ }
101
+ if (!Number.isInteger(score) || score < 0 || score > MAX_FEEDBACK_SCORE) {
102
+ throw new RangeError(`a feedback score is a whole number from 0 to ${MAX_FEEDBACK_SCORE}`);
103
+ }
104
+ if (note !== undefined && !isSha256Hex(note)) {
105
+ throw new RangeError("a feedback note is the sha256 of the note as 64 lowercase hex digits");
106
+ }
107
+ return `${FEEDBACK_MEMO_PREFIX}${intent}:${score}${note === undefined ? "" : `:${note}`}`;
108
+ }
109
+ export function parseFeedbackMemo(text) {
110
+ if (!text.startsWith(FEEDBACK_MEMO_PREFIX)) {
111
+ return null;
112
+ }
113
+ const [intent = "", score = "", note, ...rest] = text.slice(FEEDBACK_MEMO_PREFIX.length).split(":");
114
+ if (rest.length > 0 || !isAddress(intent) || !SCORE.test(score) || Number(score) > MAX_FEEDBACK_SCORE) {
115
+ return null;
116
+ }
117
+ if (note !== undefined && !isSha256Hex(note)) {
118
+ return null;
119
+ }
120
+ return { intent, score: Number(score), ...(note === undefined ? {} : { note }) };
121
+ }
86
122
  //# sourceMappingURL=memo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/memo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/memo.ts"],"names":[],"mappings":"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"}