hive-stream 3.0.1 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/DOCUMENTATION.md +66 -2
  2. package/README.md +95 -24
  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/config.d.ts +29 -0
  19. package/dist/config.js +77 -2
  20. package/dist/config.js.map +1 -1
  21. package/dist/contracts/auctionhouse.contract.d.ts +4 -0
  22. package/dist/contracts/auctionhouse.contract.js +234 -0
  23. package/dist/contracts/auctionhouse.contract.js.map +1 -0
  24. package/dist/contracts/booking.contract.d.ts +4 -0
  25. package/dist/contracts/booking.contract.js +225 -0
  26. package/dist/contracts/booking.contract.js.map +1 -0
  27. package/dist/contracts/bountyboard.contract.d.ts +4 -0
  28. package/dist/contracts/bountyboard.contract.js +233 -0
  29. package/dist/contracts/bountyboard.contract.js.map +1 -0
  30. package/dist/contracts/bundlemarketplace.contract.d.ts +4 -0
  31. package/dist/contracts/bundlemarketplace.contract.js +195 -0
  32. package/dist/contracts/bundlemarketplace.contract.js.map +1 -0
  33. package/dist/contracts/charitymatch.contract.d.ts +4 -0
  34. package/dist/contracts/charitymatch.contract.js +172 -0
  35. package/dist/contracts/charitymatch.contract.js.map +1 -0
  36. package/dist/contracts/coinflip.contract.js +7 -1
  37. package/dist/contracts/coinflip.contract.js.map +1 -1
  38. package/dist/contracts/crowdfund.contract.d.ts +4 -0
  39. package/dist/contracts/crowdfund.contract.js +290 -0
  40. package/dist/contracts/crowdfund.contract.js.map +1 -0
  41. package/dist/contracts/dcabot.contract.d.ts +4 -0
  42. package/dist/contracts/dcabot.contract.js +217 -0
  43. package/dist/contracts/dcabot.contract.js.map +1 -0
  44. package/dist/contracts/dice.contract.js +7 -1
  45. package/dist/contracts/dice.contract.js.map +1 -1
  46. package/dist/contracts/domainregistry.contract.d.ts +4 -0
  47. package/dist/contracts/domainregistry.contract.js +232 -0
  48. package/dist/contracts/domainregistry.contract.js.map +1 -0
  49. package/dist/contracts/exchange.contract.js +209 -168
  50. package/dist/contracts/exchange.contract.js.map +1 -1
  51. package/dist/contracts/fanclub.contract.d.ts +4 -0
  52. package/dist/contracts/fanclub.contract.js +193 -0
  53. package/dist/contracts/fanclub.contract.js.map +1 -0
  54. package/dist/contracts/giftcard.contract.d.ts +4 -0
  55. package/dist/contracts/giftcard.contract.js +158 -0
  56. package/dist/contracts/giftcard.contract.js.map +1 -0
  57. package/dist/contracts/grantrounds.contract.d.ts +4 -0
  58. package/dist/contracts/grantrounds.contract.js +265 -0
  59. package/dist/contracts/grantrounds.contract.js.map +1 -0
  60. package/dist/contracts/groupbuy.contract.d.ts +4 -0
  61. package/dist/contracts/groupbuy.contract.js +198 -0
  62. package/dist/contracts/groupbuy.contract.js.map +1 -0
  63. package/dist/contracts/helpers.d.ts +64 -0
  64. package/dist/contracts/helpers.js +159 -0
  65. package/dist/contracts/helpers.js.map +1 -0
  66. package/dist/contracts/insurancepool.contract.d.ts +4 -0
  67. package/dist/contracts/insurancepool.contract.js +281 -0
  68. package/dist/contracts/insurancepool.contract.js.map +1 -0
  69. package/dist/contracts/invoice.contract.d.ts +4 -0
  70. package/dist/contracts/invoice.contract.js +193 -0
  71. package/dist/contracts/invoice.contract.js.map +1 -0
  72. package/dist/contracts/launchpad.contract.d.ts +4 -0
  73. package/dist/contracts/launchpad.contract.js +225 -0
  74. package/dist/contracts/launchpad.contract.js.map +1 -0
  75. package/dist/contracts/lotto.contract.js +53 -37
  76. package/dist/contracts/lotto.contract.js.map +1 -1
  77. package/dist/contracts/multisigtreasury.contract.d.ts +4 -0
  78. package/dist/contracts/multisigtreasury.contract.js +245 -0
  79. package/dist/contracts/multisigtreasury.contract.js.map +1 -0
  80. package/dist/contracts/nft.contract.d.ts +1 -0
  81. package/dist/contracts/nft.contract.js +236 -192
  82. package/dist/contracts/nft.contract.js.map +1 -1
  83. package/dist/contracts/oraclebounty.contract.d.ts +4 -0
  84. package/dist/contracts/oraclebounty.contract.js +250 -0
  85. package/dist/contracts/oraclebounty.contract.js.map +1 -0
  86. package/dist/contracts/payroll.contract.d.ts +4 -0
  87. package/dist/contracts/payroll.contract.js +232 -0
  88. package/dist/contracts/payroll.contract.js.map +1 -0
  89. package/dist/contracts/paywall.contract.d.ts +4 -0
  90. package/dist/contracts/paywall.contract.js +185 -0
  91. package/dist/contracts/paywall.contract.js.map +1 -0
  92. package/dist/contracts/poll.contract.js +2 -0
  93. package/dist/contracts/poll.contract.js.map +1 -1
  94. package/dist/contracts/predictionmarket.contract.d.ts +4 -0
  95. package/dist/contracts/predictionmarket.contract.js +213 -0
  96. package/dist/contracts/predictionmarket.contract.js.map +1 -0
  97. package/dist/contracts/proposaltimelock.contract.d.ts +4 -0
  98. package/dist/contracts/proposaltimelock.contract.js +250 -0
  99. package/dist/contracts/proposaltimelock.contract.js.map +1 -0
  100. package/dist/contracts/questpass.contract.d.ts +4 -0
  101. package/dist/contracts/questpass.contract.js +214 -0
  102. package/dist/contracts/questpass.contract.js.map +1 -0
  103. package/dist/contracts/referral.contract.d.ts +4 -0
  104. package/dist/contracts/referral.contract.js +238 -0
  105. package/dist/contracts/referral.contract.js.map +1 -0
  106. package/dist/contracts/rental.contract.d.ts +4 -0
  107. package/dist/contracts/rental.contract.js +221 -0
  108. package/dist/contracts/rental.contract.js.map +1 -0
  109. package/dist/contracts/revenuesplit.contract.d.ts +4 -0
  110. package/dist/contracts/revenuesplit.contract.js +211 -0
  111. package/dist/contracts/revenuesplit.contract.js.map +1 -0
  112. package/dist/contracts/rps.contract.js +17 -1
  113. package/dist/contracts/rps.contract.js.map +1 -1
  114. package/dist/contracts/savings.contract.d.ts +4 -0
  115. package/dist/contracts/savings.contract.js +208 -0
  116. package/dist/contracts/savings.contract.js.map +1 -0
  117. package/dist/contracts/subscription.contract.d.ts +4 -0
  118. package/dist/contracts/subscription.contract.js +241 -0
  119. package/dist/contracts/subscription.contract.js.map +1 -0
  120. package/dist/contracts/sweepstakes.contract.d.ts +4 -0
  121. package/dist/contracts/sweepstakes.contract.js +209 -0
  122. package/dist/contracts/sweepstakes.contract.js.map +1 -0
  123. package/dist/contracts/ticketing.contract.d.ts +4 -0
  124. package/dist/contracts/ticketing.contract.js +185 -0
  125. package/dist/contracts/ticketing.contract.js.map +1 -0
  126. package/dist/contracts/tipjar.contract.js +2 -0
  127. package/dist/contracts/tipjar.contract.js.map +1 -1
  128. package/dist/contracts/token.contract.js +135 -125
  129. package/dist/contracts/token.contract.js.map +1 -1
  130. package/dist/index.d.ts +40 -0
  131. package/dist/index.js +72 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/metadata.d.ts +70 -0
  134. package/dist/metadata.js +470 -0
  135. package/dist/metadata.js.map +1 -0
  136. package/dist/providers/block-provider.d.ts +22 -0
  137. package/dist/providers/block-provider.js +3 -0
  138. package/dist/providers/block-provider.js.map +1 -0
  139. package/dist/providers/haf-client.d.ts +30 -0
  140. package/dist/providers/haf-client.js +119 -0
  141. package/dist/providers/haf-client.js.map +1 -0
  142. package/dist/providers/haf-provider.d.ts +49 -0
  143. package/dist/providers/haf-provider.js +256 -0
  144. package/dist/providers/haf-provider.js.map +1 -0
  145. package/dist/providers/hive-provider.d.ts +13 -0
  146. package/dist/providers/hive-provider.js +25 -0
  147. package/dist/providers/hive-provider.js.map +1 -0
  148. package/dist/providers/index.d.ts +4 -0
  149. package/dist/providers/index.js +21 -0
  150. package/dist/providers/index.js.map +1 -0
  151. package/dist/streamer.d.ts +24 -4
  152. package/dist/streamer.js +196 -69
  153. package/dist/streamer.js.map +1 -1
  154. package/dist/utils.js +11 -2
  155. package/dist/utils.js.map +1 -1
  156. package/package.json +16 -1
  157. package/.claude/settings.local.json +0 -12
  158. package/.env.example +0 -3
  159. package/.travis.yml +0 -11
  160. package/AGENTS.md +0 -35
  161. package/CLAUDE.md +0 -75
  162. package/ecosystem.config.js +0 -17
  163. package/examples/contracts/README.md +0 -8
  164. package/examples/contracts/exchange.ts +0 -38
  165. package/examples/contracts/poll.ts +0 -21
  166. package/examples/contracts/rps.ts +0 -19
  167. package/examples/contracts/tipjar.ts +0 -19
  168. package/jest.config.js +0 -9
  169. package/test-contract-block.md +0 -19
  170. package/tests/actions.spec.ts +0 -252
  171. package/tests/adapters/actions-persistence.spec.ts +0 -144
  172. package/tests/adapters/postgresql.adapter.spec.ts +0 -127
  173. package/tests/adapters/sqlite.adapter.spec.ts +0 -181
  174. package/tests/contracts/coinflip.contract.spec.ts +0 -94
  175. package/tests/contracts/dice.contract.spec.ts +0 -87
  176. package/tests/contracts/entrants.json +0 -729
  177. package/tests/contracts/exchange.contract.spec.ts +0 -84
  178. package/tests/contracts/lotto.contract.spec.ts +0 -59
  179. package/tests/contracts/nft.contract.spec.ts +0 -948
  180. package/tests/contracts/token.contract.spec.ts +0 -90
  181. package/tests/exchanges/coingecko.exchange.spec.ts +0 -169
  182. package/tests/exchanges/exchange.base.spec.ts +0 -246
  183. package/tests/helpers/mock-adapter.ts +0 -214
  184. package/tests/helpers/mock-fetch.ts +0 -165
  185. package/tests/hive-chain-features.spec.ts +0 -238
  186. package/tests/hive-rates.spec.ts +0 -443
  187. package/tests/integration/hive-rates.integration.spec.ts +0 -35
  188. package/tests/setup.ts +0 -30
  189. package/tests/streamer-actions.spec.ts +0 -274
  190. package/tests/streamer.spec.ts +0 -342
  191. package/tests/types/rates.spec.ts +0 -216
  192. package/tests/utils.spec.ts +0 -113
  193. package/tsconfig.build.json +0 -4
  194. package/tslint.json +0 -21
  195. package/wallaby.js +0 -26
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAuctionHouseContract = createAuctionHouseContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'auctionhouse';
8
+ function createAuctionHouseContract(options = {}) {
9
+ const name = options.name || DEFAULT_NAME;
10
+ const state = (0, helpers_1.createContractState)();
11
+ const createAuctionSchema = zod_1.z.object({
12
+ auctionId: helpers_1.identifierSchema,
13
+ title: zod_1.z.string().min(3).max(140),
14
+ description: zod_1.z.string().max(1000).optional(),
15
+ assetType: zod_1.z.string().min(1).max(40).optional(),
16
+ assetRef: zod_1.z.string().min(1).max(140),
17
+ paymentAsset: helpers_1.assetSchema,
18
+ reservePrice: helpers_1.amountSchema,
19
+ buyNowPrice: helpers_1.amountSchema.optional(),
20
+ startsAt: zod_1.z.string().optional(),
21
+ endsAt: zod_1.z.string(),
22
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
23
+ });
24
+ const placeBidSchema = zod_1.z.object({
25
+ auctionId: helpers_1.identifierSchema,
26
+ note: zod_1.z.string().max(280).optional()
27
+ });
28
+ const settleSchema = zod_1.z.object({
29
+ auctionId: helpers_1.identifierSchema
30
+ });
31
+ const initialize = async () => {
32
+ await (0, helpers_1.initializeTables)(state.adapter, [
33
+ `
34
+ CREATE TABLE IF NOT EXISTS auction_house_auctions (
35
+ auction_id TEXT PRIMARY KEY,
36
+ seller TEXT NOT NULL,
37
+ title TEXT NOT NULL,
38
+ description TEXT,
39
+ asset_type TEXT NOT NULL,
40
+ asset_ref TEXT NOT NULL,
41
+ payment_asset TEXT NOT NULL,
42
+ reserve_price TEXT NOT NULL,
43
+ buy_now_price TEXT,
44
+ starts_at DATETIME NOT NULL,
45
+ ends_at DATETIME NOT NULL,
46
+ status TEXT NOT NULL,
47
+ highest_bid TEXT,
48
+ highest_bidder TEXT,
49
+ created_at DATETIME NOT NULL,
50
+ settled_at DATETIME,
51
+ metadata TEXT
52
+ )
53
+ `,
54
+ `
55
+ CREATE TABLE IF NOT EXISTS auction_house_bids (
56
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
57
+ auction_id TEXT NOT NULL,
58
+ bidder TEXT NOT NULL,
59
+ amount TEXT NOT NULL,
60
+ asset TEXT NOT NULL,
61
+ note TEXT,
62
+ created_at DATETIME NOT NULL
63
+ )
64
+ `
65
+ ]);
66
+ };
67
+ const createAuction = async (payload, ctx) => {
68
+ const seller = (0, helpers_1.requireSender)(ctx);
69
+ const existing = await state.adapter.query('SELECT auction_id FROM auction_house_auctions WHERE auction_id = ?', [payload.auctionId]);
70
+ if (existing.length > 0) {
71
+ throw new Error(`Auction ${payload.auctionId} already exists`);
72
+ }
73
+ const startsAt = (0, helpers_1.parseDateValue)(payload.startsAt) || new Date();
74
+ const endsAt = (0, helpers_1.parseDateValue)(payload.endsAt);
75
+ if (!endsAt || endsAt <= startsAt) {
76
+ throw new Error('Auction end date must be after the start date');
77
+ }
78
+ if (payload.buyNowPrice && (0, helpers_1.toBigNumber)(payload.buyNowPrice).lte(payload.reservePrice)) {
79
+ throw new Error('Buy now price must be greater than the reserve price');
80
+ }
81
+ await state.adapter.query(`INSERT INTO auction_house_auctions (
82
+ auction_id, seller, title, description, asset_type, asset_ref, payment_asset, reserve_price, buy_now_price,
83
+ starts_at, ends_at, status, highest_bid, highest_bidder, created_at, settled_at, metadata
84
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
85
+ payload.auctionId,
86
+ seller,
87
+ payload.title,
88
+ payload.description || '',
89
+ payload.assetType || 'item',
90
+ payload.assetRef,
91
+ payload.paymentAsset,
92
+ payload.reservePrice,
93
+ payload.buyNowPrice || null,
94
+ startsAt,
95
+ endsAt,
96
+ 'open',
97
+ null,
98
+ null,
99
+ new Date(),
100
+ null,
101
+ JSON.stringify(payload.metadata || {})
102
+ ]);
103
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createAuction', payload, {
104
+ action: 'auction_created',
105
+ data: {
106
+ auctionId: payload.auctionId,
107
+ seller,
108
+ paymentAsset: payload.paymentAsset,
109
+ reservePrice: payload.reservePrice
110
+ }
111
+ });
112
+ };
113
+ const placeBid = async (payload, ctx) => {
114
+ const bidder = (0, helpers_1.requireSender)(ctx);
115
+ const payment = (0, helpers_1.getIncomingPayment)(ctx);
116
+ const auctionRows = await state.adapter.query('SELECT * FROM auction_house_auctions WHERE auction_id = ?', [payload.auctionId]);
117
+ if (auctionRows.length === 0) {
118
+ throw new Error(`Auction ${payload.auctionId} does not exist`);
119
+ }
120
+ const auction = auctionRows[0];
121
+ const now = new Date();
122
+ const startsAt = (0, helpers_1.parseDateValue)(auction.starts_at) || now;
123
+ const endsAt = (0, helpers_1.parseDateValue)(auction.ends_at) || now;
124
+ if (auction.status !== 'open') {
125
+ throw new Error('Auction is not open for bids');
126
+ }
127
+ if (bidder === auction.seller) {
128
+ throw new Error('Seller cannot bid on their own auction');
129
+ }
130
+ if (startsAt > now) {
131
+ throw new Error('Auction has not started yet');
132
+ }
133
+ if (endsAt <= now) {
134
+ throw new Error('Auction has already ended');
135
+ }
136
+ (0, helpers_1.assertAssetMatches)(payment.asset, auction.payment_asset);
137
+ const currentHighest = (0, helpers_1.toBigNumber)(auction.highest_bid || '0');
138
+ const nextBid = (0, helpers_1.toBigNumber)(payment.amount);
139
+ if (nextBid.lte(currentHighest)) {
140
+ throw new Error('Bid must be greater than the current highest bid');
141
+ }
142
+ await state.adapter.query('INSERT INTO auction_house_bids (auction_id, bidder, amount, asset, note, created_at) VALUES (?, ?, ?, ?, ?, ?)', [payload.auctionId, bidder, payment.amount, payment.asset, payload.note || '', now]);
143
+ let status = 'open';
144
+ let settledAt = null;
145
+ const shouldSettle = auction.buy_now_price && nextBid.gte(auction.buy_now_price);
146
+ if (shouldSettle) {
147
+ status = 'settled';
148
+ settledAt = now;
149
+ }
150
+ await state.adapter.query('UPDATE auction_house_auctions SET highest_bid = ?, highest_bidder = ?, status = ?, settled_at = ? WHERE auction_id = ?', [payment.amount, bidder, status, settledAt, payload.auctionId]);
151
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'placeBid', payload, {
152
+ action: shouldSettle ? 'auction_settled' : 'auction_bid_placed',
153
+ data: {
154
+ auctionId: payload.auctionId,
155
+ bidder,
156
+ amount: payment.amount,
157
+ asset: payment.asset,
158
+ winner: shouldSettle ? bidder : null,
159
+ settled: shouldSettle
160
+ }
161
+ });
162
+ };
163
+ const settleAuction = async (payload, ctx) => {
164
+ const rows = await state.adapter.query('SELECT * FROM auction_house_auctions WHERE auction_id = ?', [payload.auctionId]);
165
+ if (rows.length === 0) {
166
+ throw new Error(`Auction ${payload.auctionId} does not exist`);
167
+ }
168
+ const auction = rows[0];
169
+ if (auction.status === 'settled' || auction.status === 'ended' || auction.status === 'cancelled') {
170
+ return;
171
+ }
172
+ const sender = ctx.trigger === 'time' ? 'system' : (0, helpers_1.requireSender)(ctx);
173
+ if (ctx.trigger !== 'time' && sender !== auction.seller) {
174
+ throw new Error('Only the seller can settle this auction');
175
+ }
176
+ const endsAt = (0, helpers_1.parseDateValue)(auction.ends_at) || new Date();
177
+ if (ctx.trigger !== 'time' && endsAt > new Date()) {
178
+ throw new Error('Auction cannot be settled before it ends');
179
+ }
180
+ const highestBid = (0, helpers_1.toBigNumber)(auction.highest_bid || '0');
181
+ const reservePrice = (0, helpers_1.toBigNumber)(auction.reserve_price);
182
+ const status = auction.highest_bidder && highestBid.gte(reservePrice)
183
+ ? 'settled'
184
+ : 'ended';
185
+ await state.adapter.query('UPDATE auction_house_auctions SET status = ?, settled_at = ? WHERE auction_id = ?', [status, new Date(), payload.auctionId]);
186
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'settleAuction', payload, {
187
+ action: 'auction_settled',
188
+ data: {
189
+ auctionId: payload.auctionId,
190
+ status,
191
+ winner: status === 'settled' ? auction.highest_bidder : null,
192
+ winningBid: status === 'settled' ? auction.highest_bid : null
193
+ }
194
+ });
195
+ };
196
+ const cancelAuction = async (payload, ctx) => {
197
+ const sender = (0, helpers_1.requireSender)(ctx);
198
+ const rows = await state.adapter.query('SELECT * FROM auction_house_auctions WHERE auction_id = ?', [payload.auctionId]);
199
+ if (rows.length === 0) {
200
+ throw new Error(`Auction ${payload.auctionId} does not exist`);
201
+ }
202
+ const auction = rows[0];
203
+ if (auction.seller !== sender) {
204
+ throw new Error('Only the seller can cancel this auction');
205
+ }
206
+ if (auction.highest_bidder) {
207
+ throw new Error('Cannot cancel an auction with bids');
208
+ }
209
+ await state.adapter.query('UPDATE auction_house_auctions SET status = ?, settled_at = ? WHERE auction_id = ?', ['cancelled', new Date(), payload.auctionId]);
210
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'cancelAuction', payload, {
211
+ action: 'auction_cancelled',
212
+ data: {
213
+ auctionId: payload.auctionId,
214
+ seller: sender
215
+ }
216
+ });
217
+ };
218
+ return (0, contract_1.defineContract)({
219
+ name,
220
+ hooks: {
221
+ create: async ({ adapter }) => {
222
+ state.adapter = adapter;
223
+ await initialize();
224
+ }
225
+ },
226
+ actions: {
227
+ createAuction: (0, contract_1.action)(createAuction, { schema: createAuctionSchema, trigger: 'custom_json' }),
228
+ placeBid: (0, contract_1.action)(placeBid, { schema: placeBidSchema, trigger: ['transfer', 'recurrent_transfer'] }),
229
+ settleAuction: (0, contract_1.action)(settleAuction, { schema: settleSchema, trigger: ['custom_json', 'time'] }),
230
+ cancelAuction: (0, contract_1.action)(cancelAuction, { schema: settleSchema, trigger: 'custom_json' })
231
+ }
232
+ });
233
+ }
234
+ //# sourceMappingURL=auctionhouse.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auctionhouse.contract.js","sourceRoot":"","sources":["../../src/contracts/auctionhouse.contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface BookingContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createBookingContract(options?: BookingContractOptions): import("..").ContractDefinition;
@@ -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;