@secondlayer/cli 9.0.0 → 9.0.2
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/cli.js +13 -104
- package/dist/cli.js.map +4 -4
- package/dist/plugins/index.js +102 -29
- package/dist/plugins/index.js.map +4 -4
- package/package.json +2 -2
package/dist/plugins/index.js
CHANGED
|
@@ -762,8 +762,47 @@ async function generateContractHooks(contracts, excludeList = []) {
|
|
|
762
762
|
import { useCallback } from 'react'
|
|
763
763
|
import { useSecondLayerConfig } from './provider'
|
|
764
764
|
import { request } from '@secondlayer/stacks/connect'
|
|
765
|
-
import type { PostCondition } from '@secondlayer/stacks'
|
|
766
|
-
import { ${contracts.map((c) => c.name).join(", ")} } from './contracts'
|
|
765
|
+
import type { PostCondition } from '@secondlayer/stacks/postconditions'
|
|
766
|
+
import { ${contracts.map((c) => c.name).join(", ")} } from './contracts'
|
|
767
|
+
|
|
768
|
+
const API_URLS: Record<string, string> = {
|
|
769
|
+
mainnet: 'https://api.hiro.so',
|
|
770
|
+
testnet: 'https://api.testnet.hiro.so',
|
|
771
|
+
devnet: 'http://localhost:3999'
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
async function readContractCall(params: {
|
|
775
|
+
contractAddress: string;
|
|
776
|
+
contractName: string;
|
|
777
|
+
functionName: string;
|
|
778
|
+
functionArgs: any[];
|
|
779
|
+
outputType: any;
|
|
780
|
+
senderAddress: string;
|
|
781
|
+
network?: string;
|
|
782
|
+
apiUrl?: string;
|
|
783
|
+
}): Promise<any> {
|
|
784
|
+
const { serializeCV, deserializeCV, clarityValueToJS } = await import('@secondlayer/stacks/clarity')
|
|
785
|
+
// Untyped call: outputType is a runtime ABI value; relating the generic
|
|
786
|
+
// signature (even via a direct cast) explodes into deep instantiation on
|
|
787
|
+
// the AbiType union, so route the cast through unknown.
|
|
788
|
+
const toJS = clarityValueToJS as unknown as (type: any, cv: any) => any
|
|
789
|
+
const baseUrl = params.apiUrl || API_URLS[params.network || 'mainnet']
|
|
790
|
+
const response = await fetch(
|
|
791
|
+
\`\${baseUrl}/v2/contracts/call-read/\${params.contractAddress}/\${params.contractName}/\${params.functionName}\`,
|
|
792
|
+
{
|
|
793
|
+
method: 'POST',
|
|
794
|
+
headers: { 'Content-Type': 'application/json' },
|
|
795
|
+
body: JSON.stringify({
|
|
796
|
+
sender: params.senderAddress,
|
|
797
|
+
arguments: params.functionArgs.map((arg: any) => \`0x\${serializeCV(arg)}\`)
|
|
798
|
+
})
|
|
799
|
+
}
|
|
800
|
+
)
|
|
801
|
+
if (!response.ok) throw new Error(\`Read-only call failed: \${response.statusText}\`)
|
|
802
|
+
const data = await response.json()
|
|
803
|
+
if (!data.okay) throw new Error(data.cause ?? 'Read-only call failed')
|
|
804
|
+
return toJS(params.outputType, deserializeCV(data.result))
|
|
805
|
+
}`;
|
|
767
806
|
const header = `/**
|
|
768
807
|
* Generated contract-specific React hooks
|
|
769
808
|
* DO NOT EDIT MANUALLY
|
|
@@ -841,15 +880,22 @@ function generateReadHook(func, contractName) {
|
|
|
841
880
|
const argsSignature = generateHookArgsSignature(func.args);
|
|
842
881
|
const enabledParam = func.args.length > 0 ? ", options?: { enabled?: boolean }" : "options?: { enabled?: boolean }";
|
|
843
882
|
const returnType = clarityTypeToTS(func.outputs);
|
|
883
|
+
const callArgs = func.args.length > 0 ? `{ ${generateObjectArgs(func.args)} }` : "";
|
|
844
884
|
return `export function ${hookName}(${argsSignature}${enabledParam}) {
|
|
845
885
|
const config = useSecondLayerConfig()
|
|
846
886
|
|
|
847
887
|
return useQuery<${returnType}>({
|
|
848
888
|
queryKey: ['${func.name}', ${contractName}.address, ${generateArgNames(func.args)}],
|
|
849
|
-
queryFn: () =>
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
889
|
+
queryFn: async () => {
|
|
890
|
+
const call = ${contractName}.${toCamelCase3(func.name)}(${callArgs})
|
|
891
|
+
return await readContractCall({
|
|
892
|
+
...call,
|
|
893
|
+
outputType: ${JSON.stringify(func.outputs)},
|
|
894
|
+
network: config.network,
|
|
895
|
+
apiUrl: config.apiUrl,
|
|
896
|
+
senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'
|
|
897
|
+
}) as ${returnType}
|
|
898
|
+
},
|
|
853
899
|
${func.args.length > 0 ? `enabled: ${generateEnabledCondition(func.args)} && (options?.enabled ?? true),` : ""}
|
|
854
900
|
...options
|
|
855
901
|
})
|
|
@@ -1213,9 +1259,10 @@ async function generateGenericHooks(excludeList = []) {
|
|
|
1213
1259
|
import { useState, useCallback } from 'react'
|
|
1214
1260
|
import { useSecondLayerConfig } from './provider'
|
|
1215
1261
|
import { connect, disconnect, isConnected, request } from '@secondlayer/stacks/connect'
|
|
1216
|
-
import { Cl
|
|
1217
|
-
import type { PostCondition } from '@secondlayer/stacks'
|
|
1262
|
+
import { Cl } from '@secondlayer/stacks/clarity'
|
|
1218
1263
|
import type { ExtractFunctionArgs, ExtractFunctionNames, AbiContract } from '@secondlayer/stacks/clarity'
|
|
1264
|
+
import type { PostCondition } from '@secondlayer/stacks/postconditions'
|
|
1265
|
+
import { validateStacksAddress } from '@secondlayer/stacks/utils'
|
|
1219
1266
|
|
|
1220
1267
|
const API_URLS: Record<string, string> = {
|
|
1221
1268
|
mainnet: 'https://api.hiro.so',
|
|
@@ -1223,6 +1270,34 @@ const API_URLS: Record<string, string> = {
|
|
|
1223
1270
|
devnet: 'http://localhost:3999'
|
|
1224
1271
|
}
|
|
1225
1272
|
|
|
1273
|
+
async function callReadOnly(params: {
|
|
1274
|
+
contractAddress: string;
|
|
1275
|
+
contractName: string;
|
|
1276
|
+
functionName: string;
|
|
1277
|
+
functionArgs: any[];
|
|
1278
|
+
senderAddress: string;
|
|
1279
|
+
network?: string;
|
|
1280
|
+
apiUrl?: string;
|
|
1281
|
+
}): Promise<any> {
|
|
1282
|
+
const { serializeCV, deserializeCV } = await import('@secondlayer/stacks/clarity')
|
|
1283
|
+
const baseUrl = params.apiUrl || API_URLS[params.network || 'mainnet']
|
|
1284
|
+
const response = await fetch(
|
|
1285
|
+
\`\${baseUrl}/v2/contracts/call-read/\${params.contractAddress}/\${params.contractName}/\${params.functionName}\`,
|
|
1286
|
+
{
|
|
1287
|
+
method: 'POST',
|
|
1288
|
+
headers: { 'Content-Type': 'application/json' },
|
|
1289
|
+
body: JSON.stringify({
|
|
1290
|
+
sender: params.senderAddress,
|
|
1291
|
+
arguments: params.functionArgs.map((arg: any) => \`0x\${serializeCV(arg)}\`)
|
|
1292
|
+
})
|
|
1293
|
+
}
|
|
1294
|
+
)
|
|
1295
|
+
if (!response.ok) throw new Error(\`Read-only call failed: \${response.statusText}\`)
|
|
1296
|
+
const data = await response.json()
|
|
1297
|
+
if (!data.okay) throw new Error(data.cause ?? 'Read-only call failed')
|
|
1298
|
+
return deserializeCV(data.result)
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1226
1301
|
async function fetchTransaction({ txId, network, apiUrl }: { txId: string; network?: string; apiUrl?: string }): Promise<any> {
|
|
1227
1302
|
const baseUrl = apiUrl || API_URLS[network || 'mainnet']
|
|
1228
1303
|
const response = await fetch(\`\${baseUrl}/extended/v1/tx/\${txId}\`)
|
|
@@ -1331,9 +1406,9 @@ function generateGenericHook(hookName) {
|
|
|
1331
1406
|
const queryClient = useQueryClient()
|
|
1332
1407
|
|
|
1333
1408
|
const mutation = useMutation({
|
|
1334
|
-
mutationFn: async (
|
|
1409
|
+
mutationFn: async () => {
|
|
1335
1410
|
// SIP-030 connect
|
|
1336
|
-
return await connect(
|
|
1411
|
+
return await connect()
|
|
1337
1412
|
},
|
|
1338
1413
|
onSuccess: () => {
|
|
1339
1414
|
// Invalidate account queries to refetch connection state
|
|
@@ -1346,11 +1421,11 @@ function generateGenericHook(hookName) {
|
|
|
1346
1421
|
|
|
1347
1422
|
return {
|
|
1348
1423
|
// Custom connect function that works without arguments
|
|
1349
|
-
connect: (
|
|
1350
|
-
return mutation.mutate(
|
|
1424
|
+
connect: () => {
|
|
1425
|
+
return mutation.mutate(undefined)
|
|
1351
1426
|
},
|
|
1352
|
-
connectAsync: async (
|
|
1353
|
-
return mutation.mutateAsync(
|
|
1427
|
+
connectAsync: async () => {
|
|
1428
|
+
return mutation.mutateAsync(undefined)
|
|
1354
1429
|
},
|
|
1355
1430
|
// Expose all the mutation state
|
|
1356
1431
|
isPending: mutation.isPending,
|
|
@@ -1445,31 +1520,27 @@ function generateGenericHook(hookName) {
|
|
|
1445
1520
|
return useQuery<TResult>({
|
|
1446
1521
|
queryKey: ['read-contract', params.contractAddress, params.contractName, params.functionName, params.args, params.network || config.network],
|
|
1447
1522
|
queryFn: async () => {
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
// For now, we'll need to handle the args conversion here
|
|
1451
|
-
// In the future, we could integrate with the contract interface for automatic conversion
|
|
1523
|
+
// Args must already be ClarityValues (build them with Cl.* or a generated
|
|
1524
|
+
// contract method's descriptor). Positional array, ABI declaration order.
|
|
1452
1525
|
let functionArgs: any[] = []
|
|
1453
|
-
|
|
1526
|
+
|
|
1454
1527
|
if (params.args) {
|
|
1455
|
-
// This is a simplified conversion - in practice, we'd need the ABI to do proper conversion
|
|
1456
|
-
// For now, we'll assume the args are already in the correct format or simple types
|
|
1457
1528
|
if (Array.isArray(params.args)) {
|
|
1458
1529
|
functionArgs = params.args
|
|
1459
1530
|
} else if (typeof params.args === 'object') {
|
|
1460
|
-
// Convert object args to array (this is a basic implementation)
|
|
1461
1531
|
functionArgs = Object.values(params.args)
|
|
1462
1532
|
} else {
|
|
1463
1533
|
functionArgs = [params.args]
|
|
1464
1534
|
}
|
|
1465
1535
|
}
|
|
1466
|
-
|
|
1467
|
-
return await
|
|
1536
|
+
|
|
1537
|
+
return await callReadOnly({
|
|
1468
1538
|
contractAddress: params.contractAddress,
|
|
1469
1539
|
contractName: params.contractName,
|
|
1470
1540
|
functionName: params.functionName,
|
|
1471
1541
|
functionArgs,
|
|
1472
1542
|
network: params.network || config.network || 'mainnet',
|
|
1543
|
+
apiUrl: config.apiUrl,
|
|
1473
1544
|
senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'
|
|
1474
1545
|
}) as TResult
|
|
1475
1546
|
},
|
|
@@ -1530,11 +1601,13 @@ function generateGenericHook(hookName) {
|
|
|
1530
1601
|
apiUrl: config.apiUrl
|
|
1531
1602
|
}),
|
|
1532
1603
|
enabled: !!txId,
|
|
1533
|
-
refetchInterval: (
|
|
1604
|
+
refetchInterval: (queryOrData: any) => {
|
|
1605
|
+
// react-query v5 passes the query object, v4 passed the data — support both
|
|
1606
|
+
const tx = queryOrData?.state?.data ?? queryOrData
|
|
1534
1607
|
// Stop polling when transaction is complete
|
|
1535
|
-
if (
|
|
1536
|
-
|
|
1537
|
-
|
|
1608
|
+
if (tx?.tx_status === 'success' ||
|
|
1609
|
+
tx?.tx_status === 'abort_by_response' ||
|
|
1610
|
+
tx?.tx_status === 'abort_by_post_condition') {
|
|
1538
1611
|
return false
|
|
1539
1612
|
}
|
|
1540
1613
|
return 2000 // Poll every 2 seconds
|
|
@@ -2070,5 +2143,5 @@ export {
|
|
|
2070
2143
|
PluginManager
|
|
2071
2144
|
};
|
|
2072
2145
|
|
|
2073
|
-
//# debugId=
|
|
2146
|
+
//# debugId=15CE4A0BEE59E1A664756E2164756E21
|
|
2074
2147
|
//# sourceMappingURL=index.js.map
|
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
"/**\n * Clarinet Plugin for @secondlayer/cli\n * Generates type-safe contract interfaces from local Clarity contracts using Clarinet SDK\n */\n\nimport { initSimnet } from \"@hirosystems/clarinet-sdk\";\nimport { toCamelCase } from \"@secondlayer/stacks/clarity\";\nimport { generateContractInterface } from \"../../generators/contract\";\nimport type {\n\tGenerateContext,\n\tPluginFactory,\n\tUserConfig,\n} from \"../../types/plugin\";\nimport { normalizeAbi } from \"../../utils/abi-compat\";\nimport { DEFAULT_SENDER_ADDRESS } from \"../../utils/constants\";\nimport { parseContractId } from \"../../utils/contract-id\";\nimport { matchesContractFilters } from \"../shared\";\n\nexport interface ClarinetPluginOptions {\n\t/** Path to Clarinet.toml file */\n\tpath?: string;\n\n\t/** Include only specific contracts */\n\tinclude?: string[];\n\n\t/** Exclude specific contracts */\n\texclude?: string[];\n\n\t/**\n\t * Also generate interfaces for dependency contracts declared under\n\t * `[project.requirements]` in Clarinet.toml (default: true).\n\t */\n\tincludeRequirements?: boolean;\n\n\t/** Enable debug output */\n\tdebug?: boolean;\n}\n\n/**\n * Sanitize contract name to be a valid JavaScript identifier using camelCase\n */\nfunction sanitizeContractName(name: string): string {\n\treturn toCamelCase(name);\n}\n\n/** @internal exported for tests */\nexport interface ManifestInfo {\n\t/** Names from `[contracts.NAME]` sections */\n\tprojectContracts: Set<string>;\n\t/** Fully-qualified ids from `[project.requirements]` entries */\n\trequirementIds: Set<string>;\n}\n\n/**\n * Read project contracts and requirements from Clarinet.toml. Returns null if\n * the manifest can't be read (callers fall back to pattern heuristics).\n */\nexport async function readManifestInfo(\n\tmanifestPath: string,\n): Promise<ManifestInfo | null> {\n\ttry {\n\t\tconst { promises: fs } = await import(\"node:fs\");\n\t\tconst tomlContent = await fs.readFile(manifestPath, \"utf-8\");\n\n\t\t// Simple TOML parsing: [contracts.NAME] sections\n\t\tconst projectContracts = new Set<string>();\n\t\tconst contractSectionRegex = /^\\[contracts\\.([^\\]]+)\\]/gm;\n\t\tlet match: RegExpExecArray | null = contractSectionRegex.exec(tomlContent);\n\t\twhile (match !== null) {\n\t\t\tprojectContracts.add(match[1]);\n\t\t\tmatch = contractSectionRegex.exec(tomlContent);\n\t\t}\n\n\t\t// Requirements: `contract_id = \"SP....name\"` entries — covers both the\n\t\t// inline `requirements = [{ contract_id = \"...\" }]` and the\n\t\t// `[[project.requirements]]` table-array forms.\n\t\tconst requirementIds = new Set<string>();\n\t\tconst requirementRegex = /contract_id\\s*=\\s*[\"']([^\"']+)[\"']/g;\n\t\tmatch = requirementRegex.exec(tomlContent);\n\t\twhile (match !== null) {\n\t\t\trequirementIds.add(match[1]);\n\t\t\tmatch = requirementRegex.exec(tomlContent);\n\t\t}\n\n\t\treturn { projectContracts, requirementIds };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** @internal exported for tests */\nexport type ContractKind = \"project\" | \"requirement\" | \"system\";\n\n/**\n * Classify a simnet contract. With a readable manifest the classification is\n * deterministic: `[contracts.*]` → project, `[project.requirements]` →\n * requirement, everything else (boot contracts) → system. Without a manifest,\n * fall back to boot-contract heuristics.\n */\nexport function classifyContract(\n\tcontractId: string,\n\tmanifest: ManifestInfo | null,\n): ContractKind {\n\tconst { address, contractName } = parseContractId(contractId);\n\n\tif (manifest) {\n\t\tif (manifest.projectContracts.has(contractName)) return \"project\";\n\t\tif (manifest.requirementIds.has(contractId)) return \"requirement\";\n\t\treturn \"system\";\n\t}\n\n\t// Fallback heuristics: boot contracts have well-known names/addresses\n\tconst systemContractPatterns = [\n\t\t/^pox-\\d+$/, // pox-2, pox-3, etc.\n\t\t/^bns$/, // Blockchain Name System\n\t\t/^costs-\\d+$/, // costs-2, costs-3, etc.\n\t\t/^lockup$/, // lockup contract\n\t];\n\tif (systemContractPatterns.some((pattern) => pattern.test(contractName))) {\n\t\treturn \"system\";\n\t}\n\n\tconst systemAddresses = [\n\t\tDEFAULT_SENDER_ADDRESS, // Boot contracts address\n\t\t\"ST000000000000000000002AMW42H\", // Boot contracts address (testnet)\n\t];\n\tif (systemAddresses.includes(address)) {\n\t\treturn \"system\";\n\t}\n\n\treturn \"project\";\n}\n\n/**\n * Clarinet plugin factory\n */\nexport const clarinet: PluginFactory<ClarinetPluginOptions> = (\n\toptions = {},\n) => {\n\tconst manifestPath = options.path || \"./Clarinet.toml\";\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\tlet simnet: any;\n\n\treturn {\n\t\tname: \"@secondlayer/cli/plugin-clarinet\",\n\t\tversion: \"1.0.0\",\n\n\t\tasync transformConfig(config: UserConfig): Promise<UserConfig> {\n\t\t\ttry {\n\t\t\t\t// Initialize simnet to extract contract ABIs\n\t\t\t\tsimnet = await initSimnet(manifestPath);\n\n\t\t\t\t// Get contract interfaces from Clarinet\n\t\t\t\tconst contractInterfaces = simnet.getContractsInterfaces();\n\t\t\t\tconst contracts = [];\n\t\t\t\tconst manifest = await readManifestInfo(manifestPath);\n\t\t\t\tconst includeRequirements = options.includeRequirements ?? true;\n\n\t\t\t\tfor (const [contractId, abi] of contractInterfaces) {\n\t\t\t\t\tconst { contractName } = parseContractId(contractId);\n\n\t\t\t\t\tconst kind = classifyContract(contractId, manifest);\n\n\t\t\t\t\t// Skip system/boot contracts, and requirements when opted out\n\t\t\t\t\tif (\n\t\t\t\t\t\tkind === \"system\" ||\n\t\t\t\t\t\t(kind === \"requirement\" && !includeRequirements)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (options.debug) {\n\t\t\t\t\t\t\tconsole.log(`🚫 Skipping ${kind} contract: ${contractId}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply user filters\n\t\t\t\t\tif (!matchesContractFilters(contractName, options)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Sanitize the contract name for JavaScript export\n\t\t\t\t\tconst sanitizedName = sanitizeContractName(contractName);\n\n\t\t\t\t\t// Don't set source field to avoid conflict with file resolution\n\t\t\t\t\t// Instead, we'll track this in metadata during processing\n\t\t\t\t\tcontracts.push({\n\t\t\t\t\t\tname: sanitizedName,\n\t\t\t\t\t\taddress: contractId,\n\t\t\t\t\t\tabi: normalizeAbi(abi),\n\t\t\t\t\t\t// Remove source field - this was causing the path resolution issue\n\t\t\t\t\t\t_clarinetSource: true, // Internal flag for our plugin\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (options.debug) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`🔍 Clarinet plugin found ${contracts.length} user-defined contracts`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\t...config,\n\t\t\t\t\tcontracts: [...(config.contracts || []), ...contracts],\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst err = error as Error;\n\t\t\t\tif (await hasClarinetProject(manifestPath)) {\n\t\t\t\t\t// Manifest exists but loading failed — always surface it\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`⚠️ Clarinet plugin: found ${manifestPath} but failed to load contracts: ${err.message}`,\n\t\t\t\t\t);\n\t\t\t\t} else if (options.debug) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`⚠️ Clarinet plugin: no manifest at ${manifestPath}, skipping`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn config;\n\t\t\t}\n\t\t},\n\n\t\tasync generate(context: GenerateContext): Promise<void> {\n\t\t\t// Filter contracts that came from Clarinet\n\t\t\tconst clarinetContracts = context.contracts.filter(\n\t\t\t\t(contract) => contract.metadata?.source === \"clarinet\",\n\t\t\t);\n\n\t\t\tif (clarinetContracts.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (options.debug) {\n\t\t\t\tcontext.logger.debug(\n\t\t\t\t\t`Generating interfaces for ${clarinetContracts.length} Clarinet contracts`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Generate the main contracts file using existing generator\n\t\t\tconst contractsCode = await generateContractInterface(clarinetContracts);\n\n\t\t\tcontext.addOutput(\"contracts\", {\n\t\t\t\tpath: context.config.out,\n\t\t\t\tcontent: contractsCode,\n\t\t\t\ttype: \"contracts\",\n\t\t\t});\n\n\t\t\t// Don't log success here - let the main command handle it\n\t\t},\n\t};\n};\n\n/**\n * Utility function to check if a Clarinet project exists\n */\nexport async function hasClarinetProject(\n\tpath = \"./Clarinet.toml\",\n): Promise<boolean> {\n\ttry {\n\t\tconst { promises: fs } = await import(\"node:fs\");\n\t\tawait fs.access(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n",
|
|
13
13
|
"/**\n * Shared constants for @secondlayer/cli\n */\n\n/**\n * Stacks boot-contract address, used as the default sender for read-only\n * calls when the user hasn't configured one.\n */\nexport const DEFAULT_SENDER_ADDRESS = \"SP000000000000000000002Q6VF78\";\n",
|
|
14
14
|
"/**\n * Internal helpers shared across plugins (not part of the public plugin API)\n */\n\nexport interface ContractFilterOptions {\n\t/** Include only these contract names (exact match) */\n\tinclude?: string[];\n\n\t/** Exclude these contract names (exact match) */\n\texclude?: string[];\n}\n\n/**\n * Exact-match include/exclude filter used by the clarinet, actions, and\n * testing plugins to scope which contracts they process.\n */\nexport function matchesContractFilters(\n\tname: string,\n\toptions: ContractFilterOptions,\n): boolean {\n\tif (options.include && !options.include.includes(name)) {\n\t\treturn false;\n\t}\n\tif (options.exclude?.includes(name)) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n",
|
|
15
|
-
"/**\n * Contract-specific hooks generator for React plugin\n */\n\nimport type { AbiFunction } from \"@secondlayer/stacks/clarity\";\nimport type { AbiMap, AbiVariable } from \"@secondlayer/stacks/clarity\";\nimport type { ProcessedContract } from \"../../../types/plugin\";\nimport { DEFAULT_SENDER_ADDRESS } from \"../../../utils/constants\";\nimport { formatCode } from \"../../../utils/format\";\nimport {\n\tcapitalize,\n\tclarityTypeToTS,\n\tgenerateArgNames,\n\tgenerateArgsType,\n\tgenerateEnabledCondition,\n\tgenerateHookArgsSignature,\n\tgenerateObjectArgs,\n\ttoCamelCase,\n} from \"./utils\";\n\nexport async function generateContractHooks(\n\tcontracts: ProcessedContract[],\n\texcludeList: string[] = [],\n): Promise<string> {\n\tconst imports = `import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { useSecondLayerConfig } from './provider'\nimport { request } from '@secondlayer/stacks/connect'\nimport type { PostCondition } from '@secondlayer/stacks'\nimport { ${contracts.map((c) => c.name).join(\", \")} } from './contracts'`;\n\n\tconst header = `/**\n * Generated contract-specific React hooks\n * DO NOT EDIT MANUALLY\n */`;\n\n\tconst hooksCode = contracts\n\t\t.map((contract) => generateContractHookMethods(contract, excludeList))\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n\n\tconst code = `${imports}\\n\\n${header}\\n\\n${hooksCode}`;\n\n\treturn formatCode(code);\n}\n\nfunction generateContractHookMethods(\n\tcontract: ProcessedContract,\n\texcludeList: string[],\n): string {\n\tconst { abi, name, address, contractName } = contract;\n\tconst functions = abi.functions || [];\n\tconst maps = abi.maps || [];\n\tconst variables = abi.variables || [];\n\n\tconst readOnlyFunctions = functions.filter(\n\t\t(f: AbiFunction) => f.access === \"read-only\",\n\t);\n\tconst publicFunctions = functions.filter(\n\t\t(f: AbiFunction) => f.access === \"public\",\n\t);\n\n\tconst readHooks = readOnlyFunctions\n\t\t.map((func: AbiFunction) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(func.name))}`;\n\t\t\t// Check if this specific hook is excluded\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateReadHook(func, name);\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst writeHooks = publicFunctions\n\t\t.map((func: AbiFunction) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(func.name))}`;\n\t\t\t// Check if this specific hook is excluded\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateWriteHook(func, name);\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Generate hooks for maps\n\tconst mapHooks = maps\n\t\t.map((map: AbiMap) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(map.name))}`;\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateMapHook(map, name, address, contractName);\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Generate hooks for data variables\n\tconst dataVars = variables.filter(\n\t\t(v: AbiVariable) => v.access === \"variable\",\n\t);\n\tconst varHooks = dataVars\n\t\t.map((variable: AbiVariable) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(variable.name))}`;\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateVarHook(variable, name, address, contractName);\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Generate hooks for constants\n\tconst constants = variables.filter(\n\t\t(v: AbiVariable) => v.access === \"constant\",\n\t);\n\tconst constantHooks = constants\n\t\t.map((constant: AbiVariable) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(constant.name))}`;\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateConstantHook(constant, name, address, contractName);\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst allHooks = [\n\t\t...readHooks,\n\t\t...writeHooks,\n\t\t...mapHooks,\n\t\t...varHooks,\n\t\t...constantHooks,\n\t];\n\n\t// If all hooks for this contract are excluded, return empty string\n\tif (allHooks.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn allHooks.join(\"\\n\\n\");\n}\n\nfunction generateReadHook(func: AbiFunction, contractName: string): string {\n\tconst hookName = `use${capitalize(contractName)}${capitalize(toCamelCase(func.name))}`;\n\tconst argsSignature = generateHookArgsSignature(func.args);\n\tconst enabledParam =\n\t\tfunc.args.length > 0\n\t\t\t? \", options?: { enabled?: boolean }\"\n\t\t\t: \"options?: { enabled?: boolean }\";\n\n\t// Generate proper return type from function outputs\n\tconst returnType = clarityTypeToTS(func.outputs);\n\n\treturn `export function ${hookName}(${argsSignature}${enabledParam}) {\n const config = useSecondLayerConfig()\n\n return useQuery<${returnType}>({\n queryKey: ['${func.name}', ${contractName}.address, ${generateArgNames(func.args)}],\n queryFn: () => ${contractName}.read.${toCamelCase(func.name)}(${generateArgNames(func.args) ? `{ ${generateObjectArgs(func.args)} }, ` : \"\"}{\n network: config.network,\n senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'\n }),\n ${func.args.length > 0 ? `enabled: ${generateEnabledCondition(func.args)} && (options?.enabled ?? true),` : \"\"}\n ...options\n })\n}`;\n}\n\nfunction generateWriteHook(func: AbiFunction, contractName: string): string {\n\tconst hookName = `use${capitalize(contractName)}${capitalize(toCamelCase(func.name))}`;\n\tconst argsType = generateArgsType(func.args);\n\n\treturn `export function ${hookName}() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n \n const mutation = useMutation({\n mutationFn: async (params: {\n args: ${argsType};\n options?: {\n postConditions?: PostCondition[];\n attachment?: string;\n onFinish?: (data: any) => void;\n onCancel?: () => void;\n };\n }) => {\n const { args, options = {} } = params\n const contractCallData = ${contractName}.${toCamelCase(func.name)}(args)\n const { contractAddress, contractName: name, functionName, functionArgs } = contractCallData\n const network = config.network || 'mainnet'\n const contract = \\`\\${contractAddress}.\\${name}\\`\n\n const result = await request('stx_callContract', {\n contract,\n functionName,\n functionArgs,\n network,\n ...options\n })\n\n options.onFinish?.(result)\n return result\n },\n onSuccess: () => {\n // Invalidate relevant queries on success\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('Contract call failed:', error)\n }\n })\n\n const ${toCamelCase(func.name)} = useCallback(async (\n args: ${argsType},\n options?: {\n postConditions?: PostCondition[];\n attachment?: string;\n onFinish?: (data: any) => void;\n onCancel?: () => void;\n }\n ) => {\n return mutation.mutateAsync({ args, options })\n }, [mutation])\n\n return {\n ${toCamelCase(func.name)},\n // Expose mutation state\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n}\n\n/**\n * Generate a hook for reading a map entry\n */\nfunction generateMapHook(\n\tmap: AbiMap,\n\tcontractVarName: string,\n\t_address: string,\n\t_contractName: string,\n): string {\n\tconst hookName = `use${capitalize(contractVarName)}${capitalize(toCamelCase(map.name))}`;\n\tconst keyType = clarityTypeToTS(map.key);\n\tconst valueType = clarityTypeToTS(map.value);\n\n\treturn `export function ${hookName}(key: ${keyType}, options?: { enabled?: boolean }) {\n const config = useSecondLayerConfig()\n\n return useQuery<${valueType} | null>({\n queryKey: ['${contractVarName}', '${map.name}', 'map', key, config.network],\n queryFn: async () => {\n return ${contractVarName}.maps.${toCamelCase(map.name)}.get(key, { network: config.network })\n },\n enabled: options?.enabled ?? true\n })\n}`;\n}\n\n/**\n * Generate a hook for reading a data variable\n */\nfunction generateVarHook(\n\tvariable: AbiVariable,\n\tcontractVarName: string,\n\t_address: string,\n\t_contractName: string,\n): string {\n\tconst hookName = `use${capitalize(contractVarName)}${capitalize(toCamelCase(variable.name))}`;\n\tconst valueType = clarityTypeToTS(variable.type);\n\n\treturn `export function ${hookName}(options?: { enabled?: boolean }) {\n const config = useSecondLayerConfig()\n\n return useQuery<${valueType}>({\n queryKey: ['${contractVarName}', '${variable.name}', 'var', config.network],\n queryFn: async () => {\n return ${contractVarName}.vars.${toCamelCase(variable.name)}.get({ network: config.network })\n },\n enabled: options?.enabled ?? true\n })\n}`;\n}\n\n/**\n * Generate a hook for reading a constant\n */\nfunction generateConstantHook(\n\tconstant: AbiVariable,\n\tcontractVarName: string,\n\t_address: string,\n\t_contractName: string,\n): string {\n\tconst hookName = `use${capitalize(contractVarName)}${capitalize(toCamelCase(constant.name))}`;\n\tconst valueType = clarityTypeToTS(constant.type);\n\n\treturn `export function ${hookName}(options?: { enabled?: boolean }) {\n const config = useSecondLayerConfig()\n\n return useQuery<${valueType}>({\n queryKey: ['${contractVarName}', '${constant.name}', 'constant', config.network],\n queryFn: async () => {\n return ${contractVarName}.constants.${toCamelCase(constant.name)}.get({ network: config.network })\n },\n enabled: options?.enabled ?? true,\n staleTime: Infinity // Constants never change\n })\n}`;\n}\n",
|
|
15
|
+
"/**\n * Contract-specific hooks generator for React plugin\n */\n\nimport type { AbiFunction } from \"@secondlayer/stacks/clarity\";\nimport type { AbiMap, AbiVariable } from \"@secondlayer/stacks/clarity\";\nimport type { ProcessedContract } from \"../../../types/plugin\";\nimport { DEFAULT_SENDER_ADDRESS } from \"../../../utils/constants\";\nimport { formatCode } from \"../../../utils/format\";\nimport {\n\tcapitalize,\n\tclarityTypeToTS,\n\tgenerateArgNames,\n\tgenerateArgsType,\n\tgenerateEnabledCondition,\n\tgenerateHookArgsSignature,\n\tgenerateObjectArgs,\n\ttoCamelCase,\n} from \"./utils\";\n\nexport async function generateContractHooks(\n\tcontracts: ProcessedContract[],\n\texcludeList: string[] = [],\n): Promise<string> {\n\tconst imports = `import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useCallback } from 'react'\nimport { useSecondLayerConfig } from './provider'\nimport { request } from '@secondlayer/stacks/connect'\nimport type { PostCondition } from '@secondlayer/stacks/postconditions'\nimport { ${contracts.map((c) => c.name).join(\", \")} } from './contracts'\n\nconst API_URLS: Record<string, string> = {\n mainnet: 'https://api.hiro.so',\n testnet: 'https://api.testnet.hiro.so',\n devnet: 'http://localhost:3999'\n}\n\nasync function readContractCall(params: {\n contractAddress: string;\n contractName: string;\n functionName: string;\n functionArgs: any[];\n outputType: any;\n senderAddress: string;\n network?: string;\n apiUrl?: string;\n}): Promise<any> {\n const { serializeCV, deserializeCV, clarityValueToJS } = await import('@secondlayer/stacks/clarity')\n // Untyped call: outputType is a runtime ABI value; relating the generic\n // signature (even via a direct cast) explodes into deep instantiation on\n // the AbiType union, so route the cast through unknown.\n const toJS = clarityValueToJS as unknown as (type: any, cv: any) => any\n const baseUrl = params.apiUrl || API_URLS[params.network || 'mainnet']\n const response = await fetch(\n \\`\\${baseUrl}/v2/contracts/call-read/\\${params.contractAddress}/\\${params.contractName}/\\${params.functionName}\\`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n sender: params.senderAddress,\n arguments: params.functionArgs.map((arg: any) => \\`0x\\${serializeCV(arg)}\\`)\n })\n }\n )\n if (!response.ok) throw new Error(\\`Read-only call failed: \\${response.statusText}\\`)\n const data = await response.json()\n if (!data.okay) throw new Error(data.cause ?? 'Read-only call failed')\n return toJS(params.outputType, deserializeCV(data.result))\n}`;\n\n\tconst header = `/**\n * Generated contract-specific React hooks\n * DO NOT EDIT MANUALLY\n */`;\n\n\tconst hooksCode = contracts\n\t\t.map((contract) => generateContractHookMethods(contract, excludeList))\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n\n\tconst code = `${imports}\\n\\n${header}\\n\\n${hooksCode}`;\n\n\treturn formatCode(code);\n}\n\nfunction generateContractHookMethods(\n\tcontract: ProcessedContract,\n\texcludeList: string[],\n): string {\n\tconst { abi, name, address, contractName } = contract;\n\tconst functions = abi.functions || [];\n\tconst maps = abi.maps || [];\n\tconst variables = abi.variables || [];\n\n\tconst readOnlyFunctions = functions.filter(\n\t\t(f: AbiFunction) => f.access === \"read-only\",\n\t);\n\tconst publicFunctions = functions.filter(\n\t\t(f: AbiFunction) => f.access === \"public\",\n\t);\n\n\tconst readHooks = readOnlyFunctions\n\t\t.map((func: AbiFunction) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(func.name))}`;\n\t\t\t// Check if this specific hook is excluded\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateReadHook(func, name);\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst writeHooks = publicFunctions\n\t\t.map((func: AbiFunction) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(func.name))}`;\n\t\t\t// Check if this specific hook is excluded\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateWriteHook(func, name);\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Generate hooks for maps\n\tconst mapHooks = maps\n\t\t.map((map: AbiMap) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(map.name))}`;\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateMapHook(map, name, address, contractName);\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Generate hooks for data variables\n\tconst dataVars = variables.filter(\n\t\t(v: AbiVariable) => v.access === \"variable\",\n\t);\n\tconst varHooks = dataVars\n\t\t.map((variable: AbiVariable) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(variable.name))}`;\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateVarHook(variable, name, address, contractName);\n\t\t})\n\t\t.filter(Boolean);\n\n\t// Generate hooks for constants\n\tconst constants = variables.filter(\n\t\t(v: AbiVariable) => v.access === \"constant\",\n\t);\n\tconst constantHooks = constants\n\t\t.map((constant: AbiVariable) => {\n\t\t\tconst hookName = `use${capitalize(name)}${capitalize(toCamelCase(constant.name))}`;\n\t\t\tif (excludeList.includes(hookName)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn generateConstantHook(constant, name, address, contractName);\n\t\t})\n\t\t.filter(Boolean);\n\n\tconst allHooks = [\n\t\t...readHooks,\n\t\t...writeHooks,\n\t\t...mapHooks,\n\t\t...varHooks,\n\t\t...constantHooks,\n\t];\n\n\t// If all hooks for this contract are excluded, return empty string\n\tif (allHooks.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn allHooks.join(\"\\n\\n\");\n}\n\nfunction generateReadHook(func: AbiFunction, contractName: string): string {\n\tconst hookName = `use${capitalize(contractName)}${capitalize(toCamelCase(func.name))}`;\n\tconst argsSignature = generateHookArgsSignature(func.args);\n\tconst enabledParam =\n\t\tfunc.args.length > 0\n\t\t\t? \", options?: { enabled?: boolean }\"\n\t\t\t: \"options?: { enabled?: boolean }\";\n\n\t// Generate proper return type from function outputs\n\tconst returnType = clarityTypeToTS(func.outputs);\n\n\tconst callArgs =\n\t\tfunc.args.length > 0 ? `{ ${generateObjectArgs(func.args)} }` : \"\";\n\n\treturn `export function ${hookName}(${argsSignature}${enabledParam}) {\n const config = useSecondLayerConfig()\n\n return useQuery<${returnType}>({\n queryKey: ['${func.name}', ${contractName}.address, ${generateArgNames(func.args)}],\n queryFn: async () => {\n const call = ${contractName}.${toCamelCase(func.name)}(${callArgs})\n return await readContractCall({\n ...call,\n outputType: ${JSON.stringify(func.outputs)},\n network: config.network,\n apiUrl: config.apiUrl,\n senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'\n }) as ${returnType}\n },\n ${func.args.length > 0 ? `enabled: ${generateEnabledCondition(func.args)} && (options?.enabled ?? true),` : \"\"}\n ...options\n })\n}`;\n}\n\nfunction generateWriteHook(func: AbiFunction, contractName: string): string {\n\tconst hookName = `use${capitalize(contractName)}${capitalize(toCamelCase(func.name))}`;\n\tconst argsType = generateArgsType(func.args);\n\n\treturn `export function ${hookName}() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n \n const mutation = useMutation({\n mutationFn: async (params: {\n args: ${argsType};\n options?: {\n postConditions?: PostCondition[];\n attachment?: string;\n onFinish?: (data: any) => void;\n onCancel?: () => void;\n };\n }) => {\n const { args, options = {} } = params\n const contractCallData = ${contractName}.${toCamelCase(func.name)}(args)\n const { contractAddress, contractName: name, functionName, functionArgs } = contractCallData\n const network = config.network || 'mainnet'\n const contract = \\`\\${contractAddress}.\\${name}\\`\n\n const result = await request('stx_callContract', {\n contract,\n functionName,\n functionArgs,\n network,\n ...options\n })\n\n options.onFinish?.(result)\n return result\n },\n onSuccess: () => {\n // Invalidate relevant queries on success\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('Contract call failed:', error)\n }\n })\n\n const ${toCamelCase(func.name)} = useCallback(async (\n args: ${argsType},\n options?: {\n postConditions?: PostCondition[];\n attachment?: string;\n onFinish?: (data: any) => void;\n onCancel?: () => void;\n }\n ) => {\n return mutation.mutateAsync({ args, options })\n }, [mutation])\n\n return {\n ${toCamelCase(func.name)},\n // Expose mutation state\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n}\n\n/**\n * Generate a hook for reading a map entry\n */\nfunction generateMapHook(\n\tmap: AbiMap,\n\tcontractVarName: string,\n\t_address: string,\n\t_contractName: string,\n): string {\n\tconst hookName = `use${capitalize(contractVarName)}${capitalize(toCamelCase(map.name))}`;\n\tconst keyType = clarityTypeToTS(map.key);\n\tconst valueType = clarityTypeToTS(map.value);\n\n\treturn `export function ${hookName}(key: ${keyType}, options?: { enabled?: boolean }) {\n const config = useSecondLayerConfig()\n\n return useQuery<${valueType} | null>({\n queryKey: ['${contractVarName}', '${map.name}', 'map', key, config.network],\n queryFn: async () => {\n return ${contractVarName}.maps.${toCamelCase(map.name)}.get(key, { network: config.network })\n },\n enabled: options?.enabled ?? true\n })\n}`;\n}\n\n/**\n * Generate a hook for reading a data variable\n */\nfunction generateVarHook(\n\tvariable: AbiVariable,\n\tcontractVarName: string,\n\t_address: string,\n\t_contractName: string,\n): string {\n\tconst hookName = `use${capitalize(contractVarName)}${capitalize(toCamelCase(variable.name))}`;\n\tconst valueType = clarityTypeToTS(variable.type);\n\n\treturn `export function ${hookName}(options?: { enabled?: boolean }) {\n const config = useSecondLayerConfig()\n\n return useQuery<${valueType}>({\n queryKey: ['${contractVarName}', '${variable.name}', 'var', config.network],\n queryFn: async () => {\n return ${contractVarName}.vars.${toCamelCase(variable.name)}.get({ network: config.network })\n },\n enabled: options?.enabled ?? true\n })\n}`;\n}\n\n/**\n * Generate a hook for reading a constant\n */\nfunction generateConstantHook(\n\tconstant: AbiVariable,\n\tcontractVarName: string,\n\t_address: string,\n\t_contractName: string,\n): string {\n\tconst hookName = `use${capitalize(contractVarName)}${capitalize(toCamelCase(constant.name))}`;\n\tconst valueType = clarityTypeToTS(constant.type);\n\n\treturn `export function ${hookName}(options?: { enabled?: boolean }) {\n const config = useSecondLayerConfig()\n\n return useQuery<${valueType}>({\n queryKey: ['${contractVarName}', '${constant.name}', 'constant', config.network],\n queryFn: async () => {\n return ${contractVarName}.constants.${toCamelCase(constant.name)}.get({ network: config.network })\n },\n enabled: options?.enabled ?? true,\n staleTime: Infinity // Constants never change\n })\n}`;\n}\n",
|
|
16
16
|
"import { toCamelCase } from \"@secondlayer/stacks/clarity\";\n\nexport { toCamelCase };\n\nexport function capitalize(str: string): string {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function toPascalCase(str: string): string {\n\treturn capitalize(toCamelCase(str));\n}\n",
|
|
17
17
|
"export {\n\tclarityTypeToTS,\n\tgenerateArgsTypeSignature,\n\tgetTypeForArg,\n} from \"@secondlayer/scaffold\";\n",
|
|
18
18
|
"/**\n * Utility functions for React hook generation\n */\n\nimport type { FunctionArg } from \"@secondlayer/stacks/clarity\";\nimport { capitalize, toCamelCase } from \"../../../utils/case-conversion\";\nimport { clarityTypeToTS } from \"../../../utils/type-mapping\";\n\n// Re-export for use in other files\nexport { toCamelCase, clarityTypeToTS, capitalize };\n\nexport function generateHookArgsSignature(\n\targs: ReadonlyArray<FunctionArg>,\n): string {\n\tif (args.length === 0) return \"\";\n\n\tconst argsList = args\n\t\t.map((arg) => `${toCamelCase(arg.name)}: ${clarityTypeToTS(arg.type)}`)\n\t\t.join(\", \");\n\treturn `${argsList}`;\n}\n\nexport function generateArgsType(args: ReadonlyArray<FunctionArg>): string {\n\tif (args.length === 0) return \"void\";\n\n\tconst argsList = args\n\t\t.map((arg) => `${toCamelCase(arg.name)}: ${clarityTypeToTS(arg.type)}`)\n\t\t.join(\"; \");\n\treturn `{ ${argsList} }`;\n}\n\nexport function generateArgNames(args: ReadonlyArray<FunctionArg>): string {\n\tif (args.length === 0) return \"\";\n\treturn args.map((arg) => toCamelCase(arg.name)).join(\", \");\n}\n\nexport function generateEnabledCondition(\n\targs: ReadonlyArray<FunctionArg>,\n): string {\n\treturn args\n\t\t.map((arg) => {\n\t\t\tconst camelName = toCamelCase(arg.name);\n\t\t\tconst type = clarityTypeToTS(arg.type);\n\t\t\tif (type === \"string\") return `!!${camelName}`;\n\t\t\tif (type === \"bigint\") return `${camelName} !== undefined`;\n\t\t\treturn `${camelName} !== undefined`;\n\t\t})\n\t\t.join(\" && \");\n}\n\nexport function generateObjectArgs(args: ReadonlyArray<FunctionArg>): string {\n\tif (args.length === 0) return \"\";\n\treturn args.map((arg) => `${arg.name}: ${toCamelCase(arg.name)}`).join(\", \");\n}\n",
|
|
19
19
|
"/**\n * Shared template for the useContract hook.\n * Used by both the base hooks generator and the react plugin generic generator.\n */\n\nexport const USE_CONTRACT_TEMPLATE = `export function useContract() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n const [isRequestPending, setIsRequestPending] = useState(false)\n\n // Helper function to convert JS values to Clarity values based on ABI\n const convertArgsWithAbi = (args: any, abiArgs: any[]): any[] => {\n if (!abiArgs || abiArgs.length === 0) return []\n\n return abiArgs.map((abiArg, index) => {\n const argValue = Array.isArray(args)\n ? args[index]\n : args[abiArg.name] || args[abiArg.name.replace(/-/g, '').replace(/_/g, '')]\n return convertJSValueToClarityValue(argValue, abiArg.type)\n })\n }\n\n // Helper function to convert buffer values with auto-detection\n const convertBufferValue = (value: any): any => {\n // Direct Uint8Array\n if (value instanceof Uint8Array) {\n return Cl.buffer(value)\n }\n\n // Object notation with explicit type\n if (typeof value === 'object' && value !== null && value.type && value.value) {\n switch (value.type) {\n case 'ascii':\n return Cl.bufferFromAscii(value.value)\n case 'utf8':\n return Cl.bufferFromUtf8(value.value)\n case 'hex':\n return Cl.bufferFromHex(value.value)\n default:\n throw new Error(\\`Unsupported buffer type: \\${value.type}\\`)\n }\n }\n\n // Auto-detect string type\n if (typeof value === 'string') {\n // 1. Check for hex (0x prefix or pure hex pattern)\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return Cl.bufferFromHex(value)\n }\n\n // 2. Check for non-ASCII characters (UTF-8)\n if (!/^[\\\\x00-\\\\x7F]*$/.test(value)) {\n return Cl.bufferFromUtf8(value)\n }\n\n // 3. Default to ASCII for simple ASCII strings\n return Cl.bufferFromAscii(value)\n }\n\n throw new Error(\\`Invalid buffer value: \\${value}\\`)\n }\n\n // Helper function to convert a single JS value to ClarityValue\n const convertJSValueToClarityValue = (value: any, type: any): any => {\n if (typeof type === 'string') {\n switch (type) {\n case 'uint128':\n return Cl.uint(value)\n case 'int128':\n return Cl.int(value)\n case 'bool':\n return Cl.bool(value)\n case 'principal':\n if (!validateStacksAddress(value.split('.')[0])) {\n throw new Error('Invalid Stacks address format')\n }\n if (value.includes('.')) {\n const [address, contractName] = value.split('.')\n return Cl.contractPrincipal(address, contractName)\n } else {\n return Cl.standardPrincipal(value)\n }\n default:\n return value\n }\n }\n\n if (type['string-ascii']) {\n return Cl.stringAscii(value)\n }\n\n if (type['string-utf8']) {\n return Cl.stringUtf8(value)\n }\n\n if (type.buff) {\n return convertBufferValue(value)\n }\n\n if (type.optional) {\n return value !== null ? Cl.some(convertJSValueToClarityValue(value, type.optional)) : Cl.none()\n }\n\n if (type.list) {\n return Cl.list(value.map((item: any) => convertJSValueToClarityValue(item, type.list.type)))\n }\n\n if (type.tuple) {\n const tupleData = type.tuple.reduce((acc: any, field: any) => {\n acc[field.name] = convertJSValueToClarityValue(value[field.name], field.type)\n return acc\n }, {})\n return Cl.tuple(tupleData)\n }\n\n if (type.response) {\n return 'ok' in value\n ? Cl.ok(convertJSValueToClarityValue(value.ok, type.response.ok))\n : Cl.error(convertJSValueToClarityValue(value.err, type.response.error))\n }\n\n return value\n }\n\n // Helper function to find a function in an ABI by name\n const findFunctionInAbi = (abi: any, functionName: string): any => {\n if (!abi || !abi.functions) return null\n return abi.functions.find((func: any) => func.name === functionName)\n }\n\n // Legacy function - pre-converted Clarity values\n const legacyOpenContractCall = useCallback(async (params: {\n contractAddress: string;\n contractName: string;\n functionName: string;\n functionArgs: any[];\n network?: string;\n postConditions?: PostCondition[];\n attachment?: string;\n onFinish?: (data: any) => void;\n onCancel?: () => void;\n }) => {\n setIsRequestPending(true)\n\n try {\n const { contractAddress, contractName, functionName, functionArgs, onFinish, onCancel, ...options } = params\n const network = params.network || config.network || 'mainnet'\n const contract = \\`\\${contractAddress}.\\${contractName}\\`\n\n const result = await request('stx_callContract', {\n contract,\n functionName,\n functionArgs,\n network,\n ...options\n })\n\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n onFinish?.(result)\n return result\n } catch (error) {\n console.error('Contract call failed:', error)\n throw error instanceof Error ? error : new Error('Contract call failed')\n } finally {\n setIsRequestPending(false)\n }\n }, [config.network, queryClient])\n\n // Enhanced function - requires ABI, auto-converts JS values\n const openContractCall = useCallback(async <\n T extends AbiContract,\n FN extends ExtractFunctionNames<T>\n >(params: {\n contractAddress: string;\n contractName: string;\n functionName: FN;\n abi: T;\n functionArgs: ExtractFunctionArgs<T, FN>;\n network?: string;\n postConditions?: PostCondition[];\n attachment?: string;\n onFinish?: (data: any) => void;\n onCancel?: () => void;\n }) => {\n setIsRequestPending(true)\n\n try {\n const { contractAddress, contractName, functionName, functionArgs, abi, onFinish, onCancel, ...options } = params\n const network = params.network || config.network || 'mainnet'\n const contract = \\`\\${contractAddress}.\\${contractName}\\`\n\n const abiFunction = findFunctionInAbi(abi, functionName)\n if (!abiFunction) {\n throw new Error(\\`Function '\\${functionName}' not found in ABI\\`)\n }\n\n const processedArgs = convertArgsWithAbi(functionArgs, abiFunction.args || [])\n\n const result = await request('stx_callContract', {\n contract,\n functionName,\n functionArgs: processedArgs,\n network,\n ...options\n })\n\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n onFinish?.(result)\n return result\n } catch (error) {\n console.error('Contract call failed:', error)\n throw error instanceof Error ? error : new Error('Contract call failed')\n } finally {\n setIsRequestPending(false)\n }\n }, [config.network, queryClient])\n\n return {\n legacyOpenContractCall,\n openContractCall,\n isRequestPending\n }\n}`;\n",
|
|
20
|
-
"/**\n * Generic Stacks hooks generator for React plugin\n */\n\nimport { USE_CONTRACT_TEMPLATE } from \"../../../generators/templates/use-contract\";\nimport { DEFAULT_SENDER_ADDRESS } from \"../../../utils/constants\";\nimport { formatCode } from \"../../../utils/format\";\n\nconst GENERIC_HOOKS = [\n\t\"useAccount\",\n\t\"useConnect\",\n\t\"useDisconnect\",\n\t\"useNetwork\",\n\t\"useContract\",\n\t\"useOpenSTXTransfer\",\n\t\"useSignMessage\",\n\t\"useDeployContract\",\n\t\"useReadContract\",\n\t\"useTransaction\",\n\t\"useBlock\",\n\t\"useAccountTransactions\",\n\t\"useWaitForTransaction\",\n] as const;\n\nexport async function generateGenericHooks(\n\texcludeList: string[] = [],\n): Promise<string> {\n\t// Filter out excluded hooks\n\tconst hooksToGenerate = GENERIC_HOOKS.filter(\n\t\t(hookName) => !excludeList.includes(hookName),\n\t);\n\n\tconst imports = `import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useState, useCallback } from 'react'\nimport { useSecondLayerConfig } from './provider'\nimport { connect, disconnect, isConnected, request } from '@secondlayer/stacks/connect'\nimport { Cl, validateStacksAddress } from '@secondlayer/stacks'\nimport type { PostCondition } from '@secondlayer/stacks'\nimport type { ExtractFunctionArgs, ExtractFunctionNames, AbiContract } from '@secondlayer/stacks/clarity'\n\nconst API_URLS: Record<string, string> = {\n mainnet: 'https://api.hiro.so',\n testnet: 'https://api.testnet.hiro.so',\n devnet: 'http://localhost:3999'\n}\n\nasync function fetchTransaction({ txId, network, apiUrl }: { txId: string; network?: string; apiUrl?: string }): Promise<any> {\n const baseUrl = apiUrl || API_URLS[network || 'mainnet']\n const response = await fetch(\\`\\${baseUrl}/extended/v1/tx/\\${txId}\\`)\n if (!response.ok) throw new Error(\\`Failed to fetch transaction: \\${response.statusText}\\`)\n return response.json()\n}\n\nasync function fetchBlock({ height, network, apiUrl }: { height: number; network?: string; apiUrl?: string }): Promise<any> {\n const baseUrl = apiUrl || API_URLS[network || 'mainnet']\n const response = await fetch(\\`\\${baseUrl}/extended/v1/block/by_height/\\${height}\\`)\n if (!response.ok) throw new Error(\\`Failed to fetch block: \\${response.statusText}\\`)\n return response.json()\n}\n\nasync function fetchAccountTransactions({ address, network, apiUrl }: { address: string; network?: string; apiUrl?: string }): Promise<any> {\n const baseUrl = apiUrl || API_URLS[network || 'mainnet']\n const response = await fetch(\\`\\${baseUrl}/extended/v1/address/\\${address}/transactions\\`)\n if (!response.ok) throw new Error(\\`Failed to fetch transactions: \\${response.statusText}\\`)\n return response.json()\n}`;\n\n\tconst header = `/**\n * Generated generic Stacks React hooks\n * DO NOT EDIT MANUALLY\n */`;\n\n\tconst hooksCode = hooksToGenerate\n\t\t.map((hookName) => generateGenericHook(hookName))\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n\n\tconst code = `${imports}\\n\\n${header}\\n\\n${hooksCode}`;\n\n\treturn formatCode(code);\n}\n\nfunction generateGenericHook(hookName: string): string {\n\tswitch (hookName) {\n\t\tcase \"useAccount\":\n\t\t\treturn `export function useAccount() {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['stacks-account', config.network],\n queryFn: async () => {\n try {\n // Check if already connected\n const connected = isConnected()\n \n if (!connected) {\n return {\n address: undefined,\n addresses: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n status: 'disconnected' as const\n }\n }\n\n // Get addresses via SIP-030\n const result = await request('stx_getAddresses')\n \n if (!result || !result.addresses || result.addresses.length === 0) {\n return {\n address: undefined,\n addresses: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n status: 'disconnected' as const\n }\n }\n\n // Extract STX addresses from the response\n const stxAddresses = result.addresses\n .filter((addr: any) => addr.address.startsWith('SP') || addr.address.startsWith('ST'))\n .map((addr: any) => addr.address)\n\n return {\n address: stxAddresses[0] || undefined,\n addresses: stxAddresses,\n isConnected: true,\n isConnecting: false,\n isDisconnected: false,\n status: 'connected' as const\n }\n } catch (error) {\n // Handle case where wallet is not available or user rejected\n return {\n address: undefined,\n addresses: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n status: 'disconnected' as const\n }\n }\n },\n refetchOnWindowFocus: false,\n retry: false,\n staleTime: 1000 * 60 * 5, // 5 minutes\n refetchInterval: 1000 * 30, // Refetch every 30 seconds to detect wallet changes\n })\n}`;\n\n\t\tcase \"useConnect\":\n\t\t\treturn `export function useConnect() {\n const queryClient = useQueryClient()\n \n const mutation = useMutation({\n mutationFn: async (options: { forceWalletSelect?: boolean } = {}) => {\n // SIP-030 connect\n return await connect(options)\n },\n onSuccess: () => {\n // Invalidate account queries to refetch connection state\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('Connection failed:', error)\n }\n })\n\n return {\n // Custom connect function that works without arguments\n connect: (options?: { forceWalletSelect?: boolean }) => {\n return mutation.mutate(options || {})\n },\n connectAsync: async (options?: { forceWalletSelect?: boolean }) => {\n return mutation.mutateAsync(options || {})\n },\n // Expose all the mutation state\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset,\n // Keep the original mutate/mutateAsync for advanced users\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync\n }\n}`;\n\n\t\tcase \"useDisconnect\":\n\t\t\treturn `export function useDisconnect() {\n const queryClient = useQueryClient()\n \n const mutation = useMutation({\n mutationFn: async () => {\n // SIP-030 disconnect\n return await disconnect()\n },\n onSuccess: () => {\n // Clear all cached data on disconnect\n queryClient.clear()\n },\n onError: (error) => {\n console.error('Disconnect failed:', error)\n }\n })\n\n return {\n // Custom disconnect function\n disconnect: () => {\n return mutation.mutate()\n },\n disconnectAsync: async () => {\n return mutation.mutateAsync()\n },\n // Expose all the mutation state\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset,\n // Keep the original mutate/mutateAsync for advanced users\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync\n }\n}`;\n\n\t\tcase \"useNetwork\":\n\t\t\treturn `export function useNetwork() {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['stacks-network', config.network],\n queryFn: async () => {\n // Currently read-only from config\n // Future: Use request('stx_getNetworks') when wallet support improves\n const network = config.network\n \n return {\n network,\n isMainnet: network === 'mainnet',\n isTestnet: network === 'testnet', \n isDevnet: network === 'devnet',\n // Future: Add switchNetwork when wallets support stx_networkChange\n // switchNetwork: async (newNetwork: string) => {\n // return await request('wallet_changeNetwork', { network: newNetwork })\n // }\n }\n },\n staleTime: Infinity, // Network config rarely changes\n refetchOnWindowFocus: false,\n retry: false\n })\n}`;\n\n\t\tcase \"useContract\":\n\t\t\treturn USE_CONTRACT_TEMPLATE;\n\n\t\tcase \"useReadContract\":\n\t\t\treturn `export function useReadContract<TArgs = any, TResult = any>(params: {\n contractAddress: string;\n contractName: string;\n functionName: string;\n args?: TArgs;\n network?: 'mainnet' | 'testnet' | 'devnet';\n enabled?: boolean;\n}) {\n const config = useSecondLayerConfig()\n \n return useQuery<TResult>({\n queryKey: ['read-contract', params.contractAddress, params.contractName, params.functionName, params.args, params.network || config.network],\n queryFn: async () => {\n const { fetchCallReadOnlyFunction } = await import('@secondlayer/stacks/clarity')\n \n // For now, we'll need to handle the args conversion here\n // In the future, we could integrate with the contract interface for automatic conversion\n let functionArgs: any[] = []\n \n if (params.args) {\n // This is a simplified conversion - in practice, we'd need the ABI to do proper conversion\n // For now, we'll assume the args are already in the correct format or simple types\n if (Array.isArray(params.args)) {\n functionArgs = params.args\n } else if (typeof params.args === 'object') {\n // Convert object args to array (this is a basic implementation)\n functionArgs = Object.values(params.args)\n } else {\n functionArgs = [params.args]\n }\n }\n \n return await fetchCallReadOnlyFunction({\n contractAddress: params.contractAddress,\n contractName: params.contractName,\n functionName: params.functionName,\n functionArgs,\n network: params.network || config.network || 'mainnet',\n senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'\n }) as TResult\n },\n enabled: params.enabled ?? true\n })\n}`;\n\n\t\tcase \"useTransaction\":\n\t\t\treturn `export function useTransaction(txId?: string) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['transaction', txId, config.network],\n queryFn: () => fetchTransaction({\n txId: txId!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: !!txId\n })\n}`;\n\n\t\tcase \"useBlock\":\n\t\t\treturn `export function useBlock(height?: number) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['block', height, config.network],\n queryFn: () => fetchBlock({\n height: height!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: typeof height === 'number'\n })\n}`;\n\n\t\tcase \"useAccountTransactions\":\n\t\t\treturn `export function useAccountTransactions(address?: string) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['account-transactions', address, config.network],\n queryFn: () => fetchAccountTransactions({\n address: address!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: !!address\n })\n}`;\n\n\t\tcase \"useWaitForTransaction\":\n\t\t\treturn `export function useWaitForTransaction(txId?: string) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['wait-for-transaction', txId, config.network],\n queryFn: () => fetchTransaction({\n txId: txId!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: !!txId,\n refetchInterval: (data) => {\n // Stop polling when transaction is complete\n if (data?.tx_status === 'success' || \n data?.tx_status === 'abort_by_response' || \n data?.tx_status === 'abort_by_post_condition') {\n return false\n }\n return 2000 // Poll every 2 seconds\n },\n staleTime: 0 // Always refetch\n })\n}`;\n\n\t\tcase \"useOpenSTXTransfer\":\n\t\t\treturn `export function useOpenSTXTransfer() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: async (params: {\n recipient: string;\n amount: string | number;\n memo?: string;\n network?: string;\n }) => {\n const { recipient, amount, memo } = params\n const network = params.network || config.network || 'mainnet'\n\n return await request('stx_transferStx', {\n recipient,\n amount: amount.toString(),\n memo,\n network,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('STX transfer failed:', error)\n }\n })\n\n const openSTXTransfer = useCallback(async (params: {\n recipient: string;\n amount: string | number;\n memo?: string;\n network?: string;\n }) => {\n return mutation.mutateAsync(params)\n }, [mutation])\n\n return {\n openSTXTransfer,\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n\n\t\tcase \"useSignMessage\":\n\t\t\treturn `export function useSignMessage() {\n const config = useSecondLayerConfig()\n\n const mutation = useMutation({\n mutationFn: async (params: {\n message: string;\n network?: string;\n }) => {\n const { message } = params\n const network = params.network || config.network || 'mainnet'\n\n return await request('stx_signMessage', {\n message,\n network,\n })\n },\n onError: (error) => {\n console.error('Message signing failed:', error)\n }\n })\n\n const signMessage = useCallback(async (params: {\n message: string;\n network?: string;\n }) => {\n return mutation.mutateAsync(params)\n }, [mutation])\n\n return {\n signMessage,\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n\n\t\tcase \"useDeployContract\":\n\t\t\treturn `export function useDeployContract() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: async (params: {\n contractName: string;\n codeBody: string;\n network?: string;\n }) => {\n const { contractName, codeBody } = params\n const network = params.network || config.network || 'mainnet'\n\n return await request('stx_deployContract', {\n name: contractName,\n clarityCode: codeBody,\n network,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('Contract deployment failed:', error)\n }\n })\n\n const deployContract = useCallback(async (params: {\n contractName: string;\n codeBody: string;\n network?: string;\n }) => {\n return mutation.mutateAsync(params)\n }, [mutation])\n\n return {\n deployContract,\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n}\n",
|
|
20
|
+
"/**\n * Generic Stacks hooks generator for React plugin\n */\n\nimport { USE_CONTRACT_TEMPLATE } from \"../../../generators/templates/use-contract\";\nimport { DEFAULT_SENDER_ADDRESS } from \"../../../utils/constants\";\nimport { formatCode } from \"../../../utils/format\";\n\nconst GENERIC_HOOKS = [\n\t\"useAccount\",\n\t\"useConnect\",\n\t\"useDisconnect\",\n\t\"useNetwork\",\n\t\"useContract\",\n\t\"useOpenSTXTransfer\",\n\t\"useSignMessage\",\n\t\"useDeployContract\",\n\t\"useReadContract\",\n\t\"useTransaction\",\n\t\"useBlock\",\n\t\"useAccountTransactions\",\n\t\"useWaitForTransaction\",\n] as const;\n\nexport async function generateGenericHooks(\n\texcludeList: string[] = [],\n): Promise<string> {\n\t// Filter out excluded hooks\n\tconst hooksToGenerate = GENERIC_HOOKS.filter(\n\t\t(hookName) => !excludeList.includes(hookName),\n\t);\n\n\tconst imports = `import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { useState, useCallback } from 'react'\nimport { useSecondLayerConfig } from './provider'\nimport { connect, disconnect, isConnected, request } from '@secondlayer/stacks/connect'\nimport { Cl } from '@secondlayer/stacks/clarity'\nimport type { ExtractFunctionArgs, ExtractFunctionNames, AbiContract } from '@secondlayer/stacks/clarity'\nimport type { PostCondition } from '@secondlayer/stacks/postconditions'\nimport { validateStacksAddress } from '@secondlayer/stacks/utils'\n\nconst API_URLS: Record<string, string> = {\n mainnet: 'https://api.hiro.so',\n testnet: 'https://api.testnet.hiro.so',\n devnet: 'http://localhost:3999'\n}\n\nasync function callReadOnly(params: {\n contractAddress: string;\n contractName: string;\n functionName: string;\n functionArgs: any[];\n senderAddress: string;\n network?: string;\n apiUrl?: string;\n}): Promise<any> {\n const { serializeCV, deserializeCV } = await import('@secondlayer/stacks/clarity')\n const baseUrl = params.apiUrl || API_URLS[params.network || 'mainnet']\n const response = await fetch(\n \\`\\${baseUrl}/v2/contracts/call-read/\\${params.contractAddress}/\\${params.contractName}/\\${params.functionName}\\`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n sender: params.senderAddress,\n arguments: params.functionArgs.map((arg: any) => \\`0x\\${serializeCV(arg)}\\`)\n })\n }\n )\n if (!response.ok) throw new Error(\\`Read-only call failed: \\${response.statusText}\\`)\n const data = await response.json()\n if (!data.okay) throw new Error(data.cause ?? 'Read-only call failed')\n return deserializeCV(data.result)\n}\n\nasync function fetchTransaction({ txId, network, apiUrl }: { txId: string; network?: string; apiUrl?: string }): Promise<any> {\n const baseUrl = apiUrl || API_URLS[network || 'mainnet']\n const response = await fetch(\\`\\${baseUrl}/extended/v1/tx/\\${txId}\\`)\n if (!response.ok) throw new Error(\\`Failed to fetch transaction: \\${response.statusText}\\`)\n return response.json()\n}\n\nasync function fetchBlock({ height, network, apiUrl }: { height: number; network?: string; apiUrl?: string }): Promise<any> {\n const baseUrl = apiUrl || API_URLS[network || 'mainnet']\n const response = await fetch(\\`\\${baseUrl}/extended/v1/block/by_height/\\${height}\\`)\n if (!response.ok) throw new Error(\\`Failed to fetch block: \\${response.statusText}\\`)\n return response.json()\n}\n\nasync function fetchAccountTransactions({ address, network, apiUrl }: { address: string; network?: string; apiUrl?: string }): Promise<any> {\n const baseUrl = apiUrl || API_URLS[network || 'mainnet']\n const response = await fetch(\\`\\${baseUrl}/extended/v1/address/\\${address}/transactions\\`)\n if (!response.ok) throw new Error(\\`Failed to fetch transactions: \\${response.statusText}\\`)\n return response.json()\n}`;\n\n\tconst header = `/**\n * Generated generic Stacks React hooks\n * DO NOT EDIT MANUALLY\n */`;\n\n\tconst hooksCode = hooksToGenerate\n\t\t.map((hookName) => generateGenericHook(hookName))\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n\n\tconst code = `${imports}\\n\\n${header}\\n\\n${hooksCode}`;\n\n\treturn formatCode(code);\n}\n\nfunction generateGenericHook(hookName: string): string {\n\tswitch (hookName) {\n\t\tcase \"useAccount\":\n\t\t\treturn `export function useAccount() {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['stacks-account', config.network],\n queryFn: async () => {\n try {\n // Check if already connected\n const connected = isConnected()\n \n if (!connected) {\n return {\n address: undefined,\n addresses: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n status: 'disconnected' as const\n }\n }\n\n // Get addresses via SIP-030\n const result = await request('stx_getAddresses')\n \n if (!result || !result.addresses || result.addresses.length === 0) {\n return {\n address: undefined,\n addresses: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n status: 'disconnected' as const\n }\n }\n\n // Extract STX addresses from the response\n const stxAddresses = result.addresses\n .filter((addr: any) => addr.address.startsWith('SP') || addr.address.startsWith('ST'))\n .map((addr: any) => addr.address)\n\n return {\n address: stxAddresses[0] || undefined,\n addresses: stxAddresses,\n isConnected: true,\n isConnecting: false,\n isDisconnected: false,\n status: 'connected' as const\n }\n } catch (error) {\n // Handle case where wallet is not available or user rejected\n return {\n address: undefined,\n addresses: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n status: 'disconnected' as const\n }\n }\n },\n refetchOnWindowFocus: false,\n retry: false,\n staleTime: 1000 * 60 * 5, // 5 minutes\n refetchInterval: 1000 * 30, // Refetch every 30 seconds to detect wallet changes\n })\n}`;\n\n\t\tcase \"useConnect\":\n\t\t\treturn `export function useConnect() {\n const queryClient = useQueryClient()\n \n const mutation = useMutation({\n mutationFn: async () => {\n // SIP-030 connect\n return await connect()\n },\n onSuccess: () => {\n // Invalidate account queries to refetch connection state\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('Connection failed:', error)\n }\n })\n\n return {\n // Custom connect function that works without arguments\n connect: () => {\n return mutation.mutate(undefined)\n },\n connectAsync: async () => {\n return mutation.mutateAsync(undefined)\n },\n // Expose all the mutation state\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset,\n // Keep the original mutate/mutateAsync for advanced users\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync\n }\n}`;\n\n\t\tcase \"useDisconnect\":\n\t\t\treturn `export function useDisconnect() {\n const queryClient = useQueryClient()\n \n const mutation = useMutation({\n mutationFn: async () => {\n // SIP-030 disconnect\n return await disconnect()\n },\n onSuccess: () => {\n // Clear all cached data on disconnect\n queryClient.clear()\n },\n onError: (error) => {\n console.error('Disconnect failed:', error)\n }\n })\n\n return {\n // Custom disconnect function\n disconnect: () => {\n return mutation.mutate()\n },\n disconnectAsync: async () => {\n return mutation.mutateAsync()\n },\n // Expose all the mutation state\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset,\n // Keep the original mutate/mutateAsync for advanced users\n mutate: mutation.mutate,\n mutateAsync: mutation.mutateAsync\n }\n}`;\n\n\t\tcase \"useNetwork\":\n\t\t\treturn `export function useNetwork() {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['stacks-network', config.network],\n queryFn: async () => {\n // Currently read-only from config\n // Future: Use request('stx_getNetworks') when wallet support improves\n const network = config.network\n \n return {\n network,\n isMainnet: network === 'mainnet',\n isTestnet: network === 'testnet', \n isDevnet: network === 'devnet',\n // Future: Add switchNetwork when wallets support stx_networkChange\n // switchNetwork: async (newNetwork: string) => {\n // return await request('wallet_changeNetwork', { network: newNetwork })\n // }\n }\n },\n staleTime: Infinity, // Network config rarely changes\n refetchOnWindowFocus: false,\n retry: false\n })\n}`;\n\n\t\tcase \"useContract\":\n\t\t\treturn USE_CONTRACT_TEMPLATE;\n\n\t\tcase \"useReadContract\":\n\t\t\treturn `export function useReadContract<TArgs = any, TResult = any>(params: {\n contractAddress: string;\n contractName: string;\n functionName: string;\n args?: TArgs;\n network?: 'mainnet' | 'testnet' | 'devnet';\n enabled?: boolean;\n}) {\n const config = useSecondLayerConfig()\n \n return useQuery<TResult>({\n queryKey: ['read-contract', params.contractAddress, params.contractName, params.functionName, params.args, params.network || config.network],\n queryFn: async () => {\n // Args must already be ClarityValues (build them with Cl.* or a generated\n // contract method's descriptor). Positional array, ABI declaration order.\n let functionArgs: any[] = []\n\n if (params.args) {\n if (Array.isArray(params.args)) {\n functionArgs = params.args\n } else if (typeof params.args === 'object') {\n functionArgs = Object.values(params.args)\n } else {\n functionArgs = [params.args]\n }\n }\n\n return await callReadOnly({\n contractAddress: params.contractAddress,\n contractName: params.contractName,\n functionName: params.functionName,\n functionArgs,\n network: params.network || config.network || 'mainnet',\n apiUrl: config.apiUrl,\n senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'\n }) as TResult\n },\n enabled: params.enabled ?? true\n })\n}`;\n\n\t\tcase \"useTransaction\":\n\t\t\treturn `export function useTransaction(txId?: string) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['transaction', txId, config.network],\n queryFn: () => fetchTransaction({\n txId: txId!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: !!txId\n })\n}`;\n\n\t\tcase \"useBlock\":\n\t\t\treturn `export function useBlock(height?: number) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['block', height, config.network],\n queryFn: () => fetchBlock({\n height: height!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: typeof height === 'number'\n })\n}`;\n\n\t\tcase \"useAccountTransactions\":\n\t\t\treturn `export function useAccountTransactions(address?: string) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['account-transactions', address, config.network],\n queryFn: () => fetchAccountTransactions({\n address: address!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: !!address\n })\n}`;\n\n\t\tcase \"useWaitForTransaction\":\n\t\t\treturn `export function useWaitForTransaction(txId?: string) {\n const config = useSecondLayerConfig()\n \n return useQuery({\n queryKey: ['wait-for-transaction', txId, config.network],\n queryFn: () => fetchTransaction({\n txId: txId!,\n network: config.network,\n apiUrl: config.apiUrl\n }),\n enabled: !!txId,\n refetchInterval: (queryOrData: any) => {\n // react-query v5 passes the query object, v4 passed the data — support both\n const tx = queryOrData?.state?.data ?? queryOrData\n // Stop polling when transaction is complete\n if (tx?.tx_status === 'success' ||\n tx?.tx_status === 'abort_by_response' ||\n tx?.tx_status === 'abort_by_post_condition') {\n return false\n }\n return 2000 // Poll every 2 seconds\n },\n staleTime: 0 // Always refetch\n })\n}`;\n\n\t\tcase \"useOpenSTXTransfer\":\n\t\t\treturn `export function useOpenSTXTransfer() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: async (params: {\n recipient: string;\n amount: string | number;\n memo?: string;\n network?: string;\n }) => {\n const { recipient, amount, memo } = params\n const network = params.network || config.network || 'mainnet'\n\n return await request('stx_transferStx', {\n recipient,\n amount: amount.toString(),\n memo,\n network,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('STX transfer failed:', error)\n }\n })\n\n const openSTXTransfer = useCallback(async (params: {\n recipient: string;\n amount: string | number;\n memo?: string;\n network?: string;\n }) => {\n return mutation.mutateAsync(params)\n }, [mutation])\n\n return {\n openSTXTransfer,\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n\n\t\tcase \"useSignMessage\":\n\t\t\treturn `export function useSignMessage() {\n const config = useSecondLayerConfig()\n\n const mutation = useMutation({\n mutationFn: async (params: {\n message: string;\n network?: string;\n }) => {\n const { message } = params\n const network = params.network || config.network || 'mainnet'\n\n return await request('stx_signMessage', {\n message,\n network,\n })\n },\n onError: (error) => {\n console.error('Message signing failed:', error)\n }\n })\n\n const signMessage = useCallback(async (params: {\n message: string;\n network?: string;\n }) => {\n return mutation.mutateAsync(params)\n }, [mutation])\n\n return {\n signMessage,\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n\n\t\tcase \"useDeployContract\":\n\t\t\treturn `export function useDeployContract() {\n const config = useSecondLayerConfig()\n const queryClient = useQueryClient()\n\n const mutation = useMutation({\n mutationFn: async (params: {\n contractName: string;\n codeBody: string;\n network?: string;\n }) => {\n const { contractName, codeBody } = params\n const network = params.network || config.network || 'mainnet'\n\n return await request('stx_deployContract', {\n name: contractName,\n clarityCode: codeBody,\n network,\n })\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['stacks-account'] })\n },\n onError: (error) => {\n console.error('Contract deployment failed:', error)\n }\n })\n\n const deployContract = useCallback(async (params: {\n contractName: string;\n codeBody: string;\n network?: string;\n }) => {\n return mutation.mutateAsync(params)\n }, [mutation])\n\n return {\n deployContract,\n isPending: mutation.isPending,\n isError: mutation.isError,\n isSuccess: mutation.isSuccess,\n error: mutation.error,\n data: mutation.data,\n reset: mutation.reset\n }\n}`;\n\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n}\n",
|
|
21
21
|
"/**\n * Provider generator for React plugin\n */\n\nimport { DEFAULT_SENDER_ADDRESS } from \"../../../utils/constants\";\nimport { formatCode } from \"../../../utils/format\";\n\n/**\n * Generate the provider file content for user projects\n */\nexport async function generateProvider(): Promise<string> {\n\tconst code = `/**\n * Generated SecondLayer React Provider\n * DO NOT EDIT MANUALLY\n */\n\nimport React, { createContext, useContext } from 'react'\n\n/**\n * SecondLayer configuration interface\n */\nexport interface SecondLayerReactConfig {\n /**\n * Network to use for API calls\n */\n network: 'mainnet' | 'testnet' | 'devnet'\n\n /**\n * API key for Stacks API (optional)\n */\n apiKey?: string\n\n /**\n * Base URL for Stacks API (optional override)\n */\n apiUrl?: string\n\n /**\n * Default sender address for read-only calls\n */\n senderAddress?: string\n}\n\n/**\n * Provider component props\n */\nexport interface SecondLayerProviderProps {\n children: React.ReactNode\n config: SecondLayerReactConfig\n}\n\n/**\n * React context for SecondLayer configuration\n */\nconst SecondLayerContext = createContext<SecondLayerReactConfig | undefined>(undefined)\nSecondLayerContext.displayName = 'SecondLayerContext'\n\n/**\n * Create a SecondLayer React configuration with defaults\n */\nexport function createSecondLayerConfig(config: SecondLayerReactConfig): SecondLayerReactConfig {\n return {\n network: config.network,\n apiKey: config.apiKey,\n apiUrl: config.apiUrl,\n senderAddress: config.senderAddress || '${DEFAULT_SENDER_ADDRESS}'\n }\n}\n\n/**\n * Provider component that makes SecondLayer configuration available to hooks\n */\nexport function SecondLayerProvider({ children, config }: SecondLayerProviderProps) {\n const resolvedConfig = createSecondLayerConfig(config)\n\n return (\n <SecondLayerContext.Provider value={resolvedConfig}>\n {children}\n </SecondLayerContext.Provider>\n )\n}\n\n/**\n * Hook to access the SecondLayer configuration\n */\nexport function useSecondLayerConfig(): SecondLayerReactConfig {\n const context = useContext(SecondLayerContext)\n\n if (context === undefined) {\n throw new Error(\n 'useSecondLayerConfig must be used within a SecondLayerProvider. ' +\n 'Make sure to wrap your app with <SecondLayerProvider config={{...}}>'\n )\n }\n\n return context\n}`;\n\n\treturn formatCode(code);\n}\n",
|
|
22
22
|
"/**\n * React Plugin for @secondlayer/cli\n * Generates React hooks for contract interfaces and generic Stacks functionality\n */\n\nimport type { GenerateContext, PluginFactory } from \"../../types/plugin\";\nimport { generateContractHooks } from \"./generators/contract\";\nimport { generateGenericHooks } from \"./generators/generic\";\nimport { generateProvider } from \"./provider/index\";\nimport type { ReactPluginOptions } from \"./types\";\n\n/**\n * React plugin factory\n */\nexport const react: PluginFactory<ReactPluginOptions> = (options = {}) => {\n\tconst excludeList = options.exclude || [];\n\n\treturn {\n\t\tname: \"@secondlayer/cli/plugin-react\",\n\t\tversion: \"1.0.0\",\n\n\t\tasync generate(context: GenerateContext): Promise<void> {\n\t\t\tif (options.debug) {\n\t\t\t\tcontext.logger.debug(\n\t\t\t\t\t`React plugin generating hooks (excluding: ${excludeList.join(\", \") || \"none\"})`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Generate provider (always generated)\n\t\t\tconst provider = await generateProvider();\n\t\t\tcontext.addOutput(\"provider\", {\n\t\t\t\tpath: \"./src/generated/provider.tsx\",\n\t\t\t\tcontent: provider,\n\t\t\t\ttype: \"config\",\n\t\t\t});\n\n\t\t\t// Generate generic hooks (all by default, minus excludes)\n\t\t\tconst genericHooks = await generateGenericHooks(excludeList);\n\t\t\tcontext.addOutput(\"generic-hooks\", {\n\t\t\t\tpath: \"./src/generated/hooks.ts\",\n\t\t\t\tcontent: genericHooks,\n\t\t\t\ttype: \"hooks\",\n\t\t\t});\n\n\t\t\t// Generate contract hooks (all contracts, minus excludes)\n\t\t\tif (context.contracts.length > 0) {\n\t\t\t\tconst contractHooks = await generateContractHooks(\n\t\t\t\t\tcontext.contracts,\n\t\t\t\t\texcludeList,\n\t\t\t\t);\n\n\t\t\t\t// Only add output if there are hooks to generate\n\t\t\t\tif (contractHooks.trim()) {\n\t\t\t\t\tcontext.addOutput(\"contract-hooks\", {\n\t\t\t\t\t\tpath: \"./src/generated/contract-hooks.ts\",\n\t\t\t\t\t\tcontent: contractHooks,\n\t\t\t\t\t\ttype: \"hooks\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options.debug) {\n\t\t\t\tcontext.logger.success(\n\t\t\t\t\t`React plugin generated ${context.contracts.length} contract hook sets`,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n};\n\n// Re-export types for convenience\nexport type { ReactPluginOptions } from \"./types\";\n",
|
|
23
23
|
"/**\n * Code generators for the testing plugin\n * Generates type-safe helpers for Clarinet SDK unit tests\n */\n\nimport {\n\ttype AbiFunction,\n\ttype AbiMap,\n\ttype AbiType,\n\ttype AbiVariable,\n\tisAbiTuple,\n} from \"@secondlayer/stacks/clarity\";\nimport type { ProcessedContract } from \"../../types/plugin\";\nimport { toCamelCase, toPascalCase } from \"../../utils/case-conversion\";\nimport {\n\tgenerateArgsSignature,\n\tgenerateClarityArgs,\n\tgenerateMapKeyConversion,\n} from \"../../utils/generator-helpers\";\nimport { getTypeForArg } from \"../../utils/type-mapping\";\nimport type { TestingPluginOptions } from \"./index\";\n\n/**\n * Generate a public function helper\n */\nfunction generatePublicFunction(func: AbiFunction, contractId: string): string {\n\tconst methodName = toCamelCase(func.name);\n\tconst argsSignature = generateArgsSignature(func.args);\n\tconst clarityArgs = generateClarityArgs(func.args);\n\n\treturn `${methodName}: (${argsSignature}caller: string) => {\n const callerAddr = accounts.get(caller) ?? caller;\n return simnet.callPublicFn(\n '${contractId}',\n '${func.name}',\n [${clarityArgs}],\n callerAddr\n );\n }`;\n}\n\n/**\n * Generate a read-only function helper\n */\nfunction generateReadOnlyFunction(\n\tfunc: AbiFunction,\n\tcontractId: string,\n): string {\n\tconst methodName = toCamelCase(func.name);\n\tconst argsSignature = generateArgsSignature(func.args);\n\tconst clarityArgs = generateClarityArgs(func.args);\n\n\t// Read-only functions don't need a caller, use deployer as default\n\tconst hasArgs = func.args.length > 0;\n\tconst argsParam = hasArgs ? argsSignature : \"\";\n\n\treturn `${methodName}: (${argsParam}) => {\n return simnet.callReadOnlyFn(\n '${contractId}',\n '${func.name}',\n [${clarityArgs}],\n accounts.get('deployer')!\n );\n }`;\n}\n\n/**\n * Generate a private function helper (for testing only)\n */\nfunction generatePrivateFunction(\n\tfunc: AbiFunction,\n\tcontractId: string,\n): string {\n\tconst methodName = toCamelCase(func.name);\n\tconst argsSignature = generateArgsSignature(func.args);\n\tconst clarityArgs = generateClarityArgs(func.args);\n\n\treturn `${methodName}: (${argsSignature}caller: string) => {\n const callerAddr = accounts.get(caller) ?? caller;\n return simnet.callPrivateFn(\n '${contractId}',\n '${func.name}',\n [${clarityArgs}],\n callerAddr\n );\n }`;\n}\n\n/**\n * Generate a data variable accessor helper\n */\nfunction generateDataVarHelper(\n\tvariable: AbiVariable,\n\tcontractId: string,\n): string {\n\tconst methodName = toCamelCase(variable.name);\n\n\treturn `${methodName}: () => {\n return simnet.getDataVar('${contractId}', '${variable.name}');\n }`;\n}\n\n/**\n * Generate TypeScript type for map key based on its structure\n */\nfunction getMapKeyType(keyType: AbiType): string {\n\t// Map keys are typically tuples\n\tif (isAbiTuple(keyType)) {\n\t\tconst fields = keyType.tuple\n\t\t\t.map(\n\t\t\t\t(field: { name: string; type: AbiType }) =>\n\t\t\t\t\t`${toCamelCase(field.name)}: ${getTypeForArg({ type: field.type })}`,\n\t\t\t)\n\t\t\t.join(\"; \");\n\t\treturn `{ ${fields} }`;\n\t}\n\n\t// Single-value keys (less common but possible)\n\treturn getTypeForArg({ type: keyType });\n}\n\n/**\n * Generate a map entry accessor helper\n */\nfunction generateMapEntryHelper(map: AbiMap, contractId: string): string {\n\tconst methodName = toCamelCase(map.name);\n\tconst keyType = getMapKeyType(map.key);\n\tconst keyConversion = generateMapKeyConversion(map.key);\n\n\treturn `${methodName}: (key: ${keyType}) => {\n return simnet.getMapEntry(\n '${contractId}',\n '${map.name}',\n ${keyConversion}\n );\n }`;\n}\n\n/**\n * Generate the vars object containing all data variable accessors\n */\nfunction generateVarsObject(\n\tvariables: readonly AbiVariable[],\n\tcontractId: string,\n): string {\n\t// Filter to only include mutable variables (not constants)\n\tconst dataVars = variables.filter((v) => v.access === \"variable\");\n\n\tif (dataVars.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst varHelpers = dataVars.map((v) => generateDataVarHelper(v, contractId));\n\n\treturn `vars: {\n ${varHelpers.join(\",\\n\\n \")}\n }`;\n}\n\n/**\n * Generate the maps object containing all map entry accessors\n */\nfunction generateMapsObject(\n\tmaps: readonly AbiMap[],\n\tcontractId: string,\n): string {\n\tif (maps.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst mapHelpers = maps.map((m) => generateMapEntryHelper(m, contractId));\n\n\treturn `maps: {\n ${mapHelpers.join(\",\\n\\n \")}\n }`;\n}\n\n/**\n * Generate a contract helper factory function\n */\nfunction generateContractHelper(\n\tcontract: ProcessedContract,\n\toptions: TestingPluginOptions,\n): string {\n\tconst { abi, name, address } = contract;\n\tconst functions = abi.functions || [];\n\tconst variables = abi.variables || [];\n\tconst maps = abi.maps || [];\n\tconst pascalName = toPascalCase(name);\n\n\t// Filter functions by access type\n\tconst publicFns = functions.filter((f: AbiFunction) => f.access === \"public\");\n\tconst readOnlyFns = functions.filter(\n\t\t(f: AbiFunction) => f.access === \"read-only\",\n\t);\n\tconst privateFns = options.includePrivate\n\t\t? functions.filter((f: AbiFunction) => f.access === \"private\")\n\t\t: [];\n\n\t// Generate function helpers\n\tconst publicHelpers = publicFns.map((f: AbiFunction) =>\n\t\tgeneratePublicFunction(f, address),\n\t);\n\tconst readOnlyHelpers = readOnlyFns.map((f: AbiFunction) =>\n\t\tgenerateReadOnlyFunction(f, address),\n\t);\n\tconst privateHelpers = privateFns.map((f: AbiFunction) =>\n\t\tgeneratePrivateFunction(f, address),\n\t);\n\n\t// Generate data variable and map accessors\n\tconst varsObject = generateVarsObject(variables, address);\n\tconst mapsObject = generateMapsObject(maps, address);\n\n\tconst allHelpers = [...publicHelpers, ...readOnlyHelpers, ...privateHelpers];\n\n\t// Include vars and maps objects if they have content\n\tif (varsObject) {\n\t\tallHelpers.push(varsObject);\n\t}\n\tif (mapsObject) {\n\t\tallHelpers.push(mapsObject);\n\t}\n\n\tif (allHelpers.length === 0) {\n\t\treturn \"\";\n\t}\n\n\treturn `export function get${pascalName}(simnet: Simnet) {\n const accounts = simnet.getAccounts();\n\n return {\n ${allHelpers.join(\",\\n\\n \")}\n };\n}`;\n}\n\n/**\n * Generate the getContracts convenience wrapper\n */\nfunction generateGetContracts(contracts: ProcessedContract[]): string {\n\tconst contractEntries = contracts\n\t\t.map((contract) => {\n\t\t\tconst camelName = toCamelCase(contract.name);\n\t\t\tconst pascalName = toPascalCase(contract.name);\n\t\t\treturn `${camelName}: get${pascalName}(simnet)`;\n\t\t})\n\t\t.join(\",\\n \");\n\n\treturn `export function getContracts(simnet: Simnet) {\n const accounts = simnet.getAccounts();\n\n return {\n accounts,\n ${contractEntries}\n };\n}`;\n}\n\n/**\n * Generate type exports for consumer convenience\n */\nfunction generateTypeExports(contracts: ProcessedContract[]): string {\n\tconst typeExports = contracts\n\t\t.map((contract) => {\n\t\t\tconst pascalName = toPascalCase(contract.name);\n\t\t\treturn `export type ${pascalName}Helpers = ReturnType<typeof get${pascalName}>;`;\n\t\t})\n\t\t.join(\"\\n\");\n\n\treturn `${typeExports}\nexport type Contracts = ReturnType<typeof getContracts>;`;\n}\n\n/**\n * Main entry point - generates the full testing helpers file\n */\nexport async function generateTestingHelpers(\n\tcontracts: ProcessedContract[],\n\toptions: TestingPluginOptions,\n): Promise<string> {\n\tconst contractHelpers = contracts\n\t\t.map((contract) => generateContractHelper(contract, options))\n\t\t.filter(Boolean);\n\n\tif (contractHelpers.length === 0) {\n\t\treturn `// No contracts with functions to generate helpers for\nexport {};`;\n\t}\n\n\tconst getContractsCode = generateGetContracts(contracts);\n\tconst typeExports = generateTypeExports(contracts);\n\n\treturn `/**\n * Generated by @secondlayer/cli testing plugin\n * Type-safe helpers for Clarinet SDK unit tests\n */\n\nimport { type Simnet, Cl } from '@hirosystems/clarinet-sdk';\n\n// ============================================\n// Per-contract factory functions\n// ============================================\n\n${contractHelpers.join(\"\\n\\n\")}\n\n// ============================================\n// Convenience: all contracts at once\n// ============================================\n\n${getContractsCode}\n\n// ============================================\n// Type exports\n// ============================================\n\n${typeExports}\n`;\n}\n",
|
|
24
24
|
"export {\n\tgenerateArgsSignature,\n\tgenerateClarityArgs,\n\tgenerateMapKeyConversion,\n} from \"@secondlayer/scaffold\";\n",
|
|
25
25
|
"/**\n * Testing plugin for @secondlayer/cli\n * Generates type-safe helpers for Clarinet SDK unit tests\n */\n\nimport type { GenerateContext, PluginFactory } from \"../../types/plugin\";\nimport { matchesContractFilters } from \"../shared\";\nimport { generateTestingHelpers } from \"./generators\";\n\nexport interface TestingPluginOptions {\n\t/** Include only specific contracts */\n\tinclude?: string[];\n\n\t/** Exclude specific contracts */\n\texclude?: string[];\n\n\t/** Output path for generated testing helpers (default: ./src/generated/testing.ts) */\n\tout?: string;\n\n\t/** Include private function helpers (default: false) */\n\tincludePrivate?: boolean;\n\n\t/** Enable debug output */\n\tdebug?: boolean;\n}\n\nexport const testing: PluginFactory<TestingPluginOptions> = (options = {}) => {\n\treturn {\n\t\tname: \"@secondlayer/cli/plugin-testing\",\n\t\tversion: \"1.0.0\",\n\n\t\tasync generate(context: GenerateContext): Promise<void> {\n\t\t\tconst { contracts } = context;\n\n\t\t\t// Filter contracts based on options\n\t\t\tconst filteredContracts = contracts.filter((contract) =>\n\t\t\t\tmatchesContractFilters(contract.name, options),\n\t\t\t);\n\n\t\t\tif (filteredContracts.length === 0) {\n\t\t\t\tif (options.debug) {\n\t\t\t\t\tcontext.logger.debug(\"Testing plugin: No contracts to process\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (options.debug) {\n\t\t\t\tcontext.logger.debug(\n\t\t\t\t\t`Testing plugin: Generating helpers for ${filteredContracts.length} contracts`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Generate testing helpers\n\t\t\tconst testingCode = await generateTestingHelpers(\n\t\t\t\tfilteredContracts,\n\t\t\t\toptions,\n\t\t\t);\n\n\t\t\tconst outputPath = options.out || \"./src/generated/testing.ts\";\n\n\t\t\tcontext.addOutput(\"testing\", {\n\t\t\t\tpath: outputPath,\n\t\t\t\tcontent: testingCode,\n\t\t\t\ttype: \"utils\",\n\t\t\t});\n\n\t\t\tif (options.debug) {\n\t\t\t\tcontext.logger.debug(\n\t\t\t\t\t`Testing plugin: Generated helpers for ${filteredContracts.length} contracts`,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n};\n"
|
|
26
26
|
],
|
|
27
|
-
"mappings": "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",
|
|
28
|
-
"debugId": "
|
|
27
|
+
"mappings": "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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAmEH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAsCH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAsCH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA2BH;AAAA,MACJ,OAAO;AAAA,SAEH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAkCwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAO3C;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAcH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA0BH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAiDH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAuCH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA+CP,OAAO;AAAA;AAAA;;;ACzhBV;AAKA,eAAsB,gBAAgB,GAAoB;AAAA,EACzD,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAsDgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiC7C,OAAO,WAAW,IAAI;AAAA;;;ACpFhB,IAAM,QAA2C,CAAC,UAAU,CAAC,MAAM;AAAA,EACzE,MAAM,cAAc,QAAQ,WAAW,CAAC;AAAA,EAExC,OAAO;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,SAEH,SAAQ,CAAC,SAAyC;AAAA,MACvD,IAAI,QAAQ,OAAO;AAAA,QAClB,QAAQ,OAAO,MACd,6CAA6C,YAAY,KAAK,IAAI,KAAK,SACxE;AAAA,MACD;AAAA,MAGA,MAAM,WAAW,MAAM,iBAAiB;AAAA,MACxC,QAAQ,UAAU,YAAY;AAAA,QAC7B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MACP,CAAC;AAAA,MAGD,MAAM,eAAe,MAAM,qBAAqB,WAAW;AAAA,MAC3D,QAAQ,UAAU,iBAAiB;AAAA,QAClC,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MACP,CAAC;AAAA,MAGD,IAAI,QAAQ,UAAU,SAAS,GAAG;AAAA,QACjC,MAAM,gBAAgB,MAAM,sBAC3B,QAAQ,WACR,WACD;AAAA,QAGA,IAAI,cAAc,KAAK,GAAG;AAAA,UACzB,QAAQ,UAAU,kBAAkB;AAAA,YACnC,MAAM;AAAA,YACN,SAAS;AAAA,YACT,MAAM;AAAA,UACP,CAAC;AAAA,QACF;AAAA,MACD;AAAA,MAEA,IAAI,QAAQ,OAAO;AAAA,QAClB,QAAQ,OAAO,QACd,0BAA0B,QAAQ,UAAU,2BAC7C;AAAA,MACD;AAAA;AAAA,EAEF;AAAA;;AC9DD;AAAA;AAAA;;;ACLA;AAAA;AAAA;AAAA;AAAA;;;ADyBA,SAAS,sBAAsB,CAAC,MAAmB,YAA4B;AAAA,EAC9E,MAAM,aAAa,aAAY,KAAK,IAAI;AAAA,EACxC,MAAM,gBAAgB,sBAAsB,KAAK,IAAI;AAAA,EACrD,MAAM,cAAc,oBAAoB,KAAK,IAAI;AAAA,EAEjD,OAAO,GAAG,gBAAgB;AAAA;AAAA;AAAA,WAGhB;AAAA,WACA,KAAK;AAAA,WACL;AAAA;AAAA;AAAA;AAAA;AASX,SAAS,wBAAwB,CAChC,MACA,YACS;AAAA,EACT,MAAM,aAAa,aAAY,KAAK,IAAI;AAAA,EACxC,MAAM,gBAAgB,sBAAsB,KAAK,IAAI;AAAA,EACrD,MAAM,cAAc,oBAAoB,KAAK,IAAI;AAAA,EAGjD,MAAM,UAAU,KAAK,KAAK,SAAS;AAAA,EACnC,MAAM,YAAY,UAAU,gBAAgB;AAAA,EAE5C,OAAO,GAAG,gBAAgB;AAAA;AAAA,WAEhB;AAAA,WACA,KAAK;AAAA,WACL;AAAA;AAAA;AAAA;AAAA;AASX,SAAS,uBAAuB,CAC/B,MACA,YACS;AAAA,EACT,MAAM,aAAa,aAAY,KAAK,IAAI;AAAA,EACxC,MAAM,gBAAgB,sBAAsB,KAAK,IAAI;AAAA,EACrD,MAAM,cAAc,oBAAoB,KAAK,IAAI;AAAA,EAEjD,OAAO,GAAG,gBAAgB;AAAA;AAAA;AAAA,WAGhB;AAAA,WACA,KAAK;AAAA,WACL;AAAA;AAAA;AAAA;AAAA;AASX,SAAS,qBAAqB,CAC7B,UACA,YACS;AAAA,EACT,MAAM,aAAa,aAAY,SAAS,IAAI;AAAA,EAE5C,OAAO,GAAG;AAAA,kCACuB,iBAAiB,SAAS;AAAA;AAAA;AAO5D,SAAS,aAAa,CAAC,SAA0B;AAAA,EAEhD,IAAI,WAAW,OAAO,GAAG;AAAA,IACxB,MAAM,SAAS,QAAQ,MACrB,IACA,CAAC,UACA,GAAG,aAAY,MAAM,IAAI,MAAM,cAAc,EAAE,MAAM,MAAM,KAAK,CAAC,GACnE,EACC,KAAK,IAAI;AAAA,IACX,OAAO,KAAK;AAAA,EACb;AAAA,EAGA,OAAO,cAAc,EAAE,MAAM,QAAQ,CAAC;AAAA;AAMvC,SAAS,sBAAsB,CAAC,KAAa,YAA4B;AAAA,EACxE,MAAM,aAAa,aAAY,IAAI,IAAI;AAAA,EACvC,MAAM,UAAU,cAAc,IAAI,GAAG;AAAA,EACrC,MAAM,gBAAgB,yBAAyB,IAAI,GAAG;AAAA,EAEtD,OAAO,GAAG,qBAAqB;AAAA;AAAA,WAErB;AAAA,WACA,IAAI;AAAA,UACL;AAAA;AAAA;AAAA;AAQV,SAAS,kBAAkB,CAC1B,WACA,YACS;AAAA,EAET,MAAM,WAAW,UAAU,OAAO,CAAC,MAAM,EAAE,WAAW,UAAU;AAAA,EAEhE,IAAI,SAAS,WAAW,GAAG;AAAA,IAC1B,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,aAAa,SAAS,IAAI,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAAA,EAE3E,OAAO;AAAA,QACA,WAAW,KAAK;AAAA;AAAA,OAAa;AAAA;AAAA;AAOrC,SAAS,kBAAkB,CAC1B,MACA,YACS;AAAA,EACT,IAAI,KAAK,WAAW,GAAG;AAAA,IACtB,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,aAAa,KAAK,IAAI,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAAA,EAExE,OAAO;AAAA,QACA,WAAW,KAAK;AAAA;AAAA,OAAa;AAAA;AAAA;AAOrC,SAAS,sBAAsB,CAC9B,UACA,SACS;AAAA,EACT,QAAQ,KAAK,MAAM,YAAY;AAAA,EAC/B,MAAM,YAAY,IAAI,aAAa,CAAC;AAAA,EACpC,MAAM,YAAY,IAAI,aAAa,CAAC;AAAA,EACpC,MAAM,OAAO,IAAI,QAAQ,CAAC;AAAA,EAC1B,MAAM,aAAa,aAAa,IAAI;AAAA,EAGpC,MAAM,YAAY,UAAU,OAAO,CAAC,MAAmB,EAAE,WAAW,QAAQ;AAAA,EAC5E,MAAM,cAAc,UAAU,OAC7B,CAAC,MAAmB,EAAE,WAAW,WAClC;AAAA,EACA,MAAM,aAAa,QAAQ,iBACxB,UAAU,OAAO,CAAC,MAAmB,EAAE,WAAW,SAAS,IAC3D,CAAC;AAAA,EAGJ,MAAM,gBAAgB,UAAU,IAAI,CAAC,MACpC,uBAAuB,GAAG,OAAO,CAClC;AAAA,EACA,MAAM,kBAAkB,YAAY,IAAI,CAAC,MACxC,yBAAyB,GAAG,OAAO,CACpC;AAAA,EACA,MAAM,iBAAiB,WAAW,IAAI,CAAC,MACtC,wBAAwB,GAAG,OAAO,CACnC;AAAA,EAGA,MAAM,aAAa,mBAAmB,WAAW,OAAO;AAAA,EACxD,MAAM,aAAa,mBAAmB,MAAM,OAAO;AAAA,EAEnD,MAAM,aAAa,CAAC,GAAG,eAAe,GAAG,iBAAiB,GAAG,cAAc;AAAA,EAG3E,IAAI,YAAY;AAAA,IACf,WAAW,KAAK,UAAU;AAAA,EAC3B;AAAA,EACA,IAAI,YAAY;AAAA,IACf,WAAW,KAAK,UAAU;AAAA,EAC3B;AAAA,EAEA,IAAI,WAAW,WAAW,GAAG;AAAA,IAC5B,OAAO;AAAA,EACR;AAAA,EAEA,OAAO,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAIxB,WAAW,KAAK;AAAA;AAAA,KAAW;AAAA;AAAA;AAAA;AAQjC,SAAS,oBAAoB,CAAC,WAAwC;AAAA,EACrE,MAAM,kBAAkB,UACtB,IAAI,CAAC,aAAa;AAAA,IAClB,MAAM,YAAY,aAAY,SAAS,IAAI;AAAA,IAC3C,MAAM,aAAa,aAAa,SAAS,IAAI;AAAA,IAC7C,OAAO,GAAG,iBAAiB;AAAA,GAC3B,EACA,KAAK;AAAA,KAAS;AAAA,EAEhB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKF;AAAA;AAAA;AAAA;AAQN,SAAS,mBAAmB,CAAC,WAAwC;AAAA,EACpE,MAAM,cAAc,UAClB,IAAI,CAAC,aAAa;AAAA,IAClB,MAAM,aAAa,aAAa,SAAS,IAAI;AAAA,IAC7C,OAAO,eAAe,4CAA4C;AAAA,GAClE,EACA,KAAK;AAAA,CAAI;AAAA,EAEX,OAAO,GAAG;AAAA;AAAA;AAOX,eAAsB,sBAAsB,CAC3C,WACA,SACkB;AAAA,EAClB,MAAM,kBAAkB,UACtB,IAAI,CAAC,aAAa,uBAAuB,UAAU,OAAO,CAAC,EAC3D,OAAO,OAAO;AAAA,EAEhB,IAAI,gBAAgB,WAAW,GAAG;AAAA,IACjC,OAAO;AAAA;AAAA,EAER;AAAA,EAEA,MAAM,mBAAmB,qBAAqB,SAAS;AAAA,EACvD,MAAM,cAAc,oBAAoB,SAAS;AAAA,EAEjD,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWN,gBAAgB,KAAK;AAAA;AAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA;AAAA;AAAA;;;AElSK,IAAM,UAA+C,CAAC,UAAU,CAAC,MAAM;AAAA,EAC7E,OAAO;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,SAEH,SAAQ,CAAC,SAAyC;AAAA,MACvD,QAAQ,cAAc;AAAA,MAGtB,MAAM,oBAAoB,UAAU,OAAO,CAAC,aAC3C,uBAAuB,SAAS,MAAM,OAAO,CAC9C;AAAA,MAEA,IAAI,kBAAkB,WAAW,GAAG;AAAA,QACnC,IAAI,QAAQ,OAAO;AAAA,UAClB,QAAQ,OAAO,MAAM,yCAAyC;AAAA,QAC/D;AAAA,QACA;AAAA,MACD;AAAA,MAEA,IAAI,QAAQ,OAAO;AAAA,QAClB,QAAQ,OAAO,MACd,0CAA0C,kBAAkB,kBAC7D;AAAA,MACD;AAAA,MAGA,MAAM,cAAc,MAAM,uBACzB,mBACA,OACD;AAAA,MAEA,MAAM,aAAa,QAAQ,OAAO;AAAA,MAElC,QAAQ,UAAU,WAAW;AAAA,QAC5B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MACP,CAAC;AAAA,MAED,IAAI,QAAQ,OAAO;AAAA,QAClB,QAAQ,OAAO,MACd,yCAAyC,kBAAkB,kBAC5D;AAAA,MACD;AAAA;AAAA,EAEF;AAAA;;;AdpCM,SAAS,eAA2C,CAC1D,OACA,UAA6B,CAAC,GACxB;AAAA,EACN,IAAI,WAAW;AAAA,EAEf,IAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,GAAG;AAAA,IAClD,WAAW,SAAS,OAAO,CAAC,SAC3B,QAAQ,SAAS,KAChB,CAAC,YACA,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,CACpE,CACD;AAAA,EACD;AAAA,EAEA,IAAI,QAAQ,WAAW,QAAQ,QAAQ,SAAS,GAAG;AAAA,IAClD,WAAW,SAAS,OACnB,CAAC,SACA,CAAC,QAAQ,SAAS,KACjB,CAAC,YACA,KAAK,KAAK,SAAS,OAAO,KAAK,KAAK,KAAK,MAAM,IAAI,OAAO,OAAO,CAAC,CACpE,CACF;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AAMD,SAAS,YAAY,CAC3B,MACA,SACA,gBACoB;AAAA,EACpB,OAAO;AAAA,IACN;AAAA,IACA;AAAA,OACG;AAAA,EACJ;AAAA;",
|
|
28
|
+
"debugId": "15CE4A0BEE59E1A664756E2164756E21",
|
|
29
29
|
"names": []
|
|
30
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@secondlayer/cli",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.2",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/ryanwaits/secondlayer.git",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@secondlayer/scaffold": "^1.4.0",
|
|
53
53
|
"@secondlayer/sdk": "^6.23.1",
|
|
54
54
|
"@secondlayer/shared": "^6.41.3",
|
|
55
|
-
"@secondlayer/stacks": "^2.
|
|
55
|
+
"@secondlayer/stacks": "^2.14.0",
|
|
56
56
|
"@secondlayer/subgraphs": "^3.19.6",
|
|
57
57
|
"@biomejs/js-api": "^0.7.0",
|
|
58
58
|
"@biomejs/wasm-nodejs": "^1.9.0",
|