@clarigen/test 4.1.4 → 4.1.5
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/index.cjs +179 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +163 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,180 @@
|
|
|
1
|
-
let
|
|
1
|
+
let __clarigen_core = require("@clarigen/core");
|
|
2
|
+
let yaml = require("yaml");
|
|
3
|
+
|
|
4
|
+
//#region src/utils.ts
|
|
5
|
+
function validateResponse(result, expectOk, contractAbi) {
|
|
6
|
+
const value = (0, __clarigen_core.cvToValue)(result, true);
|
|
7
|
+
if (!(0, __clarigen_core.isResponse)(value) && typeof expectOk !== "undefined") throw new Error("Expected response when calling function, but not a response. Try using just `rov`");
|
|
8
|
+
if ((0, __clarigen_core.isResponse)(value) && typeof expectOk !== "undefined") {
|
|
9
|
+
const response = value;
|
|
10
|
+
const inner = response.value;
|
|
11
|
+
if (expectOk && !response.isOk) {
|
|
12
|
+
let errorCode = "";
|
|
13
|
+
if (contractAbi) {
|
|
14
|
+
const match = Object.entries((0, __clarigen_core.extractErrors)(contractAbi)).find(([_key, code]) => code === inner);
|
|
15
|
+
if (match) errorCode = ` (${match[0]})`;
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`Tx result failed. Expected OK, received ERR ${String(inner)}${errorCode}.`);
|
|
18
|
+
}
|
|
19
|
+
if (expectOk === false && response.isOk) throw new Error(`Tx result failed. Expected ERR, received OK ${String(inner)}.`);
|
|
20
|
+
return inner;
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/events.ts
|
|
27
|
+
function filterEvents(events, type) {
|
|
28
|
+
const typeString = type === __clarigen_core.CoreNodeEventType.ContractEvent ? "print_event" : type;
|
|
29
|
+
return events.filter((event) => event.event === typeString);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/index.ts
|
|
34
|
+
/** biome-ignore-all lint/style/useTrimStartEnd: suppressed */
|
|
35
|
+
function logTxCall({ contractId, sender, args, functionName }) {
|
|
36
|
+
if (process.env.LOG_TX_CALLS) {
|
|
37
|
+
const contractCallTx = { "contract-call": {
|
|
38
|
+
"contract-id": contractId,
|
|
39
|
+
"expected-sender": sender,
|
|
40
|
+
parameters: args.map((arg) => (0, __clarigen_core.cvToString)(arg, "hex")),
|
|
41
|
+
method: functionName,
|
|
42
|
+
cost: "10000000"
|
|
43
|
+
} };
|
|
44
|
+
console.log("------------ DEPLOYMENT TX ------------");
|
|
45
|
+
console.log((0, yaml.stringify)(contractCallTx, { indent: 2 }));
|
|
46
|
+
console.log("------------ END DEPLOYMENT TX ------------");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function txOk(tx$1, sender) {
|
|
50
|
+
const receipt = getTxReceipt(tx$1, sender);
|
|
51
|
+
const value = validateResponse(receipt.result, true, tx$1.contractAbi);
|
|
52
|
+
return {
|
|
53
|
+
...receipt,
|
|
54
|
+
events: receipt.events,
|
|
55
|
+
value
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function txErr(tx$1, sender) {
|
|
59
|
+
const receipt = getTxReceipt(tx$1, sender);
|
|
60
|
+
const value = validateResponse(receipt.result, false, tx$1.contractAbi);
|
|
61
|
+
return {
|
|
62
|
+
...receipt,
|
|
63
|
+
events: receipt.events,
|
|
64
|
+
value
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function tx(tx$1, sender) {
|
|
68
|
+
const receipt = getTxReceipt(tx$1, sender);
|
|
69
|
+
const value = validateResponse(receipt.result, void 0, tx$1.contractAbi);
|
|
70
|
+
return {
|
|
71
|
+
...receipt,
|
|
72
|
+
events: receipt.events,
|
|
73
|
+
value
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function getTxReceipt(tx$1, sender) {
|
|
77
|
+
const args = tx$1.functionArgs;
|
|
78
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
79
|
+
let receipt;
|
|
80
|
+
if (tx$1.function.access === "private") receipt = simnet.callPrivateFn(contractId, tx$1.function.name, args, sender);
|
|
81
|
+
else receipt = simnet.callPublicFn(contractId, tx$1.function.name, args, sender);
|
|
82
|
+
logTxCall({
|
|
83
|
+
contractId,
|
|
84
|
+
sender,
|
|
85
|
+
args,
|
|
86
|
+
functionName: tx$1.function.name
|
|
87
|
+
});
|
|
88
|
+
return receipt;
|
|
89
|
+
}
|
|
90
|
+
function ro(tx$1, sender) {
|
|
91
|
+
const args = tx$1.functionArgs;
|
|
92
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
93
|
+
const receipt = simnet.callReadOnlyFn(contractId, tx$1.function.name, args, sender ?? tx$1.contractAddress);
|
|
94
|
+
const value = validateResponse(receipt.result, void 0, tx$1.contractAbi);
|
|
95
|
+
return {
|
|
96
|
+
...receipt,
|
|
97
|
+
events: receipt.events,
|
|
98
|
+
value
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function rov(tx$1, sender) {
|
|
102
|
+
return ro(tx$1, sender).value;
|
|
103
|
+
}
|
|
104
|
+
function roOk(tx$1, sender) {
|
|
105
|
+
const args = tx$1.functionArgs;
|
|
106
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
107
|
+
const receipt = simnet.callReadOnlyFn(contractId, tx$1.function.name, args, sender ?? tx$1.contractAddress);
|
|
108
|
+
const value = validateResponse(receipt.result, true, tx$1.contractAbi);
|
|
109
|
+
return {
|
|
110
|
+
...receipt,
|
|
111
|
+
events: receipt.events,
|
|
112
|
+
value
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function rovOk(tx$1, sender) {
|
|
116
|
+
return roOk(tx$1, sender).value;
|
|
117
|
+
}
|
|
118
|
+
function roErr(tx$1, sender) {
|
|
119
|
+
const args = tx$1.functionArgs;
|
|
120
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
121
|
+
const receipt = simnet.callReadOnlyFn(contractId, tx$1.function.name, args, sender ?? tx$1.contractAddress);
|
|
122
|
+
const value = validateResponse(receipt.result, false, tx$1.contractAbi);
|
|
123
|
+
return {
|
|
124
|
+
...receipt,
|
|
125
|
+
events: receipt.events,
|
|
126
|
+
value
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function rovErr(tx$1, sender) {
|
|
130
|
+
return roErr(tx$1, sender).value;
|
|
131
|
+
}
|
|
132
|
+
function mapGet(contractId, map, key) {
|
|
133
|
+
const payload = (0, __clarigen_core.mapFactory)(map, key);
|
|
134
|
+
return (0, __clarigen_core.cvToValue)(simnet.getMapEntry(contractId, payload.map.name, payload.keyCV));
|
|
135
|
+
}
|
|
136
|
+
function varGet(contractId, variable) {
|
|
137
|
+
return (0, __clarigen_core.cvToValue)(simnet.getDataVar(contractId, variable.name));
|
|
138
|
+
}
|
|
139
|
+
const chain = {
|
|
140
|
+
txOk,
|
|
141
|
+
txErr,
|
|
142
|
+
tx,
|
|
143
|
+
ro,
|
|
144
|
+
roOk,
|
|
145
|
+
roErr,
|
|
146
|
+
rov,
|
|
147
|
+
rovOk,
|
|
148
|
+
rovErr
|
|
149
|
+
};
|
|
150
|
+
async function makeNewSession(cwd, manifestPath) {
|
|
151
|
+
await simnet.initSession(cwd ?? process.cwd(), manifestPath ?? "./Clarinet.toml");
|
|
152
|
+
}
|
|
153
|
+
function assertOk(response) {
|
|
154
|
+
if (!(0, __clarigen_core.isResponse)(response)) throw new Error("Expected response, but got something else");
|
|
155
|
+
if (!response.isOk) throw new Error(`Expected response to be OK, but got ERR ${response.value}`);
|
|
156
|
+
}
|
|
157
|
+
function assertErr(response) {
|
|
158
|
+
if (!(0, __clarigen_core.isResponse)(response)) throw new Error("Expected response, but got something else");
|
|
159
|
+
if (response.isOk) throw new Error("Expected response to be ERR, but got OK");
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
//#endregion
|
|
163
|
+
exports.assertErr = assertErr;
|
|
164
|
+
exports.assertOk = assertOk;
|
|
165
|
+
exports.chain = chain;
|
|
166
|
+
exports.filterEvents = filterEvents;
|
|
167
|
+
exports.makeNewSession = makeNewSession;
|
|
168
|
+
exports.mapGet = mapGet;
|
|
169
|
+
exports.ro = ro;
|
|
170
|
+
exports.roErr = roErr;
|
|
171
|
+
exports.roOk = roOk;
|
|
172
|
+
exports.rov = rov;
|
|
173
|
+
exports.rovErr = rovErr;
|
|
174
|
+
exports.rovOk = rovOk;
|
|
175
|
+
exports.tx = tx;
|
|
176
|
+
exports.txErr = txErr;
|
|
177
|
+
exports.txOk = txOk;
|
|
178
|
+
exports.validateResponse = validateResponse;
|
|
179
|
+
exports.varGet = varGet;
|
|
2
180
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["CoreNodeEventType","contractCallTx: ContractCallTransaction","tx","receipt: ParsedTransactionResult"],"sources":["../src/utils.ts","../src/events.ts","../src/index.ts"],"sourcesContent":["import {\n type Response,\n type TypedAbi,\n cvToValue,\n extractErrors,\n isResponse,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: allowed\nexport function validateResponse<T>(\n result: ClarityValue,\n expectOk?: boolean,\n contractAbi?: TypedAbi\n): T {\n const value = cvToValue<Response<T, T> | T>(result, true);\n\n if (!isResponse(value) && typeof expectOk !== 'undefined') {\n throw new Error(\n 'Expected response when calling function, but not a response. Try using just `rov`'\n );\n }\n\n if (isResponse(value) && typeof expectOk !== 'undefined') {\n const response = value;\n const inner = response.value;\n if (expectOk && !response.isOk) {\n // try and find a matching error code\n let errorCode = '';\n if (contractAbi) {\n const match = Object.entries(extractErrors(contractAbi)).find(\n ([_key, code]) => code === inner\n );\n if (match) {\n errorCode = ` (${match[0]})`;\n }\n }\n throw new Error(\n `Tx result failed. Expected OK, received ERR ${String(inner)}${errorCode}.`\n );\n }\n if (expectOk === false && response.isOk) {\n throw new Error(\n `Tx result failed. Expected ERR, received OK ${String(inner)}.`\n );\n }\n return inner;\n }\n return value as T;\n}\n","import {\n CoreNodeEventType,\n type SmartContractEvent as _SmartContractEvent,\n type StxTransferEvent as _StxTransferEvent,\n type StxBurnEvent as _StxBurnEvent,\n type StxMintEvent as _StxMintEvent,\n type StxLockEvent as _StxLockEvent,\n type FtBurnEvent as _FtBurnEvent,\n type FtMintEvent as _FtMintEvent,\n type FtTransferEvent as _FtTransferEvent,\n type NftBurnEvent as _NftBurnEvent,\n type NftMintEvent as _NftMintEvent,\n type NftTransferEvent as _NftTransferEvent,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\nexport type SmartContractEvent = {\n event: _SmartContractEvent['type'];\n data: Omit<_SmartContractEvent['contract_event'], 'value'> & {\n value: ClarityValue;\n };\n};\n\nexport type StxTransferEvent = {\n event: _StxTransferEvent['type'];\n data: _StxTransferEvent['stx_transfer_event'];\n};\n\nexport type StxBurnEvent = {\n event: _StxBurnEvent['type'];\n data: _StxBurnEvent['stx_burn_event'];\n};\n\nexport type StxLockEvent = {\n event: _StxLockEvent['type'];\n data: _StxLockEvent['stx_lock_event'];\n};\n\nexport type StxMintEvent = {\n event: _StxMintEvent['type'];\n data: _StxMintEvent['stx_mint_event'];\n};\n\nexport type FtBurnEvent = {\n event: _FtBurnEvent['type'];\n data: _FtBurnEvent['ft_burn_event'];\n};\n\nexport type FtMintEvent = {\n event: _FtMintEvent['type'];\n data: _FtMintEvent['ft_mint_event'];\n};\n\nexport type FtTransferEvent = {\n event: _FtTransferEvent['type'];\n data: _FtTransferEvent['ft_transfer_event'];\n};\n\nexport type NftBurnEvent = {\n event: _NftBurnEvent['type'];\n data: _NftBurnEvent['nft_burn_event'];\n};\n\nexport type NftMintEvent = {\n event: _NftMintEvent['type'];\n data: _NftMintEvent['nft_mint_event'];\n};\n\nexport type NftTransferEvent = {\n event: _NftTransferEvent['type'];\n data: _NftTransferEvent['nft_transfer_event'];\n};\n\nexport type CoreNodeEvent =\n | SmartContractEvent\n | StxTransferEvent\n | StxMintEvent\n | StxBurnEvent\n | StxLockEvent\n | FtTransferEvent\n | FtMintEvent\n | FtBurnEvent\n | NftTransferEvent\n | NftMintEvent\n | NftBurnEvent;\n\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.ContractEvent\n): SmartContractEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxTransferEvent\n): StxTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxMintEvent\n): StxMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxBurnEvent\n): StxBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxLockEvent\n): StxLockEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftTransferEvent\n): NftTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftMintEvent\n): NftMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftBurnEvent\n): NftBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtTransferEvent\n): FtTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtMintEvent\n): FtMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtBurnEvent\n): FtBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType\n): CoreNodeEvent[] {\n const typeString =\n type === CoreNodeEventType.ContractEvent ? 'print_event' : type;\n return events.filter((event) => event.event === typeString);\n}\n","/** biome-ignore-all lint/style/useTrimStartEnd: suppressed */\nimport {\n type ContractCallTyped,\n type ErrType,\n type OkType,\n type TypedAbiMap,\n type TypedAbiVariable,\n type UnknownArgs,\n cvToValue,\n mapFactory,\n type Response,\n cvToString,\n type ResponseOk,\n type ResponseErr,\n isResponse,\n} from '@clarigen/core';\nimport type { ContractCallTransaction } from '@clarigen/core/deployment';\nimport type { ParsedTransactionResult } from '@stacks/clarinet-sdk';\nimport { validateResponse } from './utils';\nimport type { CoreNodeEvent } from './events';\nimport { stringify } from 'yaml';\nimport type { ClarityValue } from '@stacks/transactions';\n// biome-ignore lint/performance/noBarrelFile: ignored using `--suppress`\nexport * from './events';\nexport * from './utils';\n\nexport type TransactionResult<R> = Omit<ParsedTransactionResult, 'events'> & {\n value: R;\n events: CoreNodeEvent[];\n};\n\nexport type AnyResponse = Response<unknown, unknown>;\n\nfunction logTxCall({\n contractId,\n sender,\n args,\n functionName,\n}: {\n contractId: string;\n sender: string;\n args: ClarityValue[];\n functionName: string;\n}) {\n if (process.env.LOG_TX_CALLS) {\n const contractCallTx: ContractCallTransaction = {\n 'contract-call': {\n 'contract-id': contractId,\n 'expected-sender': sender,\n parameters: args.map((arg) => cvToString(arg, 'hex')),\n method: functionName,\n cost: '10000000',\n },\n };\n console.log('------------ DEPLOYMENT TX ------------');\n console.log(stringify(contractCallTx, { indent: 2 }));\n console.log('------------ END DEPLOYMENT TX ------------');\n }\n}\n\nexport function txOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<OkType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function txErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<ErrType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function tx<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<R> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nfunction getTxReceipt<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): ParsedTransactionResult {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n let receipt: ParsedTransactionResult;\n if (tx.function.access === 'private') {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPrivateFn(contractId, tx.function.name, args, sender);\n } else {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPublicFn(contractId, tx.function.name, args, sender);\n }\n logTxCall({ contractId, sender, args, functionName: tx.function.name });\n return receipt;\n}\n\nexport function ro<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<R> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rov<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): R {\n return ro(tx, sender).value;\n}\n\nexport function roOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<OkType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): OkType<R> {\n return roOk(tx, sender).value;\n}\n\nexport function roErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<ErrType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): ErrType<R> {\n return roErr(tx, sender).value;\n}\n\nexport function mapGet<Key, Val>(\n contractId: string,\n map: TypedAbiMap<Key, Val>,\n key: Key\n) {\n const payload = mapFactory(map, key);\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getMapEntry(\n contractId,\n payload.map.name,\n payload.keyCV\n );\n return cvToValue<Val | null>(result);\n}\n\nexport function varGet<T>(contractId: string, variable: TypedAbiVariable<T>) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getDataVar(contractId, variable.name);\n return cvToValue<T>(result);\n}\n\n// Helper export for previous Deno-based tests\nexport const chain = {\n txOk,\n txErr,\n tx,\n ro,\n roOk,\n roErr,\n rov,\n rovOk,\n rovErr,\n};\n\nexport async function makeNewSession(cwd?: string, manifestPath?: string) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n await simnet.initSession(\n cwd ?? process.cwd(),\n manifestPath ?? './Clarinet.toml'\n );\n}\n\nexport function assertOk<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseOk<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (!response.isOk) {\n throw new Error(\n `Expected response to be OK, but got ERR ${response.value}`\n );\n }\n}\n\nexport function assertErr<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseErr<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (response.isOk) {\n throw new Error('Expected response to be ERR, but got OK');\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["CoreNodeEventType","contractCallTx: ContractCallTransaction","tx","receipt: ParsedTransactionResult"],"sources":["../src/utils.ts","../src/events.ts","../src/index.ts"],"sourcesContent":["import {\n type Response,\n type TypedAbi,\n cvToValue,\n extractErrors,\n isResponse,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: allowed\nexport function validateResponse<T>(\n result: ClarityValue,\n expectOk?: boolean,\n contractAbi?: TypedAbi\n): T {\n const value = cvToValue<Response<T, T> | T>(result, true);\n\n if (!isResponse(value) && typeof expectOk !== 'undefined') {\n throw new Error(\n 'Expected response when calling function, but not a response. Try using just `rov`'\n );\n }\n\n if (isResponse(value) && typeof expectOk !== 'undefined') {\n const response = value;\n const inner = response.value;\n if (expectOk && !response.isOk) {\n // try and find a matching error code\n let errorCode = '';\n if (contractAbi) {\n const match = Object.entries(extractErrors(contractAbi)).find(\n ([_key, code]) => code === inner\n );\n if (match) {\n errorCode = ` (${match[0]})`;\n }\n }\n throw new Error(\n `Tx result failed. Expected OK, received ERR ${String(inner)}${errorCode}.`\n );\n }\n if (expectOk === false && response.isOk) {\n throw new Error(\n `Tx result failed. Expected ERR, received OK ${String(inner)}.`\n );\n }\n return inner;\n }\n return value as T;\n}\n","import {\n CoreNodeEventType,\n type SmartContractEvent as _SmartContractEvent,\n type StxTransferEvent as _StxTransferEvent,\n type StxBurnEvent as _StxBurnEvent,\n type StxMintEvent as _StxMintEvent,\n type StxLockEvent as _StxLockEvent,\n type FtBurnEvent as _FtBurnEvent,\n type FtMintEvent as _FtMintEvent,\n type FtTransferEvent as _FtTransferEvent,\n type NftBurnEvent as _NftBurnEvent,\n type NftMintEvent as _NftMintEvent,\n type NftTransferEvent as _NftTransferEvent,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\nexport type SmartContractEvent = {\n event: _SmartContractEvent['type'];\n data: Omit<_SmartContractEvent['contract_event'], 'value'> & {\n value: ClarityValue;\n };\n};\n\nexport type StxTransferEvent = {\n event: _StxTransferEvent['type'];\n data: _StxTransferEvent['stx_transfer_event'];\n};\n\nexport type StxBurnEvent = {\n event: _StxBurnEvent['type'];\n data: _StxBurnEvent['stx_burn_event'];\n};\n\nexport type StxLockEvent = {\n event: _StxLockEvent['type'];\n data: _StxLockEvent['stx_lock_event'];\n};\n\nexport type StxMintEvent = {\n event: _StxMintEvent['type'];\n data: _StxMintEvent['stx_mint_event'];\n};\n\nexport type FtBurnEvent = {\n event: _FtBurnEvent['type'];\n data: _FtBurnEvent['ft_burn_event'];\n};\n\nexport type FtMintEvent = {\n event: _FtMintEvent['type'];\n data: _FtMintEvent['ft_mint_event'];\n};\n\nexport type FtTransferEvent = {\n event: _FtTransferEvent['type'];\n data: _FtTransferEvent['ft_transfer_event'];\n};\n\nexport type NftBurnEvent = {\n event: _NftBurnEvent['type'];\n data: _NftBurnEvent['nft_burn_event'];\n};\n\nexport type NftMintEvent = {\n event: _NftMintEvent['type'];\n data: _NftMintEvent['nft_mint_event'];\n};\n\nexport type NftTransferEvent = {\n event: _NftTransferEvent['type'];\n data: _NftTransferEvent['nft_transfer_event'];\n};\n\nexport type CoreNodeEvent =\n | SmartContractEvent\n | StxTransferEvent\n | StxMintEvent\n | StxBurnEvent\n | StxLockEvent\n | FtTransferEvent\n | FtMintEvent\n | FtBurnEvent\n | NftTransferEvent\n | NftMintEvent\n | NftBurnEvent;\n\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.ContractEvent\n): SmartContractEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxTransferEvent\n): StxTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxMintEvent\n): StxMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxBurnEvent\n): StxBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxLockEvent\n): StxLockEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftTransferEvent\n): NftTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftMintEvent\n): NftMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftBurnEvent\n): NftBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtTransferEvent\n): FtTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtMintEvent\n): FtMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtBurnEvent\n): FtBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType\n): CoreNodeEvent[] {\n const typeString =\n type === CoreNodeEventType.ContractEvent ? 'print_event' : type;\n return events.filter((event) => event.event === typeString);\n}\n","/** biome-ignore-all lint/style/useTrimStartEnd: suppressed */\nimport {\n type ContractCallTyped,\n type ErrType,\n type OkType,\n type TypedAbiMap,\n type TypedAbiVariable,\n type UnknownArgs,\n cvToValue,\n mapFactory,\n type Response,\n cvToString,\n type ResponseOk,\n type ResponseErr,\n isResponse,\n} from '@clarigen/core';\nimport type { ContractCallTransaction } from '@clarigen/core/deployment';\nimport type { ParsedTransactionResult } from '@stacks/clarinet-sdk';\nimport { validateResponse } from './utils';\nimport type { CoreNodeEvent } from './events';\nimport { stringify } from 'yaml';\nimport type { ClarityValue } from '@stacks/transactions';\n// biome-ignore lint/performance/noBarrelFile: ignored using `--suppress`\nexport * from './events';\nexport * from './utils';\n\nexport type TransactionResult<R> = Omit<ParsedTransactionResult, 'events'> & {\n value: R;\n events: CoreNodeEvent[];\n};\n\nexport type AnyResponse = Response<unknown, unknown>;\n\nfunction logTxCall({\n contractId,\n sender,\n args,\n functionName,\n}: {\n contractId: string;\n sender: string;\n args: ClarityValue[];\n functionName: string;\n}) {\n if (process.env.LOG_TX_CALLS) {\n const contractCallTx: ContractCallTransaction = {\n 'contract-call': {\n 'contract-id': contractId,\n 'expected-sender': sender,\n parameters: args.map((arg) => cvToString(arg, 'hex')),\n method: functionName,\n cost: '10000000',\n },\n };\n console.log('------------ DEPLOYMENT TX ------------');\n console.log(stringify(contractCallTx, { indent: 2 }));\n console.log('------------ END DEPLOYMENT TX ------------');\n }\n}\n\nexport function txOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<OkType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function txErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<ErrType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function tx<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<R> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nfunction getTxReceipt<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): ParsedTransactionResult {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n let receipt: ParsedTransactionResult;\n if (tx.function.access === 'private') {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPrivateFn(contractId, tx.function.name, args, sender);\n } else {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPublicFn(contractId, tx.function.name, args, sender);\n }\n logTxCall({ contractId, sender, args, functionName: tx.function.name });\n return receipt;\n}\n\nexport function ro<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<R> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rov<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): R {\n return ro(tx, sender).value;\n}\n\nexport function roOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<OkType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): OkType<R> {\n return roOk(tx, sender).value;\n}\n\nexport function roErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<ErrType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): ErrType<R> {\n return roErr(tx, sender).value;\n}\n\nexport function mapGet<Key, Val>(\n contractId: string,\n map: TypedAbiMap<Key, Val>,\n key: Key\n) {\n const payload = mapFactory(map, key);\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getMapEntry(\n contractId,\n payload.map.name,\n payload.keyCV\n );\n return cvToValue<Val | null>(result);\n}\n\nexport function varGet<T>(contractId: string, variable: TypedAbiVariable<T>) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getDataVar(contractId, variable.name);\n return cvToValue<T>(result);\n}\n\n// Helper export for previous Deno-based tests\nexport const chain = {\n txOk,\n txErr,\n tx,\n ro,\n roOk,\n roErr,\n rov,\n rovOk,\n rovErr,\n};\n\nexport async function makeNewSession(cwd?: string, manifestPath?: string) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n await simnet.initSession(\n cwd ?? process.cwd(),\n manifestPath ?? './Clarinet.toml'\n );\n}\n\nexport function assertOk<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseOk<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (!response.isOk) {\n throw new Error(\n `Expected response to be OK, but got ERR ${response.value}`\n );\n }\n}\n\nexport function assertErr<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseErr<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (response.isOk) {\n throw new Error('Expected response to be ERR, but got OK');\n }\n}\n"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,164 @@
|
|
|
1
|
-
import{CoreNodeEventType
|
|
1
|
+
import { CoreNodeEventType, cvToString, cvToValue, extractErrors, isResponse, mapFactory } from "@clarigen/core";
|
|
2
|
+
import { stringify } from "yaml";
|
|
3
|
+
|
|
4
|
+
//#region src/utils.ts
|
|
5
|
+
function validateResponse(result, expectOk, contractAbi) {
|
|
6
|
+
const value = cvToValue(result, true);
|
|
7
|
+
if (!isResponse(value) && typeof expectOk !== "undefined") throw new Error("Expected response when calling function, but not a response. Try using just `rov`");
|
|
8
|
+
if (isResponse(value) && typeof expectOk !== "undefined") {
|
|
9
|
+
const response = value;
|
|
10
|
+
const inner = response.value;
|
|
11
|
+
if (expectOk && !response.isOk) {
|
|
12
|
+
let errorCode = "";
|
|
13
|
+
if (contractAbi) {
|
|
14
|
+
const match = Object.entries(extractErrors(contractAbi)).find(([_key, code]) => code === inner);
|
|
15
|
+
if (match) errorCode = ` (${match[0]})`;
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`Tx result failed. Expected OK, received ERR ${String(inner)}${errorCode}.`);
|
|
18
|
+
}
|
|
19
|
+
if (expectOk === false && response.isOk) throw new Error(`Tx result failed. Expected ERR, received OK ${String(inner)}.`);
|
|
20
|
+
return inner;
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/events.ts
|
|
27
|
+
function filterEvents(events, type) {
|
|
28
|
+
const typeString = type === CoreNodeEventType.ContractEvent ? "print_event" : type;
|
|
29
|
+
return events.filter((event) => event.event === typeString);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/index.ts
|
|
34
|
+
/** biome-ignore-all lint/style/useTrimStartEnd: suppressed */
|
|
35
|
+
function logTxCall({ contractId, sender, args, functionName }) {
|
|
36
|
+
if (process.env.LOG_TX_CALLS) {
|
|
37
|
+
const contractCallTx = { "contract-call": {
|
|
38
|
+
"contract-id": contractId,
|
|
39
|
+
"expected-sender": sender,
|
|
40
|
+
parameters: args.map((arg) => cvToString(arg, "hex")),
|
|
41
|
+
method: functionName,
|
|
42
|
+
cost: "10000000"
|
|
43
|
+
} };
|
|
44
|
+
console.log("------------ DEPLOYMENT TX ------------");
|
|
45
|
+
console.log(stringify(contractCallTx, { indent: 2 }));
|
|
46
|
+
console.log("------------ END DEPLOYMENT TX ------------");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function txOk(tx$1, sender) {
|
|
50
|
+
const receipt = getTxReceipt(tx$1, sender);
|
|
51
|
+
const value = validateResponse(receipt.result, true, tx$1.contractAbi);
|
|
52
|
+
return {
|
|
53
|
+
...receipt,
|
|
54
|
+
events: receipt.events,
|
|
55
|
+
value
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function txErr(tx$1, sender) {
|
|
59
|
+
const receipt = getTxReceipt(tx$1, sender);
|
|
60
|
+
const value = validateResponse(receipt.result, false, tx$1.contractAbi);
|
|
61
|
+
return {
|
|
62
|
+
...receipt,
|
|
63
|
+
events: receipt.events,
|
|
64
|
+
value
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function tx(tx$1, sender) {
|
|
68
|
+
const receipt = getTxReceipt(tx$1, sender);
|
|
69
|
+
const value = validateResponse(receipt.result, void 0, tx$1.contractAbi);
|
|
70
|
+
return {
|
|
71
|
+
...receipt,
|
|
72
|
+
events: receipt.events,
|
|
73
|
+
value
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function getTxReceipt(tx$1, sender) {
|
|
77
|
+
const args = tx$1.functionArgs;
|
|
78
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
79
|
+
let receipt;
|
|
80
|
+
if (tx$1.function.access === "private") receipt = simnet.callPrivateFn(contractId, tx$1.function.name, args, sender);
|
|
81
|
+
else receipt = simnet.callPublicFn(contractId, tx$1.function.name, args, sender);
|
|
82
|
+
logTxCall({
|
|
83
|
+
contractId,
|
|
84
|
+
sender,
|
|
85
|
+
args,
|
|
86
|
+
functionName: tx$1.function.name
|
|
87
|
+
});
|
|
88
|
+
return receipt;
|
|
89
|
+
}
|
|
90
|
+
function ro(tx$1, sender) {
|
|
91
|
+
const args = tx$1.functionArgs;
|
|
92
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
93
|
+
const receipt = simnet.callReadOnlyFn(contractId, tx$1.function.name, args, sender ?? tx$1.contractAddress);
|
|
94
|
+
const value = validateResponse(receipt.result, void 0, tx$1.contractAbi);
|
|
95
|
+
return {
|
|
96
|
+
...receipt,
|
|
97
|
+
events: receipt.events,
|
|
98
|
+
value
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function rov(tx$1, sender) {
|
|
102
|
+
return ro(tx$1, sender).value;
|
|
103
|
+
}
|
|
104
|
+
function roOk(tx$1, sender) {
|
|
105
|
+
const args = tx$1.functionArgs;
|
|
106
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
107
|
+
const receipt = simnet.callReadOnlyFn(contractId, tx$1.function.name, args, sender ?? tx$1.contractAddress);
|
|
108
|
+
const value = validateResponse(receipt.result, true, tx$1.contractAbi);
|
|
109
|
+
return {
|
|
110
|
+
...receipt,
|
|
111
|
+
events: receipt.events,
|
|
112
|
+
value
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function rovOk(tx$1, sender) {
|
|
116
|
+
return roOk(tx$1, sender).value;
|
|
117
|
+
}
|
|
118
|
+
function roErr(tx$1, sender) {
|
|
119
|
+
const args = tx$1.functionArgs;
|
|
120
|
+
const contractId = `${tx$1.contractAddress}.${tx$1.contractName}`;
|
|
121
|
+
const receipt = simnet.callReadOnlyFn(contractId, tx$1.function.name, args, sender ?? tx$1.contractAddress);
|
|
122
|
+
const value = validateResponse(receipt.result, false, tx$1.contractAbi);
|
|
123
|
+
return {
|
|
124
|
+
...receipt,
|
|
125
|
+
events: receipt.events,
|
|
126
|
+
value
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function rovErr(tx$1, sender) {
|
|
130
|
+
return roErr(tx$1, sender).value;
|
|
131
|
+
}
|
|
132
|
+
function mapGet(contractId, map, key) {
|
|
133
|
+
const payload = mapFactory(map, key);
|
|
134
|
+
return cvToValue(simnet.getMapEntry(contractId, payload.map.name, payload.keyCV));
|
|
135
|
+
}
|
|
136
|
+
function varGet(contractId, variable) {
|
|
137
|
+
return cvToValue(simnet.getDataVar(contractId, variable.name));
|
|
138
|
+
}
|
|
139
|
+
const chain = {
|
|
140
|
+
txOk,
|
|
141
|
+
txErr,
|
|
142
|
+
tx,
|
|
143
|
+
ro,
|
|
144
|
+
roOk,
|
|
145
|
+
roErr,
|
|
146
|
+
rov,
|
|
147
|
+
rovOk,
|
|
148
|
+
rovErr
|
|
149
|
+
};
|
|
150
|
+
async function makeNewSession(cwd, manifestPath) {
|
|
151
|
+
await simnet.initSession(cwd ?? process.cwd(), manifestPath ?? "./Clarinet.toml");
|
|
152
|
+
}
|
|
153
|
+
function assertOk(response) {
|
|
154
|
+
if (!isResponse(response)) throw new Error("Expected response, but got something else");
|
|
155
|
+
if (!response.isOk) throw new Error(`Expected response to be OK, but got ERR ${response.value}`);
|
|
156
|
+
}
|
|
157
|
+
function assertErr(response) {
|
|
158
|
+
if (!isResponse(response)) throw new Error("Expected response, but got something else");
|
|
159
|
+
if (response.isOk) throw new Error("Expected response to be ERR, but got OK");
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
//#endregion
|
|
163
|
+
export { assertErr, assertOk, chain, filterEvents, makeNewSession, mapGet, ro, roErr, roOk, rov, rovErr, rovOk, tx, txErr, txOk, validateResponse, varGet };
|
|
2
164
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["contractCallTx: ContractCallTransaction","tx","receipt: ParsedTransactionResult"],"sources":["../src/utils.ts","../src/events.ts","../src/index.ts"],"sourcesContent":["import {\n type Response,\n type TypedAbi,\n cvToValue,\n extractErrors,\n isResponse,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: allowed\nexport function validateResponse<T>(\n result: ClarityValue,\n expectOk?: boolean,\n contractAbi?: TypedAbi\n): T {\n const value = cvToValue<Response<T, T> | T>(result, true);\n\n if (!isResponse(value) && typeof expectOk !== 'undefined') {\n throw new Error(\n 'Expected response when calling function, but not a response. Try using just `rov`'\n );\n }\n\n if (isResponse(value) && typeof expectOk !== 'undefined') {\n const response = value;\n const inner = response.value;\n if (expectOk && !response.isOk) {\n // try and find a matching error code\n let errorCode = '';\n if (contractAbi) {\n const match = Object.entries(extractErrors(contractAbi)).find(\n ([_key, code]) => code === inner\n );\n if (match) {\n errorCode = ` (${match[0]})`;\n }\n }\n throw new Error(\n `Tx result failed. Expected OK, received ERR ${String(inner)}${errorCode}.`\n );\n }\n if (expectOk === false && response.isOk) {\n throw new Error(\n `Tx result failed. Expected ERR, received OK ${String(inner)}.`\n );\n }\n return inner;\n }\n return value as T;\n}\n","import {\n CoreNodeEventType,\n type SmartContractEvent as _SmartContractEvent,\n type StxTransferEvent as _StxTransferEvent,\n type StxBurnEvent as _StxBurnEvent,\n type StxMintEvent as _StxMintEvent,\n type StxLockEvent as _StxLockEvent,\n type FtBurnEvent as _FtBurnEvent,\n type FtMintEvent as _FtMintEvent,\n type FtTransferEvent as _FtTransferEvent,\n type NftBurnEvent as _NftBurnEvent,\n type NftMintEvent as _NftMintEvent,\n type NftTransferEvent as _NftTransferEvent,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\nexport type SmartContractEvent = {\n event: _SmartContractEvent['type'];\n data: Omit<_SmartContractEvent['contract_event'], 'value'> & {\n value: ClarityValue;\n };\n};\n\nexport type StxTransferEvent = {\n event: _StxTransferEvent['type'];\n data: _StxTransferEvent['stx_transfer_event'];\n};\n\nexport type StxBurnEvent = {\n event: _StxBurnEvent['type'];\n data: _StxBurnEvent['stx_burn_event'];\n};\n\nexport type StxLockEvent = {\n event: _StxLockEvent['type'];\n data: _StxLockEvent['stx_lock_event'];\n};\n\nexport type StxMintEvent = {\n event: _StxMintEvent['type'];\n data: _StxMintEvent['stx_mint_event'];\n};\n\nexport type FtBurnEvent = {\n event: _FtBurnEvent['type'];\n data: _FtBurnEvent['ft_burn_event'];\n};\n\nexport type FtMintEvent = {\n event: _FtMintEvent['type'];\n data: _FtMintEvent['ft_mint_event'];\n};\n\nexport type FtTransferEvent = {\n event: _FtTransferEvent['type'];\n data: _FtTransferEvent['ft_transfer_event'];\n};\n\nexport type NftBurnEvent = {\n event: _NftBurnEvent['type'];\n data: _NftBurnEvent['nft_burn_event'];\n};\n\nexport type NftMintEvent = {\n event: _NftMintEvent['type'];\n data: _NftMintEvent['nft_mint_event'];\n};\n\nexport type NftTransferEvent = {\n event: _NftTransferEvent['type'];\n data: _NftTransferEvent['nft_transfer_event'];\n};\n\nexport type CoreNodeEvent =\n | SmartContractEvent\n | StxTransferEvent\n | StxMintEvent\n | StxBurnEvent\n | StxLockEvent\n | FtTransferEvent\n | FtMintEvent\n | FtBurnEvent\n | NftTransferEvent\n | NftMintEvent\n | NftBurnEvent;\n\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.ContractEvent\n): SmartContractEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxTransferEvent\n): StxTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxMintEvent\n): StxMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxBurnEvent\n): StxBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxLockEvent\n): StxLockEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftTransferEvent\n): NftTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftMintEvent\n): NftMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftBurnEvent\n): NftBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtTransferEvent\n): FtTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtMintEvent\n): FtMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtBurnEvent\n): FtBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType\n): CoreNodeEvent[] {\n const typeString =\n type === CoreNodeEventType.ContractEvent ? 'print_event' : type;\n return events.filter((event) => event.event === typeString);\n}\n","/** biome-ignore-all lint/style/useTrimStartEnd: suppressed */\nimport {\n type ContractCallTyped,\n type ErrType,\n type OkType,\n type TypedAbiMap,\n type TypedAbiVariable,\n type UnknownArgs,\n cvToValue,\n mapFactory,\n type Response,\n cvToString,\n type ResponseOk,\n type ResponseErr,\n isResponse,\n} from '@clarigen/core';\nimport type { ContractCallTransaction } from '@clarigen/core/deployment';\nimport type { ParsedTransactionResult } from '@stacks/clarinet-sdk';\nimport { validateResponse } from './utils';\nimport type { CoreNodeEvent } from './events';\nimport { stringify } from 'yaml';\nimport type { ClarityValue } from '@stacks/transactions';\n// biome-ignore lint/performance/noBarrelFile: ignored using `--suppress`\nexport * from './events';\nexport * from './utils';\n\nexport type TransactionResult<R> = Omit<ParsedTransactionResult, 'events'> & {\n value: R;\n events: CoreNodeEvent[];\n};\n\nexport type AnyResponse = Response<unknown, unknown>;\n\nfunction logTxCall({\n contractId,\n sender,\n args,\n functionName,\n}: {\n contractId: string;\n sender: string;\n args: ClarityValue[];\n functionName: string;\n}) {\n if (process.env.LOG_TX_CALLS) {\n const contractCallTx: ContractCallTransaction = {\n 'contract-call': {\n 'contract-id': contractId,\n 'expected-sender': sender,\n parameters: args.map((arg) => cvToString(arg, 'hex')),\n method: functionName,\n cost: '10000000',\n },\n };\n console.log('------------ DEPLOYMENT TX ------------');\n console.log(stringify(contractCallTx, { indent: 2 }));\n console.log('------------ END DEPLOYMENT TX ------------');\n }\n}\n\nexport function txOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<OkType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function txErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<ErrType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function tx<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<R> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nfunction getTxReceipt<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): ParsedTransactionResult {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n let receipt: ParsedTransactionResult;\n if (tx.function.access === 'private') {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPrivateFn(contractId, tx.function.name, args, sender);\n } else {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPublicFn(contractId, tx.function.name, args, sender);\n }\n logTxCall({ contractId, sender, args, functionName: tx.function.name });\n return receipt;\n}\n\nexport function ro<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<R> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rov<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): R {\n return ro(tx, sender).value;\n}\n\nexport function roOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<OkType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): OkType<R> {\n return roOk(tx, sender).value;\n}\n\nexport function roErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<ErrType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): ErrType<R> {\n return roErr(tx, sender).value;\n}\n\nexport function mapGet<Key, Val>(\n contractId: string,\n map: TypedAbiMap<Key, Val>,\n key: Key\n) {\n const payload = mapFactory(map, key);\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getMapEntry(\n contractId,\n payload.map.name,\n payload.keyCV\n );\n return cvToValue<Val | null>(result);\n}\n\nexport function varGet<T>(contractId: string, variable: TypedAbiVariable<T>) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getDataVar(contractId, variable.name);\n return cvToValue<T>(result);\n}\n\n// Helper export for previous Deno-based tests\nexport const chain = {\n txOk,\n txErr,\n tx,\n ro,\n roOk,\n roErr,\n rov,\n rovOk,\n rovErr,\n};\n\nexport async function makeNewSession(cwd?: string, manifestPath?: string) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n await simnet.initSession(\n cwd ?? process.cwd(),\n manifestPath ?? './Clarinet.toml'\n );\n}\n\nexport function assertOk<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseOk<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (!response.isOk) {\n throw new Error(\n `Expected response to be OK, but got ERR ${response.value}`\n );\n }\n}\n\nexport function assertErr<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseErr<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (response.isOk) {\n throw new Error('Expected response to be ERR, but got OK');\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["contractCallTx: ContractCallTransaction","tx","receipt: ParsedTransactionResult"],"sources":["../src/utils.ts","../src/events.ts","../src/index.ts"],"sourcesContent":["import {\n type Response,\n type TypedAbi,\n cvToValue,\n extractErrors,\n isResponse,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: allowed\nexport function validateResponse<T>(\n result: ClarityValue,\n expectOk?: boolean,\n contractAbi?: TypedAbi\n): T {\n const value = cvToValue<Response<T, T> | T>(result, true);\n\n if (!isResponse(value) && typeof expectOk !== 'undefined') {\n throw new Error(\n 'Expected response when calling function, but not a response. Try using just `rov`'\n );\n }\n\n if (isResponse(value) && typeof expectOk !== 'undefined') {\n const response = value;\n const inner = response.value;\n if (expectOk && !response.isOk) {\n // try and find a matching error code\n let errorCode = '';\n if (contractAbi) {\n const match = Object.entries(extractErrors(contractAbi)).find(\n ([_key, code]) => code === inner\n );\n if (match) {\n errorCode = ` (${match[0]})`;\n }\n }\n throw new Error(\n `Tx result failed. Expected OK, received ERR ${String(inner)}${errorCode}.`\n );\n }\n if (expectOk === false && response.isOk) {\n throw new Error(\n `Tx result failed. Expected ERR, received OK ${String(inner)}.`\n );\n }\n return inner;\n }\n return value as T;\n}\n","import {\n CoreNodeEventType,\n type SmartContractEvent as _SmartContractEvent,\n type StxTransferEvent as _StxTransferEvent,\n type StxBurnEvent as _StxBurnEvent,\n type StxMintEvent as _StxMintEvent,\n type StxLockEvent as _StxLockEvent,\n type FtBurnEvent as _FtBurnEvent,\n type FtMintEvent as _FtMintEvent,\n type FtTransferEvent as _FtTransferEvent,\n type NftBurnEvent as _NftBurnEvent,\n type NftMintEvent as _NftMintEvent,\n type NftTransferEvent as _NftTransferEvent,\n} from '@clarigen/core';\nimport type { ClarityValue } from '@stacks/transactions';\n\nexport type SmartContractEvent = {\n event: _SmartContractEvent['type'];\n data: Omit<_SmartContractEvent['contract_event'], 'value'> & {\n value: ClarityValue;\n };\n};\n\nexport type StxTransferEvent = {\n event: _StxTransferEvent['type'];\n data: _StxTransferEvent['stx_transfer_event'];\n};\n\nexport type StxBurnEvent = {\n event: _StxBurnEvent['type'];\n data: _StxBurnEvent['stx_burn_event'];\n};\n\nexport type StxLockEvent = {\n event: _StxLockEvent['type'];\n data: _StxLockEvent['stx_lock_event'];\n};\n\nexport type StxMintEvent = {\n event: _StxMintEvent['type'];\n data: _StxMintEvent['stx_mint_event'];\n};\n\nexport type FtBurnEvent = {\n event: _FtBurnEvent['type'];\n data: _FtBurnEvent['ft_burn_event'];\n};\n\nexport type FtMintEvent = {\n event: _FtMintEvent['type'];\n data: _FtMintEvent['ft_mint_event'];\n};\n\nexport type FtTransferEvent = {\n event: _FtTransferEvent['type'];\n data: _FtTransferEvent['ft_transfer_event'];\n};\n\nexport type NftBurnEvent = {\n event: _NftBurnEvent['type'];\n data: _NftBurnEvent['nft_burn_event'];\n};\n\nexport type NftMintEvent = {\n event: _NftMintEvent['type'];\n data: _NftMintEvent['nft_mint_event'];\n};\n\nexport type NftTransferEvent = {\n event: _NftTransferEvent['type'];\n data: _NftTransferEvent['nft_transfer_event'];\n};\n\nexport type CoreNodeEvent =\n | SmartContractEvent\n | StxTransferEvent\n | StxMintEvent\n | StxBurnEvent\n | StxLockEvent\n | FtTransferEvent\n | FtMintEvent\n | FtBurnEvent\n | NftTransferEvent\n | NftMintEvent\n | NftBurnEvent;\n\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.ContractEvent\n): SmartContractEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxTransferEvent\n): StxTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxMintEvent\n): StxMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxBurnEvent\n): StxBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.StxLockEvent\n): StxLockEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftTransferEvent\n): NftTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftMintEvent\n): NftMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.NftBurnEvent\n): NftBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtTransferEvent\n): FtTransferEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtMintEvent\n): FtMintEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType.FtBurnEvent\n): FtBurnEvent[];\nexport function filterEvents(\n events: CoreNodeEvent[],\n type: CoreNodeEventType\n): CoreNodeEvent[] {\n const typeString =\n type === CoreNodeEventType.ContractEvent ? 'print_event' : type;\n return events.filter((event) => event.event === typeString);\n}\n","/** biome-ignore-all lint/style/useTrimStartEnd: suppressed */\nimport {\n type ContractCallTyped,\n type ErrType,\n type OkType,\n type TypedAbiMap,\n type TypedAbiVariable,\n type UnknownArgs,\n cvToValue,\n mapFactory,\n type Response,\n cvToString,\n type ResponseOk,\n type ResponseErr,\n isResponse,\n} from '@clarigen/core';\nimport type { ContractCallTransaction } from '@clarigen/core/deployment';\nimport type { ParsedTransactionResult } from '@stacks/clarinet-sdk';\nimport { validateResponse } from './utils';\nimport type { CoreNodeEvent } from './events';\nimport { stringify } from 'yaml';\nimport type { ClarityValue } from '@stacks/transactions';\n// biome-ignore lint/performance/noBarrelFile: ignored using `--suppress`\nexport * from './events';\nexport * from './utils';\n\nexport type TransactionResult<R> = Omit<ParsedTransactionResult, 'events'> & {\n value: R;\n events: CoreNodeEvent[];\n};\n\nexport type AnyResponse = Response<unknown, unknown>;\n\nfunction logTxCall({\n contractId,\n sender,\n args,\n functionName,\n}: {\n contractId: string;\n sender: string;\n args: ClarityValue[];\n functionName: string;\n}) {\n if (process.env.LOG_TX_CALLS) {\n const contractCallTx: ContractCallTransaction = {\n 'contract-call': {\n 'contract-id': contractId,\n 'expected-sender': sender,\n parameters: args.map((arg) => cvToString(arg, 'hex')),\n method: functionName,\n cost: '10000000',\n },\n };\n console.log('------------ DEPLOYMENT TX ------------');\n console.log(stringify(contractCallTx, { indent: 2 }));\n console.log('------------ END DEPLOYMENT TX ------------');\n }\n}\n\nexport function txOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<OkType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function txErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<ErrType<R>> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nexport function tx<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): TransactionResult<R> {\n const receipt = getTxReceipt(tx, sender);\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n}\n\nfunction getTxReceipt<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender: string\n): ParsedTransactionResult {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n let receipt: ParsedTransactionResult;\n if (tx.function.access === 'private') {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPrivateFn(contractId, tx.function.name, args, sender);\n } else {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n receipt = simnet.callPublicFn(contractId, tx.function.name, args, sender);\n }\n logTxCall({ contractId, sender, args, functionName: tx.function.name });\n return receipt;\n}\n\nexport function ro<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<R> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<R>(receipt.result, undefined, tx.contractAbi);\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rov<A extends UnknownArgs, R>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): R {\n return ro(tx, sender).value;\n}\n\nexport function roOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<OkType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<OkType<R>>(\n receipt.result,\n true,\n tx.contractAbi\n );\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovOk<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): OkType<R> {\n return roOk(tx, sender).value;\n}\n\nexport function roErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): TransactionResult<ErrType<R>> {\n const args = tx.functionArgs;\n const contractId = `${tx.contractAddress}.${tx.contractName}`;\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const receipt = simnet.callReadOnlyFn(\n contractId,\n tx.function.name,\n args,\n sender ?? tx.contractAddress\n );\n const value = validateResponse<ErrType<R>>(\n receipt.result,\n false,\n tx.contractAbi\n );\n\n return {\n ...receipt,\n events: receipt.events as unknown as CoreNodeEvent[],\n value,\n };\n\n // return value;\n}\n\nexport function rovErr<A extends UnknownArgs, R extends AnyResponse>(\n // biome-ignore lint/nursery/noShadow: ignored using `--suppress`\n tx: ContractCallTyped<A, R>,\n sender?: string\n): ErrType<R> {\n return roErr(tx, sender).value;\n}\n\nexport function mapGet<Key, Val>(\n contractId: string,\n map: TypedAbiMap<Key, Val>,\n key: Key\n) {\n const payload = mapFactory(map, key);\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getMapEntry(\n contractId,\n payload.map.name,\n payload.keyCV\n );\n return cvToValue<Val | null>(result);\n}\n\nexport function varGet<T>(contractId: string, variable: TypedAbiVariable<T>) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n const result = simnet.getDataVar(contractId, variable.name);\n return cvToValue<T>(result);\n}\n\n// Helper export for previous Deno-based tests\nexport const chain = {\n txOk,\n txErr,\n tx,\n ro,\n roOk,\n roErr,\n rov,\n rovOk,\n rovErr,\n};\n\nexport async function makeNewSession(cwd?: string, manifestPath?: string) {\n // biome-ignore lint/correctness/noUndeclaredVariables: ignored using `--suppress`\n await simnet.initSession(\n cwd ?? process.cwd(),\n manifestPath ?? './Clarinet.toml'\n );\n}\n\nexport function assertOk<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseOk<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (!response.isOk) {\n throw new Error(\n `Expected response to be OK, but got ERR ${response.value}`\n );\n }\n}\n\nexport function assertErr<T extends ResponseOk<O, E> | ResponseErr<O, E>, O, E>(\n response: T | unknown\n): asserts response is ResponseErr<O, E> {\n if (!isResponse(response)) {\n throw new Error('Expected response, but got something else');\n }\n if (response.isOk) {\n throw new Error('Expected response to be ERR, but got OK');\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.1.
|
|
2
|
+
"version": "4.1.5",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"types": "./dist/index.d.cts",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@stacks/clarinet-sdk-wasm": "^3.9.2"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@clarigen/core": "4.1.
|
|
41
|
+
"@clarigen/core": "4.1.5",
|
|
42
42
|
"@stacks/transactions": "7.2.0",
|
|
43
43
|
"yaml": "^2.4.1"
|
|
44
44
|
},
|