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,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createReferralContract = createReferralContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'referrals';
8
+ function createReferralContract(options = {}) {
9
+ const name = options.name || DEFAULT_NAME;
10
+ const state = (0, helpers_1.createContractState)();
11
+ const createProgramSchema = zod_1.z.object({
12
+ programId: helpers_1.identifierSchema,
13
+ title: zod_1.z.string().min(3).max(140),
14
+ payoutAsset: helpers_1.assetSchema,
15
+ rewardBps: zod_1.z.number().int().min(1).max(10000),
16
+ maxPayoutPerConversion: helpers_1.amountSchema.optional(),
17
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
18
+ });
19
+ const fundProgramSchema = zod_1.z.object({
20
+ programId: helpers_1.identifierSchema
21
+ });
22
+ const registerCodeSchema = zod_1.z.object({
23
+ programId: helpers_1.identifierSchema,
24
+ code: helpers_1.identifierSchema
25
+ });
26
+ const recordConversionSchema = zod_1.z.object({
27
+ programId: helpers_1.identifierSchema,
28
+ code: helpers_1.identifierSchema,
29
+ buyer: zod_1.z.string().min(3).max(32),
30
+ grossAmount: helpers_1.amountSchema,
31
+ asset: helpers_1.assetSchema,
32
+ externalRef: helpers_1.identifierSchema.optional()
33
+ });
34
+ const withdrawSchema = zod_1.z.object({
35
+ programId: helpers_1.identifierSchema.optional()
36
+ }).optional();
37
+ const initialize = async () => {
38
+ await (0, helpers_1.initializeTables)(state.adapter, [
39
+ `
40
+ CREATE TABLE IF NOT EXISTS referral_programs (
41
+ program_id TEXT PRIMARY KEY,
42
+ owner TEXT NOT NULL,
43
+ title TEXT NOT NULL,
44
+ payout_asset TEXT NOT NULL,
45
+ reward_bps INTEGER NOT NULL,
46
+ max_payout_per_conversion TEXT,
47
+ budget_balance TEXT NOT NULL,
48
+ metadata TEXT,
49
+ created_at DATETIME NOT NULL
50
+ )
51
+ `,
52
+ `
53
+ CREATE TABLE IF NOT EXISTS referral_codes (
54
+ code TEXT PRIMARY KEY,
55
+ program_id TEXT NOT NULL,
56
+ account TEXT NOT NULL,
57
+ created_at DATETIME NOT NULL
58
+ )
59
+ `,
60
+ `
61
+ CREATE TABLE IF NOT EXISTS referral_balances (
62
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
63
+ program_id TEXT NOT NULL,
64
+ account TEXT NOT NULL,
65
+ asset TEXT NOT NULL,
66
+ balance TEXT NOT NULL,
67
+ updated_at DATETIME NOT NULL,
68
+ UNIQUE(program_id, account, asset)
69
+ )
70
+ `,
71
+ `
72
+ CREATE TABLE IF NOT EXISTS referral_conversions (
73
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
74
+ program_id TEXT NOT NULL,
75
+ code TEXT NOT NULL,
76
+ account TEXT NOT NULL,
77
+ buyer TEXT NOT NULL,
78
+ gross_amount TEXT NOT NULL,
79
+ payout_amount TEXT NOT NULL,
80
+ asset TEXT NOT NULL,
81
+ external_ref TEXT,
82
+ created_at DATETIME NOT NULL
83
+ )
84
+ `
85
+ ]);
86
+ };
87
+ const createProgram = async (payload, ctx) => {
88
+ const owner = (0, helpers_1.requireSender)(ctx);
89
+ const existing = await state.adapter.query('SELECT program_id FROM referral_programs WHERE program_id = ?', [payload.programId]);
90
+ if (existing.length > 0) {
91
+ throw new Error(`Referral program ${payload.programId} already exists`);
92
+ }
93
+ await state.adapter.query(`INSERT INTO referral_programs (
94
+ program_id, owner, title, payout_asset, reward_bps, max_payout_per_conversion, budget_balance, metadata, created_at
95
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
96
+ payload.programId,
97
+ owner,
98
+ payload.title,
99
+ payload.payoutAsset,
100
+ payload.rewardBps,
101
+ payload.maxPayoutPerConversion || null,
102
+ '0',
103
+ JSON.stringify(payload.metadata || {}),
104
+ new Date()
105
+ ]);
106
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createProgram', payload, {
107
+ action: 'referral_program_created',
108
+ data: {
109
+ programId: payload.programId,
110
+ owner
111
+ }
112
+ });
113
+ };
114
+ const fundProgram = async (payload, ctx) => {
115
+ const owner = (0, helpers_1.requireSender)(ctx);
116
+ const payment = (0, helpers_1.getIncomingPayment)(ctx);
117
+ const rows = await state.adapter.query('SELECT * FROM referral_programs WHERE program_id = ?', [payload.programId]);
118
+ if (rows.length === 0) {
119
+ throw new Error(`Referral program ${payload.programId} does not exist`);
120
+ }
121
+ const program = rows[0];
122
+ if (program.owner !== owner) {
123
+ throw new Error('Only the program owner can fund this referral program');
124
+ }
125
+ (0, helpers_1.assertAssetMatches)(payment.asset, program.payout_asset);
126
+ const nextBudget = (0, helpers_1.toBigNumber)(program.budget_balance).plus(payment.amount);
127
+ await state.adapter.query('UPDATE referral_programs SET budget_balance = ? WHERE program_id = ?', [nextBudget.toFixed(), payload.programId]);
128
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'fundProgram', payload, {
129
+ action: 'referral_program_funded',
130
+ data: {
131
+ programId: payload.programId,
132
+ owner,
133
+ budgetBalance: nextBudget.toFixed()
134
+ }
135
+ });
136
+ };
137
+ const registerCode = async (payload, ctx) => {
138
+ const account = (0, helpers_1.requireSender)(ctx);
139
+ const programRows = await state.adapter.query('SELECT * FROM referral_programs WHERE program_id = ?', [payload.programId]);
140
+ if (programRows.length === 0) {
141
+ throw new Error(`Referral program ${payload.programId} does not exist`);
142
+ }
143
+ const existing = await state.adapter.query('SELECT code FROM referral_codes WHERE code = ?', [payload.code]);
144
+ if (existing.length > 0) {
145
+ throw new Error(`Referral code ${payload.code} already exists`);
146
+ }
147
+ await state.adapter.query('INSERT INTO referral_codes (code, program_id, account, created_at) VALUES (?, ?, ?, ?)', [payload.code, payload.programId, account, new Date()]);
148
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'registerCode', payload, {
149
+ action: 'referral_code_registered',
150
+ data: {
151
+ programId: payload.programId,
152
+ code: payload.code,
153
+ account
154
+ }
155
+ });
156
+ };
157
+ const recordConversion = async (payload, ctx) => {
158
+ const owner = (0, helpers_1.requireSender)(ctx);
159
+ const programRows = await state.adapter.query('SELECT * FROM referral_programs WHERE program_id = ?', [payload.programId]);
160
+ const codeRows = await state.adapter.query('SELECT * FROM referral_codes WHERE code = ? AND program_id = ?', [payload.code, payload.programId]);
161
+ if (programRows.length === 0 || codeRows.length === 0) {
162
+ throw new Error('Referral program or code does not exist');
163
+ }
164
+ const program = programRows[0];
165
+ if (program.owner !== owner) {
166
+ throw new Error('Only the program owner can record conversions');
167
+ }
168
+ (0, helpers_1.assertAssetMatches)(payload.asset, program.payout_asset, 'Conversion asset');
169
+ let payout = (0, helpers_1.toBigNumber)(payload.grossAmount).multipliedBy(Number(program.reward_bps)).dividedBy(10000).decimalPlaces(8, 1);
170
+ if (program.max_payout_per_conversion && payout.gt(program.max_payout_per_conversion)) {
171
+ payout = (0, helpers_1.toBigNumber)(program.max_payout_per_conversion);
172
+ }
173
+ if (payout.gt(program.budget_balance)) {
174
+ throw new Error('Referral program does not have enough funded budget for this conversion');
175
+ }
176
+ const affiliate = codeRows[0].account;
177
+ const balanceRows = await state.adapter.query('SELECT * FROM referral_balances WHERE program_id = ? AND account = ? AND asset = ?', [payload.programId, affiliate, program.payout_asset]);
178
+ const nextBalance = (balanceRows.length > 0 ? (0, helpers_1.toBigNumber)(balanceRows[0].balance) : (0, helpers_1.toBigNumber)(0)).plus(payout);
179
+ await state.adapter.query('UPDATE referral_programs SET budget_balance = ? WHERE program_id = ?', [(0, helpers_1.toBigNumber)(program.budget_balance).minus(payout).toFixed(), payload.programId]);
180
+ await state.adapter.query(`INSERT INTO referral_balances (program_id, account, asset, balance, updated_at)
181
+ VALUES (?, ?, ?, ?, ?)
182
+ ON CONFLICT(program_id, account, asset)
183
+ DO UPDATE SET balance = excluded.balance, updated_at = excluded.updated_at`, [payload.programId, affiliate, program.payout_asset, nextBalance.toFixed(), new Date()]);
184
+ await state.adapter.query('INSERT INTO referral_conversions (program_id, code, account, buyer, gross_amount, payout_amount, asset, external_ref, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [payload.programId, payload.code, affiliate, payload.buyer, payload.grossAmount, payout.toFixed(), payload.asset, payload.externalRef || null, new Date()]);
185
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'recordConversion', payload, {
186
+ action: 'referral_conversion_recorded',
187
+ data: {
188
+ programId: payload.programId,
189
+ code: payload.code,
190
+ affiliate,
191
+ buyer: payload.buyer,
192
+ payout: payout.toFixed(),
193
+ asset: payload.asset
194
+ }
195
+ });
196
+ };
197
+ const withdrawAffiliate = async (payload = {}, ctx) => {
198
+ const account = (0, helpers_1.requireSender)(ctx);
199
+ const balances = payload.programId
200
+ ? await state.adapter.query('SELECT * FROM referral_balances WHERE program_id = ? AND account = ?', [payload.programId, account])
201
+ : await state.adapter.query('SELECT * FROM referral_balances WHERE account = ?', [account]);
202
+ if (balances.length === 0) {
203
+ throw new Error('No referral balance available for withdrawal');
204
+ }
205
+ for (const balance of balances) {
206
+ if ((0, helpers_1.toBigNumber)(balance.balance).lte(0)) {
207
+ continue;
208
+ }
209
+ await state.adapter.query('UPDATE referral_balances SET balance = ?, updated_at = ? WHERE program_id = ? AND account = ? AND asset = ?', ['0', new Date(), balance.program_id, account, balance.asset]);
210
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'withdrawAffiliate', payload, {
211
+ action: 'referral_withdrawal_requested',
212
+ data: {
213
+ programId: balance.program_id,
214
+ account,
215
+ amount: balance.balance,
216
+ asset: balance.asset
217
+ }
218
+ });
219
+ }
220
+ };
221
+ return (0, contract_1.defineContract)({
222
+ name,
223
+ hooks: {
224
+ create: async ({ adapter }) => {
225
+ state.adapter = adapter;
226
+ await initialize();
227
+ }
228
+ },
229
+ actions: {
230
+ createProgram: (0, contract_1.action)(createProgram, { schema: createProgramSchema, trigger: 'custom_json' }),
231
+ fundProgram: (0, contract_1.action)(fundProgram, { schema: fundProgramSchema, trigger: ['transfer', 'recurrent_transfer'] }),
232
+ registerCode: (0, contract_1.action)(registerCode, { schema: registerCodeSchema, trigger: 'custom_json' }),
233
+ recordConversion: (0, contract_1.action)(recordConversion, { schema: recordConversionSchema, trigger: 'custom_json' }),
234
+ withdrawAffiliate: (0, contract_1.action)(withdrawAffiliate, { schema: withdrawSchema, trigger: 'custom_json' })
235
+ }
236
+ });
237
+ }
238
+ //# sourceMappingURL=referral.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referral.contract.js","sourceRoot":"","sources":["../../src/contracts/referral.contract.ts"],"names":[],"mappings":";;AAsBA,wDA2RC;AAjTD,6BAAwB;AACxB,yCAAoD;AACpD,uCAYmB;AAEnB,MAAM,YAAY,GAAG,WAAW,CAAC;AAMjC,SAAgB,sBAAsB,CAAC,UAAmC,EAAE;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAA,6BAAmB,GAAE,CAAC;IAEpC,MAAM,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;QACjC,SAAS,EAAE,0BAAgB;QAC3B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,WAAW,EAAE,qBAAW;QACxB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7C,sBAAsB,EAAE,sBAAY,CAAC,QAAQ,EAAE;QAC/C,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;QAC/B,SAAS,EAAE,0BAAgB;KAC9B,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;QAChC,SAAS,EAAE,0BAAgB;QAC3B,IAAI,EAAE,0BAAgB;KACzB,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;QACpC,SAAS,EAAE,0BAAgB;QAC3B,IAAI,EAAE,0BAAgB;QACtB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,WAAW,EAAE,sBAAY;QACzB,KAAK,EAAE,qBAAW;QAClB,WAAW,EAAE,0BAAgB,CAAC,QAAQ,EAAE;KAC3C,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5B,SAAS,EAAE,0BAAgB,CAAC,QAAQ,EAAE;KACzC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEd,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,OAAO,EAAE;YAClC;;;;;;;;;;;;aAYC;YACD;;;;;;;aAOC;YACD;;;;;;;;;;aAUC;YACD;;;;;;;;;;;;;aAaC;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,OAA4C,EAAE,GAAQ,EAAE,EAAE;QACnF,MAAM,KAAK,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,+DAA+D,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACjI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,SAAS,iBAAiB,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB;;iDAEqC,EACrC;YACI,OAAO,CAAC,SAAS;YACjB,KAAK;YACL,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,WAAW;YACnB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,sBAAsB,IAAI,IAAI;YACtC,GAAG;YACH,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,eAAe,EAAE,OAAO,EAAE;YACnE,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE;gBACF,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK;aACR;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,OAAO,GAAG,IAAA,4BAAkB,EAAC,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACpH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,SAAS,iBAAiB,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC7E,CAAC;QAED,IAAA,4BAAkB,EAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,sEAAsE,EACtE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAC5C,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;YACjE,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE;gBACF,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK;gBACL,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE;aACtC;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,EAAE,OAA2C,EAAE,GAAQ,EAAE,EAAE;QACjF,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3H,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,SAAS,iBAAiB,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7G,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,wFAAwF,EACxF,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CACzD,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE;YAClE,MAAM,EAAE,0BAA0B;YAClC,IAAI,EAAE;gBACF,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO;aACV;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAA+C,EAAE,GAAQ,EAAE,EAAE;QACzF,MAAM,KAAK,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3H,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAChJ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QAED,IAAA,4BAAkB,EAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QAE5E,IAAI,MAAM,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5H,IAAI,OAAO,CAAC,yBAAyB,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,CAAC;YACpF,MAAM,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACtC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACzC,oFAAoF,EACpF,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,CACvD,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAW,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,qBAAW,EAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjH,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,sEAAsE,EACtE,CAAC,IAAA,qBAAW,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CACnF,CAAC;QACF,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB;;;wFAG4E,EAC5E,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAC1F,CAAC;QACF,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,sKAAsK,EACtK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAC7J,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE;YACtE,MAAM,EAAE,8BAA8B;YACtC,IAAI,EAAE;gBACF,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;aACvB;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAkC,EAAE,EAAE,GAAQ,EAAE,EAAE;QAC/E,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS;YAC9B,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,sEAAsE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjI,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAChG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACpE,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAA,qBAAW,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,SAAS;YACb,CAAC;YAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,6GAA6G,EAC7G,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAChE,CAAC;YAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE;gBACvE,MAAM,EAAE,+BAA+B;gBACvC,IAAI,EAAE;oBACF,SAAS,EAAE,OAAO,CAAC,UAAU;oBAC7B,OAAO;oBACP,MAAM,EAAE,OAAO,CAAC,OAAO;oBACvB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACvB;aACJ,CAAC,CAAC;QACP,CAAC;IACL,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,aAAa,EAAE,IAAA,iBAAM,EAAC,aAAa,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAC7F,WAAW,EAAE,IAAA,iBAAM,EAAC,WAAW,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,oBAAoB,CAAC,EAAE,CAAC;YAC5G,YAAY,EAAE,IAAA,iBAAM,EAAC,YAAY,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAC1F,gBAAgB,EAAE,IAAA,iBAAM,EAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YACtG,iBAAiB,EAAE,IAAA,iBAAM,EAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;SACnG;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface RentalContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createRentalContract(options?: RentalContractOptions): import("..").ContractDefinition;
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRentalContract = createRentalContract;
4
+ const zod_1 = require("zod");
5
+ const contract_1 = require("./contract");
6
+ const helpers_1 = require("./helpers");
7
+ const DEFAULT_NAME = 'rentals';
8
+ function createRentalContract(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
+ assetRef: zod_1.z.string().min(1).max(140),
14
+ title: zod_1.z.string().min(3).max(140),
15
+ collateralAmount: helpers_1.amountSchema,
16
+ collateralAsset: helpers_1.assetSchema,
17
+ dailyRate: helpers_1.amountSchema,
18
+ rateAsset: helpers_1.assetSchema,
19
+ maxDurationDays: zod_1.z.number().int().min(1).max(365).optional(),
20
+ metadata: zod_1.z.record(zod_1.z.any()).optional()
21
+ });
22
+ const initiateSchema = zod_1.z.object({
23
+ listingId: helpers_1.identifierSchema,
24
+ rentalId: helpers_1.identifierSchema,
25
+ endsAt: zod_1.z.string(),
26
+ note: zod_1.z.string().max(280).optional()
27
+ });
28
+ const rentalIdSchema = zod_1.z.object({
29
+ rentalId: helpers_1.identifierSchema,
30
+ note: zod_1.z.string().max(280).optional()
31
+ });
32
+ const initialize = async () => {
33
+ await (0, helpers_1.initializeTables)(state.adapter, [
34
+ `
35
+ CREATE TABLE IF NOT EXISTS rental_listings (
36
+ listing_id TEXT PRIMARY KEY,
37
+ owner TEXT NOT NULL,
38
+ asset_ref TEXT NOT NULL,
39
+ title TEXT NOT NULL,
40
+ collateral_amount TEXT NOT NULL,
41
+ collateral_asset TEXT NOT NULL,
42
+ daily_rate TEXT NOT NULL,
43
+ rate_asset TEXT NOT NULL,
44
+ max_duration_days INTEGER,
45
+ active INTEGER NOT NULL,
46
+ metadata TEXT,
47
+ created_at DATETIME NOT NULL
48
+ )
49
+ `,
50
+ `
51
+ CREATE TABLE IF NOT EXISTS rental_agreements (
52
+ rental_id TEXT PRIMARY KEY,
53
+ listing_id TEXT NOT NULL,
54
+ owner TEXT NOT NULL,
55
+ renter TEXT NOT NULL,
56
+ escrow_id INTEGER NOT NULL,
57
+ escrow_agent TEXT NOT NULL,
58
+ collateral_amount TEXT NOT NULL,
59
+ collateral_asset TEXT NOT NULL,
60
+ starts_at DATETIME NOT NULL,
61
+ ends_at DATETIME NOT NULL,
62
+ status TEXT NOT NULL,
63
+ note TEXT,
64
+ created_at DATETIME NOT NULL,
65
+ updated_at DATETIME NOT NULL
66
+ )
67
+ `
68
+ ]);
69
+ };
70
+ const createListing = async (payload, ctx) => {
71
+ const owner = (0, helpers_1.requireSender)(ctx);
72
+ const existing = await state.adapter.query('SELECT listing_id FROM rental_listings WHERE listing_id = ?', [payload.listingId]);
73
+ if (existing.length > 0) {
74
+ throw new Error(`Listing ${payload.listingId} already exists`);
75
+ }
76
+ await state.adapter.query(`INSERT INTO rental_listings (
77
+ listing_id, owner, asset_ref, title, collateral_amount, collateral_asset, daily_rate, rate_asset, max_duration_days, active, metadata, created_at
78
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
79
+ payload.listingId,
80
+ owner,
81
+ payload.assetRef,
82
+ payload.title,
83
+ payload.collateralAmount,
84
+ payload.collateralAsset,
85
+ payload.dailyRate,
86
+ payload.rateAsset,
87
+ payload.maxDurationDays || null,
88
+ 1,
89
+ JSON.stringify(payload.metadata || {}),
90
+ new Date()
91
+ ]);
92
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createListing', payload, {
93
+ action: 'rental_listing_created',
94
+ data: {
95
+ listingId: payload.listingId,
96
+ owner
97
+ }
98
+ });
99
+ };
100
+ const initiateRental = async (payload, ctx) => {
101
+ const escrow = (0, helpers_1.requireEscrowContext)(ctx);
102
+ const renter = (0, helpers_1.requireSender)(ctx);
103
+ const payment = (0, helpers_1.getEscrowPayment)(ctx);
104
+ const listings = await state.adapter.query('SELECT * FROM rental_listings WHERE listing_id = ?', [payload.listingId]);
105
+ if (listings.length === 0) {
106
+ throw new Error(`Listing ${payload.listingId} does not exist`);
107
+ }
108
+ const listing = listings[0];
109
+ if (!listing.active) {
110
+ throw new Error('Rental listing is not active');
111
+ }
112
+ (0, helpers_1.assertAssetMatches)(payment.asset, listing.collateral_asset, 'Collateral');
113
+ if ((0, helpers_1.toBigNumber)(payment.amount).lt(listing.collateral_amount)) {
114
+ throw new Error('Escrow collateral is below the required minimum');
115
+ }
116
+ const endsAt = (0, helpers_1.parseDateValue)(payload.endsAt);
117
+ const blockTime = new Date(ctx.block.time);
118
+ if (!endsAt || endsAt <= blockTime) {
119
+ throw new Error('Rental end time must be in the future');
120
+ }
121
+ if (listing.max_duration_days) {
122
+ const maxEnd = new Date(blockTime.getTime() + Number(listing.max_duration_days) * 24 * 60 * 60 * 1000);
123
+ if (endsAt > maxEnd) {
124
+ throw new Error('Requested rental exceeds the maximum duration');
125
+ }
126
+ }
127
+ const existing = await state.adapter.query('SELECT rental_id FROM rental_agreements WHERE rental_id = ?', [payload.rentalId]);
128
+ if (existing.length > 0) {
129
+ throw new Error(`Rental ${payload.rentalId} already exists`);
130
+ }
131
+ await state.adapter.query(`INSERT INTO rental_agreements (
132
+ rental_id, listing_id, owner, renter, escrow_id, escrow_agent, collateral_amount, collateral_asset,
133
+ starts_at, ends_at, status, note, created_at, updated_at
134
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
135
+ payload.rentalId,
136
+ payload.listingId,
137
+ listing.owner,
138
+ renter,
139
+ escrow.escrowId,
140
+ escrow.agent,
141
+ payment.amount,
142
+ payment.asset,
143
+ ctx.block.time,
144
+ endsAt,
145
+ 'active',
146
+ payload.note || '',
147
+ new Date(),
148
+ new Date()
149
+ ]);
150
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'initiateRental', payload, {
151
+ action: 'rental_initiated',
152
+ data: {
153
+ rentalId: payload.rentalId,
154
+ listingId: payload.listingId,
155
+ owner: listing.owner,
156
+ renter,
157
+ escrowId: escrow.escrowId,
158
+ escrowAgent: escrow.agent
159
+ }
160
+ });
161
+ };
162
+ const confirmReturn = async (payload, ctx) => {
163
+ const sender = (0, helpers_1.requireSender)(ctx);
164
+ const rentals = await state.adapter.query('SELECT * FROM rental_agreements WHERE rental_id = ?', [payload.rentalId]);
165
+ if (rentals.length === 0) {
166
+ throw new Error(`Rental ${payload.rentalId} does not exist`);
167
+ }
168
+ const rental = rentals[0];
169
+ if (sender !== rental.owner && sender !== rental.renter) {
170
+ throw new Error('Only the owner or renter can confirm return');
171
+ }
172
+ await state.adapter.query('UPDATE rental_agreements SET status = ?, note = ?, updated_at = ? WHERE rental_id = ?', ['returned', payload.note || rental.note || '', new Date(), payload.rentalId]);
173
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'confirmReturn', payload, {
174
+ action: 'rental_return_confirmed',
175
+ data: {
176
+ rentalId: payload.rentalId,
177
+ confirmedBy: sender,
178
+ escrowId: rental.escrow_id
179
+ }
180
+ });
181
+ };
182
+ const closeRental = async (payload, ctx) => {
183
+ const rentals = await state.adapter.query('SELECT * FROM rental_agreements WHERE rental_id = ?', [payload.rentalId]);
184
+ if (rentals.length === 0) {
185
+ throw new Error(`Rental ${payload.rentalId} does not exist`);
186
+ }
187
+ const rental = rentals[0];
188
+ if (ctx.trigger !== 'time') {
189
+ const sender = (0, helpers_1.requireSender)(ctx);
190
+ if (sender !== rental.owner) {
191
+ throw new Error('Only the listing owner can close the rental');
192
+ }
193
+ }
194
+ await state.adapter.query('UPDATE rental_agreements SET status = ?, note = ?, updated_at = ? WHERE rental_id = ?', ['closed', payload.note || rental.note || '', new Date(), payload.rentalId]);
195
+ await (0, helpers_1.emitContractEvent)(state.adapter, name, 'closeRental', payload, {
196
+ action: 'rental_closed',
197
+ data: {
198
+ rentalId: payload.rentalId,
199
+ escrowId: rental.escrow_id,
200
+ owner: rental.owner,
201
+ renter: rental.renter
202
+ }
203
+ });
204
+ };
205
+ return (0, contract_1.defineContract)({
206
+ name,
207
+ hooks: {
208
+ create: async ({ adapter }) => {
209
+ state.adapter = adapter;
210
+ await initialize();
211
+ }
212
+ },
213
+ actions: {
214
+ createListing: (0, contract_1.action)(createListing, { schema: createListingSchema, trigger: 'custom_json' }),
215
+ initiateRental: (0, contract_1.action)(initiateRental, { schema: initiateSchema, trigger: 'escrow_transfer' }),
216
+ confirmReturn: (0, contract_1.action)(confirmReturn, { schema: rentalIdSchema, trigger: 'custom_json' }),
217
+ closeRental: (0, contract_1.action)(closeRental, { schema: rentalIdSchema, trigger: ['custom_json', 'time'] })
218
+ }
219
+ });
220
+ }
221
+ //# sourceMappingURL=rental.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rental.contract.js","sourceRoot":"","sources":["../../src/contracts/rental.contract.ts"],"names":[],"mappings":";;AAuBA,oDA2PC;AAlRD,6BAAwB;AACxB,yCAAoD;AACpD,uCAamB;AAEnB,MAAM,YAAY,GAAG,SAAS,CAAC;AAM/B,SAAgB,oBAAoB,CAAC,UAAiC,EAAE;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAA,6BAAmB,GAAE,CAAC;IAEpC,MAAM,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;QACjC,SAAS,EAAE,0BAAgB;QAC3B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,gBAAgB,EAAE,sBAAY;QAC9B,eAAe,EAAE,qBAAW;QAC5B,SAAS,EAAE,sBAAY;QACvB,SAAS,EAAE,qBAAW;QACtB,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QAC5D,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5B,SAAS,EAAE,0BAAgB;QAC3B,QAAQ,EAAE,0BAAgB;QAC1B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KACvC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;QAC5B,QAAQ,EAAE,0BAAgB;QAC1B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KACvC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,IAAA,0BAAgB,EAAC,KAAK,CAAC,OAAO,EAAE;YAClC;;;;;;;;;;;;;;;aAeC;YACD;;;;;;;;;;;;;;;;;aAiBC;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,OAA4C,EAAE,GAAQ,EAAE,EAAE;QACnF,MAAM,KAAK,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/H,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,CAAC,SAAS,iBAAiB,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB;;0DAE8C,EAC9C;YACI,OAAO,CAAC,SAAS;YACjB,KAAK;YACL,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,KAAK;YACb,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,eAAe;YACvB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,eAAe,IAAI,IAAI;YAC/B,CAAC;YACD,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,eAAe,EAAE,OAAO,EAAE;YACnE,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE;gBACF,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK;aACR;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,OAAuC,EAAE,GAAQ,EAAE,EAAE;QAC/E,MAAM,MAAM,GAAG,IAAA,8BAAoB,EAAC,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACtH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,CAAC,SAAS,iBAAiB,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACpD,CAAC;QAED,IAAA,4BAAkB,EAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC1E,IAAI,IAAA,qBAAW,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,wBAAc,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACvG,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACrE,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACtC,6DAA6D,EAC7D,CAAC,OAAO,CAAC,QAAQ,CAAC,CACrB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,QAAQ,iBAAiB,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB;;;gEAGoD,EACpD;YACI,OAAO,CAAC,QAAQ;YAChB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,KAAK;YACb,MAAM;YACN,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,KAAK;YACZ,OAAO,CAAC,MAAM;YACd,OAAO,CAAC,KAAK;YACb,GAAG,CAAC,KAAK,CAAC,IAAI;YACd,MAAM;YACN,QAAQ;YACR,OAAO,CAAC,IAAI,IAAI,EAAE;YAClB,IAAI,IAAI,EAAE;YACV,IAAI,IAAI,EAAE;SACb,CACJ,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE;YACpE,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE;gBACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM;gBACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,MAAM,CAAC,KAAK;aAC5B;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,OAAuC,EAAE,GAAQ,EAAE,EAAE;QAC9E,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,QAAQ,iBAAiB,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,uFAAuF,EACvF,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAChF,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE;YACnE,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE;gBACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,WAAW,EAAE,MAAM;gBACnB,QAAQ,EAAE,MAAM,CAAC,SAAS;aAC7B;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,OAAuC,EAAE,GAAQ,EAAE,EAAE;QAC5E,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,CAAC,QAAQ,iBAAiB,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACnE,CAAC;QACL,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CACrB,uFAAuF,EACvF,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAC9E,CAAC;QAEF,MAAM,IAAA,2BAAiB,EAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE;YACjE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE;gBACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;aACxB;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,aAAa,EAAE,IAAA,iBAAM,EAAC,aAAa,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YAC7F,cAAc,EAAE,IAAA,iBAAM,EAAC,cAAc,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;YAC9F,aAAa,EAAE,IAAA,iBAAM,EAAC,aAAa,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YACxF,WAAW,EAAE,IAAA,iBAAM,EAAC,WAAW,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;SACjG;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface RevenueSplitContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createRevenueSplitContract(options?: RevenueSplitContractOptions): import("..").ContractDefinition;