@sly-rentals/core 1.0.0 → 1.1.1
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.
- package/README.md +76 -163
- package/dist/api.json +8097 -3912
- package/dist/cjs/audit/events-registry.js +86 -0
- package/dist/cjs/audit/events-registry.js.map +1 -0
- package/dist/cjs/audit/index.js +8 -1
- package/dist/cjs/audit/index.js.map +1 -1
- package/dist/cjs/audit/listener.js +219 -0
- package/dist/cjs/audit/listener.js.map +1 -0
- package/dist/cjs/instructions/acceptRental.js +6 -1
- package/dist/cjs/instructions/acceptRental.js.map +1 -1
- package/dist/cjs/instructions/closeRental.js +7 -0
- package/dist/cjs/instructions/closeRental.js.map +1 -1
- package/dist/cjs/instructions/reserveRental.js +2 -1
- package/dist/cjs/instructions/reserveRental.js.map +1 -1
- package/dist/cjs/kit/index.js +10 -1
- package/dist/cjs/kit/index.js.map +1 -1
- package/dist/cjs/legacy/index.js +7 -1
- package/dist/cjs/legacy/index.js.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/utils/config.js +16 -0
- package/dist/cjs/utils/config.js.map +1 -1
- package/dist/cjs/utils/index.js +5 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/referrer.js +48 -0
- package/dist/cjs/utils/referrer.js.map +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/esm/audit/events-registry.js +83 -0
- package/dist/esm/audit/events-registry.js.map +1 -0
- package/dist/esm/audit/index.js +2 -0
- package/dist/esm/audit/index.js.map +1 -1
- package/dist/esm/audit/listener.js +213 -0
- package/dist/esm/audit/listener.js.map +1 -0
- package/dist/esm/instructions/acceptRental.js +6 -1
- package/dist/esm/instructions/acceptRental.js.map +1 -1
- package/dist/esm/instructions/closeRental.js +7 -0
- package/dist/esm/instructions/closeRental.js.map +1 -1
- package/dist/esm/instructions/reserveRental.js +2 -1
- package/dist/esm/instructions/reserveRental.js.map +1 -1
- package/dist/esm/kit/index.js +5 -0
- package/dist/esm/kit/index.js.map +1 -1
- package/dist/esm/legacy/index.js +2 -0
- package/dist/esm/legacy/index.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/utils/config.js +14 -0
- package/dist/esm/utils/config.js.map +1 -1
- package/dist/esm/utils/index.js +2 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/referrer.js +44 -0
- package/dist/esm/utils/referrer.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/types/audit/events-registry.d.ts +71 -0
- package/dist/types/audit/events-registry.d.ts.map +1 -0
- package/dist/types/audit/index.d.ts +4 -0
- package/dist/types/audit/index.d.ts.map +1 -1
- package/dist/types/audit/listener.d.ts +127 -0
- package/dist/types/audit/listener.d.ts.map +1 -0
- package/dist/types/instructions/acceptRental.d.ts.map +1 -1
- package/dist/types/instructions/closeRental.d.ts.map +1 -1
- package/dist/types/instructions/reserveRental.d.ts.map +1 -1
- package/dist/types/kit/index.d.ts +2 -0
- package/dist/types/kit/index.d.ts.map +1 -1
- package/dist/types/legacy/index.d.ts +3 -0
- package/dist/types/legacy/index.d.ts.map +1 -1
- package/dist/types/utils/config.d.ts +29 -0
- package/dist/types/utils/config.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/referrer.d.ts +24 -0
- package/dist/types/utils/referrer.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
package/dist/cjs/utils/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module utils
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.deserializeDiscountAuth = exports.createDiscount = exports.getMinimumBid = exports.computeMinimumBid = exports.hasQueuedRental = exports.hasActiveRental = exports.getLookupTableAddress = exports.fetchLookupTable = exports.isRpcDebugEnabled = exports.setRpcDebug = exports.createRpc = exports.InstructionResult = exports.prepareInstructions = exports.toAddress = exports.toWeb3Instruction = exports.isAddressString = exports.isKitSigner = exports.isWeb3jsSigner = exports.validateAddress = exports.toTransactionSigner = exports.ATLASNET_ADDRESSES = exports.MAINNET_ADDRESSES = exports.ATLASNET_GENESIS = exports.DEVNET_GENESIS = exports.MAINNET_GENESIS = exports.resolveGenesisHash = exports.isValidNetwork = exports.isValidProgramSet = exports.getNetworkAddresses = exports.getProgramAddresses = exports.detectProgramSet = exports.getRpcUrl = exports.getAffiliateConfig = exports.getAddresses = exports.mergeConfig = exports.clearSdkConfig = exports.getSdkConfig = exports.setSdkConfig = void 0;
|
|
7
|
+
exports.requireValidReferrer = exports.resolveReferrer = exports.deserializeDiscountAuth = exports.createDiscount = exports.getMinimumBid = exports.computeMinimumBid = exports.hasQueuedRental = exports.hasActiveRental = exports.getLookupTableAddress = exports.fetchLookupTable = exports.isRpcDebugEnabled = exports.setRpcDebug = exports.createRpc = exports.InstructionResult = exports.prepareInstructions = exports.toAddress = exports.toWeb3Instruction = exports.isAddressString = exports.isKitSigner = exports.isWeb3jsSigner = exports.validateAddress = exports.toTransactionSigner = exports.ATLASNET_ADDRESSES = exports.MAINNET_ADDRESSES = exports.ATLASNET_GENESIS = exports.DEVNET_GENESIS = exports.MAINNET_GENESIS = exports.resolveGenesisHash = exports.isValidNetwork = exports.isValidProgramSet = exports.getNetworkAddresses = exports.getProgramAddresses = exports.detectProgramSet = exports.getRpcUrl = exports.getAffiliateConfig = exports.getAddresses = exports.mergeConfig = exports.clearSdkConfig = exports.getSdkConfig = exports.setSdkConfig = void 0;
|
|
8
8
|
// Configuration
|
|
9
9
|
var config_1 = require("./config");
|
|
10
10
|
Object.defineProperty(exports, "setSdkConfig", { enumerable: true, get: function () { return config_1.setSdkConfig; } });
|
|
@@ -65,4 +65,8 @@ Object.defineProperty(exports, "getMinimumBid", { enumerable: true, get: functio
|
|
|
65
65
|
var discountAuth_1 = require("./discountAuth");
|
|
66
66
|
Object.defineProperty(exports, "createDiscount", { enumerable: true, get: function () { return discountAuth_1.createDiscount; } });
|
|
67
67
|
Object.defineProperty(exports, "deserializeDiscountAuth", { enumerable: true, get: function () { return discountAuth_1.deserializeDiscountAuth; } });
|
|
68
|
+
// Referrer (Affiliate MemberState) validation
|
|
69
|
+
var referrer_1 = require("./referrer");
|
|
70
|
+
Object.defineProperty(exports, "resolveReferrer", { enumerable: true, get: function () { return referrer_1.resolveReferrer; } });
|
|
71
|
+
Object.defineProperty(exports, "requireValidReferrer", { enumerable: true, get: function () { return referrer_1.requireValidReferrer; } });
|
|
68
72
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,gBAAgB;AAChB,mCAYkB;AAXhB,sGAAA,YAAY,OAAA;AACZ,sGAAA,YAAY,OAAA;AACZ,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,sGAAA,YAAY,OAAA;AACZ,4GAAA,kBAAkB,OAAA;AAClB,mGAAA,SAAS,OAAA;AACT,0GAAA,gBAAgB,OAAA;AAMlB,oBAAoB;AACpB,yCAeqB;AAdnB,gHAAA,mBAAmB,OAAA;AACnB,gHAAA,mBAAmB,OAAA;AACnB,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAOpB,mBAAmB;AACnB,mCAOkB;AANhB,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AACf,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,yGAAA,eAAe,OAAA;AAIjB,wBAAwB;AACxB,mCAMkB;AALhB,2GAAA,iBAAiB,OAAA;AACjB,mGAAA,SAAS,OAAA;AAMX,wBAAwB;AACxB,+CAAsF;AAA7E,mHAAA,mBAAmB,OAAA;AAE5B,qBAAqB;AACrB,yDAAgF;AAAvE,sHAAA,iBAAiB,OAAA;AAE1B,gBAAgB;AAChB,6BAAkE;AAAzD,gGAAA,SAAS,OAAA;AAAE,kGAAA,WAAW,OAAA;AAAE,wGAAA,iBAAiB,OAAA;AAElD,iCAAiC;AACjC,6CAIuB;AAHrB,+GAAA,gBAAgB,OAAA;AAChB,oHAAA,qBAAqB,OAAA;AAIvB,mBAAmB;AACnB,mCAA4D;AAAnD,yGAAA,eAAe,OAAA;AAAE,yGAAA,eAAe,OAAA;AAEzC,WAAW;AACX,qCAA8E;AAArE,4GAAA,iBAAiB,OAAA;AAAE,wGAAA,aAAa,OAAA;AAEzC,yBAAyB;AACzB,+CAMwB;AALtB,8GAAA,cAAc,OAAA;AACd,uHAAA,uBAAuB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,gBAAgB;AAChB,mCAYkB;AAXhB,sGAAA,YAAY,OAAA;AACZ,sGAAA,YAAY,OAAA;AACZ,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,sGAAA,YAAY,OAAA;AACZ,4GAAA,kBAAkB,OAAA;AAClB,mGAAA,SAAS,OAAA;AACT,0GAAA,gBAAgB,OAAA;AAMlB,oBAAoB;AACpB,yCAeqB;AAdnB,gHAAA,mBAAmB,OAAA;AACnB,gHAAA,mBAAmB,OAAA;AACnB,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,6GAAA,gBAAgB,OAAA;AAChB,8GAAA,iBAAiB,OAAA;AACjB,+GAAA,kBAAkB,OAAA;AAOpB,mBAAmB;AACnB,mCAOkB;AANhB,6GAAA,mBAAmB,OAAA;AACnB,yGAAA,eAAe,OAAA;AACf,wGAAA,cAAc,OAAA;AACd,qGAAA,WAAW,OAAA;AACX,yGAAA,eAAe,OAAA;AAIjB,wBAAwB;AACxB,mCAMkB;AALhB,2GAAA,iBAAiB,OAAA;AACjB,mGAAA,SAAS,OAAA;AAMX,wBAAwB;AACxB,+CAAsF;AAA7E,mHAAA,mBAAmB,OAAA;AAE5B,qBAAqB;AACrB,yDAAgF;AAAvE,sHAAA,iBAAiB,OAAA;AAE1B,gBAAgB;AAChB,6BAAkE;AAAzD,gGAAA,SAAS,OAAA;AAAE,kGAAA,WAAW,OAAA;AAAE,wGAAA,iBAAiB,OAAA;AAElD,iCAAiC;AACjC,6CAIuB;AAHrB,+GAAA,gBAAgB,OAAA;AAChB,oHAAA,qBAAqB,OAAA;AAIvB,mBAAmB;AACnB,mCAA4D;AAAnD,yGAAA,eAAe,OAAA;AAAE,yGAAA,eAAe,OAAA;AAEzC,WAAW;AACX,qCAA8E;AAArE,4GAAA,iBAAiB,OAAA;AAAE,wGAAA,aAAa,OAAA;AAEzC,yBAAyB;AACzB,+CAMwB;AALtB,8GAAA,cAAc,OAAA;AACd,uHAAA,uBAAuB,OAAA;AAMzB,8CAA8C;AAC9C,uCAAmE;AAA1D,2GAAA,eAAe,OAAA;AAAE,gHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @purpose Referrer (affiliate MemberState) validation helpers
|
|
4
|
+
*
|
|
5
|
+
* Wraps slyvault `MemberState` lookups so callers can either fail fast
|
|
6
|
+
* (`requireValidReferrer`) when the user supplies a bad pubkey, or silently
|
|
7
|
+
* downgrade to no-referrer (`resolveReferrer`) when the on-chain rental
|
|
8
|
+
* carries a stale pointer. Mirrors the on-chain `validate_referrer` helper
|
|
9
|
+
* in `rust/programs/srsly/src/utils.rs`.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.resolveReferrer = resolveReferrer;
|
|
13
|
+
exports.requireValidReferrer = requireValidReferrer;
|
|
14
|
+
const vault_1 = require("@sly-rentals/vault");
|
|
15
|
+
/**
|
|
16
|
+
* Validate a referrer address points to an Affiliate `MemberState` in the
|
|
17
|
+
* given vault. Returns the address when valid, `undefined` otherwise.
|
|
18
|
+
* Never throws — use at read sites where a stale referrer must not break
|
|
19
|
+
* the surrounding flow.
|
|
20
|
+
*/
|
|
21
|
+
async function resolveReferrer(referrer, expectedVault, rpcUrl) {
|
|
22
|
+
if (!referrer)
|
|
23
|
+
return undefined;
|
|
24
|
+
try {
|
|
25
|
+
const member = await (0, vault_1.fetchMember)(referrer, rpcUrl);
|
|
26
|
+
if (member.data.vault !== expectedVault)
|
|
27
|
+
return undefined;
|
|
28
|
+
if (member.data.memberType.__kind !== 'Affiliate')
|
|
29
|
+
return undefined;
|
|
30
|
+
return referrer;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Strict variant of {@link resolveReferrer}. Throws a descriptive error when
|
|
38
|
+
* the referrer fails validation. Use at write sites (reserve / accept) where
|
|
39
|
+
* a caller-supplied referrer should fail fast rather than be silently dropped.
|
|
40
|
+
*/
|
|
41
|
+
async function requireValidReferrer(referrer, expectedVault, rpcUrl) {
|
|
42
|
+
const resolved = await resolveReferrer(referrer, expectedVault, rpcUrl);
|
|
43
|
+
if (!resolved) {
|
|
44
|
+
throw new Error(`Invalid referrer ${referrer}: not an Affiliate MemberState in vault ${expectedVault}`);
|
|
45
|
+
}
|
|
46
|
+
return resolved;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=referrer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referrer.js","sourceRoot":"","sources":["../../../src/utils/referrer.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAWH,0CAcC;AAOD,oDAYC;AAzCD,8CAAiD;AAEjD;;;;;GAKG;AACI,KAAK,UAAU,eAAe,CACnC,QAA6B,EAC7B,aAAsB,EACtB,MAAe;IAEf,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAW,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAC1D,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC;QACpE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,oBAAoB,CACxC,QAAiB,EACjB,aAAsB,EACtB,MAAe;IAEf,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,oBAAoB,QAAQ,2CAA2C,aAAa,EAAE,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/cjs/version.js
CHANGED
|
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
// Auto-generated from package.json - DO NOT EDIT
|
|
5
5
|
// Run "pnpm run generate:version" to update
|
|
6
|
-
exports.VERSION = '1.
|
|
6
|
+
exports.VERSION = '1.1.1';
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed namespace tree for the SRSLY event listener.
|
|
3
|
+
*
|
|
4
|
+
* Built once from a const manifest mapping each event's IDL name to a
|
|
5
|
+
* `{ group, verb }` pair. The TypeScript type derives the entire dotted
|
|
6
|
+
* namespace shape from that manifest, so consumers get autocomplete on
|
|
7
|
+
* every event without us hand-rolling an interface — and adding a new
|
|
8
|
+
* event in the future only requires:
|
|
9
|
+
*
|
|
10
|
+
* 1. Append a row to `EVENT_MANIFEST`.
|
|
11
|
+
* 2. Add a decoder in `events.ts`.
|
|
12
|
+
* 3. Extend the `AuditEvent` union in `types.ts`.
|
|
13
|
+
*
|
|
14
|
+
* The runtime tree is generated alongside the type so they can never drift.
|
|
15
|
+
*/
|
|
16
|
+
import { onSrslyEvent } from './listener';
|
|
17
|
+
// Single source of truth — tuple form keeps the type literal so we can
|
|
18
|
+
// derive the namespace shape at the type level. Order: [IDL name, group,
|
|
19
|
+
// verb]. New events extend by appending here.
|
|
20
|
+
const EVENT_MANIFEST = [
|
|
21
|
+
['RentalAccepted', 'rental', 'accepted'],
|
|
22
|
+
['RentalSettled', 'rental', 'settled'],
|
|
23
|
+
['RentalCancelled', 'rental', 'cancelled'],
|
|
24
|
+
['RentalClosed', 'rental', 'closed'],
|
|
25
|
+
['OwnerPaid', 'owner', 'paid'],
|
|
26
|
+
['FeesPaid', 'fees', 'paid'],
|
|
27
|
+
];
|
|
28
|
+
function nameChannel(name) {
|
|
29
|
+
return {
|
|
30
|
+
on: handler => onSrslyEvent(name, handler),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function allChannel() {
|
|
34
|
+
return {
|
|
35
|
+
on: handler => onSrslyEvent('*', handler),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function groupChannel(group) {
|
|
39
|
+
// Group-level "all" filters the global stream by manifest membership so a
|
|
40
|
+
// handler registered on `events.rental.all` only sees rental events even
|
|
41
|
+
// if a new top-level event ships later.
|
|
42
|
+
const memberNames = new Set(EVENT_MANIFEST.filter(([, g]) => g === group).map(([n]) => n));
|
|
43
|
+
return {
|
|
44
|
+
on: handler => {
|
|
45
|
+
return onSrslyEvent('*', evt => {
|
|
46
|
+
if (memberNames.has(evt.type))
|
|
47
|
+
handler(evt);
|
|
48
|
+
});
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function buildTree() {
|
|
53
|
+
// Object literal — typed loosely while building, asserted to the derived
|
|
54
|
+
// tree shape at the end. Shape is guaranteed by the manifest iteration.
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
const tree = { all: allChannel() };
|
|
57
|
+
for (const [name, group, verb] of EVENT_MANIFEST) {
|
|
58
|
+
if (!tree[group])
|
|
59
|
+
tree[group] = { all: groupChannel(group) };
|
|
60
|
+
tree[group][verb] = nameChannel(name);
|
|
61
|
+
}
|
|
62
|
+
return tree;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Typed event tree. Use the deepest path you need — the handler arg is
|
|
66
|
+
* narrowed accordingly:
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* import { events } from '@sly-rentals/core';
|
|
71
|
+
*
|
|
72
|
+
* // Single event
|
|
73
|
+
* events.rental.accepted.on(evt => evt.escrow);
|
|
74
|
+
*
|
|
75
|
+
* // Group-scoped catch-all
|
|
76
|
+
* events.rental.all.on(evt => evt.type); // 'RentalAccepted' | 'RentalSettled' | …
|
|
77
|
+
*
|
|
78
|
+
* // Global catch-all
|
|
79
|
+
* events.all.on(evt => evt.signature);
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export const events = buildTree();
|
|
83
|
+
//# sourceMappingURL=events-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-registry.js","sourceRoot":"","sources":["../../../src/audit/events-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,uEAAuE;AACvE,yEAAyE;AACzE,8CAA8C;AAC9C,MAAM,cAAc,GAAG;IACrB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxC,CAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,CAAC;IACtC,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,CAAC;IAC1C,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC;IACpC,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC;IAC9B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;CACpB,CAAC;AAsCX,SAAS,WAAW,CAAC,IAAoB;IACvC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,IAAa,EAAE,OAAgB,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,0EAA0E;IAC1E,yEAAyE;IACzE,wCAAwC;IACxC,MAAM,WAAW,GAAgB,IAAI,GAAG,CACtC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC9D,CAAC;IACF,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACZ,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBAC7B,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,yEAAyE;IACzE,wEAAwE;IACxE,8DAA8D;IAC9D,MAAM,IAAI,GAAwB,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,cAAc,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAsB,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAkB,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAe,SAAS,EAAE,CAAC"}
|
package/dist/esm/audit/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { fetchContractAudit } from './audit';
|
|
2
2
|
export { parseAnchorEvents } from './events';
|
|
3
|
+
export { closeSrslyEventListener, createSrslyEventListener, getEventsFromTx, onSrslyEvent, } from './listener';
|
|
4
|
+
export { events } from './events-registry';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SRSLY event listener — plug-and-play wrapper over `parseAnchorEvents` that
|
|
3
|
+
* lets a developer subscribe to the program's emitted events without ever
|
|
4
|
+
* importing Anchor or the IDL.
|
|
5
|
+
*
|
|
6
|
+
* Two ingest paths share one dispatch table:
|
|
7
|
+
*
|
|
8
|
+
* - Live stream: register a handler with `onSrslyEvent(name, cb)`. The SDK
|
|
9
|
+
* opens (and lazily caches) a singleton `logsNotifications` subscription
|
|
10
|
+
* using the `wsUrl` from `setSdkConfig`. No listener instance to manage —
|
|
11
|
+
* drop your handlers and go.
|
|
12
|
+
* - Per-signature: pass a tx signature to `getEventsFromTx(sig)` to fetch
|
|
13
|
+
* the confirmed transaction, parse its logs, and get back the typed
|
|
14
|
+
* event array. Same handlers fire as for the live stream.
|
|
15
|
+
*
|
|
16
|
+
* Kit-only by design: events are SRSLY's, so there's no value in shipping a
|
|
17
|
+
* web3.js variant. Consumers that already have `@solana/kit` (everyone using
|
|
18
|
+
* this package) get the listener for free.
|
|
19
|
+
*
|
|
20
|
+
* For advanced cases — multiple isolated listeners, custom program IDs,
|
|
21
|
+
* test fixtures — `createSrslyEventListener()` is exported as the
|
|
22
|
+
* underlying primitive.
|
|
23
|
+
*/
|
|
24
|
+
import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';
|
|
25
|
+
import { parseAnchorEvents } from './events';
|
|
26
|
+
import { SRSLY_PROGRAM_ADDRESS } from '../generated/codama/programs/srsly';
|
|
27
|
+
import { getRpcUrl, getWsUrl, isEventsListenerEnabled } from '../utils/config';
|
|
28
|
+
/**
|
|
29
|
+
* Underlying listener primitive. Most consumers should reach for
|
|
30
|
+
* `onSrslyEvent` / `getEventsFromTx` instead — those bind to `setSdkConfig`
|
|
31
|
+
* automatically. Use this when you need multiple isolated listeners, a
|
|
32
|
+
* non-default program ID, or test injection.
|
|
33
|
+
*/
|
|
34
|
+
export function createSrslyEventListener(opts = {}) {
|
|
35
|
+
const programId = String(opts.programId ?? SRSLY_PROGRAM_ADDRESS);
|
|
36
|
+
const handlers = new Map();
|
|
37
|
+
let abort = null;
|
|
38
|
+
let drain = null;
|
|
39
|
+
function dispatch(events) {
|
|
40
|
+
for (const evt of events) {
|
|
41
|
+
handlers.get(evt.type)?.forEach(cb => {
|
|
42
|
+
try {
|
|
43
|
+
cb(evt);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
console.error('[srsly:listener] handler threw for', evt.type, err);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
handlers.get('*')?.forEach(cb => {
|
|
51
|
+
try {
|
|
52
|
+
cb(evt);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
// eslint-disable-next-line no-console
|
|
56
|
+
console.error('[srsly:listener] * handler threw', err);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function on(name, handler) {
|
|
62
|
+
let set = handlers.get(name);
|
|
63
|
+
if (!set) {
|
|
64
|
+
set = new Set();
|
|
65
|
+
handlers.set(name, set);
|
|
66
|
+
}
|
|
67
|
+
set.add(handler);
|
|
68
|
+
return () => set.delete(handler);
|
|
69
|
+
}
|
|
70
|
+
async function start(o) {
|
|
71
|
+
if (abort)
|
|
72
|
+
return;
|
|
73
|
+
abort = new AbortController();
|
|
74
|
+
const commitment = o.commitment ?? 'confirmed';
|
|
75
|
+
let stream;
|
|
76
|
+
try {
|
|
77
|
+
stream = (await o.rpcSubscriptions
|
|
78
|
+
.logsNotifications({ mentions: [programId] }, { commitment })
|
|
79
|
+
.subscribe({ abortSignal: abort.signal }));
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
// WS connect failure (RPC doesn't support logsSubscribe, network down,
|
|
83
|
+
// CORS, etc.). Stay inert so HTTP-only callers of `getEventsFromTx`
|
|
84
|
+
// still work. Reset abort so a later `start` can retry.
|
|
85
|
+
abort = null;
|
|
86
|
+
// eslint-disable-next-line no-console
|
|
87
|
+
console.warn('[srsly] event listener disabled — WS connect failed:', err);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
drain = (async () => {
|
|
91
|
+
try {
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
93
|
+
for await (const msg of stream) {
|
|
94
|
+
const value = msg?.value;
|
|
95
|
+
const slot = msg?.context?.slot;
|
|
96
|
+
if (!value || slot === undefined)
|
|
97
|
+
continue;
|
|
98
|
+
if (value.err)
|
|
99
|
+
continue;
|
|
100
|
+
const events = parseAnchorEvents(value.logs, programId, BigInt(slot), String(value.signature));
|
|
101
|
+
dispatch(events);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// AbortError on close, or socket-level disconnects.
|
|
106
|
+
}
|
|
107
|
+
})();
|
|
108
|
+
}
|
|
109
|
+
async function process(signature, o) {
|
|
110
|
+
const tx = await o.rpc
|
|
111
|
+
.getTransaction(signature, {
|
|
112
|
+
encoding: 'json',
|
|
113
|
+
maxSupportedTransactionVersion: 0,
|
|
114
|
+
commitment: o.commitment ?? 'confirmed',
|
|
115
|
+
})
|
|
116
|
+
.send();
|
|
117
|
+
if (!tx?.meta?.logMessages)
|
|
118
|
+
return [];
|
|
119
|
+
const events = parseAnchorEvents(tx.meta.logMessages, programId, BigInt(tx.slot), signature);
|
|
120
|
+
dispatch(events);
|
|
121
|
+
return events;
|
|
122
|
+
}
|
|
123
|
+
async function close() {
|
|
124
|
+
abort?.abort();
|
|
125
|
+
abort = null;
|
|
126
|
+
if (drain)
|
|
127
|
+
await drain;
|
|
128
|
+
drain = null;
|
|
129
|
+
handlers.clear();
|
|
130
|
+
}
|
|
131
|
+
return { on: on, start, process, close };
|
|
132
|
+
}
|
|
133
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
134
|
+
// Config-bound singleton — what most consumers should reach for
|
|
135
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
136
|
+
let singleton = null;
|
|
137
|
+
let singletonStarted = null;
|
|
138
|
+
function getSingleton() {
|
|
139
|
+
if (!singleton)
|
|
140
|
+
singleton = createSrslyEventListener();
|
|
141
|
+
return singleton;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Lazily open the live stream when `setSdkConfig({ eventsListener: true })`
|
|
145
|
+
* is set. Idempotent — the second call returns the same start promise.
|
|
146
|
+
* No-op when the listener is disabled, so on-demand `getEventsFromTx` calls
|
|
147
|
+
* still work against the HTTP RPC alone.
|
|
148
|
+
*
|
|
149
|
+
* Throws if `eventsListener` is on but no `wsUrl` is configured — the failure
|
|
150
|
+
* is louder this way than a silently-no-op listener.
|
|
151
|
+
*/
|
|
152
|
+
async function ensureLiveStream() {
|
|
153
|
+
if (!isEventsListenerEnabled())
|
|
154
|
+
return false;
|
|
155
|
+
const wsUrl = getWsUrl();
|
|
156
|
+
if (!wsUrl) {
|
|
157
|
+
throw new Error('setSdkConfig({ eventsListener: true }) requires a wsUrl. ' +
|
|
158
|
+
'Set both fields together, or leave eventsListener unset for HTTP-only mode.');
|
|
159
|
+
}
|
|
160
|
+
if (singletonStarted) {
|
|
161
|
+
await singletonStarted;
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
const listener = getSingleton();
|
|
165
|
+
singletonStarted = listener.start({
|
|
166
|
+
rpcSubscriptions: createSolanaRpcSubscriptions(wsUrl),
|
|
167
|
+
});
|
|
168
|
+
await singletonStarted;
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
export function onSrslyEvent(name,
|
|
172
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
173
|
+
handler) {
|
|
174
|
+
const off = getSingleton().on(name, handler);
|
|
175
|
+
// Fire-and-forget: kick off the WS subscription if configured. We don't
|
|
176
|
+
// block the caller on the connect — events that arrive before the socket
|
|
177
|
+
// is ready are simply not seen, which matches existing kit semantics.
|
|
178
|
+
void ensureLiveStream();
|
|
179
|
+
return off;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Pull and parse SRSLY events from a single confirmed transaction signature.
|
|
183
|
+
* Uses the `rpcUrl` from `setSdkConfig` unless an override is passed.
|
|
184
|
+
*
|
|
185
|
+
* Dispatches into the same singleton handler registry that `onSrslyEvent`
|
|
186
|
+
* subscribes to — so a handler registered once will fire for both live
|
|
187
|
+
* events and per-signature lookups.
|
|
188
|
+
*
|
|
189
|
+
* @example Right after submitting an instruction
|
|
190
|
+
* ```ts
|
|
191
|
+
* const ixs = await acceptRental(params);
|
|
192
|
+
* const sig = await wallet.sendAndConfirm(ixs);
|
|
193
|
+
* const events = await getEventsFromTx(sig);
|
|
194
|
+
* const accepted = events.find(e => e.type === 'RentalAccepted');
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
export async function getEventsFromTx(signature, opts = {}) {
|
|
198
|
+
const rpc = createSolanaRpc(opts.rpcUrl ?? getRpcUrl());
|
|
199
|
+
return getSingleton().process(signature, { rpc, commitment: opts.commitment });
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Tear down the singleton listener, close the WS subscription if open, and
|
|
203
|
+
* clear all handlers. Call this in test teardown or app shutdown — most apps
|
|
204
|
+
* never need to.
|
|
205
|
+
*/
|
|
206
|
+
export async function closeSrslyEventListener() {
|
|
207
|
+
if (!singleton)
|
|
208
|
+
return;
|
|
209
|
+
await singleton.close();
|
|
210
|
+
singleton = null;
|
|
211
|
+
singletonStarted = null;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/audit/listener.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAwD/E;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAqC,EAAE;IAEvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,qBAAqB,CAAC,CAAC;IAGlE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC1D,IAAI,KAAK,GAA2B,IAAI,CAAC;IACzC,IAAI,KAAK,GAAyB,IAAI,CAAC;IAEvC,SAAS,QAAQ,CAAC,MAAoB;QACpC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE;gBACnC,IAAI,CAAC;oBACH,EAAE,CAAC,GAAG,CAAC,CAAC;gBACV,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE;gBAC9B,IAAI,CAAC;oBACH,EAAE,CAAC,GAAG,CAAC,CAAC;gBACV,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS,EAAE,CAAC,IAA0B,EAAE,OAAW;QACjD,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,EAAE,CAAC,GAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,UAAU,KAAK,CAAC,CAAiB;QACpC,IAAI,KAAK;YAAE,OAAO;QAClB,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,WAAW,CAAC;QAE/C,IAAI,MAA8B,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,gBAAgB;iBAC/B,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;iBAC5D,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAA2B,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uEAAuE;YACvE,oEAAoE;YACpE,wDAAwD;YACxD,KAAK,GAAG,IAAI,CAAC;YACb,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAA4B,EAAE,CAAC;oBACrD,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;oBACzB,MAAM,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC;oBAChC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,SAAS;wBAAE,SAAS;oBAC3C,IAAI,KAAK,CAAC,GAAG;wBAAE,SAAS;oBACxB,MAAM,MAAM,GAAG,iBAAiB,CAC9B,KAAK,CAAC,IAAyB,EAC/B,SAAS,EACT,MAAM,CAAC,IAAI,CAAC,EACZ,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CACxB,CAAC;oBACF,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oDAAoD;YACtD,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,SAAiB,EAAE,CAAmB;QAC3D,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG;aACnB,cAAc,CAAC,SAAS,EAAE;YACzB,QAAQ,EAAE,MAAM;YAChB,8BAA8B,EAAE,CAAC;YACjC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,WAAW;SACxC,CAAC;aACD,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,iBAAiB,CAC9B,EAAE,CAAC,IAAI,CAAC,WAAgC,EACxC,SAAS,EACT,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EACf,SAAS,CACV,CAAC;QACF,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,KAAK;QAClB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,KAAK,GAAG,IAAI,CAAC;QACb,IAAI,KAAK;YAAE,MAAM,KAAK,CAAC;QACvB,KAAK,GAAG,IAAI,CAAC;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,EAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvE,CAAC;AAED,4EAA4E;AAC5E,gEAAgE;AAChE,4EAA4E;AAE5E,IAAI,SAAS,GAA8B,IAAI,CAAC;AAChD,IAAI,gBAAgB,GAAyB,IAAI,CAAC;AAElD,SAAS,YAAY;IACnB,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,wBAAwB,EAAE,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC,uBAAuB,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,2DAA2D;YACzD,6EAA6E,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,gBAAgB,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC;QAChC,gBAAgB,EAAE,4BAA4B,CAAC,KAA0B,CAAC;KAC3E,CAAC,CAAC;IACH,MAAM,gBAAgB,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AA6BD,MAAM,UAAU,YAAY,CAC1B,IAA0B;AAC1B,8DAA8D;AAC9D,OAAY;IAEZ,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC,EAAE,CAAC,IAAsB,EAAE,OAAO,CAAC,CAAC;IAC/D,wEAAwE;IACxE,yEAAyE;IACzE,sEAAsE;IACtE,KAAK,gBAAgB,EAAE,CAAC;IACxB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,OAA6D,EAAE;IAE/D,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACxD,OAAO,YAAY,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACjF,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IACxB,SAAS,GAAG,IAAI,CAAC;IACjB,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC"}
|
|
@@ -22,6 +22,7 @@ import { deriveContractThread, deriveFiber } from '../pda/thread';
|
|
|
22
22
|
import { prepareInstructions } from '../utils/instructions';
|
|
23
23
|
import { RentalStatus } from '../generated/codama/types';
|
|
24
24
|
import { deserializeDiscountAuth } from '../utils/discountAuth';
|
|
25
|
+
import { resolveReferrer, requireValidReferrer } from '../utils/referrer';
|
|
25
26
|
/**
|
|
26
27
|
* Activate a rental: transfer fleet control to the borrower for the
|
|
27
28
|
* chosen duration and pay the first period's rate.
|
|
@@ -114,6 +115,10 @@ export async function acceptRental(params, config) {
|
|
|
114
115
|
expiredReferrer = isOption(activeRental.data.referrer)
|
|
115
116
|
? (unwrapOption(activeRental.data.referrer) ?? undefined)
|
|
116
117
|
: undefined;
|
|
118
|
+
// Defensive: drop a stale on-chain referrer the same way we do in
|
|
119
|
+
// closeRental — the expired rental's MemberState may be gone, and
|
|
120
|
+
// forwarding it would crash slyvault deposit during fees flush.
|
|
121
|
+
expiredReferrer = await resolveReferrer(expiredReferrer, address(configAccount.data.slyvault), finalConfig.rpcUrl);
|
|
117
122
|
expiredDiscountBps = activeRental.data.discountBps;
|
|
118
123
|
// Fetch expired borrower's managed ATA for discount refund
|
|
119
124
|
if (expiredDiscountBps > 0 && expiredReferrer) {
|
|
@@ -154,7 +159,7 @@ export async function acceptRental(params, config) {
|
|
|
154
159
|
const sageProgram = address(addresses.sage);
|
|
155
160
|
const programAddress = address(addresses.srsly);
|
|
156
161
|
const referrer = params.referrer
|
|
157
|
-
? address(params.referrer)
|
|
162
|
+
? await requireValidReferrer(address(params.referrer), address(configAccount.data.slyvault), finalConfig.rpcUrl)
|
|
158
163
|
: undefined;
|
|
159
164
|
// Derive contract token account (ATA of contract PDA)
|
|
160
165
|
const contractAddress = address(params.contract);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptRental.js","sourceRoot":"","sources":["../../../src/instructions/acceptRental.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAgB,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAA+B,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"acceptRental.js","sourceRoot":"","sources":["../../../src/instructions/acceptRental.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { fetchConfig } from '../accounts/config';
|
|
|
13
13
|
import { fetchContract } from '../accounts/contract';
|
|
14
14
|
import { fetchFleet } from '../accounts/fleet';
|
|
15
15
|
import { fetchRental } from '../accounts/rental';
|
|
16
|
+
import { resolveReferrer } from '../utils/referrer';
|
|
16
17
|
import { deriveGameAccounts } from '../pda/sage';
|
|
17
18
|
import { deriveActiveRental, deriveBorrowerState, deriveQueuedRental, deriveRentalAuthority, } from '../pda/srsly';
|
|
18
19
|
import { deriveContractThread, deriveFiber } from '../pda/thread';
|
|
@@ -83,6 +84,12 @@ export async function closeRental(params, config) {
|
|
|
83
84
|
referrer = isOption(rental.data.referrer)
|
|
84
85
|
? (unwrapOption(rental.data.referrer) ?? undefined)
|
|
85
86
|
: undefined;
|
|
87
|
+
// Stale referrer guard: the on-chain rental_state can carry a referrer
|
|
88
|
+
// pubkey whose AffiliateMember was deleted or never matched the current
|
|
89
|
+
// slyvault. Forwarding it would crash slyvault's deposit with
|
|
90
|
+
// AccountNotInitialized (3012) and wedge the fee flush. Drop silently
|
|
91
|
+
// when invalid — fee flush still works, no affiliate split.
|
|
92
|
+
referrer = await resolveReferrer(referrer, address(configAccount.data.slyvault), finalConfig.rpcUrl);
|
|
86
93
|
// Derive borrower state PDA
|
|
87
94
|
const borrowerState = await deriveBorrowerState(borrower);
|
|
88
95
|
// Fetch fleet to get faction and derive SAGE accounts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeRental.js","sourceRoot":"","sources":["../../../src/instructions/closeRental.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"closeRental.js","sourceRoot":"","sources":["../../../src/instructions/closeRental.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ import { deriveAssociatedTokenAccount } from '../pda/token';
|
|
|
22
22
|
import { deriveContractThread, deriveFiber } from '../pda/thread';
|
|
23
23
|
import { prepareInstructions } from '../utils/instructions';
|
|
24
24
|
import { getMinimumBid } from '../utils/bidMath';
|
|
25
|
+
import { requireValidReferrer } from '../utils/referrer';
|
|
25
26
|
/**
|
|
26
27
|
* Bid on a contract via the GBM-style reservation auction. The winner
|
|
27
28
|
* gets an exclusive window to accept once the current rental ends.
|
|
@@ -104,7 +105,7 @@ export async function reserveRental(params, config) {
|
|
|
104
105
|
// Convert duration to seconds
|
|
105
106
|
const durationSeconds = convertDuration(params.duration);
|
|
106
107
|
const referrer = params.referrer
|
|
107
|
-
? address(params.referrer)
|
|
108
|
+
? await requireValidReferrer(address(params.referrer), address(configAccount.data.slyvault), finalConfig.rpcUrl)
|
|
108
109
|
: undefined;
|
|
109
110
|
// Build instruction input
|
|
110
111
|
const instructionInput = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reserveRental.js","sourceRoot":"","sources":["../../../src/instructions/reserveRental.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAgB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"reserveRental.js","sourceRoot":"","sources":["../../../src/instructions/reserveRental.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/kit/index.js
CHANGED
|
@@ -25,4 +25,9 @@ export * from '../cost';
|
|
|
25
25
|
export { claim } from '@sly-rentals/vault';
|
|
26
26
|
export * as codama from '../generated/codama';
|
|
27
27
|
export * as audit from '../audit';
|
|
28
|
+
// Event listener helpers — bubbled up from `audit` so consumers can write
|
|
29
|
+
// `import { events, onSrslyEvent, getEventsFromTx } from '@sly-rentals/core'`
|
|
30
|
+
// without the audit namespace prefix. The full audit module is still
|
|
31
|
+
// accessible via `audit.*` for the parser primitives + report builder.
|
|
32
|
+
export { closeSrslyEventListener, events, getEventsFromTx, onSrslyEvent } from '../audit';
|
|
28
33
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAoB,MAAM,oBAAoB,CAAC;AAE7D,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAoB,MAAM,oBAAoB,CAAC;AAE7D,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,UAAU,CAAC;AAElC,0EAA0E;AAC1E,8EAA8E;AAC9E,qEAAqE;AACrE,uEAAuE;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/esm/legacy/index.js
CHANGED
|
@@ -31,6 +31,8 @@ export * from '../params';
|
|
|
31
31
|
export * from '../pda';
|
|
32
32
|
export { VERSION } from '../version';
|
|
33
33
|
export * as codama from '../generated/codama';
|
|
34
|
+
export * as audit from '../audit';
|
|
35
|
+
export { closeSrslyEventListener, events, getEventsFromTx, onSrslyEvent } from '../audit';
|
|
34
36
|
/**
|
|
35
37
|
* Wrapper that checks for PublicKey and provides helpful error
|
|
36
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/legacy/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAkD,MAAM,UAAU,CAAC;AACxF,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE5D,oDAAoD;AACpD,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/legacy/index.ts"],"names":[],"mappings":"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"}
|