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,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBookingContract = createBookingContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'bookings';
8
+ function createBookingContract(options = {}) {
9
+ const name = options.name || DEFAULT_NAME;
10
+ const state = (0, helpers_1.createContractState)();
11
+ const createListingSchema = zod_1.z.object({
12
+ listingId: helpers_1.identifierSchema,
13
+ title: zod_1.z.string().min(3).max(140),
14
+ price: helpers_1.amountSchema,
15
+ asset: helpers_1.assetSchema,
16
+ durationMinutes: zod_1.z.number().int().min(15).max(24 * 60),
17
+ cancellationHours: zod_1.z.number().int().min(0).max(720).optional(),
18
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
19
+ });
20
+ const reserveSchema = zod_1.z.object({
21
+ listingId: helpers_1.identifierSchema,
22
+ reservationId: helpers_1.identifierSchema,
23
+ startAt: zod_1.z.string(),
24
+ note: zod_1.z.string().max(280).optional()
25
+ });
26
+ const reservationSchema = zod_1.z.object({
27
+ reservationId: helpers_1.identifierSchema,
28
+ reason: zod_1.z.string().max(280).optional()
29
+ });
30
+ const initialize = async () => {
31
+ await (0, helpers_1.initializeTables)(state.adapter, [
32
+ `
33
+ CREATE TABLE IF NOT EXISTS booking_listings (
34
+ listing_id TEXT PRIMARY KEY,
35
+ owner TEXT NOT NULL,
36
+ title TEXT NOT NULL,
37
+ price TEXT NOT NULL,
38
+ asset TEXT NOT NULL,
39
+ duration_minutes INTEGER NOT NULL,
40
+ cancellation_hours INTEGER NOT NULL,
41
+ active INTEGER NOT NULL,
42
+ metadata TEXT,
43
+ created_at DATETIME NOT NULL
44
+ )
45
+ `,
46
+ `
47
+ CREATE TABLE IF NOT EXISTS booking_reservations (
48
+ reservation_id TEXT PRIMARY KEY,
49
+ listing_id TEXT NOT NULL,
50
+ booker TEXT NOT NULL,
51
+ start_at DATETIME NOT NULL,
52
+ end_at DATETIME NOT NULL,
53
+ amount TEXT NOT NULL,
54
+ asset TEXT NOT NULL,
55
+ note TEXT,
56
+ status TEXT NOT NULL,
57
+ created_at DATETIME NOT NULL,
58
+ updated_at DATETIME NOT NULL
59
+ )
60
+ `
61
+ ]);
62
+ };
63
+ const createListing = async (payload, ctx) => {
64
+ const owner = (0, helpers_1.requireSender)(ctx);
65
+ const existing = await state.adapter.query('SELECT listing_id FROM booking_listings WHERE listing_id = ?', [payload.listingId]);
66
+ if (existing.length > 0) {
67
+ throw new Error(`Listing ${payload.listingId} already exists`);
68
+ }
69
+ await state.adapter.query(`INSERT INTO booking_listings (
70
+ listing_id, owner, title, price, asset, duration_minutes, cancellation_hours, active, metadata, created_at
71
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
72
+ payload.listingId,
73
+ owner,
74
+ payload.title,
75
+ payload.price,
76
+ payload.asset,
77
+ payload.durationMinutes,
78
+ payload.cancellationHours || 0,
79
+ 1,
80
+ JSON.stringify(payload.metadata || {}),
81
+ new Date()
82
+ ]);
83
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createListing', payload, {
84
+ action: 'booking_listing_created',
85
+ data: {
86
+ listingId: payload.listingId,
87
+ owner
88
+ }
89
+ });
90
+ };
91
+ const reserve = async (payload, ctx) => {
92
+ const booker = (0, helpers_1.requireSender)(ctx);
93
+ const payment = (0, helpers_1.getIncomingPayment)(ctx);
94
+ const listings = await state.adapter.query('SELECT * FROM booking_listings WHERE listing_id = ?', [payload.listingId]);
95
+ if (listings.length === 0) {
96
+ throw new Error(`Listing ${payload.listingId} does not exist`);
97
+ }
98
+ const listing = listings[0];
99
+ if (!listing.active) {
100
+ throw new Error('Listing is not active');
101
+ }
102
+ const startAt = (0, helpers_1.parseDateValue)(payload.startAt);
103
+ if (!startAt || startAt <= new Date()) {
104
+ throw new Error('Reservation start time must be in the future');
105
+ }
106
+ (0, helpers_1.assertAssetMatches)(payment.asset, listing.asset);
107
+ if (payment.amount !== listing.price) {
108
+ throw new Error('Reservation payment must match the listing price');
109
+ }
110
+ const endAt = new Date(startAt.getTime() + Number(listing.duration_minutes) * 60 * 1000);
111
+ const existing = await state.adapter.query('SELECT * FROM booking_reservations WHERE listing_id = ? AND status IN (?, ?)', [payload.listingId, 'pending', 'confirmed']);
112
+ for (const reservation of existing) {
113
+ const existingStart = (0, helpers_1.parseDateValue)(reservation.start_at) || startAt;
114
+ const existingEnd = (0, helpers_1.parseDateValue)(reservation.end_at) || endAt;
115
+ const overlaps = startAt < existingEnd && endAt > existingStart;
116
+ if (overlaps) {
117
+ throw new Error('Requested reservation time overlaps an existing reservation');
118
+ }
119
+ }
120
+ await state.adapter.query(`INSERT INTO booking_reservations (
121
+ reservation_id, listing_id, booker, start_at, end_at, amount, asset, note, status, created_at, updated_at
122
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [payload.reservationId, payload.listingId, booker, startAt, endAt, payment.amount, payment.asset, payload.note || '', 'pending', new Date(), new Date()]);
123
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'reserve', payload, {
124
+ action: 'booking_reserved',
125
+ data: {
126
+ listingId: payload.listingId,
127
+ reservationId: payload.reservationId,
128
+ booker,
129
+ startAt,
130
+ endAt
131
+ }
132
+ });
133
+ };
134
+ const confirmReservation = async (payload, ctx) => {
135
+ const owner = (0, helpers_1.requireSender)(ctx);
136
+ const reservations = await state.adapter.query('SELECT * FROM booking_reservations WHERE reservation_id = ?', [payload.reservationId]);
137
+ if (reservations.length === 0) {
138
+ throw new Error(`Reservation ${payload.reservationId} does not exist`);
139
+ }
140
+ const reservation = reservations[0];
141
+ const listings = await state.adapter.query('SELECT * FROM booking_listings WHERE listing_id = ?', [reservation.listing_id]);
142
+ if (listings.length === 0 || listings[0].owner !== owner) {
143
+ throw new Error('Only the listing owner can confirm reservations');
144
+ }
145
+ await state.adapter.query('UPDATE booking_reservations SET status = ?, updated_at = ? WHERE reservation_id = ?', ['confirmed', new Date(), payload.reservationId]);
146
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'confirmReservation', payload, {
147
+ action: 'booking_confirmed',
148
+ data: {
149
+ reservationId: payload.reservationId,
150
+ listingId: reservation.listing_id,
151
+ owner
152
+ }
153
+ });
154
+ };
155
+ const cancelReservation = async (payload, ctx) => {
156
+ const sender = (0, helpers_1.requireSender)(ctx);
157
+ const reservations = await state.adapter.query('SELECT * FROM booking_reservations WHERE reservation_id = ?', [payload.reservationId]);
158
+ if (reservations.length === 0) {
159
+ throw new Error(`Reservation ${payload.reservationId} does not exist`);
160
+ }
161
+ const reservation = reservations[0];
162
+ const listings = await state.adapter.query('SELECT * FROM booking_listings WHERE listing_id = ?', [reservation.listing_id]);
163
+ const listing = listings[0];
164
+ const isOwner = listing.owner === sender;
165
+ const isBooker = reservation.booker === sender;
166
+ if (!isOwner && !isBooker) {
167
+ throw new Error('Only the listing owner or booker can cancel this reservation');
168
+ }
169
+ if (isBooker) {
170
+ const cancellationWindowStart = new Date(((0, helpers_1.parseDateValue)(reservation.start_at) || new Date()).getTime() - Number(listing.cancellation_hours) * 60 * 60 * 1000);
171
+ if (cancellationWindowStart < new Date()) {
172
+ throw new Error('Cancellation window has passed');
173
+ }
174
+ }
175
+ await state.adapter.query('UPDATE booking_reservations SET status = ?, updated_at = ? WHERE reservation_id = ?', ['cancelled', new Date(), payload.reservationId]);
176
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'cancelReservation', payload, {
177
+ action: 'booking_cancelled',
178
+ data: {
179
+ reservationId: payload.reservationId,
180
+ listingId: reservation.listing_id,
181
+ cancelledBy: sender,
182
+ reason: payload.reason || ''
183
+ }
184
+ });
185
+ };
186
+ const completeReservation = async (payload, ctx) => {
187
+ const reservations = await state.adapter.query('SELECT * FROM booking_reservations WHERE reservation_id = ?', [payload.reservationId]);
188
+ if (reservations.length === 0) {
189
+ throw new Error(`Reservation ${payload.reservationId} does not exist`);
190
+ }
191
+ const reservation = reservations[0];
192
+ if (ctx.trigger !== 'time') {
193
+ const sender = (0, helpers_1.requireSender)(ctx);
194
+ const listings = await state.adapter.query('SELECT * FROM booking_listings WHERE listing_id = ?', [reservation.listing_id]);
195
+ if (listings[0].owner !== sender) {
196
+ throw new Error('Only the listing owner can complete reservations');
197
+ }
198
+ }
199
+ await state.adapter.query('UPDATE booking_reservations SET status = ?, updated_at = ? WHERE reservation_id = ?', ['completed', new Date(), payload.reservationId]);
200
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'completeReservation', payload, {
201
+ action: 'booking_completed',
202
+ data: {
203
+ reservationId: payload.reservationId,
204
+ listingId: reservation.listing_id
205
+ }
206
+ });
207
+ };
208
+ return (0, contract_1.defineContract)({
209
+ name,
210
+ hooks: {
211
+ create: async ({ adapter }) => {
212
+ state.adapter = adapter;
213
+ await initialize();
214
+ }
215
+ },
216
+ actions: {
217
+ createListing: (0, contract_1.action)(createListing, { schema: createListingSchema, trigger: 'custom_json' }),
218
+ reserve: (0, contract_1.action)(reserve, { schema: reserveSchema, trigger: ['transfer', 'recurrent_transfer'] }),
219
+ confirmReservation: (0, contract_1.action)(confirmReservation, { schema: reservationSchema, trigger: 'custom_json' }),
220
+ cancelReservation: (0, contract_1.action)(cancelReservation, { schema: reservationSchema, trigger: 'custom_json' }),
221
+ completeReservation: (0, contract_1.action)(completeReservation, { schema: reservationSchema, trigger: ['custom_json', 'time'] })
222
+ }
223
+ });
224
+ }
225
+ //# sourceMappingURL=booking.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booking.contract.js","sourceRoot":"","sources":["../../src/contracts/booking.contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface BountyBoardContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createBountyBoardContract(options?: BountyBoardContractOptions): import("..").ContractDefinition;
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBountyBoardContract = createBountyBoardContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'bountyboard';
8
+ function createBountyBoardContract(options = {}) {
9
+ const name = options.name || DEFAULT_NAME;
10
+ const state = (0, helpers_1.createContractState)();
11
+ const createBountySchema = zod_1.z.object({
12
+ bountyId: helpers_1.identifierSchema,
13
+ title: zod_1.z.string().min(3).max(140),
14
+ description: zod_1.z.string().max(1200).optional(),
15
+ deadline: zod_1.z.string().optional(),
16
+ maxWinners: zod_1.z.number().int().min(1).max(25).optional(),
17
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
18
+ });
19
+ const submitWorkSchema = zod_1.z.object({
20
+ bountyId: helpers_1.identifierSchema,
21
+ submissionId: helpers_1.identifierSchema,
22
+ url: zod_1.z.string().url(),
23
+ description: zod_1.z.string().max(1000).optional()
24
+ });
25
+ const awardSchema = zod_1.z.object({
26
+ bountyId: helpers_1.identifierSchema,
27
+ submissionId: helpers_1.identifierSchema,
28
+ amount: helpers_1.amountSchema.optional(),
29
+ note: zod_1.z.string().max(280).optional()
30
+ });
31
+ const closeSchema = zod_1.z.object({
32
+ bountyId: helpers_1.identifierSchema
33
+ });
34
+ const initialize = async () => {
35
+ await (0, helpers_1.initializeTables)(state.adapter, [
36
+ `
37
+ CREATE TABLE IF NOT EXISTS bounty_board_bounties (
38
+ bounty_id TEXT PRIMARY KEY,
39
+ sponsor TEXT NOT NULL,
40
+ title TEXT NOT NULL,
41
+ description TEXT,
42
+ reward_pool TEXT NOT NULL,
43
+ remaining_reward TEXT NOT NULL,
44
+ asset TEXT NOT NULL,
45
+ deadline DATETIME,
46
+ max_winners INTEGER NOT NULL,
47
+ status TEXT NOT NULL,
48
+ metadata TEXT,
49
+ created_at DATETIME NOT NULL,
50
+ updated_at DATETIME NOT NULL
51
+ )
52
+ `,
53
+ `
54
+ CREATE TABLE IF NOT EXISTS bounty_board_submissions (
55
+ submission_id TEXT PRIMARY KEY,
56
+ bounty_id TEXT NOT NULL,
57
+ submitter TEXT NOT NULL,
58
+ url TEXT NOT NULL,
59
+ description TEXT,
60
+ status TEXT NOT NULL,
61
+ created_at DATETIME NOT NULL
62
+ )
63
+ `,
64
+ `
65
+ CREATE TABLE IF NOT EXISTS bounty_board_awards (
66
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
67
+ bounty_id TEXT NOT NULL,
68
+ submission_id TEXT NOT NULL,
69
+ winner TEXT NOT NULL,
70
+ amount TEXT NOT NULL,
71
+ note TEXT,
72
+ created_at DATETIME NOT NULL
73
+ )
74
+ `
75
+ ]);
76
+ };
77
+ const createBounty = async (payload, ctx) => {
78
+ const sponsor = (0, helpers_1.requireSender)(ctx);
79
+ const payment = (0, helpers_1.getIncomingPayment)(ctx);
80
+ const existing = await state.adapter.query('SELECT bounty_id FROM bounty_board_bounties WHERE bounty_id = ?', [payload.bountyId]);
81
+ if (existing.length > 0) {
82
+ throw new Error(`Bounty ${payload.bountyId} already exists`);
83
+ }
84
+ const deadline = (0, helpers_1.parseDateValue)(payload.deadline);
85
+ if (deadline && deadline <= new Date()) {
86
+ throw new Error('Bounty deadline must be in the future');
87
+ }
88
+ await state.adapter.query(`INSERT INTO bounty_board_bounties (
89
+ bounty_id, sponsor, title, description, reward_pool, remaining_reward, asset, deadline, max_winners, status, metadata, created_at, updated_at
90
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
91
+ payload.bountyId,
92
+ sponsor,
93
+ payload.title,
94
+ payload.description || '',
95
+ payment.amount,
96
+ payment.amount,
97
+ payment.asset,
98
+ deadline,
99
+ payload.maxWinners || 1,
100
+ 'open',
101
+ JSON.stringify(payload.metadata || {}),
102
+ new Date(),
103
+ new Date()
104
+ ]);
105
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createBounty', payload, {
106
+ action: 'bounty_created',
107
+ data: {
108
+ bountyId: payload.bountyId,
109
+ sponsor,
110
+ rewardPool: payment.amount,
111
+ asset: payment.asset
112
+ }
113
+ });
114
+ };
115
+ const submitWork = async (payload, ctx) => {
116
+ const submitter = (0, helpers_1.requireSender)(ctx);
117
+ const bounties = await state.adapter.query('SELECT * FROM bounty_board_bounties WHERE bounty_id = ?', [payload.bountyId]);
118
+ if (bounties.length === 0) {
119
+ throw new Error(`Bounty ${payload.bountyId} does not exist`);
120
+ }
121
+ const bounty = bounties[0];
122
+ if (bounty.status !== 'open' && bounty.status !== 'partially_awarded') {
123
+ throw new Error('Bounty is not accepting submissions');
124
+ }
125
+ const deadline = (0, helpers_1.parseDateValue)(bounty.deadline);
126
+ if (deadline && deadline <= new Date()) {
127
+ throw new Error('Bounty submission window has closed');
128
+ }
129
+ const existing = await state.adapter.query('SELECT submission_id FROM bounty_board_submissions WHERE submission_id = ?', [payload.submissionId]);
130
+ if (existing.length > 0) {
131
+ throw new Error(`Submission ${payload.submissionId} already exists`);
132
+ }
133
+ await state.adapter.query(`INSERT INTO bounty_board_submissions (
134
+ submission_id, bounty_id, submitter, url, description, status, created_at
135
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)`, [payload.submissionId, payload.bountyId, submitter, payload.url, payload.description || '', 'submitted', new Date()]);
136
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'submitWork', payload, {
137
+ action: 'bounty_submission_received',
138
+ data: {
139
+ bountyId: payload.bountyId,
140
+ submissionId: payload.submissionId,
141
+ submitter
142
+ }
143
+ });
144
+ };
145
+ const awardBounty = async (payload, ctx) => {
146
+ const sponsor = (0, helpers_1.requireSender)(ctx);
147
+ const bountyRows = await state.adapter.query('SELECT * FROM bounty_board_bounties WHERE bounty_id = ?', [payload.bountyId]);
148
+ if (bountyRows.length === 0) {
149
+ throw new Error(`Bounty ${payload.bountyId} does not exist`);
150
+ }
151
+ const bounty = bountyRows[0];
152
+ if (bounty.sponsor !== sponsor) {
153
+ throw new Error('Only the bounty sponsor can award submissions');
154
+ }
155
+ if (bounty.status === 'closed') {
156
+ throw new Error('Bounty is closed');
157
+ }
158
+ const submissions = await state.adapter.query('SELECT * FROM bounty_board_submissions WHERE submission_id = ? AND bounty_id = ?', [payload.submissionId, payload.bountyId]);
159
+ if (submissions.length === 0) {
160
+ throw new Error('Submission does not exist for this bounty');
161
+ }
162
+ const submission = submissions[0];
163
+ if (submission.status === 'awarded') {
164
+ throw new Error('Submission already awarded');
165
+ }
166
+ const amount = payload.amount || bounty.remaining_reward;
167
+ if ((0, helpers_1.toBigNumber)(amount).gt(bounty.remaining_reward)) {
168
+ throw new Error('Award amount exceeds remaining bounty reward');
169
+ }
170
+ const awardCountRows = await state.adapter.query('SELECT COUNT(*) AS count FROM bounty_board_awards WHERE bounty_id = ?', [payload.bountyId]);
171
+ const awardCount = Number(awardCountRows[0]?.count || 0);
172
+ if (awardCount >= Number(bounty.max_winners)) {
173
+ throw new Error('Maximum winners already reached');
174
+ }
175
+ await state.adapter.query('INSERT INTO bounty_board_awards (bounty_id, submission_id, winner, amount, note, created_at) VALUES (?, ?, ?, ?, ?, ?)', [payload.bountyId, payload.submissionId, submission.submitter, amount, payload.note || '', new Date()]);
176
+ await state.adapter.query('UPDATE bounty_board_submissions SET status = ? WHERE submission_id = ?', ['awarded', payload.submissionId]);
177
+ const remainingReward = (0, helpers_1.toBigNumber)(bounty.remaining_reward).minus(amount);
178
+ const nextStatus = remainingReward.lte(0) || awardCount + 1 >= Number(bounty.max_winners)
179
+ ? 'closed'
180
+ : 'partially_awarded';
181
+ await state.adapter.query('UPDATE bounty_board_bounties SET remaining_reward = ?, status = ?, updated_at = ? WHERE bounty_id = ?', [remainingReward.toFixed(), nextStatus, new Date(), payload.bountyId]);
182
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'awardBounty', payload, {
183
+ action: 'bounty_awarded',
184
+ data: {
185
+ bountyId: payload.bountyId,
186
+ submissionId: payload.submissionId,
187
+ winner: submission.submitter,
188
+ amount,
189
+ asset: bounty.asset,
190
+ remainingReward: remainingReward.toFixed()
191
+ }
192
+ });
193
+ };
194
+ const closeBounty = async (payload, ctx) => {
195
+ const bountyRows = await state.adapter.query('SELECT * FROM bounty_board_bounties WHERE bounty_id = ?', [payload.bountyId]);
196
+ if (bountyRows.length === 0) {
197
+ throw new Error(`Bounty ${payload.bountyId} does not exist`);
198
+ }
199
+ const bounty = bountyRows[0];
200
+ if (ctx.trigger !== 'time') {
201
+ const sender = (0, helpers_1.requireSender)(ctx);
202
+ if (sender !== bounty.sponsor) {
203
+ throw new Error('Only the bounty sponsor can close this bounty');
204
+ }
205
+ }
206
+ await state.adapter.query('UPDATE bounty_board_bounties SET status = ?, updated_at = ? WHERE bounty_id = ?', ['closed', new Date(), payload.bountyId]);
207
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'closeBounty', payload, {
208
+ action: 'bounty_closed',
209
+ data: {
210
+ bountyId: payload.bountyId,
211
+ sponsor: bounty.sponsor,
212
+ remainingReward: bounty.remaining_reward,
213
+ asset: bounty.asset
214
+ }
215
+ });
216
+ };
217
+ return (0, contract_1.defineContract)({
218
+ name,
219
+ hooks: {
220
+ create: async ({ adapter }) => {
221
+ state.adapter = adapter;
222
+ await initialize();
223
+ }
224
+ },
225
+ actions: {
226
+ createBounty: (0, contract_1.action)(createBounty, { schema: createBountySchema, trigger: ['transfer', 'recurrent_transfer'] }),
227
+ submitWork: (0, contract_1.action)(submitWork, { schema: submitWorkSchema, trigger: 'custom_json' }),
228
+ awardBounty: (0, contract_1.action)(awardBounty, { schema: awardSchema, trigger: 'custom_json' }),
229
+ closeBounty: (0, contract_1.action)(closeBounty, { schema: closeSchema, trigger: ['custom_json', 'time'] })
230
+ }
231
+ });
232
+ }
233
+ //# sourceMappingURL=bountyboard.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bountyboard.contract.js","sourceRoot":"","sources":["../../src/contracts/bountyboard.contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface BundleMarketplaceContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createBundleMarketplaceContract(options?: BundleMarketplaceContractOptions): import("..").ContractDefinition;