@sly-rentals/core 1.0.0 → 1.1.0
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 +7636 -3857
- 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/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/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/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/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/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/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Typed namespace tree for the SRSLY event listener.
|
|
4
|
+
*
|
|
5
|
+
* Built once from a const manifest mapping each event's IDL name to a
|
|
6
|
+
* `{ group, verb }` pair. The TypeScript type derives the entire dotted
|
|
7
|
+
* namespace shape from that manifest, so consumers get autocomplete on
|
|
8
|
+
* every event without us hand-rolling an interface — and adding a new
|
|
9
|
+
* event in the future only requires:
|
|
10
|
+
*
|
|
11
|
+
* 1. Append a row to `EVENT_MANIFEST`.
|
|
12
|
+
* 2. Add a decoder in `events.ts`.
|
|
13
|
+
* 3. Extend the `AuditEvent` union in `types.ts`.
|
|
14
|
+
*
|
|
15
|
+
* The runtime tree is generated alongside the type so they can never drift.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.events = void 0;
|
|
19
|
+
const listener_1 = require("./listener");
|
|
20
|
+
// Single source of truth — tuple form keeps the type literal so we can
|
|
21
|
+
// derive the namespace shape at the type level. Order: [IDL name, group,
|
|
22
|
+
// verb]. New events extend by appending here.
|
|
23
|
+
const EVENT_MANIFEST = [
|
|
24
|
+
['RentalAccepted', 'rental', 'accepted'],
|
|
25
|
+
['RentalSettled', 'rental', 'settled'],
|
|
26
|
+
['RentalCancelled', 'rental', 'cancelled'],
|
|
27
|
+
['RentalClosed', 'rental', 'closed'],
|
|
28
|
+
['OwnerPaid', 'owner', 'paid'],
|
|
29
|
+
['FeesPaid', 'fees', 'paid'],
|
|
30
|
+
];
|
|
31
|
+
function nameChannel(name) {
|
|
32
|
+
return {
|
|
33
|
+
on: handler => (0, listener_1.onSrslyEvent)(name, handler),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function allChannel() {
|
|
37
|
+
return {
|
|
38
|
+
on: handler => (0, listener_1.onSrslyEvent)('*', handler),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function groupChannel(group) {
|
|
42
|
+
// Group-level "all" filters the global stream by manifest membership so a
|
|
43
|
+
// handler registered on `events.rental.all` only sees rental events even
|
|
44
|
+
// if a new top-level event ships later.
|
|
45
|
+
const memberNames = new Set(EVENT_MANIFEST.filter(([, g]) => g === group).map(([n]) => n));
|
|
46
|
+
return {
|
|
47
|
+
on: handler => {
|
|
48
|
+
return (0, listener_1.onSrslyEvent)('*', evt => {
|
|
49
|
+
if (memberNames.has(evt.type))
|
|
50
|
+
handler(evt);
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function buildTree() {
|
|
56
|
+
// Object literal — typed loosely while building, asserted to the derived
|
|
57
|
+
// tree shape at the end. Shape is guaranteed by the manifest iteration.
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
+
const tree = { all: allChannel() };
|
|
60
|
+
for (const [name, group, verb] of EVENT_MANIFEST) {
|
|
61
|
+
if (!tree[group])
|
|
62
|
+
tree[group] = { all: groupChannel(group) };
|
|
63
|
+
tree[group][verb] = nameChannel(name);
|
|
64
|
+
}
|
|
65
|
+
return tree;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Typed event tree. Use the deepest path you need — the handler arg is
|
|
69
|
+
* narrowed accordingly:
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { events } from '@sly-rentals/core';
|
|
74
|
+
*
|
|
75
|
+
* // Single event
|
|
76
|
+
* events.rental.accepted.on(evt => evt.escrow);
|
|
77
|
+
*
|
|
78
|
+
* // Group-scoped catch-all
|
|
79
|
+
* events.rental.all.on(evt => evt.type); // 'RentalAccepted' | 'RentalSettled' | …
|
|
80
|
+
*
|
|
81
|
+
* // Global catch-all
|
|
82
|
+
* events.all.on(evt => evt.signature);
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
exports.events = buildTree();
|
|
86
|
+
//# 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,yCAA0C;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,IAAA,uBAAY,EAAC,IAAa,EAAE,OAAgB,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,IAAA,uBAAY,EAAC,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,IAAA,uBAAY,EAAC,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;AACU,QAAA,MAAM,GAAe,SAAS,EAAE,CAAC"}
|
package/dist/cjs/audit/index.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseAnchorEvents = exports.fetchContractAudit = void 0;
|
|
3
|
+
exports.events = exports.onSrslyEvent = exports.getEventsFromTx = exports.createSrslyEventListener = exports.closeSrslyEventListener = exports.parseAnchorEvents = exports.fetchContractAudit = void 0;
|
|
4
4
|
var audit_1 = require("./audit");
|
|
5
5
|
Object.defineProperty(exports, "fetchContractAudit", { enumerable: true, get: function () { return audit_1.fetchContractAudit; } });
|
|
6
6
|
var events_1 = require("./events");
|
|
7
7
|
Object.defineProperty(exports, "parseAnchorEvents", { enumerable: true, get: function () { return events_1.parseAnchorEvents; } });
|
|
8
|
+
var listener_1 = require("./listener");
|
|
9
|
+
Object.defineProperty(exports, "closeSrslyEventListener", { enumerable: true, get: function () { return listener_1.closeSrslyEventListener; } });
|
|
10
|
+
Object.defineProperty(exports, "createSrslyEventListener", { enumerable: true, get: function () { return listener_1.createSrslyEventListener; } });
|
|
11
|
+
Object.defineProperty(exports, "getEventsFromTx", { enumerable: true, get: function () { return listener_1.getEventsFromTx; } });
|
|
12
|
+
Object.defineProperty(exports, "onSrslyEvent", { enumerable: true, get: function () { return listener_1.onSrslyEvent; } });
|
|
13
|
+
var events_registry_1 = require("./events-registry");
|
|
14
|
+
Object.defineProperty(exports, "events", { enumerable: true, get: function () { return events_registry_1.events; } });
|
|
8
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/index.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAC1B,uCAKoB;AAJlB,mHAAA,uBAAuB,OAAA;AACvB,oHAAA,wBAAwB,OAAA;AACxB,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AAEd,qDAA2C;AAAlC,yGAAA,MAAM,OAAA"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SRSLY event listener — plug-and-play wrapper over `parseAnchorEvents` that
|
|
4
|
+
* lets a developer subscribe to the program's emitted events without ever
|
|
5
|
+
* importing Anchor or the IDL.
|
|
6
|
+
*
|
|
7
|
+
* Two ingest paths share one dispatch table:
|
|
8
|
+
*
|
|
9
|
+
* - Live stream: register a handler with `onSrslyEvent(name, cb)`. The SDK
|
|
10
|
+
* opens (and lazily caches) a singleton `logsNotifications` subscription
|
|
11
|
+
* using the `wsUrl` from `setSdkConfig`. No listener instance to manage —
|
|
12
|
+
* drop your handlers and go.
|
|
13
|
+
* - Per-signature: pass a tx signature to `getEventsFromTx(sig)` to fetch
|
|
14
|
+
* the confirmed transaction, parse its logs, and get back the typed
|
|
15
|
+
* event array. Same handlers fire as for the live stream.
|
|
16
|
+
*
|
|
17
|
+
* Kit-only by design: events are SRSLY's, so there's no value in shipping a
|
|
18
|
+
* web3.js variant. Consumers that already have `@solana/kit` (everyone using
|
|
19
|
+
* this package) get the listener for free.
|
|
20
|
+
*
|
|
21
|
+
* For advanced cases — multiple isolated listeners, custom program IDs,
|
|
22
|
+
* test fixtures — `createSrslyEventListener()` is exported as the
|
|
23
|
+
* underlying primitive.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createSrslyEventListener = createSrslyEventListener;
|
|
27
|
+
exports.onSrslyEvent = onSrslyEvent;
|
|
28
|
+
exports.getEventsFromTx = getEventsFromTx;
|
|
29
|
+
exports.closeSrslyEventListener = closeSrslyEventListener;
|
|
30
|
+
const kit_1 = require("@solana/kit");
|
|
31
|
+
const events_1 = require("./events");
|
|
32
|
+
const srsly_1 = require("../generated/codama/programs/srsly");
|
|
33
|
+
const config_1 = require("../utils/config");
|
|
34
|
+
/**
|
|
35
|
+
* Underlying listener primitive. Most consumers should reach for
|
|
36
|
+
* `onSrslyEvent` / `getEventsFromTx` instead — those bind to `setSdkConfig`
|
|
37
|
+
* automatically. Use this when you need multiple isolated listeners, a
|
|
38
|
+
* non-default program ID, or test injection.
|
|
39
|
+
*/
|
|
40
|
+
function createSrslyEventListener(opts = {}) {
|
|
41
|
+
const programId = String(opts.programId ?? srsly_1.SRSLY_PROGRAM_ADDRESS);
|
|
42
|
+
const handlers = new Map();
|
|
43
|
+
let abort = null;
|
|
44
|
+
let drain = null;
|
|
45
|
+
function dispatch(events) {
|
|
46
|
+
for (const evt of events) {
|
|
47
|
+
handlers.get(evt.type)?.forEach(cb => {
|
|
48
|
+
try {
|
|
49
|
+
cb(evt);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
// eslint-disable-next-line no-console
|
|
53
|
+
console.error('[srsly:listener] handler threw for', evt.type, err);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
handlers.get('*')?.forEach(cb => {
|
|
57
|
+
try {
|
|
58
|
+
cb(evt);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
// eslint-disable-next-line no-console
|
|
62
|
+
console.error('[srsly:listener] * handler threw', err);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function on(name, handler) {
|
|
68
|
+
let set = handlers.get(name);
|
|
69
|
+
if (!set) {
|
|
70
|
+
set = new Set();
|
|
71
|
+
handlers.set(name, set);
|
|
72
|
+
}
|
|
73
|
+
set.add(handler);
|
|
74
|
+
return () => set.delete(handler);
|
|
75
|
+
}
|
|
76
|
+
async function start(o) {
|
|
77
|
+
if (abort)
|
|
78
|
+
return;
|
|
79
|
+
abort = new AbortController();
|
|
80
|
+
const commitment = o.commitment ?? 'confirmed';
|
|
81
|
+
let stream;
|
|
82
|
+
try {
|
|
83
|
+
stream = (await o.rpcSubscriptions
|
|
84
|
+
.logsNotifications({ mentions: [programId] }, { commitment })
|
|
85
|
+
.subscribe({ abortSignal: abort.signal }));
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
// WS connect failure (RPC doesn't support logsSubscribe, network down,
|
|
89
|
+
// CORS, etc.). Stay inert so HTTP-only callers of `getEventsFromTx`
|
|
90
|
+
// still work. Reset abort so a later `start` can retry.
|
|
91
|
+
abort = null;
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.warn('[srsly] event listener disabled — WS connect failed:', err);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
drain = (async () => {
|
|
97
|
+
try {
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
|
+
for await (const msg of stream) {
|
|
100
|
+
const value = msg?.value;
|
|
101
|
+
const slot = msg?.context?.slot;
|
|
102
|
+
if (!value || slot === undefined)
|
|
103
|
+
continue;
|
|
104
|
+
if (value.err)
|
|
105
|
+
continue;
|
|
106
|
+
const events = (0, events_1.parseAnchorEvents)(value.logs, programId, BigInt(slot), String(value.signature));
|
|
107
|
+
dispatch(events);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// AbortError on close, or socket-level disconnects.
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
}
|
|
115
|
+
async function process(signature, o) {
|
|
116
|
+
const tx = await o.rpc
|
|
117
|
+
.getTransaction(signature, {
|
|
118
|
+
encoding: 'json',
|
|
119
|
+
maxSupportedTransactionVersion: 0,
|
|
120
|
+
commitment: o.commitment ?? 'confirmed',
|
|
121
|
+
})
|
|
122
|
+
.send();
|
|
123
|
+
if (!tx?.meta?.logMessages)
|
|
124
|
+
return [];
|
|
125
|
+
const events = (0, events_1.parseAnchorEvents)(tx.meta.logMessages, programId, BigInt(tx.slot), signature);
|
|
126
|
+
dispatch(events);
|
|
127
|
+
return events;
|
|
128
|
+
}
|
|
129
|
+
async function close() {
|
|
130
|
+
abort?.abort();
|
|
131
|
+
abort = null;
|
|
132
|
+
if (drain)
|
|
133
|
+
await drain;
|
|
134
|
+
drain = null;
|
|
135
|
+
handlers.clear();
|
|
136
|
+
}
|
|
137
|
+
return { on: on, start, process, close };
|
|
138
|
+
}
|
|
139
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
140
|
+
// Config-bound singleton — what most consumers should reach for
|
|
141
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
142
|
+
let singleton = null;
|
|
143
|
+
let singletonStarted = null;
|
|
144
|
+
function getSingleton() {
|
|
145
|
+
if (!singleton)
|
|
146
|
+
singleton = createSrslyEventListener();
|
|
147
|
+
return singleton;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Lazily open the live stream when `setSdkConfig({ eventsListener: true })`
|
|
151
|
+
* is set. Idempotent — the second call returns the same start promise.
|
|
152
|
+
* No-op when the listener is disabled, so on-demand `getEventsFromTx` calls
|
|
153
|
+
* still work against the HTTP RPC alone.
|
|
154
|
+
*
|
|
155
|
+
* Throws if `eventsListener` is on but no `wsUrl` is configured — the failure
|
|
156
|
+
* is louder this way than a silently-no-op listener.
|
|
157
|
+
*/
|
|
158
|
+
async function ensureLiveStream() {
|
|
159
|
+
if (!(0, config_1.isEventsListenerEnabled)())
|
|
160
|
+
return false;
|
|
161
|
+
const wsUrl = (0, config_1.getWsUrl)();
|
|
162
|
+
if (!wsUrl) {
|
|
163
|
+
throw new Error('setSdkConfig({ eventsListener: true }) requires a wsUrl. ' +
|
|
164
|
+
'Set both fields together, or leave eventsListener unset for HTTP-only mode.');
|
|
165
|
+
}
|
|
166
|
+
if (singletonStarted) {
|
|
167
|
+
await singletonStarted;
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
const listener = getSingleton();
|
|
171
|
+
singletonStarted = listener.start({
|
|
172
|
+
rpcSubscriptions: (0, kit_1.createSolanaRpcSubscriptions)(wsUrl),
|
|
173
|
+
});
|
|
174
|
+
await singletonStarted;
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
function onSrslyEvent(name,
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
179
|
+
handler) {
|
|
180
|
+
const off = getSingleton().on(name, handler);
|
|
181
|
+
// Fire-and-forget: kick off the WS subscription if configured. We don't
|
|
182
|
+
// block the caller on the connect — events that arrive before the socket
|
|
183
|
+
// is ready are simply not seen, which matches existing kit semantics.
|
|
184
|
+
void ensureLiveStream();
|
|
185
|
+
return off;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Pull and parse SRSLY events from a single confirmed transaction signature.
|
|
189
|
+
* Uses the `rpcUrl` from `setSdkConfig` unless an override is passed.
|
|
190
|
+
*
|
|
191
|
+
* Dispatches into the same singleton handler registry that `onSrslyEvent`
|
|
192
|
+
* subscribes to — so a handler registered once will fire for both live
|
|
193
|
+
* events and per-signature lookups.
|
|
194
|
+
*
|
|
195
|
+
* @example Right after submitting an instruction
|
|
196
|
+
* ```ts
|
|
197
|
+
* const ixs = await acceptRental(params);
|
|
198
|
+
* const sig = await wallet.sendAndConfirm(ixs);
|
|
199
|
+
* const events = await getEventsFromTx(sig);
|
|
200
|
+
* const accepted = events.find(e => e.type === 'RentalAccepted');
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
async function getEventsFromTx(signature, opts = {}) {
|
|
204
|
+
const rpc = (0, kit_1.createSolanaRpc)(opts.rpcUrl ?? (0, config_1.getRpcUrl)());
|
|
205
|
+
return getSingleton().process(signature, { rpc, commitment: opts.commitment });
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Tear down the singleton listener, close the WS subscription if open, and
|
|
209
|
+
* clear all handlers. Call this in test teardown or app shutdown — most apps
|
|
210
|
+
* never need to.
|
|
211
|
+
*/
|
|
212
|
+
async function closeSrslyEventListener() {
|
|
213
|
+
if (!singleton)
|
|
214
|
+
return;
|
|
215
|
+
await singleton.close();
|
|
216
|
+
singleton = null;
|
|
217
|
+
singletonStarted = null;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/audit/listener.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/kit/index.js
CHANGED
|
@@ -52,7 +52,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
52
52
|
};
|
|
53
53
|
})();
|
|
54
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
-
exports.audit = exports.codama = exports.claim = exports.VERSION = void 0;
|
|
55
|
+
exports.onSrslyEvent = exports.getEventsFromTx = exports.events = exports.closeSrslyEventListener = exports.audit = exports.codama = exports.claim = exports.VERSION = void 0;
|
|
56
56
|
var version_1 = require("../version");
|
|
57
57
|
Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
|
|
58
58
|
__exportStar(require("../utils"), exports);
|
|
@@ -66,4 +66,13 @@ var vault_1 = require("@sly-rentals/vault");
|
|
|
66
66
|
Object.defineProperty(exports, "claim", { enumerable: true, get: function () { return vault_1.claim; } });
|
|
67
67
|
exports.codama = __importStar(require("../generated/codama"));
|
|
68
68
|
exports.audit = __importStar(require("../audit"));
|
|
69
|
+
// Event listener helpers — bubbled up from `audit` so consumers can write
|
|
70
|
+
// `import { events, onSrslyEvent, getEventsFromTx } from '@sly-rentals/core'`
|
|
71
|
+
// without the audit namespace prefix. The full audit module is still
|
|
72
|
+
// accessible via `audit.*` for the parser primitives + report builder.
|
|
73
|
+
var audit_1 = require("../audit");
|
|
74
|
+
Object.defineProperty(exports, "closeSrslyEventListener", { enumerable: true, get: function () { return audit_1.closeSrslyEventListener; } });
|
|
75
|
+
Object.defineProperty(exports, "events", { enumerable: true, get: function () { return audit_1.events; } });
|
|
76
|
+
Object.defineProperty(exports, "getEventsFromTx", { enumerable: true, get: function () { return audit_1.getEventsFromTx; } });
|
|
77
|
+
Object.defineProperty(exports, "onSrslyEvent", { enumerable: true, get: function () { return audit_1.onSrslyEvent; } });
|
|
69
78
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sCAAqC;AAA5B,kGAAA,OAAO,OAAA;AAChB,2CAAyB;AACzB,kDAAgC;AAChC,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,0CAAwB;AAExB,sBAAsB;AACtB,4CAA6D;AAApD,8FAAA,KAAK,OAAA;AAEd,8DAA8C;AAC9C,kDAAkC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sCAAqC;AAA5B,kGAAA,OAAO,OAAA;AAChB,2CAAyB;AACzB,kDAAgC;AAChC,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,0CAAwB;AAExB,sBAAsB;AACtB,4CAA6D;AAApD,8FAAA,KAAK,OAAA;AAEd,8DAA8C;AAC9C,kDAAkC;AAElC,0EAA0E;AAC1E,8EAA8E;AAC9E,qEAAqE;AACrE,uEAAuE;AACvE,kCAA0F;AAAjF,gHAAA,uBAAuB,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,qGAAA,YAAY,OAAA"}
|
package/dist/cjs/legacy/index.js
CHANGED
|
@@ -59,7 +59,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
59
59
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
60
60
|
};
|
|
61
61
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
-
exports.claim = exports.updateAffiliate = exports.removeAffiliate = exports.approveAffiliate = exports.createAffiliate = exports.deleteConfig = exports.updateConfig = exports.createConfig = exports.updateContractThread = exports.closeContractThread = exports.createContractThread = exports.claimContract = exports.deleteBorrower = exports.createBorrower = exports.closeBorrower = exports.claimBorrower = exports.deleteRental = exports.reserveRental = exports.invalidateRental = exports.releaseRental = exports.closeRental = exports.cancelRental = exports.acceptRental = exports.setDelegate = exports.deleteContract = exports.closeContract = exports.updateContract = exports.createContract = exports.codama = exports.VERSION = void 0;
|
|
62
|
+
exports.claim = exports.updateAffiliate = exports.removeAffiliate = exports.approveAffiliate = exports.createAffiliate = exports.deleteConfig = exports.updateConfig = exports.createConfig = exports.updateContractThread = exports.closeContractThread = exports.createContractThread = exports.claimContract = exports.deleteBorrower = exports.createBorrower = exports.closeBorrower = exports.claimBorrower = exports.deleteRental = exports.reserveRental = exports.invalidateRental = exports.releaseRental = exports.closeRental = exports.cancelRental = exports.acceptRental = exports.setDelegate = exports.deleteContract = exports.closeContract = exports.updateContract = exports.createContract = exports.onSrslyEvent = exports.getEventsFromTx = exports.events = exports.closeSrslyEventListener = exports.audit = exports.codama = exports.VERSION = void 0;
|
|
63
63
|
const utils_1 = require("../utils");
|
|
64
64
|
const kit = __importStar(require("../instructions"));
|
|
65
65
|
const vault_1 = require("@sly-rentals/vault");
|
|
@@ -71,6 +71,12 @@ __exportStar(require("../pda"), exports);
|
|
|
71
71
|
var version_1 = require("../version");
|
|
72
72
|
Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
|
|
73
73
|
exports.codama = __importStar(require("../generated/codama"));
|
|
74
|
+
exports.audit = __importStar(require("../audit"));
|
|
75
|
+
var audit_1 = require("../audit");
|
|
76
|
+
Object.defineProperty(exports, "closeSrslyEventListener", { enumerable: true, get: function () { return audit_1.closeSrslyEventListener; } });
|
|
77
|
+
Object.defineProperty(exports, "events", { enumerable: true, get: function () { return audit_1.events; } });
|
|
78
|
+
Object.defineProperty(exports, "getEventsFromTx", { enumerable: true, get: function () { return audit_1.getEventsFromTx; } });
|
|
79
|
+
Object.defineProperty(exports, "onSrslyEvent", { enumerable: true, get: function () { return audit_1.onSrslyEvent; } });
|
|
74
80
|
/**
|
|
75
81
|
* Wrapper that checks for PublicKey and provides helpful error
|
|
76
82
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/legacy/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,oCAAwF;AACxF,qDAAuC;AACvC,8CAA4D;AAE5D,oDAAoD;AACpD,2CAAyB;AACzB,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,sCAAqC;AAA5B,kGAAA,OAAO,OAAA;AAChB,8DAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/legacy/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/package.json
CHANGED
package/dist/cjs/utils/config.js
CHANGED
|
@@ -11,6 +11,8 @@ exports.getSdkConfig = getSdkConfig;
|
|
|
11
11
|
exports.clearSdkConfig = clearSdkConfig;
|
|
12
12
|
exports.mergeConfig = mergeConfig;
|
|
13
13
|
exports.getRpcUrl = getRpcUrl;
|
|
14
|
+
exports.getWsUrl = getWsUrl;
|
|
15
|
+
exports.isEventsListenerEnabled = isEventsListenerEnabled;
|
|
14
16
|
exports.getProgramId = getProgramId;
|
|
15
17
|
exports.getCommitment = getCommitment;
|
|
16
18
|
exports.getAffiliateConfig = getAffiliateConfig;
|
|
@@ -128,6 +130,20 @@ function getRpcUrl(config) {
|
|
|
128
130
|
ALIAS_RPC_URLS[finalConfig.programs] ||
|
|
129
131
|
DEFAULT_RPC_URLS[addresses_1.DEVNET_GENESIS]);
|
|
130
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Get the effective WebSocket URL, if any. Returns `undefined` when neither
|
|
135
|
+
* the global config nor the override sets one.
|
|
136
|
+
*/
|
|
137
|
+
function getWsUrl(config) {
|
|
138
|
+
return mergeConfig(config).wsUrl;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Returns whether the singleton SRSLY event listener should auto-start.
|
|
142
|
+
* Defaults to `false` if unset.
|
|
143
|
+
*/
|
|
144
|
+
function isEventsListenerEnabled(config) {
|
|
145
|
+
return mergeConfig(config).eventsListener === true;
|
|
146
|
+
}
|
|
131
147
|
/**
|
|
132
148
|
* Get the effective program ID for a configuration
|
|
133
149
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
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.0';
|
|
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"}
|