hive-stream 3.0.2 → 3.0.4

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 (202) hide show
  1. package/DOCUMENTATION.md +50 -2
  2. package/README.md +282 -4
  3. package/dist/adapters/base.adapter.d.ts +5 -0
  4. package/dist/adapters/base.adapter.js +9 -0
  5. package/dist/adapters/base.adapter.js.map +1 -1
  6. package/dist/adapters/mongodb.adapter.d.ts +6 -6
  7. package/dist/adapters/mongodb.adapter.js +36 -21
  8. package/dist/adapters/mongodb.adapter.js.map +1 -1
  9. package/dist/adapters/postgresql.adapter.d.ts +7 -0
  10. package/dist/adapters/postgresql.adapter.js +46 -19
  11. package/dist/adapters/postgresql.adapter.js.map +1 -1
  12. package/dist/adapters/sqlite.adapter.d.ts +4 -0
  13. package/dist/adapters/sqlite.adapter.js +10 -0
  14. package/dist/adapters/sqlite.adapter.js.map +1 -1
  15. package/dist/api.d.ts +13 -3
  16. package/dist/api.js +96 -62
  17. package/dist/api.js.map +1 -1
  18. package/dist/builders.d.ts +176 -0
  19. package/dist/builders.js +727 -0
  20. package/dist/builders.js.map +1 -0
  21. package/dist/config.d.ts +16 -1
  22. package/dist/config.js +95 -3
  23. package/dist/config.js.map +1 -1
  24. package/dist/contracts/auctionhouse.contract.d.ts +4 -0
  25. package/dist/contracts/auctionhouse.contract.js +234 -0
  26. package/dist/contracts/auctionhouse.contract.js.map +1 -0
  27. package/dist/contracts/booking.contract.d.ts +4 -0
  28. package/dist/contracts/booking.contract.js +225 -0
  29. package/dist/contracts/booking.contract.js.map +1 -0
  30. package/dist/contracts/bountyboard.contract.d.ts +4 -0
  31. package/dist/contracts/bountyboard.contract.js +233 -0
  32. package/dist/contracts/bountyboard.contract.js.map +1 -0
  33. package/dist/contracts/bundlemarketplace.contract.d.ts +4 -0
  34. package/dist/contracts/bundlemarketplace.contract.js +195 -0
  35. package/dist/contracts/bundlemarketplace.contract.js.map +1 -0
  36. package/dist/contracts/charitymatch.contract.d.ts +4 -0
  37. package/dist/contracts/charitymatch.contract.js +172 -0
  38. package/dist/contracts/charitymatch.contract.js.map +1 -0
  39. package/dist/contracts/coinflip.contract.js +25 -22
  40. package/dist/contracts/coinflip.contract.js.map +1 -1
  41. package/dist/contracts/crowdfund.contract.d.ts +4 -0
  42. package/dist/contracts/crowdfund.contract.js +290 -0
  43. package/dist/contracts/crowdfund.contract.js.map +1 -0
  44. package/dist/contracts/dcabot.contract.d.ts +4 -0
  45. package/dist/contracts/dcabot.contract.js +217 -0
  46. package/dist/contracts/dcabot.contract.js.map +1 -0
  47. package/dist/contracts/dice.contract.js +25 -22
  48. package/dist/contracts/dice.contract.js.map +1 -1
  49. package/dist/contracts/domainregistry.contract.d.ts +4 -0
  50. package/dist/contracts/domainregistry.contract.js +232 -0
  51. package/dist/contracts/domainregistry.contract.js.map +1 -0
  52. package/dist/contracts/exchange.contract.js +209 -168
  53. package/dist/contracts/exchange.contract.js.map +1 -1
  54. package/dist/contracts/fanclub.contract.d.ts +4 -0
  55. package/dist/contracts/fanclub.contract.js +193 -0
  56. package/dist/contracts/fanclub.contract.js.map +1 -0
  57. package/dist/contracts/giftcard.contract.d.ts +4 -0
  58. package/dist/contracts/giftcard.contract.js +158 -0
  59. package/dist/contracts/giftcard.contract.js.map +1 -0
  60. package/dist/contracts/grantrounds.contract.d.ts +4 -0
  61. package/dist/contracts/grantrounds.contract.js +265 -0
  62. package/dist/contracts/grantrounds.contract.js.map +1 -0
  63. package/dist/contracts/groupbuy.contract.d.ts +4 -0
  64. package/dist/contracts/groupbuy.contract.js +198 -0
  65. package/dist/contracts/groupbuy.contract.js.map +1 -0
  66. package/dist/contracts/helpers.d.ts +66 -0
  67. package/dist/contracts/helpers.js +166 -0
  68. package/dist/contracts/helpers.js.map +1 -0
  69. package/dist/contracts/insurancepool.contract.d.ts +4 -0
  70. package/dist/contracts/insurancepool.contract.js +281 -0
  71. package/dist/contracts/insurancepool.contract.js.map +1 -0
  72. package/dist/contracts/invoice.contract.d.ts +4 -0
  73. package/dist/contracts/invoice.contract.js +193 -0
  74. package/dist/contracts/invoice.contract.js.map +1 -0
  75. package/dist/contracts/launchpad.contract.d.ts +4 -0
  76. package/dist/contracts/launchpad.contract.js +225 -0
  77. package/dist/contracts/launchpad.contract.js.map +1 -0
  78. package/dist/contracts/lotto.contract.js +53 -37
  79. package/dist/contracts/lotto.contract.js.map +1 -1
  80. package/dist/contracts/multisigtreasury.contract.d.ts +4 -0
  81. package/dist/contracts/multisigtreasury.contract.js +245 -0
  82. package/dist/contracts/multisigtreasury.contract.js.map +1 -0
  83. package/dist/contracts/nft.contract.d.ts +1 -0
  84. package/dist/contracts/nft.contract.js +234 -195
  85. package/dist/contracts/nft.contract.js.map +1 -1
  86. package/dist/contracts/oraclebounty.contract.d.ts +4 -0
  87. package/dist/contracts/oraclebounty.contract.js +250 -0
  88. package/dist/contracts/oraclebounty.contract.js.map +1 -0
  89. package/dist/contracts/payroll.contract.d.ts +4 -0
  90. package/dist/contracts/payroll.contract.js +232 -0
  91. package/dist/contracts/payroll.contract.js.map +1 -0
  92. package/dist/contracts/paywall.contract.d.ts +4 -0
  93. package/dist/contracts/paywall.contract.js +185 -0
  94. package/dist/contracts/paywall.contract.js.map +1 -0
  95. package/dist/contracts/poll.contract.js +2 -0
  96. package/dist/contracts/poll.contract.js.map +1 -1
  97. package/dist/contracts/predictionmarket.contract.d.ts +4 -0
  98. package/dist/contracts/predictionmarket.contract.js +213 -0
  99. package/dist/contracts/predictionmarket.contract.js.map +1 -0
  100. package/dist/contracts/proposaltimelock.contract.d.ts +4 -0
  101. package/dist/contracts/proposaltimelock.contract.js +250 -0
  102. package/dist/contracts/proposaltimelock.contract.js.map +1 -0
  103. package/dist/contracts/questpass.contract.d.ts +4 -0
  104. package/dist/contracts/questpass.contract.js +214 -0
  105. package/dist/contracts/questpass.contract.js.map +1 -0
  106. package/dist/contracts/referral.contract.d.ts +4 -0
  107. package/dist/contracts/referral.contract.js +238 -0
  108. package/dist/contracts/referral.contract.js.map +1 -0
  109. package/dist/contracts/rental.contract.d.ts +4 -0
  110. package/dist/contracts/rental.contract.js +221 -0
  111. package/dist/contracts/rental.contract.js.map +1 -0
  112. package/dist/contracts/revenuesplit.contract.d.ts +4 -0
  113. package/dist/contracts/revenuesplit.contract.js +211 -0
  114. package/dist/contracts/revenuesplit.contract.js.map +1 -0
  115. package/dist/contracts/rps.contract.js +48 -20
  116. package/dist/contracts/rps.contract.js.map +1 -1
  117. package/dist/contracts/savings.contract.d.ts +4 -0
  118. package/dist/contracts/savings.contract.js +208 -0
  119. package/dist/contracts/savings.contract.js.map +1 -0
  120. package/dist/contracts/subscription.contract.d.ts +4 -0
  121. package/dist/contracts/subscription.contract.js +241 -0
  122. package/dist/contracts/subscription.contract.js.map +1 -0
  123. package/dist/contracts/sweepstakes.contract.d.ts +4 -0
  124. package/dist/contracts/sweepstakes.contract.js +209 -0
  125. package/dist/contracts/sweepstakes.contract.js.map +1 -0
  126. package/dist/contracts/ticketing.contract.d.ts +4 -0
  127. package/dist/contracts/ticketing.contract.js +185 -0
  128. package/dist/contracts/ticketing.contract.js.map +1 -0
  129. package/dist/contracts/tipjar.contract.js +2 -0
  130. package/dist/contracts/tipjar.contract.js.map +1 -1
  131. package/dist/contracts/token.contract.js +135 -125
  132. package/dist/contracts/token.contract.js.map +1 -1
  133. package/dist/index.d.ts +40 -0
  134. package/dist/index.js +72 -1
  135. package/dist/index.js.map +1 -1
  136. package/dist/metadata.d.ts +20 -0
  137. package/dist/metadata.js +320 -1
  138. package/dist/metadata.js.map +1 -1
  139. package/dist/providers/block-provider.d.ts +22 -0
  140. package/dist/providers/block-provider.js +3 -0
  141. package/dist/providers/block-provider.js.map +1 -0
  142. package/dist/providers/haf-client.d.ts +30 -0
  143. package/dist/providers/haf-client.js +119 -0
  144. package/dist/providers/haf-client.js.map +1 -0
  145. package/dist/providers/haf-provider.d.ts +49 -0
  146. package/dist/providers/haf-provider.js +256 -0
  147. package/dist/providers/haf-provider.js.map +1 -0
  148. package/dist/providers/hive-provider.d.ts +13 -0
  149. package/dist/providers/hive-provider.js +25 -0
  150. package/dist/providers/hive-provider.js.map +1 -0
  151. package/dist/providers/index.d.ts +4 -0
  152. package/dist/providers/index.js +21 -0
  153. package/dist/providers/index.js.map +1 -0
  154. package/dist/streamer.d.ts +65 -4
  155. package/dist/streamer.js +768 -72
  156. package/dist/streamer.js.map +1 -1
  157. package/dist/types/hive-stream.d.ts +317 -0
  158. package/dist/utils.d.ts +33 -0
  159. package/dist/utils.js +198 -2
  160. package/dist/utils.js.map +1 -1
  161. package/package.json +16 -1
  162. package/.claude/settings.local.json +0 -12
  163. package/.env.example +0 -3
  164. package/.travis.yml +0 -11
  165. package/AGENTS.md +0 -35
  166. package/CLAUDE.md +0 -75
  167. package/ecosystem.config.js +0 -17
  168. package/examples/contracts/README.md +0 -8
  169. package/examples/contracts/exchange.ts +0 -38
  170. package/examples/contracts/poll.ts +0 -21
  171. package/examples/contracts/rps.ts +0 -19
  172. package/examples/contracts/tipjar.ts +0 -19
  173. package/jest.config.js +0 -9
  174. package/test-contract-block.md +0 -19
  175. package/tests/actions.spec.ts +0 -252
  176. package/tests/adapters/actions-persistence.spec.ts +0 -144
  177. package/tests/adapters/postgresql.adapter.spec.ts +0 -127
  178. package/tests/adapters/sqlite.adapter.spec.ts +0 -181
  179. package/tests/config-input.spec.ts +0 -90
  180. package/tests/contracts/coinflip.contract.spec.ts +0 -94
  181. package/tests/contracts/dice.contract.spec.ts +0 -87
  182. package/tests/contracts/entrants.json +0 -729
  183. package/tests/contracts/exchange.contract.spec.ts +0 -84
  184. package/tests/contracts/lotto.contract.spec.ts +0 -59
  185. package/tests/contracts/nft.contract.spec.ts +0 -948
  186. package/tests/contracts/token.contract.spec.ts +0 -90
  187. package/tests/exchanges/coingecko.exchange.spec.ts +0 -169
  188. package/tests/exchanges/exchange.base.spec.ts +0 -246
  189. package/tests/helpers/mock-adapter.ts +0 -214
  190. package/tests/helpers/mock-fetch.ts +0 -165
  191. package/tests/hive-chain-features.spec.ts +0 -319
  192. package/tests/hive-rates.spec.ts +0 -443
  193. package/tests/integration/hive-rates.integration.spec.ts +0 -35
  194. package/tests/metadata.spec.ts +0 -63
  195. package/tests/setup.ts +0 -30
  196. package/tests/streamer-actions.spec.ts +0 -274
  197. package/tests/streamer.spec.ts +0 -342
  198. package/tests/types/rates.spec.ts +0 -216
  199. package/tests/utils.spec.ts +0 -113
  200. package/tsconfig.build.json +0 -4
  201. package/tslint.json +0 -21
  202. package/wallaby.js +0 -26
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProposalTimelockContract = createProposalTimelockContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'proposaltimelock';
8
+ function createProposalTimelockContract(options = {}) {
9
+ const name = options.name || DEFAULT_NAME;
10
+ const state = (0, helpers_1.createContractState)();
11
+ const createQueueSchema = zod_1.z.object({
12
+ queueId: helpers_1.identifierSchema,
13
+ title: zod_1.z.string().min(3).max(140),
14
+ approvers: zod_1.z.array(zod_1.z.string().min(3).max(32)).min(1).max(25),
15
+ threshold: zod_1.z.number().int().min(1).max(25),
16
+ minDelayHours: zod_1.z.number().int().min(1).max(24 * 365),
17
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
18
+ });
19
+ const createProposalSchema = zod_1.z.object({
20
+ queueId: helpers_1.identifierSchema,
21
+ proposalId: helpers_1.identifierSchema,
22
+ title: zod_1.z.string().min(3).max(140),
23
+ actionType: zod_1.z.string().min(1).max(60),
24
+ actionPayload: zod_1.z.record(zod_1.z.any()),
25
+ note: zod_1.z.string().max(280).optional()
26
+ });
27
+ const proposalIdSchema = zod_1.z.object({
28
+ proposalId: helpers_1.identifierSchema
29
+ });
30
+ const executeSchema = zod_1.z.object({
31
+ proposalId: helpers_1.identifierSchema,
32
+ executionRef: zod_1.z.string().max(120).optional()
33
+ });
34
+ const initialize = async () => {
35
+ await (0, helpers_1.initializeTables)(state.adapter, [
36
+ `
37
+ CREATE TABLE IF NOT EXISTS timelock_queues (
38
+ queue_id TEXT PRIMARY KEY,
39
+ owner TEXT NOT NULL,
40
+ title TEXT NOT NULL,
41
+ approvers_json TEXT NOT NULL,
42
+ threshold INTEGER NOT NULL,
43
+ min_delay_hours INTEGER NOT NULL,
44
+ metadata TEXT,
45
+ created_at DATETIME NOT NULL
46
+ )
47
+ `,
48
+ `
49
+ CREATE TABLE IF NOT EXISTS timelock_proposals (
50
+ proposal_id TEXT PRIMARY KEY,
51
+ queue_id TEXT NOT NULL,
52
+ proposer TEXT NOT NULL,
53
+ title TEXT NOT NULL,
54
+ action_type TEXT NOT NULL,
55
+ action_payload TEXT NOT NULL,
56
+ note TEXT,
57
+ approvals_count INTEGER NOT NULL,
58
+ ready_at DATETIME NOT NULL,
59
+ status TEXT NOT NULL,
60
+ created_at DATETIME NOT NULL,
61
+ executed_at DATETIME,
62
+ execution_ref TEXT
63
+ )
64
+ `,
65
+ `
66
+ CREATE TABLE IF NOT EXISTS timelock_approvals (
67
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
68
+ proposal_id TEXT NOT NULL,
69
+ approver TEXT NOT NULL,
70
+ created_at DATETIME NOT NULL,
71
+ UNIQUE(proposal_id, approver)
72
+ )
73
+ `
74
+ ]);
75
+ };
76
+ const createQueue = async (payload, ctx) => {
77
+ const owner = (0, helpers_1.requireSender)(ctx);
78
+ const approvers = (0, helpers_1.uniqueItems)([owner, ...payload.approvers]);
79
+ if (payload.threshold > approvers.length) {
80
+ throw new Error('Threshold cannot exceed the number of approvers');
81
+ }
82
+ const existing = await state.adapter.query('SELECT queue_id FROM timelock_queues WHERE queue_id = ?', [payload.queueId]);
83
+ if (existing.length > 0) {
84
+ throw new Error(`Queue ${payload.queueId} already exists`);
85
+ }
86
+ await state.adapter.query(`INSERT INTO timelock_queues (
87
+ queue_id, owner, title, approvers_json, threshold, min_delay_hours, metadata, created_at
88
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
89
+ payload.queueId,
90
+ owner,
91
+ payload.title,
92
+ JSON.stringify(approvers),
93
+ payload.threshold,
94
+ payload.minDelayHours,
95
+ JSON.stringify(payload.metadata || {}),
96
+ new Date()
97
+ ]);
98
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createQueue', payload, {
99
+ action: 'timelock_queue_created',
100
+ data: {
101
+ queueId: payload.queueId,
102
+ owner,
103
+ threshold: payload.threshold
104
+ }
105
+ });
106
+ };
107
+ const createProposal = async (payload, ctx) => {
108
+ const proposer = (0, helpers_1.requireSender)(ctx);
109
+ const queueRows = await state.adapter.query('SELECT * FROM timelock_queues WHERE queue_id = ?', [payload.queueId]);
110
+ if (queueRows.length === 0) {
111
+ throw new Error(`Queue ${payload.queueId} does not exist`);
112
+ }
113
+ const queue = queueRows[0];
114
+ const approvers = (0, helpers_1.parseJson)(queue.approvers_json, []);
115
+ if (!approvers.includes(proposer)) {
116
+ throw new Error('Only queue approvers can create proposals');
117
+ }
118
+ const existing = await state.adapter.query('SELECT proposal_id FROM timelock_proposals WHERE proposal_id = ?', [payload.proposalId]);
119
+ if (existing.length > 0) {
120
+ throw new Error(`Proposal ${payload.proposalId} already exists`);
121
+ }
122
+ const readyAt = new Date(Date.now() + Number(queue.min_delay_hours) * 60 * 60 * 1000);
123
+ await state.adapter.query(`INSERT INTO timelock_proposals (
124
+ proposal_id, queue_id, proposer, title, action_type, action_payload, note, approvals_count, ready_at, status, created_at, executed_at, execution_ref
125
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
126
+ payload.proposalId,
127
+ payload.queueId,
128
+ proposer,
129
+ payload.title,
130
+ payload.actionType,
131
+ JSON.stringify(payload.actionPayload),
132
+ payload.note || '',
133
+ 0,
134
+ readyAt,
135
+ 'pending',
136
+ new Date(),
137
+ null,
138
+ null
139
+ ]);
140
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createProposal', payload, {
141
+ action: 'timelock_proposal_created',
142
+ data: {
143
+ proposalId: payload.proposalId,
144
+ queueId: payload.queueId,
145
+ proposer,
146
+ readyAt
147
+ }
148
+ });
149
+ };
150
+ const approveProposal = async (payload, ctx) => {
151
+ const approver = (0, helpers_1.requireSender)(ctx);
152
+ const proposalRows = await state.adapter.query('SELECT * FROM timelock_proposals WHERE proposal_id = ?', [payload.proposalId]);
153
+ if (proposalRows.length === 0) {
154
+ throw new Error(`Proposal ${payload.proposalId} does not exist`);
155
+ }
156
+ const proposal = proposalRows[0];
157
+ if (proposal.status === 'cancelled' || proposal.status === 'executed') {
158
+ throw new Error('Proposal is no longer active');
159
+ }
160
+ const queueRows = await state.adapter.query('SELECT * FROM timelock_queues WHERE queue_id = ?', [proposal.queue_id]);
161
+ const queue = queueRows[0];
162
+ const approvers = (0, helpers_1.parseJson)(queue.approvers_json, []);
163
+ if (!approvers.includes(approver)) {
164
+ throw new Error('Only queue approvers can approve proposals');
165
+ }
166
+ await state.adapter.query('INSERT INTO timelock_approvals (proposal_id, approver, created_at) VALUES (?, ?, ?)', [payload.proposalId, approver, new Date()]);
167
+ const counts = await state.adapter.query('SELECT COUNT(*) AS count FROM timelock_approvals WHERE proposal_id = ?', [payload.proposalId]);
168
+ const approvalsCount = Number(counts[0]?.count || 0);
169
+ const status = approvalsCount >= Number(queue.threshold) ? 'approved' : 'pending';
170
+ await state.adapter.query('UPDATE timelock_proposals SET approvals_count = ?, status = ? WHERE proposal_id = ?', [approvalsCount, status, payload.proposalId]);
171
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'approveProposal', payload, {
172
+ action: status === 'approved' ? 'timelock_proposal_approved' : 'timelock_proposal_partially_approved',
173
+ data: {
174
+ proposalId: payload.proposalId,
175
+ approver,
176
+ approvalsCount,
177
+ threshold: queue.threshold
178
+ }
179
+ });
180
+ };
181
+ const executeProposal = async (payload, ctx) => {
182
+ const approver = (0, helpers_1.requireSender)(ctx);
183
+ const proposalRows = await state.adapter.query('SELECT * FROM timelock_proposals WHERE proposal_id = ?', [payload.proposalId]);
184
+ if (proposalRows.length === 0) {
185
+ throw new Error(`Proposal ${payload.proposalId} does not exist`);
186
+ }
187
+ const proposal = proposalRows[0];
188
+ const queueRows = await state.adapter.query('SELECT * FROM timelock_queues WHERE queue_id = ?', [proposal.queue_id]);
189
+ const queue = queueRows[0];
190
+ const approvers = (0, helpers_1.parseJson)(queue.approvers_json, []);
191
+ if (!approvers.includes(approver)) {
192
+ throw new Error('Only queue approvers can execute proposals');
193
+ }
194
+ if (proposal.status !== 'approved') {
195
+ throw new Error('Proposal is not approved for execution');
196
+ }
197
+ if (new Date(proposal.ready_at) > new Date()) {
198
+ throw new Error('Proposal timelock has not expired yet');
199
+ }
200
+ await state.adapter.query('UPDATE timelock_proposals SET status = ?, executed_at = ?, execution_ref = ? WHERE proposal_id = ?', ['executed', new Date(), payload.executionRef || null, payload.proposalId]);
201
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'executeProposal', payload, {
202
+ action: 'timelock_proposal_execution_requested',
203
+ data: {
204
+ proposalId: payload.proposalId,
205
+ queueId: proposal.queue_id,
206
+ actionType: proposal.action_type,
207
+ actionPayload: (0, helpers_1.parseJson)(proposal.action_payload, {}),
208
+ executionRef: payload.executionRef || null
209
+ }
210
+ });
211
+ };
212
+ const cancelProposal = async (payload, ctx) => {
213
+ const sender = (0, helpers_1.requireSender)(ctx);
214
+ const proposalRows = await state.adapter.query('SELECT * FROM timelock_proposals WHERE proposal_id = ?', [payload.proposalId]);
215
+ if (proposalRows.length === 0) {
216
+ throw new Error(`Proposal ${payload.proposalId} does not exist`);
217
+ }
218
+ const proposal = proposalRows[0];
219
+ const queueRows = await state.adapter.query('SELECT * FROM timelock_queues WHERE queue_id = ?', [proposal.queue_id]);
220
+ const queue = queueRows[0];
221
+ if (sender !== proposal.proposer && sender !== queue.owner) {
222
+ throw new Error('Only the proposer or queue owner can cancel this proposal');
223
+ }
224
+ await state.adapter.query('UPDATE timelock_proposals SET status = ? WHERE proposal_id = ?', ['cancelled', payload.proposalId]);
225
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'cancelProposal', payload, {
226
+ action: 'timelock_proposal_cancelled',
227
+ data: {
228
+ proposalId: payload.proposalId,
229
+ cancelledBy: sender
230
+ }
231
+ });
232
+ };
233
+ return (0, contract_1.defineContract)({
234
+ name,
235
+ hooks: {
236
+ create: async ({ adapter }) => {
237
+ state.adapter = adapter;
238
+ await initialize();
239
+ }
240
+ },
241
+ actions: {
242
+ createQueue: (0, contract_1.action)(createQueue, { schema: createQueueSchema, trigger: 'custom_json' }),
243
+ createProposal: (0, contract_1.action)(createProposal, { schema: createProposalSchema, trigger: 'custom_json' }),
244
+ approveProposal: (0, contract_1.action)(approveProposal, { schema: proposalIdSchema, trigger: 'custom_json' }),
245
+ executeProposal: (0, contract_1.action)(executeProposal, { schema: executeSchema, trigger: ['custom_json', 'time'] }),
246
+ cancelProposal: (0, contract_1.action)(cancelProposal, { schema: proposalIdSchema, trigger: 'custom_json' })
247
+ }
248
+ });
249
+ }
250
+ //# sourceMappingURL=proposaltimelock.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposaltimelock.contract.js","sourceRoot":"","sources":["../../src/contracts/proposaltimelock.contract.ts"],"names":[],"mappings":";;AAkBA,wEAkSC;AApTD,6BAAwB;AACxB,yCAAoD;AACpD,uCAQmB;AAEnB,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAMxC,SAAgB,8BAA8B,CAAC,UAA2C,EAAE;IACxF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAA,6BAAmB,GAAE,CAAC;IAEpC,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;QAC/B,OAAO,EAAE,0BAAgB;QACzB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,SAAS,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5D,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;QACpD,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;QAClC,OAAO,EAAE,0BAAgB;QACzB,UAAU,EAAE,0BAAgB;QAC5B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,aAAa,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KACvC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;QAC9B,UAAU,EAAE,0BAAgB;KAC/B,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;QAC3B,UAAU,EAAE,0BAAgB;QAC5B,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KAC/C,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,OAAO,EAAE;YAClC;;;;;;;;;;;aAWC;YACD;;;;;;;;;;;;;;;;aAgBC;YACD;;;;;;;;aAQC;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,OAA0C,EAAE,GAAQ,EAAE,EAAE;QAC/E,MAAM,KAAK,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,IAAA,qBAAW,EAAC,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACzH,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB;;8CAEkC,EAClC;YACI,OAAO,CAAC,OAAO;YACf,KAAK;YACL,OAAO,CAAC,KAAK;YACb,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACzB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,aAAa;YACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtC,IAAI,IAAI,EAAE;SACb,CACJ,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;YACjE,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE;gBACF,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK;gBACL,SAAS,EAAE,OAAO,CAAC,SAAS;aAC/B;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,OAA6C,EAAE,GAAQ,EAAE,EAAE;QACrF,MAAM,QAAQ,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACnH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAA,mBAAS,EAAW,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kEAAkE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACrI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,UAAU,iBAAiB,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACtF,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB;;6DAEiD,EACjD;YACI,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,OAAO;YACf,QAAQ;YACR,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,UAAU;YAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;YACrC,OAAO,CAAC,IAAI,IAAI,EAAE;YAClB,CAAC;YACD,OAAO;YACP,SAAS;YACT,IAAI,IAAI,EAAE;YACV,IAAI;YACJ,IAAI;SACP,CACJ,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE;YACpE,MAAM,EAAE,2BAA2B;YACnC,IAAI,EAAE;gBACF,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ;gBACR,OAAO;aACV;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,EAAE,OAAyC,EAAE,GAAQ,EAAE,EAAE;QAClF,MAAM,QAAQ,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/H,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,UAAU,iBAAiB,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrH,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAA,mBAAS,EAAW,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,qFAAqF,EACrF,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAC7C,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,wEAAwE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACzI,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAElF,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,qFAAqF,EACrF,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAC/C,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE;YACrE,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,sCAAsC;YACrG,IAAI,EAAE;gBACF,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ;gBACR,cAAc;gBACd,SAAS,EAAE,KAAK,CAAC,SAAS;aAC7B;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,EAAE,OAAsC,EAAE,GAAQ,EAAE,EAAE;QAC/E,MAAM,QAAQ,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACpC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/H,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,UAAU,iBAAiB,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrH,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAA,mBAAS,EAAW,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,oGAAoG,EACpG,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAC7E,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE;YACrE,MAAM,EAAE,uCAAuC;YAC/C,IAAI,EAAE;gBACF,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO,EAAE,QAAQ,CAAC,QAAQ;gBAC1B,UAAU,EAAE,QAAQ,CAAC,WAAW;gBAChC,aAAa,EAAE,IAAA,mBAAS,EAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC;gBACrD,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;aAC7C;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,OAAyC,EAAE,GAAQ,EAAE,EAAE;QACjF,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/H,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,UAAU,iBAAiB,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrH,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,MAAM,KAAK,QAAQ,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,gEAAgE,EAChE,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CACpC,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE;YACpE,MAAM,EAAE,6BAA6B;YACrC,IAAI,EAAE;gBACF,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,MAAM;aACtB;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO,IAAA,yBAAc,EAAC;QAClB,IAAI;QACJ,KAAK,EAAE;YACH,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACxB,MAAM,UAAU,EAAE,CAAC;YACvB,CAAC;SACJ;QACD,OAAO,EAAE;YACL,WAAW,EAAE,IAAA,iBAAM,EAAC,WAAW,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YACvF,cAAc,EAAE,IAAA,iBAAM,EAAC,cAAc,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAChG,eAAe,EAAE,IAAA,iBAAM,EAAC,eAAe,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAC9F,eAAe,EAAE,IAAA,iBAAM,EAAC,eAAe,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;YACrG,cAAc,EAAE,IAAA,iBAAM,EAAC,cAAc,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;SAC/F;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface QuestPassContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createQuestPassContract(options?: QuestPassContractOptions): import("..").ContractDefinition;
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createQuestPassContract = createQuestPassContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'questpass';
8
+ function createQuestPassContract(options = {}) {
9
+ const name = options.name || DEFAULT_NAME;
10
+ const state = (0, helpers_1.createContractState)();
11
+ const tierSchema = zod_1.z.object({
12
+ tierId: helpers_1.identifierSchema,
13
+ minPoints: zod_1.z.number().int().min(0),
14
+ rewardType: zod_1.z.string().min(1).max(40),
15
+ rewardValue: zod_1.z.string().min(1).max(140)
16
+ });
17
+ const createSeasonSchema = zod_1.z.object({
18
+ seasonId: helpers_1.identifierSchema,
19
+ title: zod_1.z.string().min(3).max(140),
20
+ passPrice: helpers_1.amountSchema,
21
+ asset: helpers_1.assetSchema,
22
+ tiers: zod_1.z.array(tierSchema).min(1).max(25),
23
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
24
+ });
25
+ const seasonIdSchema = zod_1.z.object({
26
+ seasonId: helpers_1.identifierSchema
27
+ });
28
+ const recordProgressSchema = zod_1.z.object({
29
+ seasonId: helpers_1.identifierSchema,
30
+ account: zod_1.z.string().min(3).max(32),
31
+ points: zod_1.z.number().int().min(1).max(1000000),
32
+ sourceId: helpers_1.identifierSchema.optional(),
33
+ note: zod_1.z.string().max(280).optional()
34
+ });
35
+ const claimRewardSchema = zod_1.z.object({
36
+ seasonId: helpers_1.identifierSchema,
37
+ tierId: helpers_1.identifierSchema
38
+ });
39
+ const initialize = async () => {
40
+ await (0, helpers_1.initializeTables)(state.adapter, [
41
+ `
42
+ CREATE TABLE IF NOT EXISTS quest_pass_seasons (
43
+ season_id TEXT PRIMARY KEY,
44
+ owner TEXT NOT NULL,
45
+ title TEXT NOT NULL,
46
+ pass_price TEXT NOT NULL,
47
+ asset TEXT NOT NULL,
48
+ tiers_json TEXT NOT NULL,
49
+ active INTEGER NOT NULL,
50
+ metadata TEXT,
51
+ created_at DATETIME NOT NULL
52
+ )
53
+ `,
54
+ `
55
+ CREATE TABLE IF NOT EXISTS quest_pass_holders (
56
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
57
+ season_id TEXT NOT NULL,
58
+ account TEXT NOT NULL,
59
+ status TEXT NOT NULL,
60
+ points INTEGER NOT NULL,
61
+ purchases INTEGER NOT NULL,
62
+ created_at DATETIME NOT NULL,
63
+ updated_at DATETIME NOT NULL,
64
+ UNIQUE(season_id, account)
65
+ )
66
+ `,
67
+ `
68
+ CREATE TABLE IF NOT EXISTS quest_pass_claims (
69
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
70
+ season_id TEXT NOT NULL,
71
+ account TEXT NOT NULL,
72
+ tier_id TEXT NOT NULL,
73
+ created_at DATETIME NOT NULL,
74
+ UNIQUE(season_id, account, tier_id)
75
+ )
76
+ `
77
+ ]);
78
+ };
79
+ const createSeason = async (payload, ctx) => {
80
+ const owner = (0, helpers_1.requireSender)(ctx);
81
+ const existing = await state.adapter.query('SELECT season_id FROM quest_pass_seasons WHERE season_id = ?', [payload.seasonId]);
82
+ if (existing.length > 0) {
83
+ throw new Error(`Season ${payload.seasonId} already exists`);
84
+ }
85
+ await state.adapter.query(`INSERT INTO quest_pass_seasons (
86
+ season_id, owner, title, pass_price, asset, tiers_json, active, metadata, created_at
87
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
88
+ payload.seasonId,
89
+ owner,
90
+ payload.title,
91
+ payload.passPrice,
92
+ payload.asset,
93
+ JSON.stringify(payload.tiers),
94
+ 1,
95
+ JSON.stringify(payload.metadata || {}),
96
+ new Date()
97
+ ]);
98
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createSeason', payload, {
99
+ action: 'quest_pass_season_created',
100
+ data: {
101
+ seasonId: payload.seasonId,
102
+ owner
103
+ }
104
+ });
105
+ };
106
+ const buyPass = async (payload, ctx) => {
107
+ const account = (0, helpers_1.requireSender)(ctx);
108
+ const payment = (0, helpers_1.getIncomingPayment)(ctx);
109
+ const seasonRows = await state.adapter.query('SELECT * FROM quest_pass_seasons WHERE season_id = ?', [payload.seasonId]);
110
+ if (seasonRows.length === 0) {
111
+ throw new Error(`Season ${payload.seasonId} does not exist`);
112
+ }
113
+ const season = seasonRows[0];
114
+ if (!season.active) {
115
+ throw new Error('Season is not active');
116
+ }
117
+ (0, helpers_1.assertAssetMatches)(payment.asset, season.asset);
118
+ if (!(0, helpers_1.toBigNumber)(payment.amount).eq(season.pass_price)) {
119
+ throw new Error(`Pass price is ${season.pass_price} ${season.asset}`);
120
+ }
121
+ const holderRows = await state.adapter.query('SELECT * FROM quest_pass_holders WHERE season_id = ? AND account = ?', [payload.seasonId, account]);
122
+ const purchases = holderRows.length > 0 ? Number(holderRows[0].purchases) + 1 : 1;
123
+ const points = holderRows.length > 0 ? Number(holderRows[0].points) : 0;
124
+ await state.adapter.query(`INSERT INTO quest_pass_holders (season_id, account, status, points, purchases, created_at, updated_at)
125
+ VALUES (?, ?, ?, ?, ?, ?, ?)
126
+ ON CONFLICT(season_id, account)
127
+ DO UPDATE SET status = excluded.status, purchases = excluded.purchases, updated_at = excluded.updated_at`, [payload.seasonId, account, 'active', points, purchases, new Date(), new Date()]);
128
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'buyPass', payload, {
129
+ action: 'quest_pass_purchased',
130
+ data: {
131
+ seasonId: payload.seasonId,
132
+ account,
133
+ purchases
134
+ }
135
+ });
136
+ };
137
+ const recordProgress = async (payload, ctx) => {
138
+ const sender = (0, helpers_1.requireSender)(ctx);
139
+ const seasonRows = await state.adapter.query('SELECT * FROM quest_pass_seasons WHERE season_id = ?', [payload.seasonId]);
140
+ if (seasonRows.length === 0) {
141
+ throw new Error(`Season ${payload.seasonId} does not exist`);
142
+ }
143
+ const season = seasonRows[0];
144
+ if (season.owner !== sender) {
145
+ throw new Error('Only the season owner can record progress');
146
+ }
147
+ const holderRows = await state.adapter.query('SELECT * FROM quest_pass_holders WHERE season_id = ? AND account = ?', [payload.seasonId, payload.account]);
148
+ if (holderRows.length === 0) {
149
+ throw new Error('Quest pass holder does not exist');
150
+ }
151
+ const holder = holderRows[0];
152
+ const nextPoints = Number(holder.points) + payload.points;
153
+ await state.adapter.query('UPDATE quest_pass_holders SET points = ?, updated_at = ? WHERE season_id = ? AND account = ?', [nextPoints, new Date(), payload.seasonId, payload.account]);
154
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'recordProgress', payload, {
155
+ action: 'quest_progress_recorded',
156
+ data: {
157
+ seasonId: payload.seasonId,
158
+ account: payload.account,
159
+ points: payload.points,
160
+ totalPoints: nextPoints,
161
+ sourceId: payload.sourceId || null
162
+ }
163
+ });
164
+ };
165
+ const claimReward = async (payload, ctx) => {
166
+ const account = (0, helpers_1.requireSender)(ctx);
167
+ const seasonRows = await state.adapter.query('SELECT * FROM quest_pass_seasons WHERE season_id = ?', [payload.seasonId]);
168
+ const holderRows = await state.adapter.query('SELECT * FROM quest_pass_holders WHERE season_id = ? AND account = ?', [payload.seasonId, account]);
169
+ if (seasonRows.length === 0 || holderRows.length === 0) {
170
+ throw new Error('Quest pass holder does not exist for this season');
171
+ }
172
+ const season = seasonRows[0];
173
+ const holder = holderRows[0];
174
+ const tiers = (0, helpers_1.parseJson)(season.tiers_json, []);
175
+ const tier = tiers.find(candidate => candidate.tierId === payload.tierId);
176
+ if (!tier) {
177
+ throw new Error('Reward tier does not exist');
178
+ }
179
+ if (Number(holder.points) < tier.minPoints) {
180
+ throw new Error('Account has not reached this reward tier yet');
181
+ }
182
+ const existing = await state.adapter.query('SELECT id FROM quest_pass_claims WHERE season_id = ? AND account = ? AND tier_id = ?', [payload.seasonId, account, payload.tierId]);
183
+ if (existing.length > 0) {
184
+ throw new Error('Reward tier already claimed');
185
+ }
186
+ await state.adapter.query('INSERT INTO quest_pass_claims (season_id, account, tier_id, created_at) VALUES (?, ?, ?, ?)', [payload.seasonId, account, payload.tierId, new Date()]);
187
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'claimReward', payload, {
188
+ action: 'quest_reward_claim_requested',
189
+ data: {
190
+ seasonId: payload.seasonId,
191
+ account,
192
+ tierId: payload.tierId,
193
+ rewardType: tier.rewardType,
194
+ rewardValue: tier.rewardValue
195
+ }
196
+ });
197
+ };
198
+ return (0, contract_1.defineContract)({
199
+ name,
200
+ hooks: {
201
+ create: async ({ adapter }) => {
202
+ state.adapter = adapter;
203
+ await initialize();
204
+ }
205
+ },
206
+ actions: {
207
+ createSeason: (0, contract_1.action)(createSeason, { schema: createSeasonSchema, trigger: 'custom_json' }),
208
+ buyPass: (0, contract_1.action)(buyPass, { schema: seasonIdSchema, trigger: ['transfer', 'recurrent_transfer'] }),
209
+ recordProgress: (0, contract_1.action)(recordProgress, { schema: recordProgressSchema, trigger: 'custom_json' }),
210
+ claimReward: (0, contract_1.action)(claimReward, { schema: claimRewardSchema, trigger: 'custom_json' })
211
+ }
212
+ });
213
+ }
214
+ //# sourceMappingURL=questpass.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questpass.contract.js","sourceRoot":"","sources":["../../src/contracts/questpass.contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface ReferralContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createReferralContract(options?: ReferralContractOptions): import("..").ContractDefinition;