@secondlayer/stacks 2.22.0 → 3.0.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/dist/shared/stacks-86ngngnk.cjs +271 -0
- package/dist/shared/stacks-86ngngnk.cjs.map +12 -0
- package/dist/shared/stacks-qc25xx02.js +259 -0
- package/dist/shared/stacks-qc25xx02.js.map +12 -0
- package/dist/src/accounts/index.js +1 -2
- package/dist/src/accounts/index.js.map +2 -2
- package/dist/src/actions/index.js +1 -2
- package/dist/src/actions/index.js.map +1 -1
- package/dist/src/bitcoin/index.js +1 -2
- package/dist/src/bitcoin/index.js.map +2 -2
- package/dist/src/bns/index.js +1 -2
- package/dist/src/bns/index.js.map +2 -2
- package/dist/src/chains/index.js +1 -2
- package/dist/src/chains/index.js.map +1 -1
- package/dist/src/clarity/index.js +1 -2
- package/dist/src/clarity/index.js.map +1 -1
- package/dist/src/filters/index.cjs +1 -261
- package/dist/src/filters/index.cjs.map +3 -6
- package/dist/src/filters/index.d.cts +52 -27
- package/dist/src/filters/index.d.ts +52 -27
- package/dist/src/filters/index.js +15 -249
- package/dist/src/filters/index.js.map +3 -6
- package/dist/src/index.cjs +2 -75
- package/dist/src/index.cjs.map +3 -8
- package/dist/src/index.d.cts +401 -164
- package/dist/src/index.d.ts +401 -164
- package/dist/src/index.js +5 -78
- package/dist/src/index.js.map +3 -8
- package/dist/src/postconditions/index.js +1 -2
- package/dist/src/postconditions/index.js.map +1 -1
- package/dist/src/pox/index.cjs +71 -14
- package/dist/src/pox/index.cjs.map +4 -4
- package/dist/src/pox/index.d.cts +437 -1
- package/dist/src/pox/index.d.ts +437 -1
- package/dist/src/pox/index.js +71 -15
- package/dist/src/pox/index.js.map +4 -4
- package/dist/src/pox5/index.cjs +70 -33
- package/dist/src/pox5/index.cjs.map +3 -3
- package/dist/src/pox5/index.d.cts +899 -1
- package/dist/src/pox5/index.d.ts +899 -1
- package/dist/src/pox5/index.js +70 -34
- package/dist/src/pox5/index.js.map +3 -3
- package/dist/src/sbtc/index.js +1 -2
- package/dist/src/sbtc/index.js.map +2 -2
- package/dist/src/stackingdao/index.js +1 -2
- package/dist/src/stackingdao/index.js.map +2 -2
- package/dist/src/subscriptions/index.js +1 -2
- package/dist/src/subscriptions/index.js.map +1 -1
- package/dist/src/transactions/index.js +1 -2
- package/dist/src/transactions/index.js.map +1 -1
- package/dist/src/utils/index.js +1 -2
- package/dist/src/utils/index.js.map +2 -2
- package/dist/src/x402/index.js +1 -2
- package/dist/src/x402/index.js.map +2 -2
- package/package.json +3 -5
- package/dist/shared/stacks-cfazrteq.js +0 -20
- package/dist/shared/stacks-cfazrteq.js.map +0 -9
|
@@ -1,259 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
CHAIN_EVENT_FILTER_TYPES,
|
|
3
|
+
DECODED_EVENT_TYPES,
|
|
4
|
+
assertAssetIdentifier,
|
|
5
|
+
assertContractId,
|
|
6
|
+
assertPrincipalish,
|
|
7
|
+
assetId,
|
|
8
|
+
fromSubgraphSource,
|
|
9
|
+
hasWildcard,
|
|
10
|
+
isPrincipal,
|
|
11
|
+
makeChainEventFilter,
|
|
12
|
+
on
|
|
13
|
+
} from "../../shared/stacks-qc25xx02.js";
|
|
14
|
+
import"../../shared/stacks-azp00pve.js";
|
|
4
15
|
import"../../shared/stacks-qs5fzts5.js";
|
|
5
|
-
import"../../shared/stacks-cfazrteq.js";
|
|
6
|
-
|
|
7
|
-
// src/filters/event-types.ts
|
|
8
|
-
var DECODED_EVENT_TYPES = [
|
|
9
|
-
"stx_transfer",
|
|
10
|
-
"stx_mint",
|
|
11
|
-
"stx_burn",
|
|
12
|
-
"stx_lock",
|
|
13
|
-
"ft_transfer",
|
|
14
|
-
"ft_mint",
|
|
15
|
-
"ft_burn",
|
|
16
|
-
"nft_transfer",
|
|
17
|
-
"nft_mint",
|
|
18
|
-
"nft_burn",
|
|
19
|
-
"print"
|
|
20
|
-
];
|
|
21
|
-
var CHAIN_EVENT_FILTER_TYPES = [
|
|
22
|
-
"stx_transfer",
|
|
23
|
-
"stx_mint",
|
|
24
|
-
"stx_burn",
|
|
25
|
-
"stx_lock",
|
|
26
|
-
"ft_transfer",
|
|
27
|
-
"ft_mint",
|
|
28
|
-
"ft_burn",
|
|
29
|
-
"nft_transfer",
|
|
30
|
-
"nft_mint",
|
|
31
|
-
"nft_burn",
|
|
32
|
-
"contract_call",
|
|
33
|
-
"contract_deploy",
|
|
34
|
-
"print_event",
|
|
35
|
-
"sbtc_deposit",
|
|
36
|
-
"sbtc_withdrawal_create",
|
|
37
|
-
"sbtc_withdrawal_accept",
|
|
38
|
-
"sbtc_withdrawal_reject",
|
|
39
|
-
"sbtc_withdrawal_swept_confirmed"
|
|
40
|
-
];
|
|
41
|
-
// src/filters/validate.ts
|
|
42
|
-
function isPrincipal(value) {
|
|
43
|
-
const parts = value.split(".");
|
|
44
|
-
if (parts.length > 2)
|
|
45
|
-
return false;
|
|
46
|
-
const [addr, contractName] = parts;
|
|
47
|
-
if (!addr || !isValidAddress(addr))
|
|
48
|
-
return false;
|
|
49
|
-
if (parts.length === 2 && !contractName)
|
|
50
|
-
return false;
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
function hasWildcard(value) {
|
|
54
|
-
return value.includes("*");
|
|
55
|
-
}
|
|
56
|
-
function assertPrincipalish(field, value) {
|
|
57
|
-
if (hasWildcard(value))
|
|
58
|
-
return;
|
|
59
|
-
if (!isPrincipal(value)) {
|
|
60
|
-
throw new Error(`${field} "${value}" is not a valid Stacks principal (SP…/ST…, optionally .contract-name).`);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function assertAssetIdentifier(field, value) {
|
|
64
|
-
if (hasWildcard(value))
|
|
65
|
-
return;
|
|
66
|
-
const [contractId, assetName, ...rest] = value.split("::");
|
|
67
|
-
if (!contractId || !assetName || rest.length > 0 || !contractId.includes(".") || !isPrincipal(contractId)) {
|
|
68
|
-
throw new Error(`${field} "${value}" is not a valid asset identifier (SP….contract-name::asset-name). Passing a bare contract id here matches zero rows — use contractId for that.`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function assertContractId(field, value) {
|
|
72
|
-
if (hasWildcard(value))
|
|
73
|
-
return;
|
|
74
|
-
if (value.includes("::")) {
|
|
75
|
-
throw new Error(`${field} "${value}" is an asset identifier, not a contract id — use assetIdentifier for that.`);
|
|
76
|
-
}
|
|
77
|
-
if (!value.includes(".") || !isPrincipal(value)) {
|
|
78
|
-
throw new Error(`${field} "${value}" is not a valid contract id (SP….contract-name).`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// src/filters/factories.ts
|
|
83
|
-
var PRINCIPAL_FIELDS = new Set([
|
|
84
|
-
"sender",
|
|
85
|
-
"recipient",
|
|
86
|
-
"caller",
|
|
87
|
-
"deployer",
|
|
88
|
-
"lockedAddress"
|
|
89
|
-
]);
|
|
90
|
-
var AMOUNT_FIELDS = new Set(["minAmount", "maxAmount"]);
|
|
91
|
-
var DECORATIVE_FIELDS = new Set(["abi", "prints"]);
|
|
92
|
-
function specEntries(spec) {
|
|
93
|
-
return Object.entries(spec).filter(([key, value]) => key !== "type" && value !== undefined);
|
|
94
|
-
}
|
|
95
|
-
function validateSpec(spec) {
|
|
96
|
-
for (const [key, value] of specEntries(spec)) {
|
|
97
|
-
if (PRINCIPAL_FIELDS.has(key)) {
|
|
98
|
-
assertPrincipalish(key, value);
|
|
99
|
-
} else if (key === "assetIdentifier") {
|
|
100
|
-
assertAssetIdentifier(key, value);
|
|
101
|
-
} else if (key === "contractId") {
|
|
102
|
-
for (const id of Array.isArray(value) ? value : [value]) {
|
|
103
|
-
assertContractId(key, id);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function unsupported(surface, field, hint) {
|
|
109
|
-
throw new Error(`${field} cannot be expressed on ${surface} — ${hint}. Drop the field from the filter or use the surface that supports it.`);
|
|
110
|
-
}
|
|
111
|
-
function assertNoWildcards(surface, spec) {
|
|
112
|
-
for (const [key, value] of specEntries(spec)) {
|
|
113
|
-
if (typeof value === "string" && hasWildcard(value)) {
|
|
114
|
-
unsupported(surface, `${key} wildcard "${value}"`, "wildcard patterns are Subscriptions-only");
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
function toChainTrigger(spec) {
|
|
119
|
-
const out = {};
|
|
120
|
-
for (const [key, value] of specEntries(spec)) {
|
|
121
|
-
if (DECORATIVE_FIELDS.has(key))
|
|
122
|
-
continue;
|
|
123
|
-
if (Array.isArray(value)) {
|
|
124
|
-
unsupported("Subscriptions", `${key} set`, "a chain trigger targets ONE contract — create one subscription per contract, or use Index/Subgraphs which accept the set");
|
|
125
|
-
}
|
|
126
|
-
out[key] = typeof value === "bigint" ? value.toString() : value;
|
|
127
|
-
}
|
|
128
|
-
return { type: spec.type, ...out };
|
|
129
|
-
}
|
|
130
|
-
function toIndexParams(spec, extra = {}) {
|
|
131
|
-
assertNoWildcards("Index events", spec);
|
|
132
|
-
const out = {
|
|
133
|
-
eventType: spec.type === "print_event" ? "print" : spec.type
|
|
134
|
-
};
|
|
135
|
-
for (const [key, value] of specEntries(spec)) {
|
|
136
|
-
if (DECORATIVE_FIELDS.has(key))
|
|
137
|
-
continue;
|
|
138
|
-
if (AMOUNT_FIELDS.has(key)) {
|
|
139
|
-
unsupported("Index events", key, "amount predicates are Subscriptions/Subgraphs-only; filter client-side on the decoded rows");
|
|
140
|
-
}
|
|
141
|
-
if (key === "topic") {
|
|
142
|
-
unsupported("Index events", "topic", "per-topic reads are Subgraphs/Subscriptions-only (or read the contract's print feed and switch on topic)");
|
|
143
|
-
}
|
|
144
|
-
if (key === "lockedAddress") {
|
|
145
|
-
unsupported("Index events", "lockedAddress", "stx_lock address filtering is Subscriptions/Subgraphs-only");
|
|
146
|
-
}
|
|
147
|
-
if (key === "caller") {
|
|
148
|
-
unsupported("Index events", "caller", "contract-call fields live on index.contractCalls");
|
|
149
|
-
}
|
|
150
|
-
out[key] = value;
|
|
151
|
-
}
|
|
152
|
-
return { ...out, ...extra };
|
|
153
|
-
}
|
|
154
|
-
function toStreamsParams(spec, extra = {}) {
|
|
155
|
-
assertNoWildcards("Streams", spec);
|
|
156
|
-
const out = {
|
|
157
|
-
types: [spec.type === "print_event" ? "print" : spec.type]
|
|
158
|
-
};
|
|
159
|
-
for (const [key, value] of specEntries(spec)) {
|
|
160
|
-
if (DECORATIVE_FIELDS.has(key))
|
|
161
|
-
continue;
|
|
162
|
-
if (AMOUNT_FIELDS.has(key)) {
|
|
163
|
-
unsupported("Streams", key, "amount predicates are Subscriptions/Subgraphs-only");
|
|
164
|
-
}
|
|
165
|
-
if (key === "trait") {
|
|
166
|
-
unsupported("Streams", "trait", "Streams has no trait resolution — Index and Subgraphs do");
|
|
167
|
-
}
|
|
168
|
-
if (key === "topic") {
|
|
169
|
-
unsupported("Streams", "topic", "per-topic filtering is Subgraphs/Subscriptions-only");
|
|
170
|
-
}
|
|
171
|
-
if (key === "lockedAddress") {
|
|
172
|
-
unsupported("Streams", "lockedAddress", "stx_lock address filtering is Subscriptions/Subgraphs-only");
|
|
173
|
-
}
|
|
174
|
-
out[key] = value;
|
|
175
|
-
}
|
|
176
|
-
return { ...out, ...extra };
|
|
177
|
-
}
|
|
178
|
-
function toContractCallsParams(spec, extra = {}) {
|
|
179
|
-
assertNoWildcards("Index contract-calls", spec);
|
|
180
|
-
const out = {};
|
|
181
|
-
for (const [key, value] of specEntries(spec)) {
|
|
182
|
-
if (DECORATIVE_FIELDS.has(key))
|
|
183
|
-
continue;
|
|
184
|
-
if (key === "caller") {
|
|
185
|
-
unsupported("Index contract-calls", "caller", "caller filtering is Subscriptions/Subgraphs-only (the endpoint filters by tx sender)");
|
|
186
|
-
}
|
|
187
|
-
out[key] = value;
|
|
188
|
-
}
|
|
189
|
-
return { ...out, ...extra };
|
|
190
|
-
}
|
|
191
|
-
function toSubgraphSource(spec) {
|
|
192
|
-
return Object.fromEntries([
|
|
193
|
-
["type", spec.type],
|
|
194
|
-
...specEntries(spec)
|
|
195
|
-
]);
|
|
196
|
-
}
|
|
197
|
-
var DECODED_MEMBERS = new Set([
|
|
198
|
-
"stx_transfer",
|
|
199
|
-
"stx_mint",
|
|
200
|
-
"stx_burn",
|
|
201
|
-
"stx_lock",
|
|
202
|
-
"ft_transfer",
|
|
203
|
-
"ft_mint",
|
|
204
|
-
"ft_burn",
|
|
205
|
-
"nft_transfer",
|
|
206
|
-
"nft_mint",
|
|
207
|
-
"nft_burn",
|
|
208
|
-
"print_event"
|
|
209
|
-
]);
|
|
210
|
-
function makeChainEventFilter(type, fields) {
|
|
211
|
-
const spec = { type, ...fields };
|
|
212
|
-
validateSpec(spec);
|
|
213
|
-
const filter = { ...spec };
|
|
214
|
-
filter.toChainTrigger = () => toChainTrigger(spec);
|
|
215
|
-
if (DECODED_MEMBERS.has(type)) {
|
|
216
|
-
filter.toIndexParams = (extra) => toIndexParams(spec, extra);
|
|
217
|
-
filter.toStreamsParams = (extra) => toStreamsParams(spec, extra);
|
|
218
|
-
}
|
|
219
|
-
if (type === "contract_call") {
|
|
220
|
-
filter.toContractCallsParams = (extra) => toContractCallsParams(spec, extra);
|
|
221
|
-
}
|
|
222
|
-
if (!type.startsWith("sbtc_")) {
|
|
223
|
-
filter.toSubgraphSource = () => toSubgraphSource(spec);
|
|
224
|
-
}
|
|
225
|
-
return filter;
|
|
226
|
-
}
|
|
227
|
-
function fromSubgraphSource(source) {
|
|
228
|
-
const { type, ...fields } = source;
|
|
229
|
-
return makeChainEventFilter(type, fields);
|
|
230
|
-
}
|
|
231
|
-
var on = {
|
|
232
|
-
stxTransfer: (fields = {}) => makeChainEventFilter("stx_transfer", fields),
|
|
233
|
-
stxMint: (fields = {}) => makeChainEventFilter("stx_mint", fields),
|
|
234
|
-
stxBurn: (fields = {}) => makeChainEventFilter("stx_burn", fields),
|
|
235
|
-
stxLock: (fields = {}) => makeChainEventFilter("stx_lock", fields),
|
|
236
|
-
ftTransfer: (fields = {}) => makeChainEventFilter("ft_transfer", fields),
|
|
237
|
-
ftMint: (fields = {}) => makeChainEventFilter("ft_mint", fields),
|
|
238
|
-
ftBurn: (fields = {}) => makeChainEventFilter("ft_burn", fields),
|
|
239
|
-
nftTransfer: (fields = {}) => makeChainEventFilter("nft_transfer", fields),
|
|
240
|
-
nftMint: (fields = {}) => makeChainEventFilter("nft_mint", fields),
|
|
241
|
-
nftBurn: (fields = {}) => makeChainEventFilter("nft_burn", fields),
|
|
242
|
-
contractCall: (fields = {}) => makeChainEventFilter("contract_call", fields),
|
|
243
|
-
contractDeploy: (fields = {}) => makeChainEventFilter("contract_deploy", fields),
|
|
244
|
-
print: (fields = {}) => makeChainEventFilter("print_event", fields),
|
|
245
|
-
sbtcDeposit: (fields = {}) => makeChainEventFilter("sbtc_deposit", fields),
|
|
246
|
-
sbtcWithdrawalCreate: (fields = {}) => makeChainEventFilter("sbtc_withdrawal_create", fields),
|
|
247
|
-
sbtcWithdrawalAccept: (fields = {}) => makeChainEventFilter("sbtc_withdrawal_accept", fields),
|
|
248
|
-
sbtcWithdrawalReject: (fields = {}) => makeChainEventFilter("sbtc_withdrawal_reject", fields),
|
|
249
|
-
sbtcWithdrawalSweptConfirmed: (fields = {}) => makeChainEventFilter("sbtc_withdrawal_swept_confirmed", fields)
|
|
250
|
-
};
|
|
251
16
|
export {
|
|
252
17
|
on,
|
|
253
18
|
makeChainEventFilter,
|
|
254
19
|
isPrincipal,
|
|
255
20
|
hasWildcard,
|
|
256
21
|
fromSubgraphSource,
|
|
22
|
+
assetId,
|
|
257
23
|
assertPrincipalish,
|
|
258
24
|
assertContractId,
|
|
259
25
|
assertAssetIdentifier,
|
|
@@ -261,5 +27,5 @@ export {
|
|
|
261
27
|
CHAIN_EVENT_FILTER_TYPES
|
|
262
28
|
};
|
|
263
29
|
|
|
264
|
-
//# debugId=
|
|
30
|
+
//# debugId=FBE00090F020672E64756E2164756E21
|
|
265
31
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [
|
|
3
|
+
"sources": [],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"// The decoded event-type vocabulary — canonical home. Index (decoded layer)\n// and Streams (canonical firehose) expose the SAME set. This lives in\n// @secondlayer/stacks because it is the leaf of the dependency graph\n// (shared → stacks), so no package can drift a private copy upward:\n// @secondlayer/shared re-exports it for back-compat.\nexport const DECODED_EVENT_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print\",\n] as const;\n\nexport type DecodedEventType = (typeof DECODED_EVENT_TYPES)[number];\n\n/** Every chain-event filter member across all four surfaces: the 10 decoded\n * token/STX types, the three contract-shaped types (spelled as subgraphs and\n * triggers spell them — Index/Streams project `print_event` → `print`), and\n * the five sBTC lifecycle types (Subscriptions-only). */\nexport const CHAIN_EVENT_FILTER_TYPES = [\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"contract_call\",\n\t\"contract_deploy\",\n\t\"print_event\",\n\t\"sbtc_deposit\",\n\t\"sbtc_withdrawal_create\",\n\t\"sbtc_withdrawal_accept\",\n\t\"sbtc_withdrawal_reject\",\n\t\"sbtc_withdrawal_swept_confirmed\",\n] as const;\n\nexport type ChainEventFilterType = (typeof CHAIN_EVENT_FILTER_TYPES)[number];\n",
|
|
6
|
-
"import { isValidAddress } from \"../utils/address.ts\";\n\n/** A validated Stacks principal (standard or contract). Branded so downstream\n * code can require \"already validated\" without re-checking. */\nexport type Principal = string & { readonly __principal: unique symbol };\n\n/** `true` for a standard (`SP…`/`ST…`) or contract (`SP….name`) principal. */\nexport function isPrincipal(value: string): value is Principal {\n\tconst parts = value.split(\".\");\n\tif (parts.length > 2) return false;\n\tconst [addr, contractName] = parts;\n\tif (!addr || !isValidAddress(addr)) return false;\n\tif (parts.length === 2 && !contractName) return false;\n\treturn true;\n}\n\n/** Subscriptions match `*` wildcards in principal/identifier patterns; every\n * other surface treats the value literally. */\nexport function hasWildcard(value: string): boolean {\n\treturn value.includes(\"*\");\n}\n\n/** Throw unless `value` is a principal or a wildcard pattern. The factories\n * call this so a swapped argument (asset id where a sender belongs, typo'd\n * address) fails at construction — not as a silent zero-row query. */\nexport function assertPrincipalish(field: string, value: string): void {\n\tif (hasWildcard(value)) return;\n\tif (!isPrincipal(value)) {\n\t\tthrow new Error(\n\t\t\t`${field} \"${value}\" is not a valid Stacks principal (SP…/ST…, optionally .contract-name).`,\n\t\t);\n\t}\n}\n\n/** Throw unless `value` looks like `SP….contract::asset` (or a wildcard). */\nexport function assertAssetIdentifier(field: string, value: string): void {\n\tif (hasWildcard(value)) return;\n\tconst [contractId, assetName, ...rest] = value.split(\"::\");\n\tif (\n\t\t!contractId ||\n\t\t!assetName ||\n\t\trest.length > 0 ||\n\t\t!contractId.includes(\".\") ||\n\t\t!isPrincipal(contractId)\n\t) {\n\t\tthrow new Error(\n\t\t\t`${field} \"${value}\" is not a valid asset identifier (SP….contract-name::asset-name). Passing a bare contract id here matches zero rows — use contractId for that.`,\n\t\t);\n\t}\n}\n\n/** Throw unless `value` is a contract id `SP….name` (or a wildcard). */\nexport function assertContractId(field: string, value: string): void {\n\tif (hasWildcard(value)) return;\n\tif (value.includes(\"::\")) {\n\t\tthrow new Error(\n\t\t\t`${field} \"${value}\" is an asset identifier, not a contract id — use assetIdentifier for that.`,\n\t\t);\n\t}\n\tif (!value.includes(\".\") || !isPrincipal(value)) {\n\t\tthrow new Error(\n\t\t\t`${field} \"${value}\" is not a valid contract id (SP….contract-name).`,\n\t\t);\n\t}\n}\n",
|
|
7
|
-
"import type { AbiContract } from \"../clarity/abi/contract.ts\";\nimport type { ChainEventFilterType } from \"./event-types.ts\";\nimport type { SubgraphMemberType, SubgraphSourceSpec } from \"./types.ts\";\nimport type {\n\tChainEventFilter,\n\tChainEventFilterSpec,\n\tChainTriggerShape,\n\tContractCallsParamsShape,\n\tIndexEventsParamsShape,\n\tPrintFieldType,\n\tSpecFor,\n\tStreamsParamsShape,\n} from \"./types.ts\";\nimport {\n\tassertAssetIdentifier,\n\tassertContractId,\n\tassertPrincipalish,\n\thasWildcard,\n} from \"./validate.ts\";\n\n// ── Field metadata driving validation and projections ────────────────────\n\nconst PRINCIPAL_FIELDS = new Set([\n\t\"sender\",\n\t\"recipient\",\n\t\"caller\",\n\t\"deployer\",\n\t\"lockedAddress\",\n]);\nconst AMOUNT_FIELDS = new Set([\"minAmount\", \"maxAmount\"]);\n/** Fields with no filtering semantics — safe to drop in a projection. */\nconst DECORATIVE_FIELDS = new Set([\"abi\", \"prints\"]);\n\nfunction specEntries(spec: ChainEventFilterSpec): Array<[string, unknown]> {\n\treturn Object.entries(spec).filter(\n\t\t([key, value]) => key !== \"type\" && value !== undefined,\n\t);\n}\n\nfunction validateSpec(spec: ChainEventFilterSpec): void {\n\tfor (const [key, value] of specEntries(spec)) {\n\t\tif (PRINCIPAL_FIELDS.has(key)) {\n\t\t\tassertPrincipalish(key, value as string);\n\t\t} else if (key === \"assetIdentifier\") {\n\t\t\tassertAssetIdentifier(key, value as string);\n\t\t} else if (key === \"contractId\") {\n\t\t\t// A contract SET validates member-wise — one bad id in a router+pools\n\t\t\t// list must fail as loudly as a bad single id.\n\t\t\tfor (const id of Array.isArray(value) ? value : [value]) {\n\t\t\t\tassertContractId(key, id as string);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Throw for a field the target surface cannot express — dropping it would\n * silently widen the match, which is the exact bug this module exists to\n * kill. Names the surface that CAN express it. */\nfunction unsupported(surface: string, field: string, hint: string): never {\n\tthrow new Error(\n\t\t`${field} cannot be expressed on ${surface} — ${hint}. Drop the field from the filter or use the surface that supports it.`,\n\t);\n}\n\nfunction assertNoWildcards(surface: string, spec: ChainEventFilterSpec): void {\n\tfor (const [key, value] of specEntries(spec)) {\n\t\tif (typeof value === \"string\" && hasWildcard(value)) {\n\t\t\tunsupported(\n\t\t\t\tsurface,\n\t\t\t\t`${key} wildcard \"${value}\"`,\n\t\t\t\t\"wildcard patterns are Subscriptions-only\",\n\t\t\t);\n\t\t}\n\t}\n}\n\n// ── Projections ──────────────────────────────────────────────────────────\n\nfunction toChainTrigger(spec: ChainEventFilterSpec): ChainTriggerShape {\n\tconst out: Record<string, string | number> = {};\n\tfor (const [key, value] of specEntries(spec)) {\n\t\tif (DECORATIVE_FIELDS.has(key)) continue;\n\t\tif (Array.isArray(value)) {\n\t\t\t// One trigger, one contract: silently taking the first would watch\n\t\t\t// a fraction of what the filter says. Create one subscription per\n\t\t\t// contract instead.\n\t\t\tunsupported(\n\t\t\t\t\"Subscriptions\",\n\t\t\t\t`${key} set`,\n\t\t\t\t\"a chain trigger targets ONE contract — create one subscription per contract, or use Index/Subgraphs which accept the set\",\n\t\t\t);\n\t\t}\n\t\t// The one sanctioned bigint→string boundary.\n\t\tout[key] =\n\t\t\ttypeof value === \"bigint\" ? value.toString() : (value as string | number);\n\t}\n\treturn { type: spec.type, ...out };\n}\n\nfunction toIndexParams(\n\tspec: ChainEventFilterSpec,\n\textra: Record<string, unknown> = {},\n): IndexEventsParamsShape {\n\tassertNoWildcards(\"Index events\", spec);\n\tconst out: Record<string, unknown> = {\n\t\teventType: spec.type === \"print_event\" ? \"print\" : spec.type,\n\t};\n\tfor (const [key, value] of specEntries(spec)) {\n\t\tif (DECORATIVE_FIELDS.has(key)) continue;\n\t\tif (AMOUNT_FIELDS.has(key)) {\n\t\t\tunsupported(\n\t\t\t\t\"Index events\",\n\t\t\t\tkey,\n\t\t\t\t\"amount predicates are Subscriptions/Subgraphs-only; filter client-side on the decoded rows\",\n\t\t\t);\n\t\t}\n\t\tif (key === \"topic\") {\n\t\t\tunsupported(\n\t\t\t\t\"Index events\",\n\t\t\t\t\"topic\",\n\t\t\t\t\"per-topic reads are Subgraphs/Subscriptions-only (or read the contract's print feed and switch on topic)\",\n\t\t\t);\n\t\t}\n\t\tif (key === \"lockedAddress\") {\n\t\t\tunsupported(\n\t\t\t\t\"Index events\",\n\t\t\t\t\"lockedAddress\",\n\t\t\t\t\"stx_lock address filtering is Subscriptions/Subgraphs-only\",\n\t\t\t);\n\t\t}\n\t\tif (key === \"caller\") {\n\t\t\tunsupported(\n\t\t\t\t\"Index events\",\n\t\t\t\t\"caller\",\n\t\t\t\t\"contract-call fields live on index.contractCalls\",\n\t\t\t);\n\t\t}\n\t\tout[key] = value;\n\t}\n\treturn { ...out, ...extra } as IndexEventsParamsShape;\n}\n\nfunction toStreamsParams(\n\tspec: ChainEventFilterSpec,\n\textra: Record<string, unknown> = {},\n): StreamsParamsShape {\n\tassertNoWildcards(\"Streams\", spec);\n\tconst out: Record<string, unknown> = {\n\t\ttypes: [spec.type === \"print_event\" ? \"print\" : spec.type],\n\t};\n\tfor (const [key, value] of specEntries(spec)) {\n\t\tif (DECORATIVE_FIELDS.has(key)) continue;\n\t\tif (AMOUNT_FIELDS.has(key)) {\n\t\t\tunsupported(\n\t\t\t\t\"Streams\",\n\t\t\t\tkey,\n\t\t\t\t\"amount predicates are Subscriptions/Subgraphs-only\",\n\t\t\t);\n\t\t}\n\t\tif (key === \"trait\") {\n\t\t\tunsupported(\n\t\t\t\t\"Streams\",\n\t\t\t\t\"trait\",\n\t\t\t\t\"Streams has no trait resolution — Index and Subgraphs do\",\n\t\t\t);\n\t\t}\n\t\tif (key === \"topic\") {\n\t\t\tunsupported(\n\t\t\t\t\"Streams\",\n\t\t\t\t\"topic\",\n\t\t\t\t\"per-topic filtering is Subgraphs/Subscriptions-only\",\n\t\t\t);\n\t\t}\n\t\tif (key === \"lockedAddress\") {\n\t\t\tunsupported(\n\t\t\t\t\"Streams\",\n\t\t\t\t\"lockedAddress\",\n\t\t\t\t\"stx_lock address filtering is Subscriptions/Subgraphs-only\",\n\t\t\t);\n\t\t}\n\t\tout[key] = value;\n\t}\n\treturn { ...out, ...extra } as StreamsParamsShape;\n}\n\nfunction toContractCallsParams(\n\tspec: ChainEventFilterSpec,\n\textra: Record<string, unknown> = {},\n): ContractCallsParamsShape {\n\tassertNoWildcards(\"Index contract-calls\", spec);\n\tconst out: Record<string, unknown> = {};\n\tfor (const [key, value] of specEntries(spec)) {\n\t\tif (DECORATIVE_FIELDS.has(key)) continue;\n\t\tif (key === \"caller\") {\n\t\t\tunsupported(\n\t\t\t\t\"Index contract-calls\",\n\t\t\t\t\"caller\",\n\t\t\t\t\"caller filtering is Subscriptions/Subgraphs-only (the endpoint filters by tx sender)\",\n\t\t\t);\n\t\t}\n\t\tout[key] = value;\n\t}\n\treturn { ...out, ...extra } as ContractCallsParamsShape;\n}\n\nfunction toSubgraphSource(spec: ChainEventFilterSpec): ChainEventFilterSpec {\n\t// The spec IS the subgraph source shape (camelCase, bigint amounts,\n\t// literal prints/abi preserved). Strip the projection methods by copying\n\t// data fields only.\n\treturn Object.fromEntries([\n\t\t[\"type\", spec.type],\n\t\t...specEntries(spec),\n\t]) as unknown as ChainEventFilterSpec;\n}\n\n// ── Factory ──────────────────────────────────────────────────────────────\n\nconst DECODED_MEMBERS = new Set<ChainEventFilterType>([\n\t\"stx_transfer\",\n\t\"stx_mint\",\n\t\"stx_burn\",\n\t\"stx_lock\",\n\t\"ft_transfer\",\n\t\"ft_mint\",\n\t\"ft_burn\",\n\t\"nft_transfer\",\n\t\"nft_mint\",\n\t\"nft_burn\",\n\t\"print_event\",\n]);\n\n/** Build a canonical filter: validated spec + the projections its member\n * supports (methods are attached per member at runtime, matching the\n * type-level gating exactly). `const F` preserves field literals — a\n * `prints`/`abi` declaration keeps its exact type through\n * `toSubgraphSource()`, which is what feeds `defineSubgraph` narrowing. */\nexport function makeChainEventFilter<\n\tT extends ChainEventFilterType,\n\tconst F extends Omit<SpecFor<T>, \"type\">,\n>(type: T, fields: F): ChainEventFilter<T, { type: T } & F> {\n\tconst spec = { type, ...fields } as unknown as SpecFor<T>;\n\tvalidateSpec(spec);\n\n\tconst filter = { ...spec } as unknown as Record<string, unknown>;\n\tfilter.toChainTrigger = () => toChainTrigger(spec);\n\tif (DECODED_MEMBERS.has(type)) {\n\t\tfilter.toIndexParams = (extra?: Record<string, unknown>) =>\n\t\t\ttoIndexParams(spec, extra);\n\t\tfilter.toStreamsParams = (extra?: Record<string, unknown>) =>\n\t\t\ttoStreamsParams(spec, extra);\n\t}\n\tif (type === \"contract_call\") {\n\t\tfilter.toContractCallsParams = (extra?: Record<string, unknown>) =>\n\t\t\ttoContractCallsParams(spec, extra);\n\t}\n\tif (!type.startsWith(\"sbtc_\")) {\n\t\tfilter.toSubgraphSource = () => toSubgraphSource(spec);\n\t}\n\treturn filter as unknown as ChainEventFilter<T, { type: T } & F>;\n}\n\n/**\n * Rehydrate a canonical filter from a subgraph-source-shaped object (the\n * inverse of `toSubgraphSource`). Powers migration and the round-trip\n * property gate: `toSubgraphSource(fromSubgraphSource(f))` must deep-equal\n * `f` for every production subgraph source.\n */\nexport function fromSubgraphSource(\n\tsource: SubgraphSourceSpec,\n): ChainEventFilter<SubgraphMemberType> {\n\tconst { type, ...fields } = source;\n\treturn makeChainEventFilter(\n\t\ttype,\n\t\tfields as Omit<SpecFor<typeof type>, \"type\">,\n\t) as unknown as ChainEventFilter<SubgraphMemberType>;\n}\n\ntype Fields<T extends ChainEventFilterType> = Omit<SpecFor<T>, \"type\">;\n\n/** The `on.*` namespace, annotated explicitly — bunup's dts emitter needs an\n * annotation on exported values (an inferred object of generic factories\n * collapses to `{}` in the emitted declarations). */\nexport interface OnNamespace {\n\tstxTransfer(\n\t\tfields?: Fields<\"stx_transfer\">,\n\t): ChainEventFilter<\"stx_transfer\">;\n\tstxMint(fields?: Fields<\"stx_mint\">): ChainEventFilter<\"stx_mint\">;\n\tstxBurn(fields?: Fields<\"stx_burn\">): ChainEventFilter<\"stx_burn\">;\n\tstxLock(fields?: Fields<\"stx_lock\">): ChainEventFilter<\"stx_lock\">;\n\tftTransfer(fields?: Fields<\"ft_transfer\">): ChainEventFilter<\"ft_transfer\">;\n\tftMint(fields?: Fields<\"ft_mint\">): ChainEventFilter<\"ft_mint\">;\n\tftBurn(fields?: Fields<\"ft_burn\">): ChainEventFilter<\"ft_burn\">;\n\tnftTransfer(\n\t\tfields?: Fields<\"nft_transfer\">,\n\t): ChainEventFilter<\"nft_transfer\">;\n\tnftMint(fields?: Fields<\"nft_mint\">): ChainEventFilter<\"nft_mint\">;\n\tnftBurn(fields?: Fields<\"nft_burn\">): ChainEventFilter<\"nft_burn\">;\n\t/** `abi` literals are preserved (`const A`) so `toSubgraphSource()` keeps\n\t * typing `event.input` inside `defineSubgraph`. */\n\tcontractCall<const A extends AbiContract | undefined = undefined>(\n\t\tfields?: Omit<SpecFor<\"contract_call\">, \"type\" | \"abi\"> & { abi?: A },\n\t): ChainEventFilter<\n\t\t\"contract_call\",\n\t\t{ type: \"contract_call\" } & Omit<\n\t\t\tSpecFor<\"contract_call\">,\n\t\t\t\"type\" | \"abi\"\n\t\t> & {\n\t\t\t\tabi?: A;\n\t\t\t}\n\t>;\n\tcontractDeploy(\n\t\tfields?: Fields<\"contract_deploy\">,\n\t): ChainEventFilter<\"contract_deploy\">;\n\t/** Canonical member is `print_event` (as Subgraphs and Subscriptions spell\n\t * it); `toIndexParams`/`toStreamsParams` project to `print`. `prints`\n\t * literals are preserved (`const P`) for per-topic `event.data` narrowing. */\n\tprint<\n\t\tconst P extends\n\t\t\t| Record<string, Record<string, PrintFieldType>>\n\t\t\t| undefined = undefined,\n\t>(\n\t\tfields?: Omit<SpecFor<\"print_event\">, \"type\" | \"prints\"> & { prints?: P },\n\t): ChainEventFilter<\n\t\t\"print_event\",\n\t\t{ type: \"print_event\" } & Omit<\n\t\t\tSpecFor<\"print_event\">,\n\t\t\t\"type\" | \"prints\"\n\t\t> & {\n\t\t\t\tprints?: P;\n\t\t\t}\n\t>;\n\tsbtcDeposit(\n\t\tfields?: Fields<\"sbtc_deposit\">,\n\t): ChainEventFilter<\"sbtc_deposit\">;\n\tsbtcWithdrawalCreate(\n\t\tfields?: Fields<\"sbtc_withdrawal_create\">,\n\t): ChainEventFilter<\"sbtc_withdrawal_create\">;\n\tsbtcWithdrawalAccept(\n\t\tfields?: Fields<\"sbtc_withdrawal_accept\">,\n\t): ChainEventFilter<\"sbtc_withdrawal_accept\">;\n\tsbtcWithdrawalReject(\n\t\tfields?: Fields<\"sbtc_withdrawal_reject\">,\n\t): ChainEventFilter<\"sbtc_withdrawal_reject\">;\n\tsbtcWithdrawalSweptConfirmed(\n\t\tfields?: Fields<\"sbtc_withdrawal_swept_confirmed\">,\n\t): ChainEventFilter<\"sbtc_withdrawal_swept_confirmed\">;\n}\n\n/**\n * `on.*` — one filter vocabulary for every surface.\n *\n * ```ts\n * import { on } from \"@secondlayer/stacks/filters\";\n *\n * const usdc = on.ftTransfer({ assetIdentifier: USDC, minAmount: 1_000_000n });\n *\n * sl.index.events.list(usdc.toIndexParams({ limit: 100 })); // pull\n * sl.streams.events.consume({ ...usdc.toStreamsParams(), onBatch });\n * sl.subscriptions.create({ name, url, triggers: [usdc.toChainTrigger()] });\n * defineSubgraph({ sources: { usdc: usdc.toSubgraphSource() }, schema, handlers });\n * ```\n *\n * A surface a member can't reach is a missing method (compile error), and a\n * field a surface can't express throws at projection time — never a silent\n * zero-row or over-wide match.\n */\nexport const on: OnNamespace = {\n\tstxTransfer: (fields: Fields<\"stx_transfer\"> = {}) =>\n\t\tmakeChainEventFilter(\"stx_transfer\", fields),\n\tstxMint: (fields: Fields<\"stx_mint\"> = {}) =>\n\t\tmakeChainEventFilter(\"stx_mint\", fields),\n\tstxBurn: (fields: Fields<\"stx_burn\"> = {}) =>\n\t\tmakeChainEventFilter(\"stx_burn\", fields),\n\tstxLock: (fields: Fields<\"stx_lock\"> = {}) =>\n\t\tmakeChainEventFilter(\"stx_lock\", fields),\n\tftTransfer: (fields: Fields<\"ft_transfer\"> = {}) =>\n\t\tmakeChainEventFilter(\"ft_transfer\", fields),\n\tftMint: (fields: Fields<\"ft_mint\"> = {}) =>\n\t\tmakeChainEventFilter(\"ft_mint\", fields),\n\tftBurn: (fields: Fields<\"ft_burn\"> = {}) =>\n\t\tmakeChainEventFilter(\"ft_burn\", fields),\n\tnftTransfer: (fields: Fields<\"nft_transfer\"> = {}) =>\n\t\tmakeChainEventFilter(\"nft_transfer\", fields),\n\tnftMint: (fields: Fields<\"nft_mint\"> = {}) =>\n\t\tmakeChainEventFilter(\"nft_mint\", fields),\n\tnftBurn: (fields: Fields<\"nft_burn\"> = {}) =>\n\t\tmakeChainEventFilter(\"nft_burn\", fields),\n\tcontractCall: <const A extends AbiContract | undefined = undefined>(\n\t\tfields: Omit<SpecFor<\"contract_call\">, \"type\" | \"abi\"> & { abi?: A } = {},\n\t) => makeChainEventFilter(\"contract_call\", fields),\n\tcontractDeploy: (fields: Fields<\"contract_deploy\"> = {}) =>\n\t\tmakeChainEventFilter(\"contract_deploy\", fields),\n\t/** Canonical member is `print_event` (as Subgraphs and Subscriptions spell\n\t * it); `toIndexParams`/`toStreamsParams` project to `print`. */\n\tprint: <\n\t\tconst P extends\n\t\t\t| Record<string, Record<string, PrintFieldType>>\n\t\t\t| undefined = undefined,\n\t>(\n\t\tfields: Omit<SpecFor<\"print_event\">, \"type\" | \"prints\"> & {\n\t\t\tprints?: P;\n\t\t} = {},\n\t) => makeChainEventFilter(\"print_event\", fields),\n\tsbtcDeposit: (fields: Fields<\"sbtc_deposit\"> = {}) =>\n\t\tmakeChainEventFilter(\"sbtc_deposit\", fields),\n\tsbtcWithdrawalCreate: (fields: Fields<\"sbtc_withdrawal_create\"> = {}) =>\n\t\tmakeChainEventFilter(\"sbtc_withdrawal_create\", fields),\n\tsbtcWithdrawalAccept: (fields: Fields<\"sbtc_withdrawal_accept\"> = {}) =>\n\t\tmakeChainEventFilter(\"sbtc_withdrawal_accept\", fields),\n\tsbtcWithdrawalReject: (fields: Fields<\"sbtc_withdrawal_reject\"> = {}) =>\n\t\tmakeChainEventFilter(\"sbtc_withdrawal_reject\", fields),\n\tsbtcWithdrawalSweptConfirmed: (\n\t\tfields: Fields<\"sbtc_withdrawal_swept_confirmed\"> = {},\n\t) => makeChainEventFilter(\"sbtc_withdrawal_swept_confirmed\", fields),\n};\n"
|
|
8
5
|
],
|
|
9
|
-
"mappings": "
|
|
10
|
-
"debugId": "
|
|
6
|
+
"mappings": "",
|
|
7
|
+
"debugId": "FBE00090F020672E64756E2164756E21",
|
|
11
8
|
"names": []
|
|
12
9
|
}
|
package/dist/src/index.cjs
CHANGED
|
@@ -13,7 +13,7 @@ __export(exports_src, {
|
|
|
13
13
|
providerToAccount: () => providerToAccount,
|
|
14
14
|
postgresStore: () => postgresStore,
|
|
15
15
|
parseStx: () => parseStx,
|
|
16
|
-
on: () =>
|
|
16
|
+
on: () => on,
|
|
17
17
|
nextFreeNonce: () => nextFreeNonce,
|
|
18
18
|
multisigActions: () => multisigActions,
|
|
19
19
|
mocknet: () => mocknet,
|
|
@@ -779,79 +779,6 @@ function webSocket(url, config) {
|
|
|
779
779
|
return transport;
|
|
780
780
|
};
|
|
781
781
|
}
|
|
782
|
-
// src/on/index.ts
|
|
783
|
-
var exports_on = {};
|
|
784
|
-
__export(exports_on, {
|
|
785
|
-
transferTo: () => transferTo,
|
|
786
|
-
sip010Transfer: () => sip010Transfer,
|
|
787
|
-
sip009Transfer: () => sip009Transfer,
|
|
788
|
-
sbtcWithdrawal: () => sbtcWithdrawal,
|
|
789
|
-
sbtcDeposit: () => sbtcDeposit,
|
|
790
|
-
poxStack: () => poxStack,
|
|
791
|
-
makeSpec: () => makeSpec,
|
|
792
|
-
bnsName: () => bnsName
|
|
793
|
-
});
|
|
794
|
-
|
|
795
|
-
// src/on/spec.ts
|
|
796
|
-
function makeSpec(target, filter) {
|
|
797
|
-
return {
|
|
798
|
-
subgraphName: target.subgraph,
|
|
799
|
-
tableName: target.table,
|
|
800
|
-
filter
|
|
801
|
-
};
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
// src/on/bns.ts
|
|
805
|
-
function bnsName(target, action, opts) {
|
|
806
|
-
return makeSpec(target, {
|
|
807
|
-
...action && { topic: action },
|
|
808
|
-
...opts?.namespace && { namespace: opts.namespace },
|
|
809
|
-
...opts?.owner && { owner: opts.owner }
|
|
810
|
-
});
|
|
811
|
-
}
|
|
812
|
-
// src/on/pox.ts
|
|
813
|
-
function poxStack(target, fn, opts) {
|
|
814
|
-
return makeSpec(target, {
|
|
815
|
-
...fn && { function_name: fn },
|
|
816
|
-
...opts?.stacker && { stacker: opts.stacker },
|
|
817
|
-
...opts?.signerKey && { signer_key: opts.signerKey }
|
|
818
|
-
});
|
|
819
|
-
}
|
|
820
|
-
// src/on/sbtc.ts
|
|
821
|
-
function sbtcDeposit(target, opts) {
|
|
822
|
-
return makeSpec(target, {
|
|
823
|
-
topic: "completed-deposit",
|
|
824
|
-
...opts?.sender && { sender: opts.sender },
|
|
825
|
-
...opts?.bitcoinTxid && { bitcoin_txid: opts.bitcoinTxid }
|
|
826
|
-
});
|
|
827
|
-
}
|
|
828
|
-
function sbtcWithdrawal(target, opts) {
|
|
829
|
-
return makeSpec(target, {
|
|
830
|
-
topic: opts?.phase ? { eq: `withdrawal-${opts.phase}` } : { in: ["withdrawal-create", "withdrawal-accept", "withdrawal-reject"] },
|
|
831
|
-
...opts?.sender && { sender: opts.sender },
|
|
832
|
-
...opts?.requestId !== undefined && { request_id: opts.requestId }
|
|
833
|
-
});
|
|
834
|
-
}
|
|
835
|
-
// src/on/transfer.ts
|
|
836
|
-
function transferTo(target, recipient, opts) {
|
|
837
|
-
return makeSpec(target, {
|
|
838
|
-
recipient,
|
|
839
|
-
...opts?.asset && { asset_identifier: opts.asset }
|
|
840
|
-
});
|
|
841
|
-
}
|
|
842
|
-
function sip010Transfer(target, asset, opts) {
|
|
843
|
-
return makeSpec(target, {
|
|
844
|
-
...asset && { asset_identifier: asset },
|
|
845
|
-
...opts?.recipient && { recipient: opts.recipient }
|
|
846
|
-
});
|
|
847
|
-
}
|
|
848
|
-
function sip009Transfer(target, asset, opts) {
|
|
849
|
-
return makeSpec(target, {
|
|
850
|
-
...asset && { asset_identifier: asset },
|
|
851
|
-
...opts?.recipient && { recipient: opts.recipient },
|
|
852
|
-
...opts?.tokenId !== undefined && { token_id: String(opts.tokenId) }
|
|
853
|
-
});
|
|
854
|
-
}
|
|
855
782
|
// src/errors/contract.ts
|
|
856
783
|
class ContractCallError extends BaseError {
|
|
857
784
|
name = "ContractCallError";
|
|
@@ -861,5 +788,5 @@ class ReadOnlyCallError extends BaseError {
|
|
|
861
788
|
name = "ReadOnlyCallError";
|
|
862
789
|
}
|
|
863
790
|
|
|
864
|
-
//# debugId=
|
|
791
|
+
//# debugId=7BE4D94BBB473A9364756E2164756E21
|
|
865
792
|
//# sourceMappingURL=index.cjs.map
|
package/dist/src/index.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/clients/createClient.ts", "../src/clients/decorators/public.ts", "../src/clients/createPublicClient.ts", "../src/clients/decorators/wallet.ts", "../src/clients/createWalletClient.ts", "../src/clients/decorators/multisig.ts", "../src/clients/createMultiSigClient.ts", "../src/actions/wallet/nonceStores.ts", "../src/actions/wallet/nonceSources.ts", "../src/transports/createTransport.ts", "../src/transports/http.ts", "../src/transports/custom.ts", "../src/transports/fallback.ts", "../src/transports/webSocket.ts", "../src/
|
|
3
|
+
"sources": ["../src/clients/createClient.ts", "../src/clients/decorators/public.ts", "../src/clients/createPublicClient.ts", "../src/clients/decorators/wallet.ts", "../src/clients/createWalletClient.ts", "../src/clients/decorators/multisig.ts", "../src/clients/createMultiSigClient.ts", "../src/actions/wallet/nonceStores.ts", "../src/actions/wallet/nonceSources.ts", "../src/transports/createTransport.ts", "../src/transports/http.ts", "../src/transports/custom.ts", "../src/transports/fallback.ts", "../src/transports/webSocket.ts", "../src/errors/contract.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { Client, ClientConfig } from \"./types.ts\";\n\nconst BASE_KEYS = new Set([\n\t\"chain\",\n\t\"account\",\n\t\"transport\",\n\t\"request\",\n\t\"nonceManager\",\n\t\"extend\",\n]);\n\nfunction bindExtend(base: Client): Client[\"extend\"] {\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\treturn ((fn: any) => {\n\t\tconst extensions = fn(base);\n\t\tconst next = { ...base };\n\t\tfor (const [key, value] of Object.entries(extensions)) {\n\t\t\tif (BASE_KEYS.has(key)) continue;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\t\t(next as any)[key] = value;\n\t\t}\n\t\tnext.extend = bindExtend(next);\n\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\treturn next as any;\n\t}) as Client[\"extend\"];\n}\n\n/**\n * Create a base client with transport and optional chain/account.\n * Use `.extend()` to compose action decorators (public, wallet, multisig).\n */\nexport function createClient<\n\tTExtended extends Record<string, unknown> = Record<string, unknown>,\n>(config: ClientConfig): Client<TExtended> {\n\tconst transport = config.transport({ chain: config.chain });\n\n\tconst client: Client = {\n\t\tchain: config.chain,\n\t\taccount: config.account,\n\t\ttransport,\n\t\trequest: transport.request,\n\t\tnonceManager: config.nonceManager,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\textend: null as any,\n\t};\n\n\tclient.extend = bindExtend(client);\n\n\treturn client as Client<TExtended>;\n}\n",
|
|
6
6
|
"import {\n\ttype EstimateFeeParams,\n\ttype FeeEstimation,\n\testimateFee,\n} from \"../../actions/public/estimateFee.ts\";\nimport {\n\ttype AccountHistoryResponse,\n\ttype GetAccountHistoryParams,\n\tgetAccountHistory,\n} from \"../../actions/public/getAccountHistory.ts\";\nimport {\n\ttype AccountInfo,\n\ttype GetAccountInfoParams,\n\tgetAccountInfo,\n} from \"../../actions/public/getAccountInfo.ts\";\nimport {\n\ttype GetBalanceParams,\n\tgetBalance,\n} from \"../../actions/public/getBalance.ts\";\nimport {\n\ttype GetBlockParams,\n\tgetBlock,\n} from \"../../actions/public/getBlock.ts\";\nimport { getBlockHeight } from \"../../actions/public/getBlockHeight.ts\";\nimport {\n\ttype GetContractAbiParams,\n\tgetContractAbi,\n} from \"../../actions/public/getContractAbi.ts\";\nimport {\n\ttype ContractSourceResponse,\n\ttype GetContractSourceParams,\n\tgetContractSource,\n} from \"../../actions/public/getContractSource.ts\";\nimport {\n\ttype GetMapEntryParams,\n\tgetMapEntry,\n} from \"../../actions/public/getMapEntry.ts\";\nimport { getMempoolStats } from \"../../actions/public/getMempoolStats.ts\";\nimport {\n\ttype GetNftHoldingsParams,\n\ttype NftHoldingsResponse,\n\tgetNftHoldings,\n} from \"../../actions/public/getNftHoldings.ts\";\nimport {\n\ttype GetNonceParams,\n\tgetNonce,\n} from \"../../actions/public/getNonce.ts\";\nimport {\n\ttype GetRawBlockParams,\n\ttype RawBlockResponse,\n\tgetRawBlock,\n} from \"../../actions/public/getRawBlock.ts\";\nimport {\n\ttype GetTransactionParams,\n\tgetTransaction,\n} from \"../../actions/public/getTransaction.ts\";\nimport {\n\ttype MulticallParams,\n\ttype MulticallResult,\n\tmulticall,\n} from \"../../actions/public/multicall.ts\";\nimport {\n\ttype ReadContractParams,\n\treadContract,\n} from \"../../actions/public/readContract.ts\";\nimport {\n\ttype SimulateCallParams,\n\ttype SimulateCallResult,\n\tsimulateCall,\n} from \"../../actions/public/simulateCall.ts\";\nimport {\n\ttype SimulateTransactionParams,\n\ttype SimulateTransactionResult,\n\tsimulateTransaction,\n} from \"../../actions/public/simulateTransaction.ts\";\nimport type { TransactionReceipt } from \"../../actions/public/txSources.ts\";\nimport {\n\ttype WaitForTransactionReceiptParams,\n\twaitForTransactionReceipt,\n} from \"../../actions/public/waitForTransactionReceipt.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport {\n\ttype WatchAddressBalanceParams,\n\ttype WatchAddressParams,\n\ttype WatchBlocksParams,\n\ttype WatchMempoolParams,\n\ttype WatchNftEventParams,\n\ttype WatchTransactionParams,\n\twatchAddress,\n\twatchAddressBalance,\n\twatchBlocks,\n\twatchMempool,\n\twatchNftEvent,\n\twatchTransaction,\n} from \"../../subscriptions/actions.ts\";\nimport type { Subscription } from \"../../subscriptions/types.ts\";\nimport type { Client } from \"../types.ts\";\n\n/** Read-only actions: balance queries, contract reads, block data, and event subscriptions. */\nexport type PublicActions = {\n\tgetNonce: (params: GetNonceParams) => Promise<bigint>;\n\tgetBalance: (params: GetBalanceParams) => Promise<bigint>;\n\tgetAccountInfo: (params: GetAccountInfoParams) => Promise<AccountInfo>;\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\tgetBlock: (params: GetBlockParams) => Promise<any>;\n\tgetRawBlock: (params: GetRawBlockParams) => Promise<RawBlockResponse | null>;\n\tgetBlockHeight: () => Promise<number>;\n\treadContract: (params: ReadContractParams) => Promise<ClarityValue>;\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\tgetContractAbi: (params: GetContractAbiParams) => Promise<any>;\n\tgetContractSource: (\n\t\tparams: GetContractSourceParams,\n\t) => Promise<ContractSourceResponse | null>;\n\tgetMapEntry: (params: GetMapEntryParams) => Promise<ClarityValue>;\n\testimateFee: (params: EstimateFeeParams) => Promise<FeeEstimation[]>;\n\tmulticall: <T extends boolean = true>(\n\t\tparams: MulticallParams<T>,\n\t) => Promise<MulticallResult<T>>;\n\tsimulateCall: (params: SimulateCallParams) => Promise<SimulateCallResult>;\n\tsimulateTransaction: (\n\t\tparams: SimulateTransactionParams,\n\t) => Promise<SimulateTransactionResult>;\n\tgetTransaction: (\n\t\tparams: GetTransactionParams,\n\t) => Promise<TransactionReceipt | null>;\n\tgetAccountHistory: (\n\t\tparams: GetAccountHistoryParams,\n\t) => Promise<AccountHistoryResponse>;\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\tgetMempoolStats: () => Promise<any>;\n\tgetNftHoldings: (\n\t\tparams: GetNftHoldingsParams,\n\t) => Promise<NftHoldingsResponse>;\n\twaitForTransactionReceipt: (\n\t\tparams: WaitForTransactionReceiptParams,\n\t) => Promise<TransactionReceipt>;\n\twatchBlocks: (params: WatchBlocksParams) => Promise<Subscription>;\n\twatchMempool: (params: WatchMempoolParams) => Promise<Subscription>;\n\twatchTransaction: (params: WatchTransactionParams) => Promise<Subscription>;\n\twatchAddress: (params: WatchAddressParams) => Promise<Subscription>;\n\twatchAddressBalance: (\n\t\tparams: WatchAddressBalanceParams,\n\t) => Promise<Subscription>;\n\twatchNftEvent: (params: WatchNftEventParams) => Promise<Subscription>;\n};\n\n/** Decorator that binds {@link PublicActions} to a client instance. */\nexport function publicActions(client: Client): PublicActions {\n\treturn {\n\t\tgetNonce: (params) => getNonce(client, params),\n\t\tgetBalance: (params) => getBalance(client, params),\n\t\tgetAccountInfo: (params) => getAccountInfo(client, params),\n\t\tgetBlock: (params) => getBlock(client, params),\n\t\tgetRawBlock: (params) => getRawBlock(client, params),\n\t\tgetBlockHeight: () => getBlockHeight(client),\n\t\treadContract: (params) => readContract(client, params),\n\t\tgetContractAbi: (params) => getContractAbi(client, params),\n\t\tgetContractSource: (params) => getContractSource(client, params),\n\t\tgetMapEntry: (params) => getMapEntry(client, params),\n\t\testimateFee: (params) => estimateFee(client, params),\n\t\tmulticall: (params) => multicall(client, params),\n\t\tsimulateCall: (params) => simulateCall(client, params),\n\t\tsimulateTransaction: (params) => simulateTransaction(client, params),\n\t\tgetTransaction: (params) => getTransaction(client, params),\n\t\tgetAccountHistory: (params) => getAccountHistory(client, params),\n\t\tgetMempoolStats: () => getMempoolStats(client),\n\t\tgetNftHoldings: (params) => getNftHoldings(client, params),\n\t\twaitForTransactionReceipt: (params) =>\n\t\t\twaitForTransactionReceipt(client, params),\n\t\twatchBlocks: (params) => watchBlocks(client, params),\n\t\twatchMempool: (params) => watchMempool(client, params),\n\t\twatchTransaction: (params) => watchTransaction(client, params),\n\t\twatchAddress: (params) => watchAddress(client, params),\n\t\twatchAddressBalance: (params) => watchAddressBalance(client, params),\n\t\twatchNftEvent: (params) => watchNftEvent(client, params),\n\t};\n}\n",
|
|
@@ -16,14 +16,9 @@
|
|
|
16
16
|
"import { createTransport } from \"./createTransport.ts\";\nimport type { RequestFn, TransportFactory } from \"./types.ts\";\n\n/** Create a transport backed by a user-provided request function. */\nexport function custom(params: { request: RequestFn }): TransportFactory {\n\treturn () => createTransport(\"custom\", { request: params.request });\n}\n",
|
|
17
17
|
"import { createTransport } from \"./createTransport.ts\";\nimport type { TransportFactory } from \"./types.ts\";\n\n/** Create a transport that tries each transport in order until one succeeds. */\nexport function fallback(transports: TransportFactory[]): TransportFactory {\n\treturn (params) => {\n\t\tconst resolved = transports.map((t) => t(params));\n\n\t\treturn createTransport(\"fallback\", {\n\t\t\trequest: async (path, options) => {\n\t\t\t\tlet lastError: Error | undefined;\n\t\t\t\tfor (const transport of resolved) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await transport.request(path, options);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlastError =\n\t\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow lastError ?? new Error(\"All transports failed\");\n\t\t\t},\n\t\t});\n\t};\n}\n",
|
|
18
18
|
"import { WebSocketError } from \"../errors/websocket.ts\";\nimport type {\n\tSubscription,\n\tWsSubscribeParams,\n} from \"../subscriptions/types.ts\";\nimport { buildRequestFn } from \"./createTransport.ts\";\nimport type { Transport, TransportConfig, TransportFactory } from \"./types.ts\";\n\n/** Configuration for the WebSocket transport, extending base {@link TransportConfig}. */\nexport type WebSocketTransportConfig = TransportConfig & {\n\t/** WebSocket URL (resolved from chain if omitted) */\n\turl?: string;\n\t/** Enable auto-reconnect (default: true) */\n\treconnect?: boolean;\n\t/** Max reconnect attempts (default: 10) */\n\treconnectMaxAttempts?: number;\n\t/** Base delay in ms for exponential backoff (default: 1000) */\n\treconnectBaseDelay?: number;\n};\n\n/** Transport with WebSocket subscription capabilities and auto-reconnect. */\nexport type WebSocketTransport = Transport & {\n\ttype: \"webSocket\";\n\tsubscribe: (\n\t\tparams: WsSubscribeParams,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\tcallback: (data: any) => void,\n\t) => Promise<Subscription>;\n\tdestroy: () => void;\n};\n\ntype JsonRpcRequest = {\n\tjsonrpc: \"2.0\";\n\tid: number;\n\tmethod: string;\n\tparams: Record<string, unknown>;\n};\n\ntype JsonRpcResponse = {\n\tjsonrpc: \"2.0\";\n\tid: number;\n\tresult?: unknown;\n\terror?: { code: number; message: string };\n};\n\ntype JsonRpcNotification = {\n\tjsonrpc: \"2.0\";\n\tmethod: string;\n\tparams: unknown;\n};\n\ntype SubEntry = {\n\tparams: WsSubscribeParams;\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\tcallbacks: Set<(data: any) => void>;\n};\n\nfunction subKey(params: WsSubscribeParams): string {\n\tconst parts: string[] = [params.event];\n\tif (params.tx_id) parts.push(`tx_id:${params.tx_id}`);\n\tif (params.address) parts.push(`address:${params.address}`);\n\tif (params.asset_identifier) parts.push(`asset:${params.asset_identifier}`);\n\tif (params.value) parts.push(`value:${params.value}`);\n\treturn parts.join(\"|\");\n}\n\nexport class WebSocketChannel {\n\tprivate ws: WebSocket | null = null;\n\tprivate url: string;\n\tprivate nextId = 1;\n\tprivate pending = new Map<\n\t\tnumber,\n\t\t{ resolve: (v: unknown) => void; reject: (e: Error) => void }\n\t>();\n\tprivate subs = new Map<string, SubEntry>();\n\tprivate destroyed = false;\n\tprivate reconnecting = false;\n\tprivate reconnectAttempt = 0;\n\tprivate reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\n\tprivate reconnect: boolean;\n\tprivate reconnectMaxAttempts: number;\n\tprivate reconnectBaseDelay: number;\n\n\tconstructor(url: string, config?: WebSocketTransportConfig) {\n\t\tthis.url = url;\n\t\tthis.reconnect = config?.reconnect ?? true;\n\t\tthis.reconnectMaxAttempts = config?.reconnectMaxAttempts ?? 10;\n\t\tthis.reconnectBaseDelay = config?.reconnectBaseDelay ?? 1000;\n\t}\n\n\tprivate connect(): Promise<void> {\n\t\tif (this.ws?.readyState === WebSocket.OPEN) return Promise.resolve();\n\t\tif (this.ws?.readyState === WebSocket.CONNECTING) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst onOpen = () => {\n\t\t\t\t\tthis.ws?.removeEventListener(\"error\", onError);\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t\tconst onError = (e: Event) => {\n\t\t\t\t\tthis.ws?.removeEventListener(\"open\", onOpen);\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew WebSocketError(\"WebSocket connection failed\", {\n\t\t\t\t\t\t\tdetails: String(e),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\tthis.ws?.addEventListener(\"open\", onOpen, { once: true });\n\t\t\t\tthis.ws?.addEventListener(\"error\", onError, { once: true });\n\t\t\t});\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.ws = new WebSocket(this.url);\n\n\t\t\tthis.ws.addEventListener(\n\t\t\t\t\"open\",\n\t\t\t\t() => {\n\t\t\t\t\tthis.reconnectAttempt = 0;\n\t\t\t\t\tthis.reconnecting = false;\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t);\n\n\t\t\tthis.ws.addEventListener(\n\t\t\t\t\"error\",\n\t\t\t\t(e) => {\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew WebSocketError(\"WebSocket connection failed\", {\n\t\t\t\t\t\t\tdetails: String(e),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t{ once: true },\n\t\t\t);\n\n\t\t\tthis.ws.addEventListener(\"message\", (event) => {\n\t\t\t\tthis.handleMessage(event.data);\n\t\t\t});\n\n\t\t\tthis.ws.addEventListener(\"close\", () => {\n\t\t\t\tif (!this.destroyed) this.handleDisconnect();\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate handleMessage(raw: string | ArrayBuffer | Blob) {\n\t\tconst data =\n\t\t\ttypeof raw === \"string\"\n\t\t\t\t? raw\n\t\t\t\t: new TextDecoder().decode(raw as ArrayBuffer);\n\n\t\tlet msg: JsonRpcResponse | JsonRpcNotification;\n\t\ttry {\n\t\t\tmsg = JSON.parse(data);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\t// RPC response\n\t\tif (\"id\" in msg && msg.id != null) {\n\t\t\tconst rpc = msg as JsonRpcResponse;\n\t\t\tconst p = this.pending.get(rpc.id);\n\t\t\tif (!p) return;\n\t\t\tthis.pending.delete(rpc.id);\n\t\t\tif (rpc.error) {\n\t\t\t\tp.reject(\n\t\t\t\t\tnew WebSocketError(rpc.error.message, {\n\t\t\t\t\t\tdetails: `JSON-RPC error ${rpc.error.code}`,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tp.resolve(rpc.result);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Notification\n\t\tconst notif = msg as JsonRpcNotification;\n\t\tif (!notif.method) return;\n\n\t\tfor (const [, entry] of this.subs) {\n\t\t\tif (entry.params.event === notif.method) {\n\t\t\t\tfor (const cb of entry.callbacks) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcb(notif.params);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// subscriber error — don't crash channel\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleDisconnect() {\n\t\tthis.ws = null;\n\n\t\t// reject pending RPCs\n\t\tfor (const [, p] of this.pending) {\n\t\t\tp.reject(new WebSocketError(\"WebSocket disconnected\"));\n\t\t}\n\t\tthis.pending.clear();\n\n\t\tif (\n\t\t\tthis.reconnect &&\n\t\t\tthis.subs.size > 0 &&\n\t\t\tthis.reconnectAttempt < this.reconnectMaxAttempts\n\t\t) {\n\t\t\tthis.scheduleReconnect();\n\t\t}\n\t}\n\n\tprivate scheduleReconnect() {\n\t\tif (this.destroyed || this.reconnecting) return;\n\t\tthis.reconnecting = true;\n\t\tconst delay = this.reconnectBaseDelay * 2 ** this.reconnectAttempt;\n\t\tthis.reconnectAttempt++;\n\n\t\tthis.reconnectTimer = setTimeout(async () => {\n\t\t\tthis.reconnecting = false;\n\t\t\ttry {\n\t\t\t\tawait this.connect();\n\t\t\t\tawait this.resubscribeAll();\n\t\t\t} catch {\n\t\t\t\tif (!this.destroyed && this.subs.size > 0) {\n\t\t\t\t\tthis.handleDisconnect();\n\t\t\t\t}\n\t\t\t}\n\t\t}, delay);\n\t}\n\n\tprivate async resubscribeAll() {\n\t\tfor (const [, entry] of this.subs) {\n\t\t\tawait this.sendRpc(\"subscribe\", entry.params);\n\t\t}\n\t}\n\n\tprivate sendRpc(\n\t\tmethod: string,\n\t\tparams: Record<string, unknown>,\n\t): Promise<unknown> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n\t\t\t\treturn reject(new WebSocketError(\"WebSocket not connected\"));\n\t\t\t}\n\n\t\t\tconst id = this.nextId++;\n\t\t\tconst msg: JsonRpcRequest = {\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tid,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t};\n\n\t\t\tthis.pending.set(id, { resolve, reject });\n\t\t\tthis.ws.send(JSON.stringify(msg));\n\t\t});\n\t}\n\n\tasync subscribe(\n\t\tparams: WsSubscribeParams,\n\t\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t\tcallback: (data: any) => void,\n\t): Promise<Subscription> {\n\t\tif (this.destroyed) {\n\t\t\tthrow new WebSocketError(\"WebSocket channel has been destroyed\");\n\t\t}\n\n\t\tawait this.connect();\n\n\t\tconst key = subKey(params);\n\t\tlet entry = this.subs.get(key);\n\n\t\tif (entry) {\n\t\t\t// Dedup: reuse existing WS subscription\n\t\t\tentry.callbacks.add(callback);\n\t\t} else {\n\t\t\t// New WS subscription\n\t\t\tentry = { params, callbacks: new Set([callback]) };\n\t\t\tthis.subs.set(key, entry);\n\t\t\tawait this.sendRpc(\"subscribe\", params);\n\t\t}\n\n\t\treturn {\n\t\t\tunsubscribe: () => {\n\t\t\t\tconst e = this.subs.get(key);\n\t\t\t\tif (!e) return;\n\t\t\t\te.callbacks.delete(callback);\n\t\t\t\tif (e.callbacks.size === 0) {\n\t\t\t\t\tthis.subs.delete(key);\n\t\t\t\t\t// Best-effort unsubscribe RPC\n\t\t\t\t\tif (this.ws?.readyState === WebSocket.OPEN) {\n\t\t\t\t\t\tthis.sendRpc(\"unsubscribe\", params).catch(() => {});\n\t\t\t\t\t}\n\t\t\t\t\t// Auto-close when no subscribers remain\n\t\t\t\t\tif (this.subs.size === 0) this.closeQuietly();\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate closeQuietly() {\n\t\tif (this.ws) {\n\t\t\tthis.ws.close();\n\t\t\tthis.ws = null;\n\t\t}\n\t}\n\n\tdestroy(): void {\n\t\tthis.destroyed = true;\n\t\tif (this.reconnectTimer) clearTimeout(this.reconnectTimer);\n\n\t\tfor (const [, p] of this.pending) {\n\t\t\tp.reject(new WebSocketError(\"WebSocket channel destroyed\"));\n\t\t}\n\t\tthis.pending.clear();\n\t\tthis.subs.clear();\n\n\t\tif (this.ws) {\n\t\t\tthis.ws.close();\n\t\t\tthis.ws = null;\n\t\t}\n\t}\n}\n\nfunction deriveWsUrl(httpUrl: string): string {\n\treturn `${httpUrl.replace(/^http/, \"ws\").replace(/\\/$/, \"\")}/extended/v1/ws`;\n}\n\n/**\n * Create a WebSocket transport for real-time Stacks event subscriptions.\n * HTTP requests use the resolved RPC URL; subscriptions use the WS endpoint.\n */\nexport function webSocket(\n\turl?: string,\n\tconfig?: WebSocketTransportConfig,\n): TransportFactory {\n\treturn (params) => {\n\t\tconst httpUrl =\n\t\t\tconfig?.url ??\n\t\t\tparams?.chain?.rpcUrls.default.http[0] ??\n\t\t\t\"http://localhost:3999\";\n\n\t\tconst wsUrl =\n\t\t\turl ?? params?.chain?.rpcUrls.default.ws?.[0] ?? deriveWsUrl(httpUrl);\n\n\t\tconst resolvedHttpConfig: TransportConfig = {\n\t\t\t...config,\n\t\t\turl: httpUrl,\n\t\t};\n\n\t\tconst channel = new WebSocketChannel(wsUrl, config);\n\n\t\tconst transport: WebSocketTransport = {\n\t\t\ttype: \"webSocket\",\n\t\t\trequest: buildRequestFn(httpUrl, resolvedHttpConfig),\n\t\t\tconfig: resolvedHttpConfig,\n\t\t\tsubscribe: (subParams, callback) =>\n\t\t\t\tchannel.subscribe(subParams, callback),\n\t\t\tdestroy: () => channel.destroy(),\n\t\t};\n\n\t\treturn transport;\n\t};\n}\n",
|
|
19
|
-
"/**\n * Filter specs for `@secondlayer/sdk` subscriptions.\n *\n * Each `on.*` factory in this directory binds typed filter clauses to a\n * known table shape and returns a `SubscriptionFilterSpec`. Spread it into\n * a full subscription input alongside `name`, `url`, `format`, etc:\n *\n * const spec = on.transferTo(\n * { subgraph: \"my-watcher\", table: \"transfers\" },\n * \"SP1ABC...\",\n * );\n * await sdk.subscriptions.create({\n * ...spec,\n * name: \"watch-incoming\",\n * url: \"https://my-app.com/webhook\",\n * });\n *\n * The user supplies which subgraph + table to bind against — these factories\n * don't assume curated read endpoints are subscribable. To watch FT transfers\n * to an address, build a subgraph with a `transfers` table (see\n * `sl subgraphs create --template sip-010-balances`) and bind here.\n */\n\n/**\n * What every factory takes as its first arg: which user-owned subgraph table\n * to filter against.\n */\nexport type FactoryTarget = {\n\tsubgraph: string;\n\ttable: string;\n};\n\n/**\n * A primitive value that can appear in a filter clause.\n * Mirrors `SubscriptionFilterPrimitive` in\n * `@secondlayer/shared/schemas/subscriptions` — duplicated here to keep\n * `@secondlayer/stacks` from importing the api/server schema package.\n */\nexport type FilterPrimitive = string | number | boolean;\n\n/** Operator forms a filter clause can take. */\nexport type FilterOperator =\n\t| { eq: FilterPrimitive }\n\t| { neq: FilterPrimitive }\n\t| { gt: string | number }\n\t| { gte: string | number }\n\t| { lt: string | number }\n\t| { lte: string | number }\n\t| { in: FilterPrimitive[] };\n\n/** A single column's filter: bare value (eq) or operator object. */\nexport type FilterClause = FilterPrimitive | FilterOperator;\n\n/** Map of column → filter clause. Empty `{}` matches every row. */\nexport type Filter = Record<string, FilterClause>;\n\n/**\n * Output of every `on.*` factory. Use directly as a partial input to\n * `sdk.subscriptions.create` — the SDK's existing `CreateSubscriptionRequest`\n * already accepts these three fields.\n */\nexport type SubscriptionFilterSpec = {\n\tsubgraphName: string;\n\ttableName: string;\n\tfilter: Filter;\n};\n\n/** Thin helper to build a spec without restating the field-name mapping. */\nexport function makeSpec(\n\ttarget: FactoryTarget,\n\tfilter: Filter,\n): SubscriptionFilterSpec {\n\treturn {\n\t\tsubgraphName: target.subgraph,\n\t\ttableName: target.table,\n\t\tfilter,\n\t};\n}\n",
|
|
20
|
-
"import {\n\ttype FactoryTarget,\n\ttype SubscriptionFilterSpec,\n\tmakeSpec,\n} from \"./spec.ts\";\n\nexport type BnsAction =\n\t| \"new-name\"\n\t| \"transfer-name\"\n\t| \"renew-name\"\n\t| \"burn-name\"\n\t| \"new-airdrop\";\n\n/**\n * Match BNS-V2 name lifecycle events.\n *\n * Bind against a subgraph table that mirrors the `bns_name_events` shape\n * (topic, namespace, name, owner, ...). Easiest path: scaffold via\n * `sl subgraphs create --template bns-names`.\n *\n * @param action restrict to one topic; omit to fire on every name event\n */\nexport function bnsName(\n\ttarget: FactoryTarget,\n\taction?: BnsAction,\n\topts?: { namespace?: string; owner?: string },\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\t...(action && { topic: action }),\n\t\t...(opts?.namespace && { namespace: opts.namespace }),\n\t\t...(opts?.owner && { owner: opts.owner }),\n\t});\n}\n",
|
|
21
|
-
"import {\n\ttype FactoryTarget,\n\ttype SubscriptionFilterSpec,\n\tmakeSpec,\n} from \"./spec.ts\";\n\nexport type PoxFunction =\n\t| \"stack-stx\"\n\t| \"stack-extend\"\n\t| \"stack-increase\"\n\t| \"delegate-stx\"\n\t| \"revoke-delegate-stx\"\n\t| \"delegate-stack-stx\"\n\t| \"delegate-stack-extend\"\n\t| \"delegate-stack-increase\"\n\t| \"stack-aggregation-commit\"\n\t| \"stack-aggregation-commit-indexed\"\n\t| \"stack-aggregation-increase\"\n\t| \"set-signer-key-authorization\";\n\n/**\n * Match PoX-4 stacking calls. Bind against a subgraph table mirroring\n * `pox4_calls` (function_name, stacker, caller, ...). Scaffold via\n * `sl subgraphs create --template pox-stacking`.\n *\n * @param fn restrict to one PoX-4 function; omit to fire on every call\n */\nexport function poxStack(\n\ttarget: FactoryTarget,\n\tfn?: PoxFunction,\n\topts?: { stacker?: string; signerKey?: string },\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\t...(fn && { function_name: fn }),\n\t\t...(opts?.stacker && { stacker: opts.stacker }),\n\t\t...(opts?.signerKey && { signer_key: opts.signerKey }),\n\t});\n}\n",
|
|
22
|
-
"import {\n\ttype FactoryTarget,\n\ttype SubscriptionFilterSpec,\n\tmakeSpec,\n} from \"./spec.ts\";\n\n/**\n * Match sBTC deposit completion events. Bind against a subgraph table\n * mirroring `sbtc_events` (topic, amount, sender, bitcoin_txid, ...).\n * Scaffold via `sl subgraphs create --template sbtc-flows`.\n */\nexport function sbtcDeposit(\n\ttarget: FactoryTarget,\n\topts?: { sender?: string; bitcoinTxid?: string },\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\ttopic: \"completed-deposit\",\n\t\t...(opts?.sender && { sender: opts.sender }),\n\t\t...(opts?.bitcoinTxid && { bitcoin_txid: opts.bitcoinTxid }),\n\t});\n}\n\n/**\n * Match sBTC withdrawal lifecycle events. Phase defaults to all three\n * (`create` / `accept` / `reject`); pass an explicit `phase` to narrow.\n */\nexport function sbtcWithdrawal(\n\ttarget: FactoryTarget,\n\topts?: {\n\t\tphase?: \"create\" | \"accept\" | \"reject\";\n\t\tsender?: string;\n\t\trequestId?: number;\n\t},\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\ttopic: opts?.phase\n\t\t\t? { eq: `withdrawal-${opts.phase}` }\n\t\t\t: { in: [\"withdrawal-create\", \"withdrawal-accept\", \"withdrawal-reject\"] },\n\t\t...(opts?.sender && { sender: opts.sender }),\n\t\t...(opts?.requestId !== undefined && { request_id: opts.requestId }),\n\t});\n}\n",
|
|
23
|
-
"import {\n\ttype FactoryTarget,\n\ttype SubscriptionFilterSpec,\n\tmakeSpec,\n} from \"./spec.ts\";\n\n/**\n * Match transfer events into a recipient address.\n *\n * Works against any subgraph table that has a `recipient` column (and\n * optionally `asset_identifier`). Templates that scaffold this shape:\n * `sip-010-balances`, `sbtc-flows`.\n *\n * @param target the user's subgraph + table to bind against\n * @param recipient stx principal that should receive the transfer\n * @param opts.asset optional asset identifier (e.g. `\"SP1...usdc::usdc-token\"`)\n * to filter to a specific FT/NFT contract\n */\nexport function transferTo(\n\ttarget: FactoryTarget,\n\trecipient: string,\n\topts?: { asset?: string },\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\trecipient,\n\t\t...(opts?.asset && { asset_identifier: opts.asset }),\n\t});\n}\n\n/**\n * SIP-010 (fungible token) transfer sugar — alias for `transferTo` that\n * makes the asset filter intent explicit at the call site. Same backing\n * filter; the `asset` param is optional (omit to match every SIP-010\n * transfer in the bound table).\n */\nexport function sip010Transfer(\n\ttarget: FactoryTarget,\n\tasset?: string,\n\topts?: { recipient?: string },\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\t...(asset && { asset_identifier: asset }),\n\t\t...(opts?.recipient && { recipient: opts.recipient }),\n\t});\n}\n\n/**\n * SIP-009 (non-fungible token) transfer sugar — same pattern as\n * `sip010Transfer`. Bind against an NFT-shaped table (see template\n * `nft-transfers` if/when published).\n */\nexport function sip009Transfer(\n\ttarget: FactoryTarget,\n\tasset?: string,\n\topts?: { recipient?: string; tokenId?: string | number },\n): SubscriptionFilterSpec {\n\treturn makeSpec(target, {\n\t\t...(asset && { asset_identifier: asset }),\n\t\t...(opts?.recipient && { recipient: opts.recipient }),\n\t\t...(opts?.tokenId !== undefined && { token_id: String(opts.tokenId) }),\n\t});\n}\n",
|
|
24
19
|
"import { BaseError } from \"./base.ts\";\n\nexport class ContractCallError extends BaseError {\n\toverride name = \"ContractCallError\";\n}\n\nexport class ReadOnlyCallError extends BaseError {\n\toverride name = \"ReadOnlyCallError\";\n}\n"
|
|
25
20
|
],
|
|
26
|
-
"mappings": "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",
|
|
27
|
-
"debugId": "
|
|
21
|
+
"mappings": "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",
|
|
22
|
+
"debugId": "7BE4D94BBB473A9364756E2164756E21",
|
|
28
23
|
"names": []
|
|
29
24
|
}
|