@secondlayer/sdk 6.41.0 → 6.42.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/dist/streams/rows.d.ts +356 -0
- package/dist/streams/rows.js +306 -0
- package/dist/streams/rows.js.map +16 -0
- package/package.json +6 -2
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { StreamsEventType } from "@secondlayer/shared";
|
|
2
|
+
/** A Clarity value as Streams serves it: the canonical hex string, a typed
|
|
3
|
+
* object carrying that hex (`{ hex }`), or a decoded Clarity-JSON object.
|
|
4
|
+
* Decode helpers (`decodeNftTransfer`, etc.) resolve it to a concrete value. */
|
|
5
|
+
type StreamsClarityValue = string | {
|
|
6
|
+
hex: string
|
|
7
|
+
} | Record<string, unknown>;
|
|
8
|
+
type StxTransferPayload = {
|
|
9
|
+
sender: string
|
|
10
|
+
recipient: string
|
|
11
|
+
amount: string
|
|
12
|
+
memo?: string
|
|
13
|
+
};
|
|
14
|
+
type StxMintPayload = {
|
|
15
|
+
recipient: string
|
|
16
|
+
amount: string
|
|
17
|
+
};
|
|
18
|
+
type StxBurnPayload = {
|
|
19
|
+
sender: string
|
|
20
|
+
amount: string
|
|
21
|
+
};
|
|
22
|
+
type StxLockPayload = {
|
|
23
|
+
locked_address: string
|
|
24
|
+
locked_amount: string
|
|
25
|
+
unlock_height: string
|
|
26
|
+
};
|
|
27
|
+
type FtTransferPayload = {
|
|
28
|
+
asset_identifier: string
|
|
29
|
+
sender: string
|
|
30
|
+
recipient: string
|
|
31
|
+
amount: string
|
|
32
|
+
};
|
|
33
|
+
type FtMintPayload = {
|
|
34
|
+
asset_identifier: string
|
|
35
|
+
recipient: string
|
|
36
|
+
amount: string
|
|
37
|
+
};
|
|
38
|
+
type FtBurnPayload = {
|
|
39
|
+
asset_identifier: string
|
|
40
|
+
sender: string
|
|
41
|
+
amount: string
|
|
42
|
+
};
|
|
43
|
+
type NftTransferPayload = {
|
|
44
|
+
asset_identifier: string
|
|
45
|
+
sender: string
|
|
46
|
+
recipient: string
|
|
47
|
+
value: StreamsClarityValue
|
|
48
|
+
/** Canonical serialized hex of `value`, when the stream carries it. */
|
|
49
|
+
raw_value?: string
|
|
50
|
+
};
|
|
51
|
+
type NftMintPayload = {
|
|
52
|
+
asset_identifier: string
|
|
53
|
+
recipient: string
|
|
54
|
+
value: StreamsClarityValue
|
|
55
|
+
raw_value?: string
|
|
56
|
+
};
|
|
57
|
+
type NftBurnPayload = {
|
|
58
|
+
asset_identifier: string
|
|
59
|
+
sender: string
|
|
60
|
+
value: StreamsClarityValue
|
|
61
|
+
raw_value?: string
|
|
62
|
+
};
|
|
63
|
+
type PrintPayload = {
|
|
64
|
+
contract_id?: string | null
|
|
65
|
+
topic?: string
|
|
66
|
+
value?: unknown
|
|
67
|
+
raw_value?: string
|
|
68
|
+
};
|
|
69
|
+
type StreamsEventBase = {
|
|
70
|
+
/**
|
|
71
|
+
* Globally unique, monotonic position of this event (`<block>:<index>`). Use
|
|
72
|
+
* it as the primary key of your projection rows — replaying a batch then
|
|
73
|
+
* upserts cleanly. Don't synthesize your own id from `tx_id`/`event_index`.
|
|
74
|
+
*/
|
|
75
|
+
cursor: string
|
|
76
|
+
block_height: number
|
|
77
|
+
block_hash: string
|
|
78
|
+
burn_block_height: number
|
|
79
|
+
tx_id: string
|
|
80
|
+
tx_index: number
|
|
81
|
+
event_index: number
|
|
82
|
+
contract_id: string | null
|
|
83
|
+
ts: string
|
|
84
|
+
/**
|
|
85
|
+
* True when this event's block is past the finality boundary (immutable).
|
|
86
|
+
* Optional for back-compat; the API always sets it on Streams responses.
|
|
87
|
+
*/
|
|
88
|
+
finalized?: boolean
|
|
89
|
+
/**
|
|
90
|
+
* Labels whose filter group this event satisfied, present only when the
|
|
91
|
+
* request used a labelled `filters` map. The SDK dispatches on it for you
|
|
92
|
+
* (`on.<label>`), so handlers rarely read it directly.
|
|
93
|
+
*/
|
|
94
|
+
matched?: string[]
|
|
95
|
+
};
|
|
96
|
+
type StreamsEventOf<
|
|
97
|
+
T extends StreamsEventType,
|
|
98
|
+
P
|
|
99
|
+
> = StreamsEventBase & {
|
|
100
|
+
event_type: T
|
|
101
|
+
payload: P
|
|
102
|
+
};
|
|
103
|
+
/** A raw Streams event. Discriminated on `event_type`, so `event.payload`
|
|
104
|
+
* narrows to the matching payload shape once the type is checked. */
|
|
105
|
+
type StreamsEvent = StreamsEventOf<"stx_transfer", StxTransferPayload> | StreamsEventOf<"stx_mint", StxMintPayload> | StreamsEventOf<"stx_burn", StxBurnPayload> | StreamsEventOf<"stx_lock", StxLockPayload> | StreamsEventOf<"ft_transfer", FtTransferPayload> | StreamsEventOf<"ft_mint", FtMintPayload> | StreamsEventOf<"ft_burn", FtBurnPayload> | StreamsEventOf<"nft_transfer", NftTransferPayload> | StreamsEventOf<"nft_mint", NftMintPayload> | StreamsEventOf<"nft_burn", NftBurnPayload> | StreamsEventOf<"print", PrintPayload>;
|
|
106
|
+
type FtTransferEvent = Extract<StreamsEvent, {
|
|
107
|
+
event_type: "ft_transfer"
|
|
108
|
+
}>;
|
|
109
|
+
type DecodedFtTransferPayload = {
|
|
110
|
+
asset_identifier: string
|
|
111
|
+
contract_id: string
|
|
112
|
+
token_name: string | null
|
|
113
|
+
sender: string
|
|
114
|
+
recipient: string
|
|
115
|
+
amount: string
|
|
116
|
+
};
|
|
117
|
+
type DecodedFtTransfer = {
|
|
118
|
+
cursor: string
|
|
119
|
+
block_height: number
|
|
120
|
+
tx_id: string
|
|
121
|
+
tx_index: number
|
|
122
|
+
event_index: number
|
|
123
|
+
event_type: "ft_transfer"
|
|
124
|
+
decoded_payload: DecodedFtTransferPayload
|
|
125
|
+
source_cursor: string
|
|
126
|
+
};
|
|
127
|
+
declare function isFtTransfer(event: StreamsEvent): event is FtTransferEvent;
|
|
128
|
+
declare function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer;
|
|
129
|
+
type NftTransferEvent = Extract<StreamsEvent, {
|
|
130
|
+
event_type: "nft_transfer"
|
|
131
|
+
}>;
|
|
132
|
+
type DecodedNftTransferPayload = {
|
|
133
|
+
asset_identifier: string
|
|
134
|
+
contract_id: string
|
|
135
|
+
token_name: string | null
|
|
136
|
+
sender: string
|
|
137
|
+
recipient: string
|
|
138
|
+
value: string
|
|
139
|
+
};
|
|
140
|
+
type DecodedNftTransfer = {
|
|
141
|
+
cursor: string
|
|
142
|
+
block_height: number
|
|
143
|
+
tx_id: string
|
|
144
|
+
tx_index: number
|
|
145
|
+
event_index: number
|
|
146
|
+
event_type: "nft_transfer"
|
|
147
|
+
decoded_payload: DecodedNftTransferPayload
|
|
148
|
+
source_cursor: string
|
|
149
|
+
};
|
|
150
|
+
declare function isNftTransfer(event: StreamsEvent): event is NftTransferEvent;
|
|
151
|
+
declare function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer;
|
|
152
|
+
type DecodedStxTransferPayload = {
|
|
153
|
+
sender: string
|
|
154
|
+
recipient: string
|
|
155
|
+
amount: string
|
|
156
|
+
memo: string | null
|
|
157
|
+
};
|
|
158
|
+
type DecodedStxTransfer = {
|
|
159
|
+
cursor: string
|
|
160
|
+
block_height: number
|
|
161
|
+
tx_id: string
|
|
162
|
+
tx_index: number
|
|
163
|
+
event_index: number
|
|
164
|
+
event_type: "stx_transfer"
|
|
165
|
+
decoded_payload: DecodedStxTransferPayload
|
|
166
|
+
source_cursor: string
|
|
167
|
+
};
|
|
168
|
+
type DecodedStxMintPayload = {
|
|
169
|
+
recipient: string
|
|
170
|
+
amount: string
|
|
171
|
+
};
|
|
172
|
+
type DecodedStxMint = {
|
|
173
|
+
cursor: string
|
|
174
|
+
block_height: number
|
|
175
|
+
tx_id: string
|
|
176
|
+
tx_index: number
|
|
177
|
+
event_index: number
|
|
178
|
+
event_type: "stx_mint"
|
|
179
|
+
decoded_payload: DecodedStxMintPayload
|
|
180
|
+
source_cursor: string
|
|
181
|
+
};
|
|
182
|
+
type DecodedStxBurnPayload = {
|
|
183
|
+
sender: string
|
|
184
|
+
amount: string
|
|
185
|
+
};
|
|
186
|
+
type DecodedStxBurn = {
|
|
187
|
+
cursor: string
|
|
188
|
+
block_height: number
|
|
189
|
+
tx_id: string
|
|
190
|
+
tx_index: number
|
|
191
|
+
event_index: number
|
|
192
|
+
event_type: "stx_burn"
|
|
193
|
+
decoded_payload: DecodedStxBurnPayload
|
|
194
|
+
source_cursor: string
|
|
195
|
+
};
|
|
196
|
+
declare function isStxTransfer(event: StreamsEvent): event is StreamsEvent & {
|
|
197
|
+
event_type: "stx_transfer"
|
|
198
|
+
};
|
|
199
|
+
declare function decodeStxTransfer(event: StreamsEvent): DecodedStxTransfer;
|
|
200
|
+
declare function isStxMint(event: StreamsEvent): event is StreamsEvent & {
|
|
201
|
+
event_type: "stx_mint"
|
|
202
|
+
};
|
|
203
|
+
declare function decodeStxMint(event: StreamsEvent): DecodedStxMint;
|
|
204
|
+
declare function isStxBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
205
|
+
event_type: "stx_burn"
|
|
206
|
+
};
|
|
207
|
+
declare function decodeStxBurn(event: StreamsEvent): DecodedStxBurn;
|
|
208
|
+
type DecodedStxLockPayload = {
|
|
209
|
+
sender: string
|
|
210
|
+
amount: string
|
|
211
|
+
payload: {
|
|
212
|
+
unlock_height: string | null
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
type DecodedStxLock = {
|
|
216
|
+
cursor: string
|
|
217
|
+
block_height: number
|
|
218
|
+
tx_id: string
|
|
219
|
+
tx_index: number
|
|
220
|
+
event_index: number
|
|
221
|
+
event_type: "stx_lock"
|
|
222
|
+
decoded_payload: DecodedStxLockPayload
|
|
223
|
+
source_cursor: string
|
|
224
|
+
};
|
|
225
|
+
declare function isStxLock(event: StreamsEvent): event is StreamsEvent & {
|
|
226
|
+
event_type: "stx_lock"
|
|
227
|
+
};
|
|
228
|
+
declare function decodeStxLock(event: StreamsEvent): DecodedStxLock;
|
|
229
|
+
type DecodedFtMintPayload = {
|
|
230
|
+
asset_identifier: string
|
|
231
|
+
contract_id: string
|
|
232
|
+
token_name: string | null
|
|
233
|
+
recipient: string
|
|
234
|
+
amount: string
|
|
235
|
+
};
|
|
236
|
+
type DecodedFtMint = {
|
|
237
|
+
cursor: string
|
|
238
|
+
block_height: number
|
|
239
|
+
tx_id: string
|
|
240
|
+
tx_index: number
|
|
241
|
+
event_index: number
|
|
242
|
+
event_type: "ft_mint"
|
|
243
|
+
decoded_payload: DecodedFtMintPayload
|
|
244
|
+
source_cursor: string
|
|
245
|
+
};
|
|
246
|
+
type DecodedFtBurnPayload = {
|
|
247
|
+
asset_identifier: string
|
|
248
|
+
contract_id: string
|
|
249
|
+
token_name: string | null
|
|
250
|
+
sender: string
|
|
251
|
+
amount: string
|
|
252
|
+
};
|
|
253
|
+
type DecodedFtBurn = {
|
|
254
|
+
cursor: string
|
|
255
|
+
block_height: number
|
|
256
|
+
tx_id: string
|
|
257
|
+
tx_index: number
|
|
258
|
+
event_index: number
|
|
259
|
+
event_type: "ft_burn"
|
|
260
|
+
decoded_payload: DecodedFtBurnPayload
|
|
261
|
+
source_cursor: string
|
|
262
|
+
};
|
|
263
|
+
type DecodedNftMintPayload = {
|
|
264
|
+
asset_identifier: string
|
|
265
|
+
contract_id: string
|
|
266
|
+
token_name: string | null
|
|
267
|
+
recipient: string
|
|
268
|
+
value: string
|
|
269
|
+
};
|
|
270
|
+
type DecodedNftMint = {
|
|
271
|
+
cursor: string
|
|
272
|
+
block_height: number
|
|
273
|
+
tx_id: string
|
|
274
|
+
tx_index: number
|
|
275
|
+
event_index: number
|
|
276
|
+
event_type: "nft_mint"
|
|
277
|
+
decoded_payload: DecodedNftMintPayload
|
|
278
|
+
source_cursor: string
|
|
279
|
+
};
|
|
280
|
+
type DecodedNftBurnPayload = {
|
|
281
|
+
asset_identifier: string
|
|
282
|
+
contract_id: string
|
|
283
|
+
token_name: string | null
|
|
284
|
+
sender: string
|
|
285
|
+
value: string
|
|
286
|
+
};
|
|
287
|
+
type DecodedNftBurn = {
|
|
288
|
+
cursor: string
|
|
289
|
+
block_height: number
|
|
290
|
+
tx_id: string
|
|
291
|
+
tx_index: number
|
|
292
|
+
event_index: number
|
|
293
|
+
event_type: "nft_burn"
|
|
294
|
+
decoded_payload: DecodedNftBurnPayload
|
|
295
|
+
source_cursor: string
|
|
296
|
+
};
|
|
297
|
+
declare function isFtMint(event: StreamsEvent): event is StreamsEvent & {
|
|
298
|
+
event_type: "ft_mint"
|
|
299
|
+
};
|
|
300
|
+
declare function decodeFtMint(event: StreamsEvent): DecodedFtMint;
|
|
301
|
+
declare function isFtBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
302
|
+
event_type: "ft_burn"
|
|
303
|
+
};
|
|
304
|
+
declare function decodeFtBurn(event: StreamsEvent): DecodedFtBurn;
|
|
305
|
+
declare function isNftMint(event: StreamsEvent): event is StreamsEvent & {
|
|
306
|
+
event_type: "nft_mint"
|
|
307
|
+
};
|
|
308
|
+
declare function decodeNftMint(event: StreamsEvent): DecodedNftMint;
|
|
309
|
+
declare function isNftBurn(event: StreamsEvent): event is StreamsEvent & {
|
|
310
|
+
event_type: "nft_burn"
|
|
311
|
+
};
|
|
312
|
+
declare function decodeNftBurn(event: StreamsEvent): DecodedNftBurn;
|
|
313
|
+
/** Decoded form of a Clarity `print` event:
|
|
314
|
+
* - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple
|
|
315
|
+
* - `value`: the Clarity value decoded to JSON (uints as strings, buffers as
|
|
316
|
+
* `0x…` hex, tuples as objects)
|
|
317
|
+
* - `raw_value`: the canonical serialized hex, for byte-exact consumers */
|
|
318
|
+
type DecodedPrintValue = {
|
|
319
|
+
topic: string | null
|
|
320
|
+
value: unknown
|
|
321
|
+
raw_value: string | null
|
|
322
|
+
};
|
|
323
|
+
type DecodedPrintPayload = {
|
|
324
|
+
contract_id: string | null
|
|
325
|
+
payload: DecodedPrintValue
|
|
326
|
+
};
|
|
327
|
+
type DecodedPrint = {
|
|
328
|
+
cursor: string
|
|
329
|
+
block_height: number
|
|
330
|
+
tx_id: string
|
|
331
|
+
tx_index: number
|
|
332
|
+
event_index: number
|
|
333
|
+
event_type: "print"
|
|
334
|
+
decoded_payload: DecodedPrintPayload
|
|
335
|
+
source_cursor: string
|
|
336
|
+
};
|
|
337
|
+
declare function isPrint(event: StreamsEvent): event is StreamsEvent & {
|
|
338
|
+
event_type: "print"
|
|
339
|
+
};
|
|
340
|
+
declare function decodePrint(event: StreamsEvent): DecodedPrint;
|
|
341
|
+
/** Superset of the columns the decoded_events table holds. Every decoded
|
|
342
|
+
* event's `decoded_payload` is assignable to this, so the indexer's writer
|
|
343
|
+
* can map columns generically instead of per-event-type. */
|
|
344
|
+
type DecodedEventColumns = {
|
|
345
|
+
contract_id?: string | null
|
|
346
|
+
asset_identifier?: string | null
|
|
347
|
+
sender?: string | null
|
|
348
|
+
recipient?: string | null
|
|
349
|
+
amount?: string | null
|
|
350
|
+
value?: string | null
|
|
351
|
+
memo?: string | null
|
|
352
|
+
/** JSONB overflow for non-flat types (e.g. print's decoded value). */
|
|
353
|
+
payload?: unknown
|
|
354
|
+
};
|
|
355
|
+
type DecodedEventRow = DecodedFtTransfer | DecodedNftTransfer | DecodedStxTransfer | DecodedStxMint | DecodedStxBurn | DecodedStxLock | DecodedFtMint | DecodedFtBurn | DecodedNftMint | DecodedNftBurn | DecodedPrint;
|
|
356
|
+
export { isStxTransfer, isStxMint, isStxLock, isStxBurn, isPrint, isNftTransfer, isNftMint, isNftBurn, isFtTransfer, isFtMint, isFtBurn, decodeStxTransfer, decodeStxMint, decodeStxLock, decodeStxBurn, decodePrint, decodeNftTransfer, decodeNftMint, decodeNftBurn, decodeFtTransfer, decodeFtMint, decodeFtBurn, DecodedStxTransfer, DecodedStxMint, DecodedStxLock, DecodedStxBurn, DecodedPrintPayload, DecodedPrint, DecodedNftTransferPayload, DecodedNftTransfer, DecodedNftMint, DecodedNftBurn, DecodedFtTransferPayload, DecodedFtTransfer, DecodedFtMint, DecodedFtBurn, DecodedEventRow, DecodedEventColumns };
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
// src/streams/_payload.ts
|
|
2
|
+
function requireString(payload, field, eventType) {
|
|
3
|
+
const value = payload[field];
|
|
4
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
5
|
+
throw new Error(`${eventType} payload missing ${field}`);
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
function optionalString(value) {
|
|
10
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
11
|
+
}
|
|
12
|
+
function requireAmountField(payload, field, eventType) {
|
|
13
|
+
const amount = requireString(payload, field, eventType);
|
|
14
|
+
if (!/^(0|[1-9]\d*)$/.test(amount)) {
|
|
15
|
+
throw new Error(`${eventType} payload has malformed ${field}`);
|
|
16
|
+
}
|
|
17
|
+
return amount;
|
|
18
|
+
}
|
|
19
|
+
function requireAmount(payload, eventType) {
|
|
20
|
+
return requireAmountField(payload, "amount", eventType);
|
|
21
|
+
}
|
|
22
|
+
function parseAssetIdentifier(assetIdentifier, eventType) {
|
|
23
|
+
const [contractId, tokenName] = assetIdentifier.split("::");
|
|
24
|
+
if (!contractId) {
|
|
25
|
+
throw new Error(`${eventType} payload has malformed asset_identifier`);
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
contract_id: contractId,
|
|
29
|
+
token_name: tokenName && tokenName.length > 0 ? tokenName : null
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function requireHexValue(payload, eventType) {
|
|
33
|
+
const rawValue = payload.raw_value;
|
|
34
|
+
if (typeof rawValue === "string") {
|
|
35
|
+
if (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {
|
|
36
|
+
throw new Error(`${eventType} payload has malformed value`);
|
|
37
|
+
}
|
|
38
|
+
return rawValue;
|
|
39
|
+
}
|
|
40
|
+
const value = payload.value;
|
|
41
|
+
const hex = typeof value === "string" ? value : value && typeof value === "object" && typeof value.hex === "string" ? value.hex : null;
|
|
42
|
+
if (!hex) {
|
|
43
|
+
throw new Error(`${eventType} payload missing value`);
|
|
44
|
+
}
|
|
45
|
+
if (!/^0x[0-9a-fA-F]*$/.test(hex)) {
|
|
46
|
+
throw new Error(`${eventType} payload has malformed value`);
|
|
47
|
+
}
|
|
48
|
+
return hex;
|
|
49
|
+
}
|
|
50
|
+
function decodedRow(event, eventType, decoded_payload) {
|
|
51
|
+
return {
|
|
52
|
+
cursor: event.cursor,
|
|
53
|
+
block_height: event.block_height,
|
|
54
|
+
tx_id: event.tx_id,
|
|
55
|
+
tx_index: event.tx_index,
|
|
56
|
+
event_index: event.event_index,
|
|
57
|
+
event_type: eventType,
|
|
58
|
+
decoded_payload,
|
|
59
|
+
source_cursor: event.cursor
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// src/streams/ft-transfer.ts
|
|
64
|
+
function isFtTransfer(event) {
|
|
65
|
+
return event.event_type === "ft_transfer";
|
|
66
|
+
}
|
|
67
|
+
function decodeFtTransfer(event) {
|
|
68
|
+
if (!isFtTransfer(event)) {
|
|
69
|
+
throw new Error(`Expected ft_transfer event, got ${event.event_type}`);
|
|
70
|
+
}
|
|
71
|
+
const payload = event.payload;
|
|
72
|
+
const assetIdentifier = requireString(payload, "asset_identifier", "ft_transfer");
|
|
73
|
+
const sender = requireString(payload, "sender", "ft_transfer");
|
|
74
|
+
const recipient = requireString(payload, "recipient", "ft_transfer");
|
|
75
|
+
const amount = requireAmount(payload, "ft_transfer");
|
|
76
|
+
const { contract_id, token_name } = parseAssetIdentifier(assetIdentifier, "ft_transfer");
|
|
77
|
+
return decodedRow(event, "ft_transfer", {
|
|
78
|
+
asset_identifier: assetIdentifier,
|
|
79
|
+
contract_id: event.contract_id ?? contract_id,
|
|
80
|
+
token_name,
|
|
81
|
+
sender,
|
|
82
|
+
recipient,
|
|
83
|
+
amount
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// src/streams/nft-transfer.ts
|
|
87
|
+
function isNftTransfer(event) {
|
|
88
|
+
return event.event_type === "nft_transfer";
|
|
89
|
+
}
|
|
90
|
+
function decodeNftTransfer(event) {
|
|
91
|
+
if (!isNftTransfer(event)) {
|
|
92
|
+
throw new Error(`Expected nft_transfer event, got ${event.event_type}`);
|
|
93
|
+
}
|
|
94
|
+
const payload = event.payload;
|
|
95
|
+
const assetIdentifier = requireString(payload, "asset_identifier", "nft_transfer");
|
|
96
|
+
const sender = requireString(payload, "sender", "nft_transfer");
|
|
97
|
+
const recipient = requireString(payload, "recipient", "nft_transfer");
|
|
98
|
+
const value = requireHexValue(payload, "nft_transfer");
|
|
99
|
+
const { contract_id, token_name } = parseAssetIdentifier(assetIdentifier, "nft_transfer");
|
|
100
|
+
return decodedRow(event, "nft_transfer", {
|
|
101
|
+
asset_identifier: assetIdentifier,
|
|
102
|
+
contract_id: event.contract_id ?? contract_id,
|
|
103
|
+
token_name,
|
|
104
|
+
sender,
|
|
105
|
+
recipient,
|
|
106
|
+
value
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// src/clarity.ts
|
|
110
|
+
import { cvToValue, deserializeCV } from "@secondlayer/stacks/clarity";
|
|
111
|
+
function toJsonSafe(value) {
|
|
112
|
+
if (typeof value === "bigint")
|
|
113
|
+
return value.toString();
|
|
114
|
+
if (Array.isArray(value))
|
|
115
|
+
return value.map(toJsonSafe);
|
|
116
|
+
if (value && typeof value === "object") {
|
|
117
|
+
const out = {};
|
|
118
|
+
for (const [key, val] of Object.entries(value)) {
|
|
119
|
+
out[key] = toJsonSafe(val);
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
function decodeClarityValue(hex) {
|
|
126
|
+
try {
|
|
127
|
+
const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
128
|
+
return toJsonSafe(cvToValue(deserializeCV(clean)));
|
|
129
|
+
} catch {
|
|
130
|
+
return hex;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// src/streams/print.ts
|
|
135
|
+
function printValueHex(payload) {
|
|
136
|
+
if (typeof payload.raw_value === "string")
|
|
137
|
+
return payload.raw_value;
|
|
138
|
+
const value = payload.value;
|
|
139
|
+
if (typeof value === "string" && value.startsWith("0x"))
|
|
140
|
+
return value;
|
|
141
|
+
if (value && typeof value === "object" && typeof value.hex === "string") {
|
|
142
|
+
return value.hex;
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
function isPrint(event) {
|
|
147
|
+
return event.event_type === "print";
|
|
148
|
+
}
|
|
149
|
+
function decodePrint(event) {
|
|
150
|
+
if (!isPrint(event)) {
|
|
151
|
+
throw new Error(`Expected print event, got ${event.event_type}`);
|
|
152
|
+
}
|
|
153
|
+
const payload = event.payload;
|
|
154
|
+
const topic = optionalString(payload.topic);
|
|
155
|
+
const rawValue = printValueHex(payload);
|
|
156
|
+
const value = rawValue ? decodeClarityValue(rawValue) : toJsonSafe(payload.value ?? null);
|
|
157
|
+
return decodedRow(event, "print", {
|
|
158
|
+
contract_id: event.contract_id ?? optionalString(payload.contract_id),
|
|
159
|
+
payload: { topic, value, raw_value: rawValue }
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// src/streams/stx-events.ts
|
|
163
|
+
function isStxTransfer(event) {
|
|
164
|
+
return event.event_type === "stx_transfer";
|
|
165
|
+
}
|
|
166
|
+
function decodeStxTransfer(event) {
|
|
167
|
+
if (!isStxTransfer(event)) {
|
|
168
|
+
throw new Error(`Expected stx_transfer event, got ${event.event_type}`);
|
|
169
|
+
}
|
|
170
|
+
const payload = event.payload;
|
|
171
|
+
return decodedRow(event, "stx_transfer", {
|
|
172
|
+
sender: requireString(payload, "sender", "stx_transfer"),
|
|
173
|
+
recipient: requireString(payload, "recipient", "stx_transfer"),
|
|
174
|
+
amount: requireAmount(payload, "stx_transfer"),
|
|
175
|
+
memo: optionalString(payload.memo)
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function isStxMint(event) {
|
|
179
|
+
return event.event_type === "stx_mint";
|
|
180
|
+
}
|
|
181
|
+
function decodeStxMint(event) {
|
|
182
|
+
if (!isStxMint(event)) {
|
|
183
|
+
throw new Error(`Expected stx_mint event, got ${event.event_type}`);
|
|
184
|
+
}
|
|
185
|
+
const payload = event.payload;
|
|
186
|
+
return decodedRow(event, "stx_mint", {
|
|
187
|
+
recipient: requireString(payload, "recipient", "stx_mint"),
|
|
188
|
+
amount: requireAmount(payload, "stx_mint")
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function isStxBurn(event) {
|
|
192
|
+
return event.event_type === "stx_burn";
|
|
193
|
+
}
|
|
194
|
+
function decodeStxBurn(event) {
|
|
195
|
+
if (!isStxBurn(event)) {
|
|
196
|
+
throw new Error(`Expected stx_burn event, got ${event.event_type}`);
|
|
197
|
+
}
|
|
198
|
+
const payload = event.payload;
|
|
199
|
+
return decodedRow(event, "stx_burn", {
|
|
200
|
+
sender: requireString(payload, "sender", "stx_burn"),
|
|
201
|
+
amount: requireAmount(payload, "stx_burn")
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function isStxLock(event) {
|
|
205
|
+
return event.event_type === "stx_lock";
|
|
206
|
+
}
|
|
207
|
+
function decodeStxLock(event) {
|
|
208
|
+
if (!isStxLock(event)) {
|
|
209
|
+
throw new Error(`Expected stx_lock event, got ${event.event_type}`);
|
|
210
|
+
}
|
|
211
|
+
const payload = event.payload;
|
|
212
|
+
return decodedRow(event, "stx_lock", {
|
|
213
|
+
sender: requireString(payload, "locked_address", "stx_lock"),
|
|
214
|
+
amount: requireAmountField(payload, "locked_amount", "stx_lock"),
|
|
215
|
+
payload: { unlock_height: optionalString(payload.unlock_height) }
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// src/streams/token-mint-burn.ts
|
|
219
|
+
function assetFields(event, eventType) {
|
|
220
|
+
const assetIdentifier = requireString(event.payload, "asset_identifier", eventType);
|
|
221
|
+
const { contract_id, token_name } = parseAssetIdentifier(assetIdentifier, eventType);
|
|
222
|
+
return {
|
|
223
|
+
asset_identifier: assetIdentifier,
|
|
224
|
+
contract_id: event.contract_id ?? contract_id,
|
|
225
|
+
token_name
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function isFtMint(event) {
|
|
229
|
+
return event.event_type === "ft_mint";
|
|
230
|
+
}
|
|
231
|
+
function decodeFtMint(event) {
|
|
232
|
+
if (!isFtMint(event)) {
|
|
233
|
+
throw new Error(`Expected ft_mint event, got ${event.event_type}`);
|
|
234
|
+
}
|
|
235
|
+
return decodedRow(event, "ft_mint", {
|
|
236
|
+
...assetFields(event, "ft_mint"),
|
|
237
|
+
recipient: requireString(event.payload, "recipient", "ft_mint"),
|
|
238
|
+
amount: requireAmount(event.payload, "ft_mint")
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function isFtBurn(event) {
|
|
242
|
+
return event.event_type === "ft_burn";
|
|
243
|
+
}
|
|
244
|
+
function decodeFtBurn(event) {
|
|
245
|
+
if (!isFtBurn(event)) {
|
|
246
|
+
throw new Error(`Expected ft_burn event, got ${event.event_type}`);
|
|
247
|
+
}
|
|
248
|
+
return decodedRow(event, "ft_burn", {
|
|
249
|
+
...assetFields(event, "ft_burn"),
|
|
250
|
+
sender: requireString(event.payload, "sender", "ft_burn"),
|
|
251
|
+
amount: requireAmount(event.payload, "ft_burn")
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
function isNftMint(event) {
|
|
255
|
+
return event.event_type === "nft_mint";
|
|
256
|
+
}
|
|
257
|
+
function decodeNftMint(event) {
|
|
258
|
+
if (!isNftMint(event)) {
|
|
259
|
+
throw new Error(`Expected nft_mint event, got ${event.event_type}`);
|
|
260
|
+
}
|
|
261
|
+
return decodedRow(event, "nft_mint", {
|
|
262
|
+
...assetFields(event, "nft_mint"),
|
|
263
|
+
recipient: requireString(event.payload, "recipient", "nft_mint"),
|
|
264
|
+
value: requireHexValue(event.payload, "nft_mint")
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
function isNftBurn(event) {
|
|
268
|
+
return event.event_type === "nft_burn";
|
|
269
|
+
}
|
|
270
|
+
function decodeNftBurn(event) {
|
|
271
|
+
if (!isNftBurn(event)) {
|
|
272
|
+
throw new Error(`Expected nft_burn event, got ${event.event_type}`);
|
|
273
|
+
}
|
|
274
|
+
return decodedRow(event, "nft_burn", {
|
|
275
|
+
...assetFields(event, "nft_burn"),
|
|
276
|
+
sender: requireString(event.payload, "sender", "nft_burn"),
|
|
277
|
+
value: requireHexValue(event.payload, "nft_burn")
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
export {
|
|
281
|
+
isStxTransfer,
|
|
282
|
+
isStxMint,
|
|
283
|
+
isStxLock,
|
|
284
|
+
isStxBurn,
|
|
285
|
+
isPrint,
|
|
286
|
+
isNftTransfer,
|
|
287
|
+
isNftMint,
|
|
288
|
+
isNftBurn,
|
|
289
|
+
isFtTransfer,
|
|
290
|
+
isFtMint,
|
|
291
|
+
isFtBurn,
|
|
292
|
+
decodeStxTransfer,
|
|
293
|
+
decodeStxMint,
|
|
294
|
+
decodeStxLock,
|
|
295
|
+
decodeStxBurn,
|
|
296
|
+
decodePrint,
|
|
297
|
+
decodeNftTransfer,
|
|
298
|
+
decodeNftMint,
|
|
299
|
+
decodeNftBurn,
|
|
300
|
+
decodeFtTransfer,
|
|
301
|
+
decodeFtMint,
|
|
302
|
+
decodeFtBurn
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
//# debugId=1AF7A1B9E39F783164756E2164756E21
|
|
306
|
+
//# sourceMappingURL=rows.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/streams/_payload.ts", "../src/streams/ft-transfer.ts", "../src/streams/nft-transfer.ts", "../src/clarity.ts", "../src/streams/print.ts", "../src/streams/stx-events.ts", "../src/streams/token-mint-burn.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { StreamsEvent } from \"./types.ts\";\n\n/** Superset of the columns the decoded_events table holds. Every decoded\n * event's `decoded_payload` is assignable to this, so the indexer's writer\n * can map columns generically instead of per-event-type. */\nexport type DecodedEventColumns = {\n\tcontract_id?: string | null;\n\tasset_identifier?: string | null;\n\tsender?: string | null;\n\trecipient?: string | null;\n\tamount?: string | null;\n\tvalue?: string | null;\n\tmemo?: string | null;\n\t/** JSONB overflow for non-flat types (e.g. print's decoded value). */\n\tpayload?: unknown;\n};\n\nexport function requireString(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${eventType} payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nexport function optionalString(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nexport function requireAmountField(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst amount = requireString(payload, field, eventType);\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(`${eventType} payload has malformed ${field}`);\n\t}\n\treturn amount;\n}\n\nexport function requireAmount(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\treturn requireAmountField(payload, \"amount\", eventType);\n}\n\nexport function parseAssetIdentifier(\n\tassetIdentifier: string,\n\teventType: string,\n): { contract_id: string; token_name: string | null } {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(`${eventType} payload has malformed asset_identifier`);\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\n/** NFT token id: live streams emits a typed Clarity value at `value` and the\n * canonical hex at `raw_value`; prefer raw_value when present. */\nexport function requireHexValue(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(`${eventType} payload missing value`);\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t}\n\treturn hex;\n}\n\n/** Common envelope fields shared by every decoded event, lifted off the\n * source StreamsEvent. The decoder supplies event_type + decoded_payload. */\nexport function decodedRow<T extends string, P>(\n\tevent: StreamsEvent,\n\teventType: T,\n\tdecoded_payload: P,\n): {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: T;\n\tdecoded_payload: P;\n\tsource_cursor: string;\n} {\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: eventType,\n\t\tdecoded_payload,\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
6
|
+
"import {\n\tdecodedRow,\n\tparseAssetIdentifier,\n\trequireAmount,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type { FtTransferPayload } from \"./types.ts\";\n\nexport type FtTransferEvent = Extract<\n\tStreamsEvent,\n\t{ event_type: \"ft_transfer\" }\n>;\n\nexport type DecodedFtTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tdecoded_payload: DecodedFtTransferPayload;\n\tsource_cursor: string;\n};\n\nexport function isFtTransfer(event: StreamsEvent): event is FtTransferEvent {\n\treturn event.event_type === \"ft_transfer\";\n}\n\nexport function decodeFtTransfer(event: StreamsEvent): DecodedFtTransfer {\n\tif (!isFtTransfer(event)) {\n\t\tthrow new Error(`Expected ft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(\n\t\tpayload,\n\t\t\"asset_identifier\",\n\t\t\"ft_transfer\",\n\t);\n\tconst sender = requireString(payload, \"sender\", \"ft_transfer\");\n\tconst recipient = requireString(payload, \"recipient\", \"ft_transfer\");\n\tconst amount = requireAmount(payload, \"ft_transfer\");\n\tconst { contract_id, token_name } = parseAssetIdentifier(\n\t\tassetIdentifier,\n\t\t\"ft_transfer\",\n\t);\n\n\treturn decodedRow(event, \"ft_transfer\", {\n\t\tasset_identifier: assetIdentifier,\n\t\tcontract_id: event.contract_id ?? contract_id,\n\t\ttoken_name,\n\t\tsender,\n\t\trecipient,\n\t\tamount,\n\t});\n}\n",
|
|
7
|
+
"import {\n\tdecodedRow,\n\tparseAssetIdentifier,\n\trequireHexValue,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type { NftTransferPayload } from \"./types.ts\";\n\nexport type NftTransferEvent = Extract<\n\tStreamsEvent,\n\t{ event_type: \"nft_transfer\" }\n>;\n\nexport type DecodedNftTransferPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tdecoded_payload: DecodedNftTransferPayload;\n\tsource_cursor: string;\n};\n\nexport function isNftTransfer(event: StreamsEvent): event is NftTransferEvent {\n\treturn event.event_type === \"nft_transfer\";\n}\n\nexport function decodeNftTransfer(event: StreamsEvent): DecodedNftTransfer {\n\tif (!isNftTransfer(event)) {\n\t\tthrow new Error(`Expected nft_transfer event, got ${event.event_type}`);\n\t}\n\n\tconst payload = event.payload;\n\tconst assetIdentifier = requireString(\n\t\tpayload,\n\t\t\"asset_identifier\",\n\t\t\"nft_transfer\",\n\t);\n\tconst sender = requireString(payload, \"sender\", \"nft_transfer\");\n\tconst recipient = requireString(payload, \"recipient\", \"nft_transfer\");\n\tconst value = requireHexValue(payload, \"nft_transfer\");\n\tconst { contract_id, token_name } = parseAssetIdentifier(\n\t\tassetIdentifier,\n\t\t\"nft_transfer\",\n\t);\n\n\treturn decodedRow(event, \"nft_transfer\", {\n\t\tasset_identifier: assetIdentifier,\n\t\tcontract_id: event.contract_id ?? contract_id,\n\t\ttoken_name,\n\t\tsender,\n\t\trecipient,\n\t\tvalue,\n\t});\n}\n",
|
|
8
|
+
"import { cvToValue, deserializeCV } from \"@secondlayer/stacks/clarity\";\n\n/** Make a cvToValue result JSON-serializable: Clarity (u)ints decode to bigint,\n * which JSON.stringify can't handle — convert recursively to strings. */\nexport function toJsonSafe(value: unknown): unknown {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (Array.isArray(value)) return value.map(toJsonSafe);\n\tif (value && typeof value === \"object\") {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const [key, val] of Object.entries(value)) {\n\t\t\tout[key] = toJsonSafe(val);\n\t\t}\n\t\treturn out;\n\t}\n\treturn value;\n}\n\n/** Decode a hex-encoded Clarity value to JSON-safe JS (uints as strings,\n * buffers as `0x…` hex, tuples as objects). Returns the input hex on failure. */\nexport function decodeClarityValue(hex: string): unknown {\n\ttry {\n\t\tconst clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n\t\treturn toJsonSafe(cvToValue(deserializeCV(clean)));\n\t} catch {\n\t\treturn hex;\n\t}\n}\n",
|
|
9
|
+
"import { decodeClarityValue, toJsonSafe } from \"../clarity.ts\";\nimport { decodedRow, optionalString } from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\n/** Decoded form of a Clarity `print` event:\n * - `topic`: the print topic, when the contract emits a `{ topic, ... }` tuple\n * - `value`: the Clarity value decoded to JSON (uints as strings, buffers as\n * `0x…` hex, tuples as objects)\n * - `raw_value`: the canonical serialized hex, for byte-exact consumers */\nexport type DecodedPrintValue = {\n\ttopic: string | null;\n\tvalue: unknown;\n\traw_value: string | null;\n};\n\nexport type DecodedPrintPayload = {\n\tcontract_id: string | null;\n\tpayload: DecodedPrintValue;\n};\n\nexport type DecodedPrint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"print\";\n\tdecoded_payload: DecodedPrintPayload;\n\tsource_cursor: string;\n};\n\nfunction printValueHex(payload: Record<string, unknown>): string | null {\n\tif (typeof payload.raw_value === \"string\") return payload.raw_value;\n\tconst value = payload.value;\n\tif (typeof value === \"string\" && value.startsWith(\"0x\")) return value;\n\tif (\n\t\tvalue &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t) {\n\t\treturn (value as { hex: string }).hex;\n\t}\n\treturn null;\n}\n\nexport function isPrint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"print\" } {\n\treturn event.event_type === \"print\";\n}\n\nexport function decodePrint(event: StreamsEvent): DecodedPrint {\n\tif (!isPrint(event)) {\n\t\tthrow new Error(`Expected print event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\tconst topic = optionalString(payload.topic);\n\tconst rawValue = printValueHex(payload);\n\n\tconst value = rawValue\n\t\t? decodeClarityValue(rawValue)\n\t\t: toJsonSafe(payload.value ?? null);\n\n\treturn decodedRow(event, \"print\", {\n\t\tcontract_id: event.contract_id ?? optionalString(payload.contract_id),\n\t\tpayload: { topic, value, raw_value: rawValue },\n\t});\n}\n",
|
|
10
|
+
"import {\n\tdecodedRow,\n\toptionalString,\n\trequireAmount,\n\trequireAmountField,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type DecodedStxTransferPayload = {\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n\tmemo: string | null;\n};\n\nexport type DecodedStxTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_transfer\";\n\tdecoded_payload: DecodedStxTransferPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedStxMintPayload = {\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedStxMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_mint\";\n\tdecoded_payload: DecodedStxMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedStxBurnPayload = {\n\tsender: string;\n\tamount: string;\n};\n\nexport type DecodedStxBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_burn\";\n\tdecoded_payload: DecodedStxBurnPayload;\n\tsource_cursor: string;\n};\n\nexport function isStxTransfer(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_transfer\" } {\n\treturn event.event_type === \"stx_transfer\";\n}\n\nexport function decodeStxTransfer(event: StreamsEvent): DecodedStxTransfer {\n\tif (!isStxTransfer(event)) {\n\t\tthrow new Error(`Expected stx_transfer event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_transfer\", {\n\t\tsender: requireString(payload, \"sender\", \"stx_transfer\"),\n\t\trecipient: requireString(payload, \"recipient\", \"stx_transfer\"),\n\t\tamount: requireAmount(payload, \"stx_transfer\"),\n\t\tmemo: optionalString(payload.memo),\n\t});\n}\n\nexport function isStxMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_mint\" } {\n\treturn event.event_type === \"stx_mint\";\n}\n\nexport function decodeStxMint(event: StreamsEvent): DecodedStxMint {\n\tif (!isStxMint(event)) {\n\t\tthrow new Error(`Expected stx_mint event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_mint\", {\n\t\trecipient: requireString(payload, \"recipient\", \"stx_mint\"),\n\t\tamount: requireAmount(payload, \"stx_mint\"),\n\t});\n}\n\nexport function isStxBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_burn\" } {\n\treturn event.event_type === \"stx_burn\";\n}\n\nexport function decodeStxBurn(event: StreamsEvent): DecodedStxBurn {\n\tif (!isStxBurn(event)) {\n\t\tthrow new Error(`Expected stx_burn event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_burn\", {\n\t\tsender: requireString(payload, \"sender\", \"stx_burn\"),\n\t\tamount: requireAmount(payload, \"stx_burn\"),\n\t});\n}\n\nexport type DecodedStxLockPayload = {\n\t// The locked principal maps to `sender` and the locked uSTX to `amount` so\n\t// stx_lock is filterable like the other STX types; the lock-specific\n\t// unlock_height rides in the jsonb `payload` overflow.\n\tsender: string;\n\tamount: string;\n\tpayload: { unlock_height: string | null };\n};\n\nexport type DecodedStxLock = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"stx_lock\";\n\tdecoded_payload: DecodedStxLockPayload;\n\tsource_cursor: string;\n};\n\nexport function isStxLock(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"stx_lock\" } {\n\treturn event.event_type === \"stx_lock\";\n}\n\nexport function decodeStxLock(event: StreamsEvent): DecodedStxLock {\n\tif (!isStxLock(event)) {\n\t\tthrow new Error(`Expected stx_lock event, got ${event.event_type}`);\n\t}\n\tconst payload = event.payload;\n\treturn decodedRow(event, \"stx_lock\", {\n\t\tsender: requireString(payload, \"locked_address\", \"stx_lock\"),\n\t\tamount: requireAmountField(payload, \"locked_amount\", \"stx_lock\"),\n\t\tpayload: { unlock_height: optionalString(payload.unlock_height) },\n\t});\n}\n",
|
|
11
|
+
"import {\n\tdecodedRow,\n\tparseAssetIdentifier,\n\trequireAmount,\n\trequireHexValue,\n\trequireString,\n} from \"./_payload.ts\";\nimport type { StreamsEvent } from \"./types.ts\";\n\nexport type DecodedFtMintPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type DecodedFtMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_mint\";\n\tdecoded_payload: DecodedFtMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedFtBurnPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\tamount: string;\n};\n\nexport type DecodedFtBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_burn\";\n\tdecoded_payload: DecodedFtBurnPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedNftMintPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type DecodedNftMint = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_mint\";\n\tdecoded_payload: DecodedNftMintPayload;\n\tsource_cursor: string;\n};\n\nexport type DecodedNftBurnPayload = {\n\tasset_identifier: string;\n\tcontract_id: string;\n\ttoken_name: string | null;\n\tsender: string;\n\tvalue: string;\n};\n\nexport type DecodedNftBurn = {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_burn\";\n\tdecoded_payload: DecodedNftBurnPayload;\n\tsource_cursor: string;\n};\n\nfunction assetFields(event: StreamsEvent, eventType: string) {\n\tconst assetIdentifier = requireString(\n\t\tevent.payload,\n\t\t\"asset_identifier\",\n\t\teventType,\n\t);\n\tconst { contract_id, token_name } = parseAssetIdentifier(\n\t\tassetIdentifier,\n\t\teventType,\n\t);\n\treturn {\n\t\tasset_identifier: assetIdentifier,\n\t\tcontract_id: event.contract_id ?? contract_id,\n\t\ttoken_name,\n\t};\n}\n\nexport function isFtMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"ft_mint\" } {\n\treturn event.event_type === \"ft_mint\";\n}\n\nexport function decodeFtMint(event: StreamsEvent): DecodedFtMint {\n\tif (!isFtMint(event)) {\n\t\tthrow new Error(`Expected ft_mint event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"ft_mint\", {\n\t\t...assetFields(event, \"ft_mint\"),\n\t\trecipient: requireString(event.payload, \"recipient\", \"ft_mint\"),\n\t\tamount: requireAmount(event.payload, \"ft_mint\"),\n\t});\n}\n\nexport function isFtBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"ft_burn\" } {\n\treturn event.event_type === \"ft_burn\";\n}\n\nexport function decodeFtBurn(event: StreamsEvent): DecodedFtBurn {\n\tif (!isFtBurn(event)) {\n\t\tthrow new Error(`Expected ft_burn event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"ft_burn\", {\n\t\t...assetFields(event, \"ft_burn\"),\n\t\tsender: requireString(event.payload, \"sender\", \"ft_burn\"),\n\t\tamount: requireAmount(event.payload, \"ft_burn\"),\n\t});\n}\n\nexport function isNftMint(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"nft_mint\" } {\n\treturn event.event_type === \"nft_mint\";\n}\n\nexport function decodeNftMint(event: StreamsEvent): DecodedNftMint {\n\tif (!isNftMint(event)) {\n\t\tthrow new Error(`Expected nft_mint event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"nft_mint\", {\n\t\t...assetFields(event, \"nft_mint\"),\n\t\trecipient: requireString(event.payload, \"recipient\", \"nft_mint\"),\n\t\tvalue: requireHexValue(event.payload, \"nft_mint\"),\n\t});\n}\n\nexport function isNftBurn(\n\tevent: StreamsEvent,\n): event is StreamsEvent & { event_type: \"nft_burn\" } {\n\treturn event.event_type === \"nft_burn\";\n}\n\nexport function decodeNftBurn(event: StreamsEvent): DecodedNftBurn {\n\tif (!isNftBurn(event)) {\n\t\tthrow new Error(`Expected nft_burn event, got ${event.event_type}`);\n\t}\n\treturn decodedRow(event, \"nft_burn\", {\n\t\t...assetFields(event, \"nft_burn\"),\n\t\tsender: requireString(event.payload, \"sender\", \"nft_burn\"),\n\t\tvalue: requireHexValue(event.payload, \"nft_burn\"),\n\t});\n}\n"
|
|
12
|
+
],
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "1AF7A1B9E39F783164756E2164756E21",
|
|
15
|
+
"names": []
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secondlayer/sdk",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.42.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
"types": "./dist/streams/index.d.ts",
|
|
21
21
|
"import": "./dist/streams/index.js"
|
|
22
22
|
},
|
|
23
|
+
"./streams/rows": {
|
|
24
|
+
"types": "./dist/streams/rows.d.ts",
|
|
25
|
+
"import": "./dist/streams/rows.js"
|
|
26
|
+
},
|
|
23
27
|
"./subgraphs": {
|
|
24
28
|
"types": "./dist/subgraphs/index.d.ts",
|
|
25
29
|
"import": "./dist/subgraphs/index.js"
|
|
@@ -46,7 +50,7 @@
|
|
|
46
50
|
"prepublishOnly": "bun run build"
|
|
47
51
|
},
|
|
48
52
|
"dependencies": {
|
|
49
|
-
"@secondlayer/shared": "^7.
|
|
53
|
+
"@secondlayer/shared": "^7.4.0",
|
|
50
54
|
"@secondlayer/stacks": "^3.0.0",
|
|
51
55
|
"@secondlayer/subgraphs": "^3.23.1"
|
|
52
56
|
},
|