rdx-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-n0bR-cOj.js","names":["JsonValueSchema: Schema.Schema<JsonValue>","networkId","warnings: string[]","summaries: TransactionArtifactSummary[]","imported: SignatureEntry[]","readJson","readSigningRequest","requestComplete","readJson","writeJson","requestComplete","toTransactionIntent","toSignatureWithPublicKey","rootIntentSignatures","nonRootSubintentSignatures","gatewayBaseUrl","requestPath","request","request: SigningRequest","template: SignatureTemplate","request: SigningRequest","template: SignatureTemplate","requests: GeneratedWorkflowFile<SigningRequest>[]","templates: GeneratedWorkflowFile<SignatureTemplate>[]","result: string[]","gatewayBaseUrl","prepared: PreparedTransaction","gatewayBaseUrl","readExistingSubmitResult"],"sources":["../src/json.ts","../src/schemas.ts","../src/accountReads.ts","../src/platformIo.ts","../src/artifacts.ts","../src/signatureImport.ts","../src/addSignatures.ts","../src/config.ts","../src/llm.ts","../src/gatewayHttp.ts","../src/notarize.ts","../src/signingRequests.ts","../src/subintentAssembly.ts","../src/prepare.ts","../src/status.ts","../src/submit.ts","../src/templates.ts","../src/cli.ts"],"sourcesContent":["import { Schema } from 'effect';\n\nexport type JsonValue =\n | null\n | boolean\n | number\n | string\n | readonly JsonValue[]\n | { readonly [key: string]: JsonValue };\n\nexport const JsonValueSchema: Schema.Schema<JsonValue> = Schema.Union(\n Schema.Null,\n Schema.Boolean,\n Schema.JsonNumber,\n Schema.String,\n Schema.Array(Schema.suspend(() => JsonValueSchema)),\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonValueSchema),\n }),\n);\n\nconst JsonStringSchema = Schema.parseJson(JsonValueSchema, { space: 2 });\n\nconst isBigNumberLike = (\n value: unknown,\n): value is { toString: () => string; isBigNumber?: boolean } =>\n typeof value === 'object' &&\n value !== null &&\n 'isBigNumber' in value &&\n typeof (value as { toString?: unknown }).toString === 'function';\n\nexport const toJsonValue = (value: unknown): JsonValue => {\n if (value === undefined) {\n return null;\n }\n\n if (\n value === null ||\n typeof value === 'boolean' ||\n typeof value === 'string'\n ) {\n return value;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : null;\n }\n\n if (typeof value === 'bigint' || isBigNumberLike(value)) {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return value.map(toJsonValue);\n }\n\n if (typeof value === 'object') {\n if (typeof (value as { toJSON?: unknown }).toJSON === 'function') {\n return toJsonValue((value as { toJSON: () => unknown }).toJSON());\n }\n\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entry]) => entry !== undefined)\n .map(([key, entry]) => [key, toJsonValue(entry)]),\n );\n }\n\n return String(value);\n};\n\nexport const renderJson = (value: unknown) =>\n Schema.encodeUnknownSync(JsonStringSchema)(toJsonValue(value));\n","import { Schema } from 'effect';\n\nexport const PLACEHOLDER_PUBLIC_KEY_HEX =\n '<replace-with-ed25519-public-key-hex>';\nexport const PLACEHOLDER_SIGNATURE_HEX = '<replace-with-ed25519-signature-hex>';\n\nexport const NetworkSchema = Schema.Literal('mainnet', 'stokenet').pipe(\n Schema.brand('Network'),\n);\nexport type Network = typeof NetworkSchema.Type;\n\nexport const ArtifactScopeSchema = Schema.Literal('local', 'global').pipe(\n Schema.brand('ArtifactScope'),\n);\nexport type ArtifactScope = typeof ArtifactScopeSchema.Type;\n\nexport const OutputFormatSchema = Schema.Literal('json', 'text').pipe(\n Schema.brand('OutputFormat'),\n);\nexport type OutputFormat = typeof OutputFormatSchema.Type;\n\nexport const HexStringSchema = Schema.String.pipe(\n Schema.pattern(/^[0-9a-fA-F]+$/),\n);\nexport const Ed25519PublicKeyHexSchema = HexStringSchema.pipe(\n Schema.length(64),\n);\nexport const Ed25519SignatureHexSchema = HexStringSchema.pipe(\n Schema.length(128),\n);\nexport const SubintentIdSchema = Schema.String.pipe(\n Schema.pattern(/^[A-Za-z][A-Za-z0-9_-]{0,63}$/),\n);\n\nexport const PublicKeySchema = Schema.Struct({\n curve: Schema.Literal('Ed25519'),\n hex: Ed25519PublicKeyHexSchema,\n});\n\nconst PublicKeyOrPlaceholderSchema = Schema.Struct({\n curve: Schema.Literal('Ed25519'),\n hex: Schema.Union(\n Ed25519PublicKeyHexSchema,\n Schema.Literal(PLACEHOLDER_PUBLIC_KEY_HEX),\n ),\n});\n\nconst SignatureValueSchema = Schema.Struct({\n curve: Schema.Literal('Ed25519'),\n hex: Ed25519SignatureHexSchema,\n});\n\nconst SignatureValueOrPlaceholderSchema = Schema.Struct({\n curve: Schema.Literal('Ed25519'),\n hex: Schema.Union(\n Ed25519SignatureHexSchema,\n Schema.Literal(PLACEHOLDER_SIGNATURE_HEX),\n ),\n});\n\nexport const SigningScopeSchema = Schema.Union(\n Schema.Struct({ kind: Schema.Literal('rootIntent') }),\n Schema.Struct({\n kind: Schema.Literal('subintent'),\n subintentId: SubintentIdSchema,\n }),\n Schema.Struct({ kind: Schema.Literal('notarySignatory') }),\n Schema.Struct({ kind: Schema.Literal('notary') }),\n);\n\nconst HashSchema = Schema.Struct({\n id: Schema.NullOr(Schema.String),\n hex: HexStringSchema,\n});\n\nexport const SigningRequestSchema = Schema.Struct({\n type: Schema.Literal('signingRequest'),\n version: Schema.Literal(1),\n transactionId: Schema.NonEmptyString,\n scope: SigningScopeSchema,\n account: Schema.NullOr(Schema.NonEmptyString),\n hash: HashSchema,\n signingRequestPath: Schema.optional(Schema.String),\n});\n\nexport const SignatureTemplateSchema = Schema.Struct({\n type: Schema.Literal('signatureTemplate'),\n version: Schema.Literal(1),\n transactionId: Schema.NonEmptyString,\n scope: SigningScopeSchema,\n account: Schema.NullOr(Schema.NonEmptyString),\n hash: HashSchema,\n signingRequestPath: Schema.optional(Schema.String),\n publicKey: PublicKeyOrPlaceholderSchema,\n signature: SignatureValueOrPlaceholderSchema,\n});\n\nexport const SignatureEntrySchema = Schema.Struct({\n scope: SigningScopeSchema,\n account: Schema.NullOr(Schema.NonEmptyString),\n hash: HashSchema,\n signingRequestPath: Schema.optional(Schema.String),\n publicKey: PublicKeySchema.pipe(\n Schema.filter((value) => value.hex !== PLACEHOLDER_PUBLIC_KEY_HEX, {\n message: () =>\n 'Replace the public key placeholder before importing signatures',\n }),\n ),\n signature: SignatureValueSchema.pipe(\n Schema.filter((value) => value.hex !== PLACEHOLDER_SIGNATURE_HEX, {\n message: () =>\n 'Replace the signature placeholder before importing signatures',\n }),\n ),\n});\n\nexport const SignatureFileSchema = Schema.Struct({\n type: Schema.Literal('signatureFile'),\n version: Schema.Literal(1),\n transactionId: Schema.NonEmptyString,\n signatures: Schema.Array(SignatureEntrySchema),\n});\n\nexport const BatchSignatureFileSchema = Schema.Struct({\n type: Schema.Literal('batchSignatureFile'),\n version: Schema.Literal(1),\n signatures: Schema.NonEmptyArray(SignatureFileSchema),\n});\n\nexport const SubintentsFileSchema = Schema.Struct({\n type: Schema.Literal('subintents'),\n version: Schema.Literal(1),\n subintents: Schema.Record({\n key: Schema.String,\n value: Schema.Struct({\n manifest: Schema.NonEmptyString,\n }),\n }).pipe(\n Schema.filter(\n (subintents) =>\n Object.keys(subintents).every((key) =>\n /^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(key),\n ),\n { message: () => 'Subintent IDs must be conservative identifiers' },\n ),\n ),\n});\n\nexport const NotaryFileSchema = Schema.Struct({\n type: Schema.Literal('notary'),\n version: Schema.Literal(1),\n publicKey: PublicKeySchema,\n notaryIsSignatory: Schema.optional(Schema.Boolean),\n});\n\nexport const ArtifactStatusSchema = Schema.Union(\n Schema.Literal('prepared'),\n Schema.Literal('notarized'),\n Schema.Literal('submitted'),\n);\n\nexport const AuthorizationAnalysisSchema = Schema.Struct({\n rootIntent: Schema.Array(Schema.String),\n subintents: Schema.Record({\n key: Schema.String,\n value: Schema.Array(Schema.String),\n }),\n});\n\nexport const PreparedTransactionSchema = Schema.Struct({\n type: Schema.Literal('preparedTransaction'),\n version: Schema.Literal(1),\n transactionId: Schema.NonEmptyString,\n network: NetworkSchema,\n intentHash: HashSchema,\n manifestSourceFile: Schema.String,\n transactionIntentPath: Schema.String,\n staticAnalysisPath: Schema.String,\n signingRequests: Schema.Array(Schema.String),\n signatureTemplates: Schema.Array(Schema.String),\n subintentOrder: Schema.Array(Schema.String),\n authorizationAnalysis: AuthorizationAnalysisSchema,\n notaryPublicKey: Schema.optional(PublicKeySchema),\n notaryIsSignatory: Schema.optional(Schema.Boolean),\n});\n\nexport const NetworkTransactionStatusSchema = Schema.Struct({\n transactionId: Schema.NonEmptyString,\n status: Schema.String,\n statusDescription: Schema.String,\n errorMessage: Schema.NullOr(Schema.String),\n checkedAt: Schema.String,\n});\n\nexport const SubmitResultSchema = Schema.Struct({\n type: Schema.Literal('submitResult'),\n version: Schema.Literal(1),\n transactionId: Schema.NonEmptyString,\n networkStatus: NetworkTransactionStatusSchema,\n attempts: Schema.Array(\n Schema.Struct({\n checkedAt: Schema.String,\n status: Schema.String,\n statusDescription: Schema.String,\n errorMessage: Schema.NullOr(Schema.String),\n }),\n ),\n});\n\nexport const AccountFungiblesResultSchema = Schema.Struct({\n type: Schema.Literal('commandResult'),\n command: Schema.Literal('account fungibles'),\n result: Schema.Unknown,\n});\n\nexport const AccountNftsResultSchema = Schema.Struct({\n type: Schema.Literal('commandResult'),\n command: Schema.Literal('account nfts'),\n result: Schema.Unknown,\n});\n\nexport const AccountShowResultSchema = Schema.Struct({\n type: Schema.Literal('commandResult'),\n command: Schema.Literal('account show'),\n result: Schema.Unknown,\n});\n\nexport const TransactionHistoryResultSchema = Schema.Struct({\n type: Schema.Literal('commandResult'),\n command: Schema.Literal('tx history'),\n result: Schema.Unknown,\n});\n\nexport const VirtualAccountDerivationSchema = Schema.Struct({\n network: NetworkSchema,\n derivation: Schema.Literal('virtualAccount'),\n publicKey: PublicKeySchema,\n accountAddress: Schema.String,\n});\n\nexport type SigningScope = typeof SigningScopeSchema.Type;\nexport type SigningRequest = typeof SigningRequestSchema.Type;\nexport type SignatureTemplate = typeof SignatureTemplateSchema.Type;\nexport type SignatureEntry = typeof SignatureEntrySchema.Type;\nexport type SignatureFile = typeof SignatureFileSchema.Type;\nexport type SubintentsFile = typeof SubintentsFileSchema.Type;\nexport type NotaryFile = typeof NotaryFileSchema.Type;\nexport type ArtifactStatus = typeof ArtifactStatusSchema.Type;\nexport type AuthorizationAnalysis = typeof AuthorizationAnalysisSchema.Type;\nexport type PreparedTransaction = typeof PreparedTransactionSchema.Type;\nexport type NetworkTransactionStatus =\n typeof NetworkTransactionStatusSchema.Type;\nexport type SubmitResult = typeof SubmitResultSchema.Type;\nexport type AccountFungiblesResult = typeof AccountFungiblesResultSchema.Type;\nexport type AccountNftsResult = typeof AccountNftsResultSchema.Type;\nexport type AccountShowResult = typeof AccountShowResultSchema.Type;\nexport type TransactionHistoryResult =\n typeof TransactionHistoryResultSchema.Type;\nexport type VirtualAccountDerivation =\n typeof VirtualAccountDerivationSchema.Type;\n","import {\n GatewayApiClient,\n GetFungibleBalance,\n GetNonFungibleBalanceService,\n} from '@radix-effects/gateway';\nimport { PublicKey, RadixEngineToolkit } from '@steleaio/radix-engine-toolkit';\nimport { ConfigProvider, Data, Effect, Layer, Schema } from 'effect';\nimport type { Network, ResolvedRdxConfig } from './config';\nimport { toJsonValue } from './json';\nimport type {\n AccountFungiblesResult,\n AccountNftsResult,\n AccountShowResult,\n TransactionHistoryResult,\n VirtualAccountDerivation,\n} from './schemas';\nimport { PublicKeySchema } from './schemas';\n\nexport type { VirtualAccountDerivation };\n\nexport class AccountReadError extends Data.TaggedError('AccountReadError')<{\n accountAddress: string;\n reason: unknown;\n}> {}\n\nexport class InvalidPublicKeyError extends Data.TaggedError(\n 'InvalidPublicKeyError',\n)<{\n code: 'INVALID_PUBLIC_KEY';\n publicKeyHex: string;\n}> {}\n\nconst networkId = (network: Network) => (network === 'stokenet' ? 2 : 1);\n\nconst gatewayConfigLayer = (\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>,\n) =>\n Layer.setConfigProvider(\n ConfigProvider.fromJson({\n NETWORK_ID: networkId(config.network),\n ...(config.gatewayBaseUrl ? { GATEWAY_URL: config.gatewayBaseUrl } : {}),\n }),\n );\n\nconst gatewayApiClientLayer = (\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>,\n) => GatewayApiClient.Default.pipe(Layer.provide(gatewayConfigLayer(config)));\n\nexport const getAccountFungibles = (input: {\n accountAddress: string;\n readFungibles: (accountAddress: string) => Effect.Effect<unknown, unknown>;\n}): Effect.Effect<AccountFungiblesResult, unknown> =>\n input.readFungibles(input.accountAddress).pipe(\n Effect.map((result) => ({\n type: 'commandResult' as const,\n command: 'account fungibles' as const,\n result: toJsonValue(result),\n })),\n );\n\nexport const getAccountNfts = (input: {\n accountAddress: string;\n readNfts: (accountAddress: string) => Effect.Effect<unknown, unknown>;\n}): Effect.Effect<AccountNftsResult, unknown> =>\n input.readNfts(input.accountAddress).pipe(\n Effect.map((result) => ({\n type: 'commandResult' as const,\n command: 'account nfts' as const,\n result: toJsonValue(result),\n })),\n );\n\nexport const gatewayAccountFungibles = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n accountAddress: string;\n}): Effect.Effect<unknown, AccountReadError> => {\n const gatewayLayer = gatewayApiClientLayer(input.config);\n const accountFungiblesLayer = Layer.merge(\n gatewayLayer,\n GetFungibleBalance.Default.pipe(Layer.provide(gatewayLayer)),\n );\n\n return Effect.gen(function* () {\n const gatewayApiClient = yield* GatewayApiClient;\n const status = yield* gatewayApiClient.status.getCurrent();\n const getFungibleBalance = yield* GetFungibleBalance;\n return yield* getFungibleBalance({\n addresses: [input.accountAddress],\n at_ledger_state: {\n state_version: status.ledger_state.state_version,\n },\n options: { explicit_metadata: ['name', 'symbol'] },\n });\n }).pipe(\n Effect.provide(accountFungiblesLayer),\n Effect.mapError(\n (reason) =>\n new AccountReadError({ accountAddress: input.accountAddress, reason }),\n ),\n );\n};\n\nexport const gatewayAccountNfts = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n accountAddress: string;\n}): Effect.Effect<unknown, AccountReadError> => {\n const gatewayLayer = gatewayApiClientLayer(input.config);\n const accountNftsLayer = Layer.merge(\n gatewayLayer,\n GetNonFungibleBalanceService.Default.pipe(Layer.provide(gatewayLayer)),\n );\n\n return Effect.gen(function* () {\n const gatewayApiClient = yield* GatewayApiClient;\n const status = yield* gatewayApiClient.status.getCurrent();\n const getNonFungibleBalance = yield* GetNonFungibleBalanceService;\n return yield* getNonFungibleBalance({\n addresses: [input.accountAddress],\n at_ledger_state: {\n state_version: status.ledger_state.state_version,\n },\n });\n }).pipe(\n Effect.provide(accountNftsLayer),\n Effect.mapError(\n (reason) =>\n new AccountReadError({ accountAddress: input.accountAddress, reason }),\n ),\n );\n};\n\nexport const gatewayAccountDetails = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n accountAddress: string;\n}): Effect.Effect<unknown, AccountReadError> =>\n Effect.gen(function* () {\n const gatewayApiClient = yield* GatewayApiClient;\n return yield* gatewayApiClient.state.innerClient.stateEntityDetails({\n stateEntityDetailsRequest: {\n addresses: [input.accountAddress],\n aggregation_level: 'Vault',\n opt_ins: {\n explicit_metadata: ['name', 'description'],\n ancestor_identities: true,\n component_royalty_config: true,\n package_royalty_vault_balance: true,\n },\n },\n });\n }).pipe(\n Effect.provide(gatewayApiClientLayer(input.config)),\n Effect.mapError(\n (reason) =>\n new AccountReadError({ accountAddress: input.accountAddress, reason }),\n ),\n );\n\nexport const gatewayAccountHistory = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n accountAddress: string;\n limit: number;\n}): Effect.Effect<unknown, AccountReadError> =>\n Effect.gen(function* () {\n const gatewayApiClient = yield* GatewayApiClient;\n return yield* gatewayApiClient.stream.innerClient.streamTransactions({\n streamTransactionsRequest: {\n limit_per_page: input.limit,\n affected_global_entities_filter: [input.accountAddress],\n },\n });\n }).pipe(\n Effect.provide(gatewayApiClientLayer(input.config)),\n Effect.mapError(\n (reason) =>\n new AccountReadError({ accountAddress: input.accountAddress, reason }),\n ),\n );\n\nexport const getAccountDetails = (input: {\n accountAddress: string;\n readDetails: (accountAddress: string) => Effect.Effect<unknown, unknown>;\n}): Effect.Effect<AccountShowResult, unknown> =>\n input.readDetails(input.accountAddress).pipe(\n Effect.map((result) => ({\n type: 'commandResult' as const,\n command: 'account show' as const,\n result: toJsonValue(result),\n })),\n );\n\nexport const getAccountTransactionHistory = (input: {\n accountAddress: string;\n limit: number;\n readHistory: (\n accountAddress: string,\n limit: number,\n ) => Effect.Effect<unknown, unknown>;\n}): Effect.Effect<TransactionHistoryResult, unknown> =>\n input.readHistory(input.accountAddress, input.limit).pipe(\n Effect.map((result) => ({\n type: 'commandResult' as const,\n command: 'tx history' as const,\n result: toJsonValue(result),\n })),\n );\n\nexport const deriveVirtualAccountAddress = (input: {\n network: Network;\n publicKeyHex: string;\n}): Effect.Effect<\n {\n type: 'commandResult';\n command: 'account derive';\n } & VirtualAccountDerivation,\n unknown\n> =>\n Effect.gen(function* () {\n const publicKey = yield* Schema.decodeUnknown(PublicKeySchema)({\n curve: 'Ed25519',\n hex: input.publicKeyHex,\n }).pipe(\n Effect.mapError(\n () =>\n new InvalidPublicKeyError({\n code: 'INVALID_PUBLIC_KEY',\n publicKeyHex: input.publicKeyHex,\n }),\n ),\n );\n\n const accountAddress = yield* Effect.tryPromise(async () =>\n RadixEngineToolkit.Derive.virtualAccountAddressFromPublicKey(\n new PublicKey.Ed25519(publicKey.hex),\n networkId(input.network),\n ),\n );\n\n return {\n type: 'commandResult' as const,\n command: 'account derive' as const,\n network: input.network,\n derivation: 'virtualAccount' as const,\n publicKey,\n accountAddress,\n };\n });\n\nexport class AccountReadService extends Effect.Service<AccountReadService>()(\n 'AccountReadService',\n {\n sync: () => ({\n getAccountDetails,\n getAccountFungibles,\n getAccountNfts,\n getAccountTransactionHistory,\n deriveVirtualAccountAddress,\n gatewayAccountDetails,\n gatewayAccountFungibles,\n gatewayAccountHistory,\n gatewayAccountNfts,\n }),\n },\n) {}\n","import { FileSystem } from '@effect/platform';\nimport { NodeFileSystem } from '@effect/platform-node';\nimport { Effect, Schema } from 'effect';\nimport { renderJson } from './json';\n\ntype FileErrorMapper<E> = (reason: unknown) => E;\n\nconst withNodeFileSystem = <A, E>(\n effect: Effect.Effect<A, E, FileSystem.FileSystem>,\n) => effect.pipe(Effect.provide(NodeFileSystem.layer));\n\nexport const fileExists = (path: string): Effect.Effect<boolean> =>\n withNodeFileSystem(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n return yield* fs.exists(path);\n }).pipe(Effect.catchAll(() => Effect.succeed(false))),\n );\n\nexport const makeDirectory = <E>(\n path: string,\n options: FileSystem.MakeDirectoryOptions | undefined,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<void, E> =>\n withNodeFileSystem(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n yield* fs.makeDirectory(path, options);\n }).pipe(Effect.mapError(mapError)),\n );\n\nexport const readDirectory = <E>(\n path: string,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<string[], E> =>\n withNodeFileSystem(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n return yield* fs.readDirectory(path);\n }).pipe(Effect.mapError(mapError)),\n );\n\nexport const isDirectory = <E>(\n path: string,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<boolean, E> =>\n withNodeFileSystem(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const info = yield* fs.stat(path);\n return info.type === 'Directory';\n }).pipe(Effect.mapError(mapError)),\n );\n\nexport const readFileString = <E>(\n path: string,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<string, E> =>\n withNodeFileSystem(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n return yield* fs.readFileString(path, 'utf8');\n }).pipe(Effect.mapError(mapError)),\n );\n\nexport const writeFileString = <E>(\n path: string,\n data: string,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<void, E> =>\n withNodeFileSystem(\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n yield* fs.writeFileString(path, data);\n }).pipe(Effect.mapError(mapError)),\n );\n\nexport const readJsonFile = <E>(\n path: string,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<unknown, E> =>\n readFileString(path, mapError).pipe(\n Effect.flatMap((content) =>\n Schema.decodeUnknown(Schema.parseJson())(content).pipe(\n Effect.mapError(mapError),\n ),\n ),\n );\n\nexport const writeJsonFile = <E>(\n path: string,\n value: unknown,\n mapError: FileErrorMapper<E>,\n): Effect.Effect<void, E> =>\n writeFileString(path, `${renderJson(value)}\\n`, mapError);\n","import { join } from 'node:path';\nimport { Data, Effect, Schema } from 'effect';\nimport {\n fileExists,\n isDirectory,\n makeDirectory,\n readDirectory,\n readJsonFile,\n writeJsonFile,\n} from './platformIo';\nimport {\n type ArtifactStatus,\n type NetworkTransactionStatus,\n type PreparedTransaction,\n PreparedTransactionSchema,\n type SignatureEntry,\n type SignatureFile,\n type SigningScope,\n type SubmitResult,\n} from './schemas';\n\nexport class ArtifactStoreError extends Data.TaggedError('ArtifactStoreError')<{\n path: string;\n reason: unknown;\n}> {}\n\nexport type SignatureImportResult = {\n signatureFile: SignatureFile;\n acceptedCount: number;\n warnings: string[];\n};\n\nexport type TransactionArtifactSummary = {\n transactionId: string;\n path: string;\n network: PreparedTransaction['network'];\n status: ArtifactStatus;\n intentHash: string;\n manifestSourceFile: string;\n networkStatus?: NetworkTransactionStatus;\n updatedSubmitResultPath?: string | null;\n};\n\nconst scopeSortKey = (scope: SigningScope) => {\n switch (scope.kind) {\n case 'rootIntent':\n return '0:root';\n case 'subintent':\n return `1:${scope.subintentId}`;\n case 'notarySignatory':\n return '2:notarySignatory';\n case 'notary':\n return '3:notary';\n }\n};\n\nconst signatureIdentity = (entry: SignatureEntry) =>\n [\n scopeSortKey(entry.scope),\n entry.account ?? '',\n entry.hash.id ?? '',\n entry.hash.hex,\n entry.publicKey.curve,\n entry.publicKey.hex,\n ].join('|');\n\nconst sortSignature = (left: SignatureEntry, right: SignatureEntry) =>\n signatureIdentity(left).localeCompare(signatureIdentity(right));\n\nexport const normalizeSignatures = (input: {\n transactionId: string;\n existing: readonly SignatureEntry[];\n imported: readonly SignatureEntry[];\n}): SignatureImportResult => {\n const byIdentity = new Map<string, SignatureEntry>();\n const warnings: string[] = [];\n let acceptedCount = 0;\n\n for (const signature of [...input.existing, ...input.imported]) {\n const identity = signatureIdentity(signature);\n const existing = byIdentity.get(identity);\n\n if (!existing) {\n byIdentity.set(identity, signature);\n if (input.imported.includes(signature)) {\n acceptedCount += 1;\n }\n continue;\n }\n\n if (existing.signature.hex !== signature.signature.hex) {\n warnings.push(`Ignored differing duplicate signature for ${identity}`);\n }\n }\n\n return {\n signatureFile: {\n type: 'signatureFile',\n version: 1,\n transactionId: input.transactionId,\n signatures: [...byIdentity.values()].sort(sortSignature),\n },\n acceptedCount,\n warnings,\n };\n};\n\nexport const createTransactionArtifactDirectory = (input: {\n artifactRoot: string;\n transactionId: string;\n}): Effect.Effect<string, ArtifactStoreError> =>\n Effect.gen(function* () {\n yield* makeDirectory(\n input.artifactRoot,\n { recursive: true },\n (reason) => new ArtifactStoreError({ path: input.artifactRoot, reason }),\n );\n\n const artifactPath = join(input.artifactRoot, input.transactionId);\n yield* makeDirectory(\n artifactPath,\n undefined,\n (reason) => new ArtifactStoreError({ path: artifactPath, reason }),\n );\n\n return artifactPath;\n });\n\nexport const writeCanonicalSignatures = (input: {\n artifactPath: string;\n transactionId: string;\n existing: readonly SignatureEntry[];\n imported: readonly SignatureEntry[];\n}): Effect.Effect<string, ArtifactStoreError> => {\n const result = normalizeSignatures(input);\n const path = join(input.artifactPath, 'signatures.json');\n\n return writeJsonFile(\n path,\n result.signatureFile,\n (reason) => new ArtifactStoreError({ path, reason }),\n ).pipe(Effect.as(path));\n};\n\nexport const writeSubmitResult = (input: {\n artifactPath: string;\n submitResult: SubmitResult;\n}): Effect.Effect<string, ArtifactStoreError> => {\n const path = join(input.artifactPath, 'submitResult.json');\n\n return writeJsonFile(\n path,\n input.submitResult,\n (reason) => new ArtifactStoreError({ path, reason }),\n ).pipe(Effect.as(path));\n};\n\nconst readPreparedTransaction = (path: string) =>\n readJsonFile(path, (reason) => new ArtifactStoreError({ path, reason })).pipe(\n Effect.flatMap((value) =>\n Schema.decodeUnknown(PreparedTransactionSchema)(value).pipe(\n Effect.mapError((reason) => new ArtifactStoreError({ path, reason })),\n ),\n ),\n );\n\nconst getArtifactStatus = (artifactPath: string) =>\n Effect.gen(function* () {\n if (yield* fileExists(join(artifactPath, 'submitResult.json'))) {\n return 'submitted' as const;\n }\n\n if (yield* fileExists(join(artifactPath, 'notarizedTransaction.hex'))) {\n return 'notarized' as const;\n }\n\n return 'prepared' as const;\n });\n\nconst readArtifactSummary = (\n artifactPath: string,\n): Effect.Effect<TransactionArtifactSummary, ArtifactStoreError> =>\n Effect.gen(function* () {\n const prepared = yield* readPreparedTransaction(\n join(artifactPath, 'prepared.json'),\n );\n const status = yield* getArtifactStatus(artifactPath);\n\n return {\n transactionId: prepared.transactionId,\n path: artifactPath,\n network: prepared.network,\n status,\n intentHash: prepared.intentHash.id ?? prepared.intentHash.hex,\n manifestSourceFile: prepared.manifestSourceFile,\n };\n });\n\nexport const findTransactionArtifact = (input: {\n artifactRoot: string;\n transactionId: string;\n}): Effect.Effect<string, ArtifactStoreError> =>\n Effect.gen(function* () {\n const artifactPath = join(input.artifactRoot, input.transactionId);\n const exists = yield* fileExists(join(artifactPath, 'prepared.json'));\n\n if (!exists) {\n return yield* new ArtifactStoreError({\n path: artifactPath,\n reason: 'Transaction artifact not found',\n });\n }\n\n return artifactPath;\n });\n\nexport const findTransactionArtifactOption = (input: {\n artifactRoot: string;\n transactionId: string;\n}): Effect.Effect<string | undefined> =>\n Effect.gen(function* () {\n const artifactPath = join(input.artifactRoot, input.transactionId);\n const exists = yield* fileExists(join(artifactPath, 'prepared.json'));\n return exists ? artifactPath : undefined;\n });\n\nexport const listTransactionArtifacts = (input: {\n artifactRoot: string;\n pattern?: string;\n regex?: string;\n network?: PreparedTransaction['network'];\n status?: ArtifactStatus;\n}): Effect.Effect<TransactionArtifactSummary[], ArtifactStoreError> =>\n Effect.gen(function* () {\n const rootExists = yield* fileExists(input.artifactRoot);\n if (!rootExists) {\n return [];\n }\n\n const entries = yield* readDirectory(\n input.artifactRoot,\n (reason) => new ArtifactStoreError({ path: input.artifactRoot, reason }),\n );\n const regex = input.regex ? new RegExp(input.regex) : undefined;\n const pattern = input.pattern?.toLowerCase();\n const summaries: TransactionArtifactSummary[] = [];\n\n for (const entry of entries) {\n const artifactPath = join(input.artifactRoot, entry);\n\n if (\n !(yield* isDirectory(\n artifactPath,\n (reason) => new ArtifactStoreError({ path: artifactPath, reason }),\n ))\n ) {\n continue;\n }\n\n const summary = yield* readArtifactSummary(artifactPath);\n const searchable = [\n summary.transactionId,\n summary.intentHash,\n summary.manifestSourceFile,\n ];\n\n if (input.network && summary.network !== input.network) {\n continue;\n }\n\n if (input.status && summary.status !== input.status) {\n continue;\n }\n\n if (\n pattern &&\n !searchable.some((value) => value.toLowerCase().includes(pattern))\n ) {\n continue;\n }\n\n if (regex && !searchable.some((value) => regex.test(value))) {\n continue;\n }\n\n summaries.push(summary);\n }\n\n return summaries.sort((left, right) =>\n left.transactionId.localeCompare(right.transactionId),\n );\n });\n\nexport class ArtifactStore extends Effect.Service<ArtifactStore>()(\n 'ArtifactStore',\n {\n sync: () => ({\n createTransactionArtifactDirectory,\n findTransactionArtifactOption,\n findTransactionArtifact,\n listTransactionArtifacts,\n writeSubmitResult,\n writeCanonicalSignatures,\n }),\n },\n) {}\n","import { ed25519 } from '@noble/curves/ed25519';\nimport { Data, Effect, Schema } from 'effect';\nimport { type SignatureImportResult, normalizeSignatures } from './artifacts';\nimport {\n BatchSignatureFileSchema,\n PLACEHOLDER_PUBLIC_KEY_HEX,\n PLACEHOLDER_SIGNATURE_HEX,\n type SignatureEntry,\n type SignatureFile,\n SignatureFileSchema,\n type SignatureTemplate,\n SignatureTemplateSchema,\n type SigningRequest,\n} from './schemas';\n\nexport class SignatureImportError extends Data.TaggedError(\n 'SignatureImportError',\n)<{\n code:\n | 'INVALID_SIGNATURE_FILE'\n | 'UNKNOWN_SIGNING_REQUEST'\n | 'PLACEHOLDER_VALUE'\n | 'INVALID_SIGNATURE';\n reason: unknown;\n}> {}\n\ntype ImportableSignatureFile = SignatureFile | SignatureTemplate | unknown;\n\nconst scopeKey = (scope: SignatureEntry['scope']) =>\n scope.kind === 'subintent' ? `subintent:${scope.subintentId}` : scope.kind;\n\nconst requestIdentity = (input: {\n transactionId: string;\n scope: SignatureEntry['scope'];\n account: string | null;\n hash: SignatureEntry['hash'];\n}) =>\n [\n input.transactionId,\n scopeKey(input.scope),\n input.account ?? '',\n input.hash.id ?? '',\n input.hash.hex,\n ].join('|');\n\nconst templateToSignatureEntry = (\n template: SignatureTemplate,\n): SignatureEntry => ({\n scope: template.scope,\n account: template.account,\n hash: template.hash,\n signingRequestPath: template.signingRequestPath,\n publicKey: template.publicKey as SignatureEntry['publicKey'],\n signature: template.signature as SignatureEntry['signature'],\n});\n\nconst decodeImportableFile = (file: ImportableSignatureFile) =>\n Effect.gen(function* () {\n if (typeof file !== 'object' || file === null || !('type' in file)) {\n return yield* new SignatureImportError({\n code: 'INVALID_SIGNATURE_FILE',\n reason: 'Workflow file type is missing',\n });\n }\n\n if (file.type === 'signatureTemplate') {\n const template = yield* Schema.decodeUnknown(SignatureTemplateSchema)(\n file,\n ).pipe(\n Effect.mapError(\n (reason) =>\n new SignatureImportError({\n code: 'INVALID_SIGNATURE_FILE',\n reason,\n }),\n ),\n );\n return {\n transactionId: template.transactionId,\n signatures: [templateToSignatureEntry(template)],\n };\n }\n\n if (file.type === 'batchSignatureFile') {\n const batch = yield* Schema.decodeUnknown(BatchSignatureFileSchema)(\n file,\n ).pipe(\n Effect.mapError(\n (reason) =>\n new SignatureImportError({\n code: 'INVALID_SIGNATURE_FILE',\n reason,\n }),\n ),\n );\n return {\n transactionId: null,\n signatures: batch.signatures.flatMap((item) => item.signatures),\n };\n }\n\n const signatureFile = yield* Schema.decodeUnknown(SignatureFileSchema)(\n file,\n ).pipe(\n Effect.mapError(\n (reason) =>\n new SignatureImportError({\n code: 'INVALID_SIGNATURE_FILE',\n reason,\n }),\n ),\n );\n return signatureFile;\n });\n\nconst rejectPlaceholders = (entry: SignatureEntry) => {\n if (entry.publicKey.hex === PLACEHOLDER_PUBLIC_KEY_HEX) {\n return new SignatureImportError({\n code: 'PLACEHOLDER_VALUE',\n reason: `publicKey.hex is still a placeholder for ${scopeKey(entry.scope)}${entry.signingRequestPath ? ` at ${entry.signingRequestPath}` : ''}`,\n });\n }\n\n if (entry.signature.hex === PLACEHOLDER_SIGNATURE_HEX) {\n return new SignatureImportError({\n code: 'PLACEHOLDER_VALUE',\n reason: `signature.hex is still a placeholder for ${scopeKey(entry.scope)}${entry.signingRequestPath ? ` at ${entry.signingRequestPath}` : ''}`,\n });\n }\n};\n\nconst verifySignature = (entry: SignatureEntry) => {\n const verified = ed25519.verify(\n Buffer.from(entry.signature.hex, 'hex'),\n Buffer.from(entry.hash.hex, 'hex'),\n Buffer.from(entry.publicKey.hex, 'hex'),\n );\n\n if (!verified) {\n return new SignatureImportError({\n code: 'INVALID_SIGNATURE',\n reason: entry,\n });\n }\n};\n\nexport const importSignatures = (input: {\n transactionId: string;\n generatedRequests: SigningRequest[];\n existing: readonly SignatureEntry[];\n files: ImportableSignatureFile[];\n}): Effect.Effect<SignatureImportResult, SignatureImportError> =>\n Effect.gen(function* () {\n const knownRequests = new Set(\n input.generatedRequests.map((request) =>\n requestIdentity({\n transactionId: request.transactionId,\n scope: request.scope,\n account: request.account,\n hash: request.hash,\n }),\n ),\n );\n const imported: SignatureEntry[] = [];\n\n for (const file of input.files) {\n const decoded = yield* decodeImportableFile(file);\n\n if (\n decoded.transactionId &&\n decoded.transactionId !== input.transactionId\n ) {\n return yield* new SignatureImportError({\n code: 'UNKNOWN_SIGNING_REQUEST',\n reason: decoded.transactionId,\n });\n }\n\n for (const signature of decoded.signatures) {\n const placeholderError = rejectPlaceholders(signature);\n if (placeholderError) {\n return yield* placeholderError;\n }\n\n const identity = requestIdentity({\n transactionId: input.transactionId,\n scope: signature.scope,\n account: signature.account,\n hash: signature.hash,\n });\n\n if (!knownRequests.has(identity)) {\n return yield* new SignatureImportError({\n code: 'UNKNOWN_SIGNING_REQUEST',\n reason: identity,\n });\n }\n\n const verificationError = verifySignature(signature);\n if (verificationError) {\n return yield* verificationError;\n }\n\n imported.push(signature);\n }\n }\n\n return normalizeSignatures({\n transactionId: input.transactionId,\n existing: input.existing,\n imported,\n });\n });\n\nexport class SignatureImporter extends Effect.Service<SignatureImporter>()(\n 'SignatureImporter',\n {\n sync: () => ({\n importSignatures,\n }),\n },\n) {}\n","import { join } from 'node:path';\nimport { Effect, Schema } from 'effect';\nimport {\n type SignatureImportResult,\n findTransactionArtifact,\n writeCanonicalSignatures,\n} from './artifacts';\nimport { readJsonFile } from './platformIo';\nimport {\n PreparedTransactionSchema,\n type SignatureEntry,\n SignatureFileSchema,\n type SigningRequest,\n SigningRequestSchema,\n} from './schemas';\nimport { importSignatures } from './signatureImport';\n\nexport type AddSignaturesResult = SignatureImportResult & {\n signaturesPath: string;\n complete: boolean;\n};\n\nconst readJson = (path: string) => readJsonFile(path, (reason) => reason);\n\nconst readPrepared = (artifactPath: string) =>\n readJson(join(artifactPath, 'prepared.json')).pipe(\n Effect.flatMap(Schema.decodeUnknown(PreparedTransactionSchema)),\n );\n\nconst readSigningRequest = (artifactPath: string, requestPath: string) =>\n readJson(join(artifactPath, requestPath)).pipe(\n Effect.flatMap(Schema.decodeUnknown(SigningRequestSchema)),\n );\n\nconst readExistingSignatures = (artifactPath: string) =>\n readJson(join(artifactPath, 'signatures.json')).pipe(\n Effect.flatMap(Schema.decodeUnknown(SignatureFileSchema)),\n Effect.map((file) => file.signatures),\n Effect.catchAll(() => Effect.succeed([] as SignatureEntry[])),\n );\n\nconst requestComplete = (\n request: SigningRequest,\n signatures: readonly SignatureEntry[],\n) =>\n signatures.some(\n (signature) =>\n signature.scope.kind === request.scope.kind &&\n (signature.scope.kind !== 'subintent' ||\n (request.scope.kind === 'subintent' &&\n signature.scope.subintentId === request.scope.subintentId)) &&\n signature.account === request.account &&\n signature.hash.hex === request.hash.hex &&\n signature.hash.id === request.hash.id,\n );\n\nexport const addSignaturesToArtifact = (input: {\n artifactRoot: string;\n transactionId: string;\n signatureFilePaths: string[];\n}): Effect.Effect<AddSignaturesResult, unknown> =>\n Effect.gen(function* () {\n const artifactPath = yield* findTransactionArtifact(input);\n const prepared = yield* readPrepared(artifactPath);\n const generatedRequests = yield* Effect.all(\n prepared.signingRequests.map((requestPath) =>\n readSigningRequest(artifactPath, requestPath),\n ),\n );\n const existing = yield* readExistingSignatures(artifactPath);\n const files = yield* Effect.all(\n input.signatureFilePaths.map((signatureFilePath) =>\n readJson(signatureFilePath),\n ),\n );\n const importResult = yield* importSignatures({\n transactionId: input.transactionId,\n generatedRequests,\n existing,\n files,\n });\n const signaturesPath = yield* writeCanonicalSignatures({\n artifactPath,\n transactionId: input.transactionId,\n existing: [],\n imported: importResult.signatureFile.signatures,\n });\n const complete = generatedRequests.every((request) =>\n requestComplete(request, importResult.signatureFile.signatures),\n );\n\n return {\n ...importResult,\n signaturesPath,\n complete,\n };\n });\n\nexport class AddSignaturesWorkflow extends Effect.Service<AddSignaturesWorkflow>()(\n 'AddSignaturesWorkflow',\n {\n sync: () => ({\n addSignaturesToArtifact,\n }),\n },\n) {}\n","import { homedir } from 'node:os';\nimport { dirname, join, parse, resolve } from 'node:path';\nimport { Data, Effect, Schema } from 'effect';\nimport { fileExists, readJsonFile } from './platformIo';\nimport {\n type ArtifactScope,\n ArtifactScopeSchema,\n type Network,\n NetworkSchema,\n PublicKeySchema,\n} from './schemas';\n\nexport type { ArtifactScope, Network };\n\nconst RdxConfigNotarySchema = Schema.Struct({\n publicKey: PublicKeySchema,\n notaryIsSignatory: Schema.optional(Schema.Boolean),\n});\n\nexport const RdxConfigFileSchema = Schema.Struct({\n network: Schema.optional(NetworkSchema),\n gatewayBaseUrl: Schema.optional(Schema.String),\n artifactScope: Schema.optional(ArtifactScopeSchema),\n artifactDirectory: Schema.optional(Schema.String),\n notary: Schema.optional(RdxConfigNotarySchema),\n});\n\nexport type RdxConfigFile = typeof RdxConfigFileSchema.Type;\n\nexport const ResolvedRdxConfigSchema = Schema.Struct({\n network: NetworkSchema,\n gatewayBaseUrl: Schema.optional(Schema.String),\n artifactScope: ArtifactScopeSchema,\n artifactDirectory: Schema.optional(Schema.String),\n artifactRoot: Schema.String,\n notary: Schema.optional(RdxConfigNotarySchema),\n projectConfigPath: Schema.optional(Schema.String),\n globalConfigPath: Schema.optional(Schema.String),\n});\n\nexport type ResolvedRdxConfig = typeof ResolvedRdxConfigSchema.Type;\n\nexport class ConfigResolutionError extends Data.TaggedError(\n 'ConfigResolutionError',\n)<{\n path: string;\n reason: unknown;\n}> {}\n\nconst defaultConfig = {\n network: NetworkSchema.make('mainnet'),\n artifactScope: ArtifactScopeSchema.make('local'),\n} satisfies Pick<ResolvedRdxConfig, 'network' | 'artifactScope'>;\n\nconst findNearestProjectConfig = (\n cwd: string,\n): Effect.Effect<string | undefined> =>\n Effect.gen(function* () {\n let directory = resolve(cwd);\n const root = parse(directory).root;\n\n while (true) {\n const candidate = join(directory, '.rdxconfig.json');\n if (yield* fileExists(candidate)) {\n return candidate;\n }\n\n if (directory === root) {\n return undefined;\n }\n\n directory = dirname(directory);\n }\n });\n\nconst readConfigFile = (path: string) =>\n readJsonFile(\n path,\n (reason) => new ConfigResolutionError({ path, reason }),\n ).pipe(\n Effect.flatMap((value) =>\n Schema.decodeUnknown(RdxConfigFileSchema)(value).pipe(\n Effect.mapError(\n (reason) => new ConfigResolutionError({ path, reason }),\n ),\n ),\n ),\n );\n\nconst maybeReadConfigFile = (path: string | undefined) =>\n path === undefined\n ? Effect.succeed(undefined)\n : readConfigFile(path).pipe(\n Effect.map((config) => [path, config] as const),\n );\n\nconst resolveArtifactRoot = (input: {\n cwd: string;\n home: string;\n config: Pick<ResolvedRdxConfig, 'artifactScope' | 'artifactDirectory'>;\n}) => {\n if (input.config.artifactDirectory) {\n return resolve(input.cwd, input.config.artifactDirectory);\n }\n\n if (input.config.artifactScope === 'global') {\n return join(input.home, '.rdx', 'transactions');\n }\n\n return join(input.cwd, '.rdx', 'transactions');\n};\n\nexport const resolveRdxConfig = (input: {\n cwd: string;\n home?: string;\n overrides?: RdxConfigFile;\n}): Effect.Effect<ResolvedRdxConfig, ConfigResolutionError> =>\n Effect.gen(function* () {\n const home = input.home ?? homedir();\n const projectConfigPath = yield* findNearestProjectConfig(input.cwd);\n const globalConfigPath = join(home, '.rdx', 'config.json');\n\n const [globalConfig, projectConfig] = yield* Effect.all([\n fileExists(globalConfigPath).pipe(\n Effect.flatMap((exists) =>\n exists\n ? maybeReadConfigFile(globalConfigPath)\n : Effect.succeed(undefined),\n ),\n ),\n maybeReadConfigFile(projectConfigPath),\n ]);\n\n const config = {\n ...defaultConfig,\n ...(globalConfig?.[1] ?? {}),\n ...(projectConfig?.[1] ?? {}),\n ...(input.overrides ?? {}),\n };\n\n return {\n ...config,\n artifactRoot: resolveArtifactRoot({\n cwd: input.cwd,\n home,\n config,\n }),\n projectConfigPath: projectConfig?.[0],\n globalConfigPath: globalConfig?.[0],\n };\n });\n\nexport class ConfigResolver extends Effect.Service<ConfigResolver>()(\n 'ConfigResolver',\n {\n sync: () => ({\n resolve: resolveRdxConfig,\n }),\n },\n) {}\n","export const llmGuide = `# rdx Agent Guide\n\nUse \\`rdx\\` to prepare, inspect, sign-orchestrate, notarize, submit, and track Radix Transaction Manifest V2 workflows from files. It is built for agents: workflow commands are non-interactive and print JSON by default.\n\n## Core Rules\n\n- Run \\`rdx config show\\` before \\`tx prepare\\` to verify the resolved network and artifact root.\n- After \\`tx prepare\\`, check \\`startEpochInclusive\\` and \\`endEpochExclusive\\` in the command JSON before collecting signatures.\n- \\`rdx\\` defaults to Mainnet. Prepare on the intended network; do not reuse prepared artifacts across networks.\n- A transaction lifecycle is network-bound from \\`tx prepare\\` through signing, notarization, submission, and status.\n- \\`rdx\\` never stores, accepts, or derives private keys.\n- Participants sign only the requested \\`hash.hex\\` outside \\`rdx\\` and return a filled signature template or signature file.\n- v1 CLI workflow files support Ed25519 only. Secp256k1 and other curves are rejected.\n- Use \\`rdx account derive --public-key <hex>\\` to derive a virtual account address offline from an Ed25519 public key.\n- Do not edit signing request files. Fill signature templates or create signature files instead.\n- Do not rerun \\`tx prepare\\` expecting overwrite. Existing transaction artifact directories are protected.\n- Do not submit until intent, subintent, notary-signatory, and notary signatures required by the artifacts are complete.\n- Use \\`tx path\\` and \\`tx list\\` before manually scanning artifact directories.\n\n## Discover Live Inputs\n\n\\`\\`\\`sh\nrdx config show\nrdx template print subintents\nrdx template print signing-request\nrdx template print signature-template\nrdx template print signature-file\nrdx --help\nrdx tx prepare --help\n\\`\\`\\`\n\nUse template output for workflow file shapes. Do not rely on copied config schemas; use \\`rdx config show\\` for resolved configuration.\n\n## Transaction Lifecycle\n\n1. Prepare: compile the root manifest plus optional direct child subintents, preview, and write immutable transaction artifacts.\n2. Inspect: read command JSON output, \\`prepared.json\\`, copied manifests, signing requests, and templates.\n3. Intent signing: each participant signs the relevant request \\`hash.hex\\` out of band.\n4. Import signatures: use \\`tx add-signatures\\` one or more times. Imports are normalized into \\`signatures.json\\`.\n5. Notarize: after intent/subintent signatures are locally complete, \\`tx notarize\\` previews the signed intent and creates the notary signing request.\n6. Notary signing: the notary signs the notary request \\`hash.hex\\` out of band.\n7. Import notary signature: use \\`tx add-signatures\\` again.\n8. Submit: \\`tx submit\\` compiles from prepared artifacts plus canonical signatures, writes the submitted payload, broadcasts, polls, and records the result.\n9. Track: use \\`tx status\\`, \\`tx path\\`, and \\`tx list\\` to inspect local and Gateway state.\n\n## Stable Artifact Mental Model\n\nUse command JSON outputs for exact paths. Common artifact files include:\n\n- \\`prepared.json\\`: canonical prepared metadata and signing request/template path index.\n- \\`transactionIntent.json\\`: encoded Transaction Intent V2 used by later commands.\n- \\`staticAnalysis.json\\`: full static analysis output.\n- \\`rootManifest.rtm\\`: copied root manifest.\n- \\`subintents/<subintentId>.rtm\\`: copied direct child subintent manifests.\n- \\`signatures.json\\`: canonical normalized signature state.\n- \\`notarizedTransaction.hex\\`: exact submitted payload.\n- \\`submitResult.json\\`: submit attempts and network status results.\n\n## Single-party Example\n\n\\`\\`\\`sh\nrdx config show\nrdx template print signature-file\nrdx tx prepare --manifest ./tx/root.rtm --notary-file ./tx/notary.json\nrdx tx path txid_example\nrdx tx add-signatures txid_example --file ./tx/signatures/intent-signature.json\nrdx tx notarize txid_example\nrdx tx add-signatures txid_example --file ./tx/signatures/notary-signature.json\nrdx tx submit txid_example\nrdx tx status txid_example\n\\`\\`\\`\n\nAfter \\`tx prepare\\`, inspect the JSON result for \\`transactionId\\`, \\`artifactPath\\`, \\`preparedPath\\`, \\`startEpochInclusive\\`, \\`endEpochExclusive\\`, and generated \\`signatureTemplatePaths\\`. Fill the generated templates by replacing placeholder Ed25519 public key and signature values. Sign only each request's \\`hash.hex\\`.\n\n## Multi-party And Subintent Example\n\n\\`\\`\\`sh\nrdx config show\nrdx template print subintents\nrdx tx prepare --manifest ./tx/root.rtm --subintents ./tx/subintents.json --notary-file ./tx/notary.json\nrdx tx add-signatures txid_example --file ./party-a/root-signature.json\nrdx tx add-signatures txid_example --file ./party-b/child-one-signature.json\nrdx tx add-signatures txid_example --file ./party-c/batch-signatures.json\nrdx tx notarize txid_example\nrdx tx add-signatures txid_example --file ./notary/notary-signature.json\nrdx tx submit txid_example\n\\`\\`\\`\n\nSubintent IDs in \\`subintents.json\\` are also Radix \\`NamedIntent\\` values referenced by root \\`YIELD_TO_CHILD\\` instructions. v1 supports root plus direct child subintents only. Multiple parties can return signatures asynchronously; repeat \\`tx add-signatures\\` until local completeness allows \\`tx notarize\\` and later \\`tx submit\\`.\n\n## Command Examples\n\n\\`\\`\\`sh\nrdx config show\nrdx account derive --public-key 1111111111111111111111111111111111111111111111111111111111111111\nrdx account show account_rdx1...\nrdx account fungibles account_rdx1...\nrdx account nfts account_rdx1...\nrdx tx history account_rdx1... --limit 10\nrdx tx prepare --manifest ./tx/root.rtm --notary-file ./tx/notary.json\nrdx tx prepare --manifest ./tx/root.rtm --subintents ./tx/subintents.json --notary-file ./tx/notary.json\nrdx tx add-signatures txid_example --file ./signature.json\nrdx tx add-signatures txid_example --file ./signature-a.json --file ./signature-batch.json\nrdx tx notarize txid_example\nrdx tx submit txid_example\nrdx tx status txid_example\nrdx tx status txid_example --read-only\nrdx tx path txid_example\nrdx tx list\nrdx tx list --pattern root.rtm\nrdx tx list --regex '^txid_' --network mainnet --status prepared\nrdx tx list --with-network-status\nrdx tx list --with-network-status --update-network-status\nrdx template print subintents\nrdx template print signing-request\nrdx template print signature-template\nrdx template print signature-file\n\\`\\`\\`\n\n\\`account derive\\` uses the resolved config network and does not query Gateway. It returns the derived virtual account address, not proof that the account exists on-ledger.\n\n## Troubleshooting\n\n- Workflow command failures print structured JSON errors with \\`type\\`, \\`code\\`, and \\`message\\`.\n- Gateway failures include response details in \\`message\\` when the Gateway returns a structured error body.\n- Inspect \\`code\\` and \\`message\\` first; avoid parsing human help text.\n- Use \\`rdx tx status\\`, \\`rdx tx list\\`, and \\`rdx tx path\\` before reading files manually.\n- If the network is wrong, prepare a new transaction for the intended network.\n- If a placeholder public key or signature remains in a file, replace it with a real Ed25519 value produced outside \\`rdx\\`.\n`;\n","import { Effect } from 'effect';\nimport { renderJson } from './json';\n\nconst parseResponseBody = (text: string): unknown => {\n if (!text) {\n return undefined;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n};\n\nexport const gatewayErrorMessage = (\n label: string,\n response: Response,\n): Effect.Effect<string> =>\n Effect.gen(function* () {\n const text = yield* Effect.promise(() => response.text());\n const body = parseResponseBody(text);\n const detail = body === undefined ? '' : `: ${renderJson(body)}`;\n\n return `${label} failed with status ${response.status}${detail}`;\n });\n","import { dirname, join } from 'node:path';\nimport {\n Convert,\n PublicKey,\n RadixEngineToolkit,\n SignatureWithPublicKey,\n type TransactionIntentV2,\n TransactionV2Builder,\n} from '@steleaio/radix-engine-toolkit';\nimport { Data, Effect, Schema } from 'effect';\nimport { findTransactionArtifact } from './artifacts';\nimport type { ResolvedRdxConfig } from './config';\nimport { gatewayErrorMessage } from './gatewayHttp';\nimport {\n fileExists,\n makeDirectory,\n readJsonFile,\n writeJsonFile,\n} from './platformIo';\nimport {\n PLACEHOLDER_SIGNATURE_HEX,\n PreparedTransactionSchema,\n type SignatureEntry,\n SignatureFileSchema,\n type SignatureTemplate,\n type SigningRequest,\n SigningRequestSchema,\n} from './schemas';\n\nexport class NotarizeError extends Data.TaggedError('NotarizeError')<{\n code:\n | 'INCOMPLETE_SIGNATURES'\n | 'MISSING_SIGNATURE_FILE'\n | 'MISSING_NOTARY_PUBLIC_KEY'\n | 'PREVIEW_FAILED'\n | 'READ_FAILED'\n | 'WRITE_FAILED';\n path?: string;\n reason?: unknown;\n}> {}\n\nexport type NotarizeTransactionResult = {\n transactionId: string;\n artifactPath: string;\n signedTransactionIntentPath: string;\n notarySigningRequestPath: string;\n notarySignatureTemplatePath: string;\n};\n\ntype StoredTransactionIntentV2 = {\n transactionHeader: {\n notaryPublicKey: string;\n notaryIsSignatory: boolean;\n tipBasisPoints: number;\n };\n rootIntentCore: StoredIntentCoreV2;\n nonRootSubintents: Array<{ intentCore: StoredIntentCoreV2 }>;\n};\n\ntype StoredIntentCoreV2 = {\n header: TransactionIntentV2['rootIntentCore']['header'];\n instructions: string;\n blobs: [];\n message: TransactionIntentV2['rootIntentCore']['message'];\n children: string[];\n};\n\ntype StoredTransactionIntentFile = {\n encoded: {\n kind: 'transactionIntentV2';\n value: StoredTransactionIntentV2;\n };\n};\n\nconst readJson = (path: string) =>\n readJsonFile(\n path,\n (reason) => new NotarizeError({ code: 'READ_FAILED', path, reason }),\n );\n\nconst readSignatureFile = (input: {\n artifactPath: string;\n transactionId: string;\n requiredSignatureCount: number;\n}) =>\n Effect.gen(function* () {\n const path = join(input.artifactPath, 'signatures.json');\n const exists = yield* fileExists(path);\n\n if (!exists && input.requiredSignatureCount === 0) {\n return SignatureFileSchema.make({\n type: 'signatureFile',\n version: 1,\n transactionId: input.transactionId,\n signatures: [],\n });\n }\n\n if (!exists) {\n return yield* new NotarizeError({\n code: 'MISSING_SIGNATURE_FILE',\n path,\n reason:\n 'Run `rdx tx add-signatures <transactionId> --file <signature-file>` before `rdx tx notarize`.',\n });\n }\n\n return yield* readJson(path).pipe(\n Effect.flatMap(Schema.decodeUnknown(SignatureFileSchema)),\n );\n });\n\nconst writeJson = (path: string, value: unknown) =>\n Effect.gen(function* () {\n yield* makeDirectory(\n dirname(path),\n { recursive: true },\n (reason) => new NotarizeError({ code: 'WRITE_FAILED', path, reason }),\n );\n yield* writeJsonFile(\n path,\n value,\n (reason) => new NotarizeError({ code: 'WRITE_FAILED', path, reason }),\n );\n });\n\nconst requestComplete = (\n request: SigningRequest,\n signatures: readonly SignatureEntry[],\n) =>\n signatures.some(\n (signature) =>\n signature.scope.kind === request.scope.kind &&\n (signature.scope.kind !== 'subintent' ||\n (request.scope.kind === 'subintent' &&\n signature.scope.subintentId === request.scope.subintentId)) &&\n signature.account === request.account &&\n signature.hash.hex === request.hash.hex &&\n signature.hash.id === request.hash.id,\n );\n\nconst toTransactionIntent = (\n stored: StoredTransactionIntentV2,\n): TransactionIntentV2 => ({\n transactionHeader: {\n notaryPublicKey: new PublicKey.Ed25519(\n stored.transactionHeader.notaryPublicKey,\n ),\n notaryIsSignatory: stored.transactionHeader.notaryIsSignatory,\n tipBasisPoints: stored.transactionHeader.tipBasisPoints,\n },\n rootIntentCore: {\n header: stored.rootIntentCore.header,\n instructions: stored.rootIntentCore.instructions,\n blobs: [],\n message: stored.rootIntentCore.message,\n children: stored.rootIntentCore.children.map(\n Convert.HexString.toUint8Array,\n ),\n },\n nonRootSubintents: stored.nonRootSubintents.map((subintent) => ({\n intentCore: {\n header: subintent.intentCore.header,\n instructions: subintent.intentCore.instructions,\n blobs: [],\n message: subintent.intentCore.message,\n children: subintent.intentCore.children.map(\n Convert.HexString.toUint8Array,\n ),\n },\n })),\n});\n\nconst toSignatureWithPublicKey = (signature: SignatureEntry) =>\n new SignatureWithPublicKey.Ed25519(\n signature.signature.hex,\n signature.publicKey.hex,\n );\n\nconst rootIntentSignatures = (signatures: readonly SignatureEntry[]) =>\n signatures\n .filter(\n (signature) =>\n signature.scope.kind === 'rootIntent' ||\n signature.scope.kind === 'notarySignatory',\n )\n .map(toSignatureWithPublicKey);\n\nconst nonRootSubintentSignatures = (\n signatures: readonly SignatureEntry[],\n subintentOrder: readonly string[],\n) =>\n subintentOrder.map((subintentId) =>\n signatures\n .filter(\n (signature) =>\n signature.scope.kind === 'subintent' &&\n signature.scope.subintentId === subintentId,\n )\n .map(toSignatureWithPublicKey),\n );\n\nconst rootSignerPublicKeys = (signatures: readonly SignatureEntry[]) =>\n signatures\n .filter(\n (signature) =>\n signature.scope.kind === 'rootIntent' ||\n signature.scope.kind === 'notarySignatory',\n )\n .map((signature) => new PublicKey.Ed25519(signature.publicKey.hex));\n\nconst nonRootSignerPublicKeys = (\n signatures: readonly SignatureEntry[],\n subintentOrder: readonly string[],\n) =>\n subintentOrder.map((subintentId) =>\n signatures\n .filter(\n (signature) =>\n signature.scope.kind === 'subintent' &&\n signature.scope.subintentId === subintentId,\n )\n .map((signature) => new PublicKey.Ed25519(signature.publicKey.hex)),\n );\n\nconst buildNotarizePreviewHex = (input: {\n transactionIntent: TransactionIntentV2;\n signatures: readonly SignatureEntry[];\n subintentOrder: readonly string[];\n}) =>\n Effect.gen(function* () {\n const builder = yield* Effect.tryPromise(() => TransactionV2Builder.new());\n let builderStep = builder\n .header(input.transactionIntent.transactionHeader)\n .rootIntentCore(input.transactionIntent.rootIntentCore);\n const subintentSignatures = nonRootSubintentSignatures(\n input.signatures,\n input.subintentOrder,\n );\n\n for (\n let index = 0;\n index < input.transactionIntent.nonRootSubintents.length;\n index += 1\n ) {\n builderStep = builderStep.addSignedSubintent(\n input.transactionIntent.nonRootSubintents[index],\n subintentSignatures[index] ?? [],\n );\n }\n\n const previewTransaction = builderStep.buildPreviewTransaction({\n rootSignerPublicKeys: rootSignerPublicKeys(input.signatures),\n nonRootSubintentSignerPublicKeys: nonRootSignerPublicKeys(\n input.signatures,\n input.subintentOrder,\n ),\n });\n const compiled = yield* Effect.tryPromise(() =>\n RadixEngineToolkit.PreviewTransactionV2.compile(previewTransaction),\n );\n return Convert.Uint8Array.toHexString(compiled);\n });\n\nconst gatewayBaseUrl = (network: ResolvedRdxConfig['network']) =>\n network === 'stokenet'\n ? 'https://stokenet.radixdlt.com'\n : 'https://mainnet.radixdlt.com';\n\nexport const gatewayNotarizePreview = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n previewTransactionHex: string;\n}) =>\n Effect.tryPromise({\n try: async () => {\n const response = await fetch(\n `${input.config.gatewayBaseUrl ?? gatewayBaseUrl(input.config.network)}/transaction/preview-v2`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n preview_transaction: {\n type: 'Compiled',\n preview_transaction_hex: input.previewTransactionHex,\n },\n flags: {\n assume_all_signature_proofs: false,\n skip_epoch_check: true,\n use_free_credit: true,\n },\n opt_ins: {\n core_api_receipt: false,\n },\n }),\n },\n );\n if (!response.ok) {\n throw new Error(\n await Effect.runPromise(\n gatewayErrorMessage('Gateway preview', response),\n ),\n );\n }\n const body = (await response.json()) as {\n receipt?: { status?: string; error_message?: string };\n };\n if (body.receipt && body.receipt.status !== 'Succeeded') {\n throw new Error(body.receipt.error_message ?? 'Preview failed');\n }\n },\n catch: (reason) => new NotarizeError({ code: 'PREVIEW_FAILED', reason }),\n });\n\nexport const notarizeTransactionArtifact = (input: {\n artifactRoot: string;\n transactionId: string;\n previewSignedTransactionIntent?: (\n previewTransactionHex: string,\n ) => Effect.Effect<void, unknown>;\n}): Effect.Effect<NotarizeTransactionResult, unknown> =>\n Effect.gen(function* () {\n const artifactPath = yield* findTransactionArtifact(input);\n const preparedPath = join(artifactPath, 'prepared.json');\n const prepared = yield* readJson(preparedPath).pipe(\n Effect.flatMap(Schema.decodeUnknown(PreparedTransactionSchema)),\n );\n\n if (!prepared.notaryPublicKey) {\n return yield* new NotarizeError({\n code: 'MISSING_NOTARY_PUBLIC_KEY',\n path: preparedPath,\n });\n }\n\n const generatedRequests = yield* Effect.all(\n prepared.signingRequests.map((requestPath) =>\n readJson(join(artifactPath, requestPath)).pipe(\n Effect.flatMap(Schema.decodeUnknown(SigningRequestSchema)),\n ),\n ),\n );\n const requestsRequiringSignatures = generatedRequests.filter(\n (request) => request.scope.kind !== 'notary',\n );\n const signatureFile = yield* readSignatureFile({\n artifactPath,\n transactionId: prepared.transactionId,\n requiredSignatureCount: requestsRequiringSignatures.length,\n });\n\n const missingRequest = requestsRequiringSignatures.find(\n (request) => !requestComplete(request, signatureFile.signatures),\n );\n if (missingRequest) {\n const nextCommand = `rdx tx add-signatures ${prepared.transactionId} --file <signature-file>`;\n return yield* new NotarizeError({\n code: 'INCOMPLETE_SIGNATURES',\n path:\n missingRequest.signingRequestPath ??\n join(artifactPath, 'signatures.json'),\n reason: `Missing signature for ${missingRequest.scope.kind}${missingRequest.account ? ` (${missingRequest.account})` : ''}. Next: ${nextCommand}`,\n });\n }\n\n const storedIntentFile = yield* readJson(\n join(artifactPath, prepared.transactionIntentPath),\n ).pipe(Effect.map((value) => value as StoredTransactionIntentFile));\n const transactionIntent = toTransactionIntent(\n storedIntentFile.encoded.value,\n );\n const signedIntent = {\n transactionIntent,\n transactionIntentSignatures: rootIntentSignatures(\n signatureFile.signatures,\n ),\n nonRootSubintentSignatures: nonRootSubintentSignatures(\n signatureFile.signatures,\n prepared.subintentOrder,\n ),\n };\n const signedIntentHash = yield* Effect.tryPromise({\n try: () =>\n RadixEngineToolkit.SignedTransactionIntentV2.hash(signedIntent),\n catch: (reason) =>\n new NotarizeError({\n code: 'READ_FAILED',\n path: prepared.transactionIntentPath,\n reason,\n }),\n });\n const signedIntentCompiled = yield* Effect.tryPromise({\n try: () =>\n RadixEngineToolkit.SignedTransactionIntentV2.compile(signedIntent),\n catch: (reason) =>\n new NotarizeError({\n code: 'READ_FAILED',\n path: prepared.transactionIntentPath,\n reason,\n }),\n });\n if (input.previewSignedTransactionIntent) {\n const previewTransactionHex = yield* buildNotarizePreviewHex({\n transactionIntent,\n signatures: signatureFile.signatures,\n subintentOrder: prepared.subintentOrder,\n });\n yield* input.previewSignedTransactionIntent(previewTransactionHex);\n }\n\n const hash = {\n id: signedIntentHash.id,\n hex: Convert.Uint8Array.toHexString(signedIntentHash.hash),\n };\n const requestPath = 'signing-requests/notary.json';\n const templatePath = 'signature-templates/notary.json';\n const request: SigningRequest = {\n type: 'signingRequest',\n version: 1,\n transactionId: prepared.transactionId,\n scope: { kind: 'notary' },\n account: null,\n hash,\n signingRequestPath: requestPath,\n };\n const template: SignatureTemplate = {\n type: 'signatureTemplate',\n version: 1,\n transactionId: prepared.transactionId,\n scope: { kind: 'notary' },\n account: null,\n hash,\n signingRequestPath: requestPath,\n publicKey: prepared.notaryPublicKey,\n signature: {\n curve: 'Ed25519',\n hex: PLACEHOLDER_SIGNATURE_HEX,\n },\n };\n\n const notarySigningRequestPath = join(artifactPath, requestPath);\n const notarySignatureTemplatePath = join(artifactPath, templatePath);\n const signedTransactionIntentPath = join(\n artifactPath,\n 'signedTransactionIntent.json',\n );\n yield* writeJson(signedTransactionIntentPath, {\n type: 'signedTransactionIntent',\n version: 1,\n transactionId: prepared.transactionId,\n encoded: {\n kind: 'signedTransactionIntentV2',\n compiledHex: Convert.Uint8Array.toHexString(signedIntentCompiled),\n },\n });\n yield* writeJson(notarySigningRequestPath, request);\n yield* writeJson(notarySignatureTemplatePath, template);\n yield* writeJson(preparedPath, {\n ...prepared,\n signingRequests: [...new Set([...prepared.signingRequests, requestPath])],\n signatureTemplates: [\n ...new Set([...prepared.signatureTemplates, templatePath]),\n ],\n });\n\n return {\n transactionId: prepared.transactionId,\n artifactPath,\n signedTransactionIntentPath,\n notarySigningRequestPath,\n notarySignatureTemplatePath,\n };\n });\n\nexport class NotarizationCoordinator extends Effect.Service<NotarizationCoordinator>()(\n 'NotarizationCoordinator',\n {\n sync: () => ({\n notarizeTransactionArtifact,\n gatewayNotarizePreview,\n }),\n },\n) {}\n","import { Effect } from 'effect';\nimport {\n PLACEHOLDER_PUBLIC_KEY_HEX,\n PLACEHOLDER_SIGNATURE_HEX,\n type SignatureTemplate,\n type SigningRequest,\n type SigningScope,\n} from './schemas';\n\nexport type SigningRequestHash = {\n id: string | null;\n hex: string;\n};\n\nexport type AuthorizationRequirements = {\n rootIntent: string[];\n subintents: Record<string, string[]>;\n};\n\nexport type GeneratedWorkflowFile<File> = {\n path: string;\n file: File;\n};\n\nexport type GeneratedSigningRequests = {\n requests: GeneratedWorkflowFile<SigningRequest>[];\n templates: GeneratedWorkflowFile<SignatureTemplate>[];\n};\n\nconst scopePath = (scope: SigningScope) => {\n switch (scope.kind) {\n case 'rootIntent':\n return 'root';\n case 'subintent':\n return `subintents/${scope.subintentId}`;\n case 'notarySignatory':\n return 'notary-signatory';\n case 'notary':\n return 'notary';\n }\n};\n\nconst workflowFilePath = (\n directory: 'signing-requests' | 'signature-templates',\n scope: SigningScope,\n account: string | null,\n) =>\n account\n ? `${directory}/${scopePath(scope)}/${account}.json`\n : `${directory}/${scopePath(scope)}.json`;\n\nconst makeRequestAndTemplate = (input: {\n transactionId: string;\n scope: SigningScope;\n account: string | null;\n hash: SigningRequestHash;\n publicKey?: SignatureTemplate['publicKey'];\n}) => {\n const requestPath = workflowFilePath(\n 'signing-requests',\n input.scope,\n input.account,\n );\n const templatePath = workflowFilePath(\n 'signature-templates',\n input.scope,\n input.account,\n );\n const request: SigningRequest = {\n type: 'signingRequest',\n version: 1,\n transactionId: input.transactionId,\n scope: input.scope,\n account: input.account,\n hash: input.hash,\n signingRequestPath: requestPath,\n };\n const template: SignatureTemplate = {\n type: 'signatureTemplate',\n version: 1,\n transactionId: input.transactionId,\n scope: input.scope,\n account: input.account,\n hash: input.hash,\n signingRequestPath: requestPath,\n publicKey: input.publicKey ?? {\n curve: 'Ed25519',\n hex: PLACEHOLDER_PUBLIC_KEY_HEX,\n },\n signature: {\n curve: 'Ed25519',\n hex: PLACEHOLDER_SIGNATURE_HEX,\n },\n };\n\n return {\n request: { path: requestPath, file: request },\n template: { path: templatePath, file: template },\n };\n};\n\nexport const generateSigningRequests = (input: {\n transactionId: string;\n rootIntentHash: SigningRequestHash;\n subintentHashes: Record<string, SigningRequestHash>;\n authorizationAnalysis: AuthorizationRequirements;\n notary: {\n publicKey: SignatureTemplate['publicKey'];\n notaryIsSignatory: boolean;\n };\n}): Effect.Effect<GeneratedSigningRequests> =>\n Effect.sync(() => {\n const requests: GeneratedWorkflowFile<SigningRequest>[] = [];\n const templates: GeneratedWorkflowFile<SignatureTemplate>[] = [];\n const push = (item: ReturnType<typeof makeRequestAndTemplate>) => {\n requests.push(item.request);\n templates.push(item.template);\n };\n\n for (const account of input.authorizationAnalysis.rootIntent) {\n push(\n makeRequestAndTemplate({\n transactionId: input.transactionId,\n scope: { kind: 'rootIntent' },\n account,\n hash: input.rootIntentHash,\n }),\n );\n }\n\n for (const [subintentId, accounts] of Object.entries(\n input.authorizationAnalysis.subintents,\n )) {\n for (const account of accounts) {\n push(\n makeRequestAndTemplate({\n transactionId: input.transactionId,\n scope: { kind: 'subintent', subintentId },\n account,\n hash: input.subintentHashes[subintentId],\n }),\n );\n }\n }\n\n if (input.notary.notaryIsSignatory) {\n push(\n makeRequestAndTemplate({\n transactionId: input.transactionId,\n scope: { kind: 'notarySignatory' },\n account: null,\n hash: input.rootIntentHash,\n publicKey: input.notary.publicKey,\n }),\n );\n }\n\n return { requests, templates };\n });\n\nexport class SigningRequestGenerator extends Effect.Service<SigningRequestGenerator>()(\n 'SigningRequestGenerator',\n {\n sync: () => ({\n generateSigningRequests,\n }),\n },\n) {}\n","import { Data, Effect } from 'effect';\n\nexport class SubintentAssemblyError extends Data.TaggedError(\n 'SubintentAssemblyError',\n)<{\n code: 'INVALID_SUBINTENT_ID' | 'MISSING_SUBINTENT' | 'UNREFERENCED_SUBINTENT';\n subintentId: string;\n}> {}\n\nexport type AssembledRootManifest = {\n rootManifest: string;\n subintentOrder: string[];\n};\n\nconst subintentIdPattern = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/;\nconst yieldToChildPattern = /YIELD_TO_CHILD\\s+NamedIntent\\(\"([^\"]+)\"\\)/g;\n\nconst uniqueInOrder = (items: string[]) => {\n const seen = new Set<string>();\n const result: string[] = [];\n\n for (const item of items) {\n if (!seen.has(item)) {\n seen.add(item);\n result.push(item);\n }\n }\n\n return result;\n};\n\nconst extractYieldedSubintentIds = (manifest: string) =>\n uniqueInOrder(\n [...manifest.matchAll(yieldToChildPattern)].map((match) => match[1]),\n );\n\nconst useChildDeclaration = (\n subintentId: string,\n intentHash: string,\n) => `USE_CHILD\n NamedIntent(\"${subintentId}\")\n Intent(\"${intentHash}\")\n;`;\n\nexport const assembleRootManifest = (input: {\n rootManifest: string;\n childIntentHashes: Record<string, string>;\n}): Effect.Effect<AssembledRootManifest, SubintentAssemblyError> =>\n Effect.gen(function* () {\n const providedIds = Object.keys(input.childIntentHashes);\n const yieldedIds = extractYieldedSubintentIds(input.rootManifest);\n\n for (const subintentId of [...providedIds, ...yieldedIds]) {\n if (!subintentIdPattern.test(subintentId)) {\n return yield* new SubintentAssemblyError({\n code: 'INVALID_SUBINTENT_ID',\n subintentId,\n });\n }\n }\n\n for (const subintentId of yieldedIds) {\n if (!(subintentId in input.childIntentHashes)) {\n return yield* new SubintentAssemblyError({\n code: 'MISSING_SUBINTENT',\n subintentId,\n });\n }\n }\n\n for (const subintentId of providedIds) {\n if (!yieldedIds.includes(subintentId)) {\n return yield* new SubintentAssemblyError({\n code: 'UNREFERENCED_SUBINTENT',\n subintentId,\n });\n }\n }\n\n if (providedIds.length === 0) {\n return {\n rootManifest: input.rootManifest,\n subintentOrder: [],\n };\n }\n\n const declarations = yieldedIds\n .map((subintentId) =>\n useChildDeclaration(subintentId, input.childIntentHashes[subintentId]),\n )\n .join('\\n\\n');\n\n return {\n rootManifest: `${declarations}\\n\\n${input.rootManifest.trimStart()}`,\n subintentOrder: yieldedIds,\n };\n });\n\nexport class SubintentAssembly extends Effect.Service<SubintentAssembly>()(\n 'SubintentAssembly',\n {\n sync: () => ({\n assembleRootManifest,\n }),\n },\n) {}\n","import { createHash } from 'node:crypto';\nimport { basename, join } from 'node:path';\nimport {\n Convert,\n PublicKey,\n RadixEngineToolkit,\n type SubintentV2,\n type TransactionIntentV2,\n TransactionV2Builder,\n} from '@steleaio/radix-engine-toolkit';\nimport { Data, Effect, Schema } from 'effect';\nimport { createTransactionArtifactDirectory } from './artifacts';\nimport type { Network, ResolvedRdxConfig } from './config';\nimport { gatewayErrorMessage } from './gatewayHttp';\nimport {\n makeDirectory,\n readFileString,\n readJsonFile,\n writeFileString,\n writeJsonFile,\n} from './platformIo';\nimport {\n type NotaryFile,\n type PreparedTransaction,\n SubintentsFileSchema,\n} from './schemas';\nimport {\n type SigningRequestHash,\n generateSigningRequests,\n} from './signingRequests';\nimport { assembleRootManifest } from './subintentAssembly';\n\nexport type PrepareTransactionResult = {\n transactionId: string;\n artifactPath: string;\n preparedPath: string;\n transactionIntentPath: string;\n staticAnalysisPath: string;\n signatureTemplatePaths: string[];\n startEpochInclusive: number;\n endEpochExclusive: number;\n};\n\nexport class PreparePreviewError extends Data.TaggedError(\n 'PreparePreviewError',\n)<{\n message?: string;\n reason?: unknown;\n}> {}\n\nconst networkId = (network: Network) => (network === 'mainnet' ? 1 : 2);\n\nconst gatewayBaseUrl = (network: Network) =>\n network === 'stokenet'\n ? 'https://stokenet.radixdlt.com'\n : 'https://mainnet.radixdlt.com';\n\ntype EpochWindow = {\n startEpochInclusive: number;\n endEpochExclusive: number;\n};\n\nconst defaultEpochWindow = (): EpochWindow => ({\n startEpochInclusive: 1,\n endEpochExclusive: 10,\n});\n\nconst epochWindowFromCurrentEpoch = (currentEpoch?: number): EpochWindow =>\n currentEpoch === undefined\n ? defaultEpochWindow()\n : {\n startEpochInclusive: currentEpoch,\n endEpochExclusive: currentEpoch + 100,\n };\n\nconst intentDiscriminator = (input: {\n manifest: string;\n network: Network;\n notaryPublicKeyHex: string;\n}) =>\n Number.parseInt(\n createHash('sha256')\n .update(input.network)\n .update('\\n')\n .update(input.notaryPublicKeyHex)\n .update('\\n')\n .update(input.manifest)\n .digest('hex')\n .slice(0, 8),\n 16,\n );\n\nconst buildTransactionIntent = (input: {\n manifest: string;\n network: Network;\n notary: Pick<NotaryFile, 'publicKey' | 'notaryIsSignatory'>;\n childHashes?: Uint8Array[];\n nonRootSubintents?: SubintentV2[];\n epochWindow?: EpochWindow;\n}) => {\n const id = networkId(input.network);\n const epochWindow = input.epochWindow ?? defaultEpochWindow();\n return {\n transactionHeader: {\n notaryPublicKey: new PublicKey.Ed25519(input.notary.publicKey.hex),\n notaryIsSignatory: input.notary.notaryIsSignatory ?? true,\n tipBasisPoints: 0,\n },\n rootIntentCore: {\n header: {\n networkId: id,\n startEpochInclusive: epochWindow.startEpochInclusive,\n endEpochExclusive: epochWindow.endEpochExclusive,\n intentDiscriminator: intentDiscriminator({\n manifest: input.manifest,\n network: input.network,\n notaryPublicKeyHex: input.notary.publicKey.hex,\n }),\n },\n instructions: input.manifest,\n blobs: [],\n message: { kind: 'None' as const },\n children: input.childHashes ?? [],\n },\n nonRootSubintents: input.nonRootSubintents ?? [],\n } satisfies TransactionIntentV2;\n};\n\nconst buildSubintent = (input: {\n subintentId: string;\n manifest: string;\n network: Network;\n notaryPublicKeyHex: string;\n epochWindow?: EpochWindow;\n}): SubintentV2 => ({\n intentCore: {\n header: {\n networkId: networkId(input.network),\n startEpochInclusive:\n input.epochWindow?.startEpochInclusive ??\n defaultEpochWindow().startEpochInclusive,\n endEpochExclusive:\n input.epochWindow?.endEpochExclusive ??\n defaultEpochWindow().endEpochExclusive,\n intentDiscriminator: intentDiscriminator({\n manifest: `${input.subintentId}\\n${input.manifest}`,\n network: input.network,\n notaryPublicKeyHex: input.notaryPublicKeyHex,\n }),\n },\n instructions: input.manifest,\n blobs: [],\n message: { kind: 'None' as const },\n children: [],\n },\n});\n\nconst encodeIntentCore = (core: TransactionIntentV2['rootIntentCore']) => ({\n header: core.header,\n instructions: core.instructions,\n blobs: [],\n message: core.message,\n children: core.children.map((child) => Convert.Uint8Array.toHexString(child)),\n});\n\nconst encodeTransactionIntent = (\n intent: TransactionIntentV2,\n compiledHex: string,\n) => ({\n kind: 'transactionIntentV2' as const,\n value: {\n transactionHeader: {\n notaryPublicKey: intent.transactionHeader.notaryPublicKey.hex(),\n notaryIsSignatory: intent.transactionHeader.notaryIsSignatory,\n tipBasisPoints: intent.transactionHeader.tipBasisPoints,\n },\n rootIntentCore: encodeIntentCore(intent.rootIntentCore),\n nonRootSubintents: intent.nonRootSubintents.map((subintent) => ({\n intentCore: encodeIntentCore(subintent.intentCore),\n })),\n },\n compiledHex,\n});\n\nconst fallbackHashManifest = (manifest: string) => {\n const hex = createHash('sha256').update(manifest).digest('hex');\n return {\n transactionId: `txid_cli_${hex.slice(0, 32)}`,\n intentHash: {\n id: `intent_cli_${hex.slice(0, 32)}`,\n hex,\n } satisfies SigningRequestHash,\n };\n};\n\nconst writeJson = (path: string, value: unknown) =>\n writeJsonFile(path, value, (reason) => reason);\n\nconst writeWorkflowFile = (\n artifactPath: string,\n relativePath: string,\n value: unknown,\n) =>\n Effect.gen(function* () {\n const path = join(artifactPath, relativePath);\n yield* makeDirectory(\n join(path, '..'),\n { recursive: true },\n (reason) => reason,\n );\n yield* writeJson(path, value);\n return path;\n });\n\nconst buildPreparePreviewHex = (intent: TransactionIntentV2) =>\n Effect.gen(function* () {\n const builder = yield* Effect.tryPromise(() => TransactionV2Builder.new());\n let builderStep = builder\n .header(intent.transactionHeader)\n .rootIntentCore(intent.rootIntentCore);\n\n for (const subintent of intent.nonRootSubintents) {\n builderStep = builderStep.addSignedSubintent(subintent, []);\n }\n\n const previewTransaction = builderStep.buildPreviewTransaction({\n rootSignerPublicKeys: [],\n nonRootSubintentSignerPublicKeys: intent.nonRootSubintents.map(() => []),\n });\n const compiled = yield* Effect.tryPromise(() =>\n RadixEngineToolkit.PreviewTransactionV2.compile(previewTransaction),\n );\n return Convert.Uint8Array.toHexString(compiled);\n });\n\nexport const gatewayPreparePreview = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n previewTransactionHex: string;\n}) =>\n Effect.tryPromise({\n try: async () => {\n const response = await fetch(\n `${input.config.gatewayBaseUrl ?? gatewayBaseUrl(input.config.network)}/transaction/preview-v2`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n preview_transaction: {\n type: 'Compiled',\n preview_transaction_hex: input.previewTransactionHex,\n },\n flags: {\n assume_all_signature_proofs: true,\n skip_epoch_check: true,\n use_free_credit: true,\n },\n opt_ins: {\n core_api_receipt: false,\n },\n }),\n },\n );\n if (!response.ok) {\n throw new Error(\n await Effect.runPromise(\n gatewayErrorMessage('Gateway preview', response),\n ),\n );\n }\n const body = (await response.json()) as {\n receipt?: { status?: string; error_message?: string };\n };\n if (body.receipt && body.receipt.status !== 'Succeeded') {\n throw new Error(body.receipt.error_message ?? 'Preview failed');\n }\n },\n catch: (reason) => new PreparePreviewError({ reason }),\n });\n\nexport const gatewayCurrentEpoch = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n}) =>\n Effect.tryPromise({\n try: async () => {\n const response = await fetch(\n `${input.config.gatewayBaseUrl ?? gatewayBaseUrl(input.config.network)}/status/gateway-status`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: '{}',\n },\n );\n if (!response.ok) {\n throw new Error(\n await Effect.runPromise(\n gatewayErrorMessage('Gateway status', response),\n ),\n );\n }\n const body = (await response.json()) as {\n ledger_state?: { epoch?: unknown };\n };\n if (typeof body.ledger_state?.epoch !== 'number') {\n throw new Error('Gateway status response did not include an epoch');\n }\n return body.ledger_state.epoch;\n },\n catch: (reason) => new PreparePreviewError({ reason }),\n });\n\nexport const prepareTransactionArtifacts = (input: {\n artifactRoot: string;\n network: Network;\n manifestPath: string;\n subintentsPath?: string;\n notary: Pick<NotaryFile, 'publicKey' | 'notaryIsSignatory'>;\n currentEpoch?: number;\n previewPreparedTransaction?: (\n previewTransactionHex: string,\n ) => Effect.Effect<void, unknown>;\n}): Effect.Effect<PrepareTransactionResult, unknown> =>\n Effect.gen(function* () {\n const manifest = yield* readFileString(\n input.manifestPath,\n (reason) => reason,\n );\n const subintentsFile = input.subintentsPath\n ? yield* readJsonFile(input.subintentsPath, (reason) => reason).pipe(\n Effect.flatMap(Schema.decodeUnknown(SubintentsFileSchema)),\n )\n : undefined;\n const childSubintents = yield* Effect.all(\n Object.entries(subintentsFile?.subintents ?? {}).map(\n ([subintentId, subintent]) =>\n Effect.gen(function* () {\n const transactionSubintent = buildSubintent({\n subintentId,\n manifest: subintent.manifest,\n network: input.network,\n notaryPublicKeyHex: input.notary.publicKey.hex,\n epochWindow: epochWindowFromCurrentEpoch(input.currentEpoch),\n });\n const hash = yield* Effect.tryPromise(() =>\n RadixEngineToolkit.SubintentV2.hash(transactionSubintent),\n );\n return {\n subintentId,\n manifest: subintent.manifest,\n subintent: transactionSubintent,\n hash,\n };\n }),\n ),\n );\n const assembled = yield* assembleRootManifest({\n rootManifest: manifest,\n childIntentHashes: Object.fromEntries(\n childSubintents.map((subintent) => [\n subintent.subintentId,\n subintent.hash.id,\n ]),\n ),\n });\n const orderedChildSubintents = assembled.subintentOrder.map(\n (subintentId) =>\n childSubintents.find(\n (subintent) => subintent.subintentId === subintentId,\n )!,\n );\n const epochWindow = epochWindowFromCurrentEpoch(input.currentEpoch);\n const intent = buildTransactionIntent({\n manifest: assembled.rootManifest,\n network: input.network,\n notary: input.notary,\n epochWindow,\n childHashes: orderedChildSubintents.map((subintent) =>\n subintent.hash.hash.slice(),\n ),\n nonRootSubintents: orderedChildSubintents.map(\n (subintent) => subintent.subintent,\n ),\n });\n const intentHashResult = yield* Effect.tryPromise(() =>\n RadixEngineToolkit.TransactionIntentV2.hash(intent),\n );\n const compiledIntent = yield* Effect.tryPromise(() =>\n RadixEngineToolkit.TransactionIntentV2.compile(intent),\n );\n const staticAnalysisResult = yield* Effect.tryPromise(() =>\n RadixEngineToolkit.TransactionIntentV2.staticallyAnalyze(intent),\n );\n if (input.previewPreparedTransaction) {\n const previewTransactionHex = yield* buildPreparePreviewHex(intent);\n yield* input.previewPreparedTransaction(previewTransactionHex);\n }\n\n const fallback = fallbackHashManifest(manifest);\n const intentHash = {\n id: intentHashResult.id,\n hex:\n Convert.Uint8Array.toHexString(intentHashResult.hash) ??\n fallback.intentHash.hex,\n };\n const transactionId = intentHashResult.id ?? fallback.transactionId;\n const artifactPath = yield* createTransactionArtifactDirectory({\n artifactRoot: input.artifactRoot,\n transactionId,\n });\n\n yield* writeFileString(\n join(artifactPath, 'rootManifest.rtm'),\n assembled.rootManifest,\n (reason) => reason,\n );\n yield* Effect.all(\n orderedChildSubintents.map((subintent) =>\n Effect.gen(function* () {\n const path = join(\n artifactPath,\n 'subintents',\n `${subintent.subintentId}.rtm`,\n );\n yield* makeDirectory(\n join(path, '..'),\n { recursive: true },\n (reason) => reason,\n );\n yield* writeFileString(path, subintent.manifest, (reason) => reason);\n }),\n ),\n );\n\n const transactionIntent = {\n type: 'transactionIntent',\n version: 1,\n transactionId,\n encoded: encodeTransactionIntent(\n intent,\n Convert.Uint8Array.toHexString(compiledIntent),\n ),\n };\n const staticAnalysis = {\n type: 'staticAnalysis',\n version: 1,\n transactionId,\n analysis: staticAnalysisResult,\n };\n const authorizationAnalysis = {\n rootIntent: staticAnalysisResult.root_intent.accounts_requiring_auth,\n subintents: Object.fromEntries(\n staticAnalysisResult.non_root_subintents.map((subintent, index) => [\n assembled.subintentOrder[index] ?? `subintent-${index}`,\n subintent.accounts_requiring_auth,\n ]),\n ),\n };\n const subintentHashes = Object.fromEntries(\n orderedChildSubintents.map((subintent) => [\n subintent.subintentId,\n {\n id: subintent.hash.id,\n hex: Convert.Uint8Array.toHexString(subintent.hash.hash),\n },\n ]),\n );\n\n const generated = yield* generateSigningRequests({\n transactionId,\n rootIntentHash: intentHash,\n subintentHashes,\n authorizationAnalysis,\n notary: {\n publicKey: input.notary.publicKey,\n notaryIsSignatory: input.notary.notaryIsSignatory ?? true,\n },\n });\n\n const signingRequestPaths = yield* Effect.all(\n generated.requests.map((request) =>\n writeWorkflowFile(artifactPath, request.path, request.file),\n ),\n );\n const signatureTemplatePaths = yield* Effect.all(\n generated.templates.map((template) =>\n writeWorkflowFile(artifactPath, template.path, template.file),\n ),\n );\n\n const prepared: PreparedTransaction = {\n type: 'preparedTransaction',\n version: 1,\n transactionId,\n network: input.network,\n intentHash,\n manifestSourceFile: basename(input.manifestPath),\n transactionIntentPath: 'transactionIntent.json',\n staticAnalysisPath: 'staticAnalysis.json',\n signingRequests: generated.requests.map((request) => request.path),\n signatureTemplates: generated.templates.map((template) => template.path),\n subintentOrder: assembled.subintentOrder,\n authorizationAnalysis,\n notaryPublicKey: input.notary.publicKey,\n notaryIsSignatory: input.notary.notaryIsSignatory ?? true,\n };\n\n const transactionIntentPath = join(artifactPath, 'transactionIntent.json');\n const staticAnalysisPath = join(artifactPath, 'staticAnalysis.json');\n const preparedPath = join(artifactPath, 'prepared.json');\n\n yield* writeJson(transactionIntentPath, transactionIntent);\n yield* writeJson(staticAnalysisPath, staticAnalysis);\n yield* writeJson(preparedPath, prepared);\n\n return {\n transactionId,\n artifactPath,\n preparedPath,\n transactionIntentPath,\n staticAnalysisPath,\n signatureTemplatePaths,\n startEpochInclusive: epochWindow.startEpochInclusive,\n endEpochExclusive: epochWindow.endEpochExclusive,\n };\n });\n\nexport class TransactionPreparer extends Effect.Service<TransactionPreparer>()(\n 'TransactionPreparer',\n {\n sync: () => ({\n prepareTransactionArtifacts,\n gatewayPreparePreview,\n gatewayCurrentEpoch,\n }),\n },\n) {}\n","import { join } from 'node:path';\nimport { Data, Effect, Schema } from 'effect';\nimport {\n type TransactionArtifactSummary,\n findTransactionArtifactOption,\n listTransactionArtifacts,\n writeSubmitResult,\n} from './artifacts';\nimport type { Network, ResolvedRdxConfig } from './config';\nimport { gatewayErrorMessage } from './gatewayHttp';\nimport { readJsonFile } from './platformIo';\nimport {\n type ArtifactStatus,\n type NetworkTransactionStatus,\n type PreparedTransaction,\n type SubmitResult,\n SubmitResultSchema,\n} from './schemas';\n\nexport class TransactionStatusError extends Data.TaggedError(\n 'TransactionStatusError',\n)<{\n transactionId: string;\n reason: unknown;\n}> {}\n\nexport type TransactionStatusResult = {\n transactionId: string;\n artifactPath: string | null;\n networkStatus: NetworkTransactionStatus;\n updatedSubmitResultPath: string | null;\n};\n\nconst gatewayBaseUrl = (network: Network) =>\n network === 'stokenet'\n ? 'https://stokenet.radixdlt.com'\n : 'https://mainnet.radixdlt.com';\n\nconst readExistingSubmitResult = (artifactPath: string) =>\n readJsonFile(\n join(artifactPath, 'submitResult.json'),\n (reason) => reason,\n ).pipe(\n Effect.flatMap(Schema.decodeUnknown(SubmitResultSchema)),\n Effect.catchAll(() => Effect.succeed(undefined)),\n );\n\nexport const gatewayTransactionStatus = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n transactionId: string;\n}): Effect.Effect<NetworkTransactionStatus, TransactionStatusError> =>\n Effect.tryPromise({\n try: async () => {\n const response = await fetch(\n `${input.config.gatewayBaseUrl ?? gatewayBaseUrl(input.config.network)}/transaction/status`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ intent_hash: input.transactionId }),\n },\n );\n\n if (!response.ok) {\n throw new Error(\n await Effect.runPromise(\n gatewayErrorMessage('Gateway status', response),\n ),\n );\n }\n\n const body = (await response.json()) as {\n intent_status?: string;\n intent_status_description?: string;\n error_message?: string | null;\n };\n\n return {\n transactionId: input.transactionId,\n status: body.intent_status ?? 'Unknown',\n statusDescription: body.intent_status_description ?? '',\n errorMessage: body.error_message ?? null,\n checkedAt: new Date().toISOString(),\n };\n },\n catch: (reason) =>\n new TransactionStatusError({\n transactionId: input.transactionId,\n reason,\n }),\n });\n\nexport const queryTransactionStatus = (input: {\n artifactRoot: string;\n transactionId: string;\n readOnly?: boolean;\n getNetworkStatus: (\n transactionId: string,\n ) => Effect.Effect<NetworkTransactionStatus, unknown>;\n}): Effect.Effect<TransactionStatusResult, unknown> =>\n Effect.gen(function* () {\n const artifactPath = yield* findTransactionArtifactOption({\n artifactRoot: input.artifactRoot,\n transactionId: input.transactionId,\n });\n const networkStatus = yield* input.getNetworkStatus(input.transactionId);\n\n if (!artifactPath || input.readOnly) {\n return {\n transactionId: input.transactionId,\n artifactPath: artifactPath ?? null,\n networkStatus,\n updatedSubmitResultPath: null,\n };\n }\n\n const existingSubmitResult = yield* readExistingSubmitResult(artifactPath);\n const submitResult: SubmitResult = {\n type: 'submitResult',\n version: 1,\n transactionId: input.transactionId,\n networkStatus,\n attempts: [\n ...(existingSubmitResult?.attempts ?? []),\n {\n checkedAt: networkStatus.checkedAt,\n status: networkStatus.status,\n statusDescription: networkStatus.statusDescription,\n errorMessage: networkStatus.errorMessage,\n },\n ],\n };\n const updatedSubmitResultPath = yield* writeSubmitResult({\n artifactPath,\n submitResult,\n });\n\n return {\n transactionId: input.transactionId,\n artifactPath,\n networkStatus,\n updatedSubmitResultPath,\n };\n });\n\nexport const listTransactionArtifactsWithNetworkStatus = (input: {\n artifactRoot: string;\n pattern?: string;\n regex?: string;\n network?: PreparedTransaction['network'];\n status?: ArtifactStatus;\n update?: boolean;\n getNetworkStatus: (\n transactionId: string,\n ) => Effect.Effect<NetworkTransactionStatus, unknown>;\n}): Effect.Effect<TransactionArtifactSummary[], unknown> =>\n Effect.gen(function* () {\n const artifacts = yield* listTransactionArtifacts({\n artifactRoot: input.artifactRoot,\n pattern: input.pattern,\n regex: input.regex,\n network: input.network,\n status: input.status,\n });\n\n return yield* Effect.all(\n artifacts.map((artifact) =>\n queryTransactionStatus({\n artifactRoot: input.artifactRoot,\n transactionId: artifact.transactionId,\n readOnly: !input.update,\n getNetworkStatus: input.getNetworkStatus,\n }).pipe(\n Effect.map((statusResult) => ({\n ...artifact,\n networkStatus: statusResult.networkStatus,\n updatedSubmitResultPath: statusResult.updatedSubmitResultPath,\n })),\n ),\n ),\n );\n });\n\nexport class StatusLifecycle extends Effect.Service<StatusLifecycle>()(\n 'StatusLifecycle',\n {\n sync: () => ({\n queryTransactionStatus,\n listTransactionArtifactsWithNetworkStatus,\n gatewayTransactionStatus,\n }),\n },\n) {}\n","import { join } from 'node:path';\nimport {\n Convert,\n PublicKey,\n RadixEngineToolkit,\n Signature,\n SignatureWithPublicKey,\n type TransactionIntentV2,\n} from '@steleaio/radix-engine-toolkit';\nimport { Data, Effect, Schema } from 'effect';\nimport { findTransactionArtifact, writeSubmitResult } from './artifacts';\nimport type { ResolvedRdxConfig } from './config';\nimport { gatewayErrorMessage } from './gatewayHttp';\nimport { readJsonFile, writeFileString } from './platformIo';\nimport {\n NetworkTransactionStatusSchema,\n PreparedTransactionSchema,\n type SignatureEntry,\n SignatureFileSchema,\n type SigningRequest,\n SigningRequestSchema,\n type SubmitResult,\n SubmitResultSchema,\n} from './schemas';\n\nexport class SubmitError extends Data.TaggedError('SubmitError')<{\n code:\n | 'ALREADY_SUBMITTED'\n | 'MISSING_SIGNATURE'\n | 'MISSING_NOTARY_SIGNATURE'\n | 'READ_FAILED'\n | 'WRITE_FAILED';\n path?: string;\n reason?: unknown;\n}> {}\n\nexport type SubmitTransactionResult = {\n transactionId: string;\n artifactPath: string;\n notarizedTransactionPath: string;\n submitResultPath: string;\n networkStatus: typeof NetworkTransactionStatusSchema.Type;\n};\n\ntype StoredTransactionIntentV2 = {\n transactionHeader: {\n notaryPublicKey: string;\n notaryIsSignatory: boolean;\n tipBasisPoints: number;\n };\n rootIntentCore: StoredIntentCoreV2;\n nonRootSubintents: Array<{ intentCore: StoredIntentCoreV2 }>;\n};\n\ntype StoredIntentCoreV2 = {\n header: TransactionIntentV2['rootIntentCore']['header'];\n instructions: string;\n blobs: [];\n message: TransactionIntentV2['rootIntentCore']['message'];\n children: string[];\n};\n\ntype StoredTransactionIntentFile = {\n encoded: {\n kind: 'transactionIntentV2';\n value: StoredTransactionIntentV2;\n };\n};\n\nconst readJson = (path: string) =>\n readJsonFile(\n path,\n (reason) => new SubmitError({ code: 'READ_FAILED', path, reason }),\n );\n\nconst toTransactionIntent = (\n stored: StoredTransactionIntentV2,\n): TransactionIntentV2 => ({\n transactionHeader: {\n notaryPublicKey: new PublicKey.Ed25519(\n stored.transactionHeader.notaryPublicKey,\n ),\n notaryIsSignatory: stored.transactionHeader.notaryIsSignatory,\n tipBasisPoints: stored.transactionHeader.tipBasisPoints,\n },\n rootIntentCore: {\n header: stored.rootIntentCore.header,\n instructions: stored.rootIntentCore.instructions,\n blobs: [],\n message: stored.rootIntentCore.message,\n children: stored.rootIntentCore.children.map(\n Convert.HexString.toUint8Array,\n ),\n },\n nonRootSubintents: stored.nonRootSubintents.map((subintent) => ({\n intentCore: {\n header: subintent.intentCore.header,\n instructions: subintent.intentCore.instructions,\n blobs: [],\n message: subintent.intentCore.message,\n children: subintent.intentCore.children.map(\n Convert.HexString.toUint8Array,\n ),\n },\n })),\n});\n\nconst toSignatureWithPublicKey = (signature: SignatureEntry) =>\n new SignatureWithPublicKey.Ed25519(\n signature.signature.hex,\n signature.publicKey.hex,\n );\n\nconst rootIntentSignatures = (signatures: readonly SignatureEntry[]) =>\n signatures\n .filter(\n (signature) =>\n signature.scope.kind === 'rootIntent' ||\n signature.scope.kind === 'notarySignatory',\n )\n .map(toSignatureWithPublicKey);\n\nconst nonRootSubintentSignatures = (\n signatures: readonly SignatureEntry[],\n subintentOrder: readonly string[],\n) =>\n subintentOrder.map((subintentId) =>\n signatures\n .filter(\n (signature) =>\n signature.scope.kind === 'subintent' &&\n signature.scope.subintentId === subintentId,\n )\n .map(toSignatureWithPublicKey),\n );\n\nconst findNotarySignature = (signatures: readonly SignatureEntry[]) =>\n signatures.find((signature) => signature.scope.kind === 'notary');\n\nconst readSigningRequest = (artifactPath: string, requestPath: string) =>\n readJson(join(artifactPath, requestPath)).pipe(\n Effect.flatMap(Schema.decodeUnknown(SigningRequestSchema)),\n );\n\nconst requestComplete = (\n request: SigningRequest,\n signatures: readonly SignatureEntry[],\n) =>\n signatures.some(\n (signature) =>\n signature.scope.kind === request.scope.kind &&\n (signature.scope.kind !== 'subintent' ||\n (request.scope.kind === 'subintent' &&\n signature.scope.subintentId === request.scope.subintentId)) &&\n signature.account === request.account &&\n signature.hash.hex === request.hash.hex &&\n signature.hash.id === request.hash.id,\n );\n\nconst readExistingSubmitResult = (artifactPath: string) =>\n readJson(join(artifactPath, 'submitResult.json')).pipe(\n Effect.flatMap(Schema.decodeUnknown(SubmitResultSchema)),\n Effect.catchAll(() => Effect.succeed(undefined)),\n );\n\nconst successfulSubmitStatuses = new Set(['CommittedSuccess']);\n\nconst isSuccessfulSubmitResult = (submitResult: SubmitResult | undefined) =>\n submitResult\n ? successfulSubmitStatuses.has(submitResult.networkStatus.status)\n : false;\n\nconst gatewayBaseUrl = (network: ResolvedRdxConfig['network']) =>\n network === 'stokenet'\n ? 'https://stokenet.radixdlt.com'\n : 'https://mainnet.radixdlt.com';\n\nexport const gatewaySubmitNotarizedTransaction = (input: {\n config: Pick<ResolvedRdxConfig, 'network' | 'gatewayBaseUrl'>;\n transactionId: string;\n notarizedTransactionHex: string;\n}) =>\n Effect.tryPromise({\n try: async () => {\n const response = await fetch(\n `${input.config.gatewayBaseUrl ?? gatewayBaseUrl(input.config.network)}/transaction/submit`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n notarized_transaction_hex: input.notarizedTransactionHex,\n }),\n },\n );\n if (!response.ok) {\n throw new Error(\n await Effect.runPromise(\n gatewayErrorMessage('Gateway submit', response),\n ),\n );\n }\n return NetworkTransactionStatusSchema.make({\n transactionId: input.transactionId,\n status: 'Submitted',\n statusDescription: 'Submitted to Gateway',\n errorMessage: null,\n checkedAt: new Date().toISOString(),\n });\n },\n catch: (reason) => new SubmitError({ code: 'WRITE_FAILED', reason }),\n });\n\nexport const submitTransactionArtifact = (input: {\n artifactRoot: string;\n transactionId: string;\n submitNotarizedTransaction: (\n notarizedTransactionHex: string,\n ) => Effect.Effect<typeof NetworkTransactionStatusSchema.Type, unknown>;\n pollTransactionStatus?: (\n transactionId: string,\n ) => Effect.Effect<typeof NetworkTransactionStatusSchema.Type, unknown>;\n}): Effect.Effect<SubmitTransactionResult, unknown> =>\n Effect.gen(function* () {\n const artifactPath = yield* findTransactionArtifact(input);\n const existingSubmitResult = yield* readExistingSubmitResult(artifactPath);\n if (isSuccessfulSubmitResult(existingSubmitResult)) {\n return yield* new SubmitError({\n code: 'ALREADY_SUBMITTED',\n path: join(artifactPath, 'submitResult.json'),\n });\n }\n\n const prepared = yield* readJson(join(artifactPath, 'prepared.json')).pipe(\n Effect.flatMap(Schema.decodeUnknown(PreparedTransactionSchema)),\n );\n const storedIntentFile = yield* readJson(\n join(artifactPath, prepared.transactionIntentPath),\n ).pipe(Effect.map((value) => value as StoredTransactionIntentFile));\n const signatureFile = yield* readJson(\n join(artifactPath, 'signatures.json'),\n ).pipe(Effect.flatMap(Schema.decodeUnknown(SignatureFileSchema)));\n const generatedRequests = yield* Effect.all(\n prepared.signingRequests.map((requestPath) =>\n readSigningRequest(artifactPath, requestPath),\n ),\n );\n const missingRequest = generatedRequests.find(\n (request) => !requestComplete(request, signatureFile.signatures),\n );\n if (missingRequest) {\n return yield* new SubmitError({\n code: 'MISSING_SIGNATURE',\n path: missingRequest.signingRequestPath,\n reason: missingRequest,\n });\n }\n\n const notarySignatureEntry = findNotarySignature(signatureFile.signatures);\n if (!notarySignatureEntry) {\n return yield* new SubmitError({\n code: 'MISSING_NOTARY_SIGNATURE',\n path: join(artifactPath, 'signatures.json'),\n });\n }\n\n const transactionIntent = toTransactionIntent(\n storedIntentFile.encoded.value,\n );\n const signedTransactionIntent = {\n transactionIntent,\n transactionIntentSignatures: rootIntentSignatures(\n signatureFile.signatures,\n ),\n nonRootSubintentSignatures: nonRootSubintentSignatures(\n signatureFile.signatures,\n prepared.subintentOrder,\n ),\n };\n const notarizedTransaction = {\n signedTransactionIntent,\n notarySignature: new Signature.Ed25519(\n notarySignatureEntry.signature.hex,\n ),\n };\n const compiled = yield* Effect.tryPromise({\n try: () =>\n RadixEngineToolkit.NotarizedTransactionV2.compile(notarizedTransaction),\n catch: (reason) => new SubmitError({ code: 'WRITE_FAILED', reason }),\n });\n const notarizedTransactionHex = Convert.Uint8Array.toHexString(compiled);\n const notarizedTransactionPath = join(\n artifactPath,\n 'notarizedTransaction.hex',\n );\n yield* writeFileString(\n notarizedTransactionPath,\n `${notarizedTransactionHex}\\n`,\n (reason) =>\n new SubmitError({\n code: 'WRITE_FAILED',\n path: notarizedTransactionPath,\n reason,\n }),\n );\n\n const submittedStatus = yield* input.submitNotarizedTransaction(\n notarizedTransactionHex,\n );\n const networkStatus = input.pollTransactionStatus\n ? yield* input.pollTransactionStatus(prepared.transactionId)\n : submittedStatus;\n const newAttempts = input.pollTransactionStatus\n ? [\n {\n checkedAt: submittedStatus.checkedAt,\n status: submittedStatus.status,\n statusDescription: submittedStatus.statusDescription,\n errorMessage: submittedStatus.errorMessage,\n },\n {\n checkedAt: networkStatus.checkedAt,\n status: networkStatus.status,\n statusDescription: networkStatus.statusDescription,\n errorMessage: networkStatus.errorMessage,\n },\n ]\n : [\n {\n checkedAt: networkStatus.checkedAt,\n status: networkStatus.status,\n statusDescription: networkStatus.statusDescription,\n errorMessage: networkStatus.errorMessage,\n },\n ];\n const submitResult: SubmitResult = {\n type: 'submitResult',\n version: 1,\n transactionId: prepared.transactionId,\n networkStatus,\n attempts: [...(existingSubmitResult?.attempts ?? []), ...newAttempts],\n };\n const submitResultPath = yield* writeSubmitResult({\n artifactPath,\n submitResult,\n });\n\n return {\n transactionId: prepared.transactionId,\n artifactPath,\n notarizedTransactionPath,\n submitResultPath,\n networkStatus,\n };\n });\n\nexport class SubmitLifecycle extends Effect.Service<SubmitLifecycle>()(\n 'SubmitLifecycle',\n {\n sync: () => ({\n submitTransactionArtifact,\n gatewaySubmitNotarizedTransaction,\n }),\n },\n) {}\n","import {\n PLACEHOLDER_PUBLIC_KEY_HEX,\n PLACEHOLDER_SIGNATURE_HEX,\n type SignatureFile,\n type SignatureTemplate,\n type SigningRequest,\n} from './schemas';\n\nexport type TemplateKind =\n | 'subintents'\n | 'signing-request'\n | 'signature-template'\n | 'signature-file';\n\nconst sampleHash = {\n id: 'intent_or_subintent_hash_id',\n hex: 'aa',\n};\n\nconst sampleScope = { kind: 'rootIntent' as const };\n\nexport const workflowTemplate = (kind: TemplateKind) => {\n switch (kind) {\n case 'subintents':\n return {\n type: 'subintents',\n version: 1,\n subintents: {\n child_one: {\n manifest: 'child-one.rtm',\n },\n },\n };\n case 'signing-request':\n return {\n type: 'signingRequest',\n version: 1,\n transactionId: 'txid...',\n scope: sampleScope,\n account: 'account_rdx1...',\n hash: sampleHash,\n signingRequestPath: 'signing-requests/root/account_rdx1....json',\n } satisfies SigningRequest;\n case 'signature-template':\n return {\n type: 'signatureTemplate',\n version: 1,\n transactionId: 'txid...',\n scope: sampleScope,\n account: 'account_rdx1...',\n hash: sampleHash,\n signingRequestPath: 'signing-requests/root/account_rdx1....json',\n publicKey: {\n curve: 'Ed25519',\n hex: PLACEHOLDER_PUBLIC_KEY_HEX,\n },\n signature: {\n curve: 'Ed25519',\n hex: PLACEHOLDER_SIGNATURE_HEX,\n },\n } satisfies SignatureTemplate;\n case 'signature-file':\n return {\n type: 'signatureFile',\n version: 1,\n transactionId: 'txid...',\n signatures: [],\n } satisfies SignatureFile;\n }\n};\n","import { Args, Command, Options } from '@effect/cli';\nimport { Console, Effect, Option, Schema } from 'effect';\nimport {\n deriveVirtualAccountAddress,\n gatewayAccountDetails,\n gatewayAccountFungibles,\n gatewayAccountHistory,\n gatewayAccountNfts,\n getAccountDetails,\n getAccountFungibles,\n getAccountNfts,\n getAccountTransactionHistory,\n} from './accountReads';\nimport type { VirtualAccountDerivation } from './accountReads';\nimport {\n type AddSignaturesResult,\n addSignaturesToArtifact,\n} from './addSignatures';\nimport {\n type TransactionArtifactSummary,\n findTransactionArtifact,\n listTransactionArtifacts,\n} from './artifacts';\nimport { type ResolvedRdxConfig, resolveRdxConfig } from './config';\nimport { renderJson } from './json';\nimport { llmGuide } from './llm';\nimport {\n type NotarizeTransactionResult,\n gatewayNotarizePreview,\n notarizeTransactionArtifact,\n} from './notarize';\nimport { readJsonFile } from './platformIo';\nimport {\n type PrepareTransactionResult,\n gatewayCurrentEpoch,\n gatewayPreparePreview,\n prepareTransactionArtifacts,\n} from './prepare';\nimport {\n type ArtifactStatus,\n NotaryFileSchema,\n type PreparedTransaction,\n} from './schemas';\nimport {\n type TransactionStatusResult,\n gatewayTransactionStatus,\n listTransactionArtifactsWithNetworkStatus,\n queryTransactionStatus,\n} from './status';\nimport {\n type SubmitTransactionResult,\n gatewaySubmitNotarizedTransaction,\n submitTransactionArtifact,\n} from './submit';\nimport { type TemplateKind, workflowTemplate } from './templates';\n\nexport type OutputFormat = 'json' | 'text';\n\nexport { renderJson } from './json';\n\nconst formatOption = Options.choice('format', ['json', 'text'] as const).pipe(\n Options.withDefault('json' as const),\n Options.withDescription('Output format'),\n);\n\nexport const renderConfigShow = (\n format: OutputFormat,\n config: Pick<ResolvedRdxConfig, 'network' | 'artifactScope' | 'artifactRoot'>,\n) => {\n const result = {\n type: 'commandResult',\n command: 'config show',\n network: config.network,\n artifactScope: config.artifactScope,\n artifactRoot: config.artifactRoot,\n };\n\n if (format === 'text') {\n return `network: ${result.network}\\nartifactScope: ${result.artifactScope}`;\n }\n\n return renderJson(result);\n};\n\nexport const renderTxPath = (\n format: OutputFormat,\n input: { transactionId: string; artifactPath: string },\n) => {\n const result = {\n type: 'commandResult',\n command: 'tx path',\n transactionId: input.transactionId,\n artifactPath: input.artifactPath,\n };\n\n if (format === 'text') {\n return input.artifactPath;\n }\n\n return renderJson(result);\n};\n\nexport const renderTxList = (\n format: OutputFormat,\n artifacts: TransactionArtifactSummary[],\n) => {\n const result = {\n type: 'commandResult',\n command: 'tx list',\n artifacts,\n };\n\n if (format === 'text') {\n return artifacts\n .map(\n (artifact) =>\n `${artifact.transactionId}\\t${artifact.network}\\t${artifact.status}\\t${artifact.networkStatus?.status ?? 'local'}\\t${artifact.path}`,\n )\n .join('\\n');\n }\n\n return renderJson(result);\n};\n\nexport const renderTemplate = (kind: TemplateKind) =>\n renderJson(workflowTemplate(kind));\n\nexport const renderLlmGuide = () => llmGuide;\n\nexport const renderAddSignatures = (\n format: OutputFormat,\n result: Pick<\n AddSignaturesResult,\n 'acceptedCount' | 'warnings' | 'complete' | 'signaturesPath'\n >,\n) => {\n const commandResult = {\n type: 'commandResult',\n command: 'tx add-signatures',\n acceptedCount: result.acceptedCount,\n warnings: result.warnings,\n complete: result.complete,\n signaturesPath: result.signaturesPath,\n };\n\n if (format === 'text') {\n return `accepted: ${result.acceptedCount}\\ncomplete: ${result.complete}\\nsignaturesPath: ${result.signaturesPath}`;\n }\n\n return renderJson(commandResult);\n};\n\nexport const renderTxStatus = (\n format: OutputFormat,\n result: TransactionStatusResult,\n) => {\n const commandResult = {\n type: 'commandResult',\n command: 'tx status',\n transactionId: result.transactionId,\n artifactPath: result.artifactPath,\n networkStatus: result.networkStatus,\n updatedSubmitResultPath: result.updatedSubmitResultPath,\n };\n\n if (format === 'text') {\n return `${result.transactionId}\\t${result.networkStatus.status}`;\n }\n\n return renderJson(commandResult);\n};\n\nexport const renderPrepare = (\n format: OutputFormat,\n result: PrepareTransactionResult,\n) => {\n const commandResult = {\n type: 'commandResult',\n command: 'tx prepare',\n transactionId: result.transactionId,\n artifactPath: result.artifactPath,\n preparedPath: result.preparedPath,\n transactionIntentPath: result.transactionIntentPath,\n staticAnalysisPath: result.staticAnalysisPath,\n signatureTemplatePaths: result.signatureTemplatePaths,\n startEpochInclusive: result.startEpochInclusive,\n endEpochExclusive: result.endEpochExclusive,\n };\n\n if (format === 'text') {\n return result.preparedPath;\n }\n\n return renderJson(commandResult);\n};\n\nexport const renderNotarize = (\n format: OutputFormat,\n result: NotarizeTransactionResult,\n) => {\n const commandResult = {\n type: 'commandResult',\n command: 'tx notarize',\n transactionId: result.transactionId,\n artifactPath: result.artifactPath,\n signedTransactionIntentPath: result.signedTransactionIntentPath,\n notarySigningRequestPath: result.notarySigningRequestPath,\n notarySignatureTemplatePath: result.notarySignatureTemplatePath,\n };\n\n if (format === 'text') {\n return result.notarySignatureTemplatePath;\n }\n\n return renderJson(commandResult);\n};\n\nexport const renderSubmit = (\n format: OutputFormat,\n result: SubmitTransactionResult,\n) => {\n const commandResult = {\n type: 'commandResult',\n command: 'tx submit',\n transactionId: result.transactionId,\n artifactPath: result.artifactPath,\n notarizedTransactionPath: result.notarizedTransactionPath,\n submitResultPath: result.submitResultPath,\n networkStatus: result.networkStatus,\n };\n\n if (format === 'text') {\n return `${result.transactionId}\\t${result.networkStatus.status}`;\n }\n\n return renderJson(commandResult);\n};\n\nexport const renderCommandResult = (format: OutputFormat, result: unknown) => {\n if (format === 'text') {\n return JSON.stringify(result);\n }\n\n return renderJson(result);\n};\n\nexport const renderAccountDerive = (\n format: OutputFormat,\n result: {\n type: 'commandResult';\n command: 'account derive';\n } & VirtualAccountDerivation,\n) => {\n if (format === 'text') {\n return result.accountAddress;\n }\n\n return renderJson(result);\n};\n\nconst rdxCommand = Command.make('rdx', { format: formatOption }).pipe(\n Command.withDescription('Agent-first Radix transaction workflow CLI'),\n);\n\nconst configCommand = Command.make('config').pipe(\n Command.withDescription('Inspect rdx configuration'),\n);\n\nconst configShowCommand = Command.make('show', {}, () =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n yield* Console.log(renderConfigShow(format, config));\n }),\n).pipe(Command.withDescription('Print resolved configuration'));\n\nconst llmCommand = Command.make('llm', {}, () =>\n Console.log(renderLlmGuide()),\n).pipe(\n Command.withDescription('Print compact Markdown instructions for agents'),\n);\n\nconst accountCommand = Command.make('account').pipe(\n Command.withDescription('Read account state'),\n);\n\nconst accountAddressArg = Args.text({ name: 'accountAddress' }).pipe(\n Args.withDescription('Radix account address'),\n);\n\nconst publicKeyOption = Options.text('public-key').pipe(\n Options.withDescription('Ed25519 public key hex'),\n);\n\nconst accountDeriveCommand = Command.make(\n 'derive',\n { publicKey: publicKeyOption },\n ({ publicKey }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* deriveVirtualAccountAddress({\n network: config.network,\n publicKeyHex: publicKey,\n });\n yield* Console.log(renderAccountDerive(format, result));\n }),\n).pipe(Command.withDescription('Derive a virtual account address'));\n\nconst accountFungiblesCommand = Command.make(\n 'fungibles',\n { accountAddress: accountAddressArg },\n ({ accountAddress }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* getAccountFungibles({\n accountAddress,\n readFungibles: (address) =>\n gatewayAccountFungibles({ config, accountAddress: address }),\n });\n yield* Console.log(renderCommandResult(format, result));\n }),\n).pipe(Command.withDescription('Read account fungible tokens'));\n\nconst accountNftsCommand = Command.make(\n 'nfts',\n { accountAddress: accountAddressArg },\n ({ accountAddress }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* getAccountNfts({\n accountAddress,\n readNfts: (address) =>\n gatewayAccountNfts({ config, accountAddress: address }),\n });\n yield* Console.log(renderCommandResult(format, result));\n }),\n).pipe(Command.withDescription('Read account NFTs'));\n\nconst accountShowCommand = Command.make(\n 'show',\n { accountAddress: accountAddressArg },\n ({ accountAddress }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* getAccountDetails({\n accountAddress,\n readDetails: (address) =>\n gatewayAccountDetails({ config, accountAddress: address }),\n });\n yield* Console.log(renderCommandResult(format, result));\n }),\n).pipe(Command.withDescription('Read account details'));\n\nconst txCommand = Command.make('tx').pipe(\n Command.withDescription('Work with transaction artifacts'),\n);\n\nconst manifestOption = Options.file('manifest', { exists: 'yes' }).pipe(\n Options.withDescription('Root Transaction Manifest V2 file'),\n);\nconst notaryFileOption = Options.file('notary-file', { exists: 'yes' }).pipe(\n Options.optional,\n Options.withDescription('Notary public key workflow file'),\n);\nconst subintentsOption = Options.file('subintents', { exists: 'yes' }).pipe(\n Options.optional,\n Options.withDescription('Direct child subintents workflow file'),\n);\n\nconst transactionIdArg = Args.text({ name: 'transactionId' }).pipe(\n Args.withDescription('Deterministic Radix transaction ID'),\n);\n\nconst txPathCommand = Command.make(\n 'path',\n { transactionId: transactionIdArg },\n ({ transactionId }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const artifactPath = yield* findTransactionArtifact({\n artifactRoot: config.artifactRoot,\n transactionId,\n });\n yield* Console.log(renderTxPath(format, { transactionId, artifactPath }));\n }),\n).pipe(Command.withDescription('Locate a transaction artifact directory'));\n\nconst txPrepareCommand = Command.make(\n 'prepare',\n {\n manifest: manifestOption,\n notaryFile: notaryFileOption,\n subintents: subintentsOption,\n },\n ({ manifest, notaryFile, subintents }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const notaryFilePath = Option.getOrUndefined(notaryFile);\n const notary = notaryFilePath\n ? yield* readJsonFile(notaryFilePath, (reason) => reason).pipe(\n Effect.flatMap(Schema.decodeUnknown(NotaryFileSchema)),\n )\n : config.notary;\n if (!notary) {\n return yield* Effect.fail(\n new Error(\n 'tx prepare requires --notary-file or config notary settings',\n ),\n );\n }\n const currentEpoch = yield* gatewayCurrentEpoch({ config });\n const result = yield* prepareTransactionArtifacts({\n artifactRoot: config.artifactRoot,\n network: config.network,\n manifestPath: manifest,\n subintentsPath: Option.getOrUndefined(subintents),\n notary,\n currentEpoch,\n previewPreparedTransaction: (previewTransactionHex) =>\n gatewayPreparePreview({ config, previewTransactionHex }),\n });\n yield* Console.log(renderPrepare(format, result));\n }),\n).pipe(Command.withDescription('Prepare transaction artifacts'));\n\nconst patternOption = Options.text('pattern').pipe(Options.optional);\nconst regexOption = Options.text('regex').pipe(Options.optional);\nconst networkOption = Options.choice('network', [\n 'mainnet',\n 'stokenet',\n] as const).pipe(Options.optional);\nconst statusOption = Options.choice('status', [\n 'prepared',\n 'notarized',\n 'submitted',\n] as const).pipe(Options.optional);\nconst withNetworkStatusOption = Options.boolean('with-network-status').pipe(\n Options.withDescription('Query Gateway status for each listed artifact'),\n);\nconst updateNetworkStatusOption = Options.boolean('update-network-status').pipe(\n Options.withDescription('Persist refreshed Gateway status into artifacts'),\n);\n\nconst txListCommand = Command.make(\n 'list',\n {\n pattern: patternOption,\n regex: regexOption,\n network: networkOption,\n status: statusOption,\n withNetworkStatus: withNetworkStatusOption,\n updateNetworkStatus: updateNetworkStatusOption,\n },\n ({\n network,\n pattern,\n regex,\n status,\n updateNetworkStatus,\n withNetworkStatus,\n }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const listInput = {\n artifactRoot: config.artifactRoot,\n pattern: Option.getOrUndefined(pattern),\n regex: Option.getOrUndefined(regex),\n network: Option.getOrUndefined(network) as\n | PreparedTransaction['network']\n | undefined,\n status: Option.getOrUndefined(status) as ArtifactStatus | undefined,\n };\n const artifacts =\n withNetworkStatus || updateNetworkStatus\n ? yield* listTransactionArtifactsWithNetworkStatus({\n ...listInput,\n update: updateNetworkStatus,\n getNetworkStatus: (id) =>\n gatewayTransactionStatus({ config, transactionId: id }),\n })\n : yield* listTransactionArtifacts(listInput);\n yield* Console.log(renderTxList(format, artifacts));\n }),\n).pipe(Command.withDescription('List local transaction artifacts'));\n\nconst signatureFileOption = Options.file('file', { exists: 'yes' }).pipe(\n Options.atLeast(1),\n Options.withDescription('Signature file, batch file, or filled template'),\n);\n\nconst txAddSignaturesCommand = Command.make(\n 'add-signatures',\n {\n transactionId: transactionIdArg,\n files: signatureFileOption,\n },\n ({ files, transactionId }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* addSignaturesToArtifact({\n artifactRoot: config.artifactRoot,\n transactionId,\n signatureFilePaths: files,\n });\n yield* Console.log(renderAddSignatures(format, result));\n }),\n).pipe(Command.withDescription('Import out-of-band signatures'));\n\nconst txNotarizeCommand = Command.make(\n 'notarize',\n { transactionId: transactionIdArg },\n ({ transactionId }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* notarizeTransactionArtifact({\n artifactRoot: config.artifactRoot,\n transactionId,\n previewSignedTransactionIntent: (previewTransactionHex) =>\n gatewayNotarizePreview({ config, previewTransactionHex }),\n });\n yield* Console.log(renderNotarize(format, result));\n }),\n).pipe(Command.withDescription('Create notary signing artifacts'));\n\nconst txSubmitCommand = Command.make(\n 'submit',\n { transactionId: transactionIdArg },\n ({ transactionId }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* submitTransactionArtifact({\n artifactRoot: config.artifactRoot,\n transactionId,\n submitNotarizedTransaction: (notarizedTransactionHex) =>\n gatewaySubmitNotarizedTransaction({\n config,\n transactionId,\n notarizedTransactionHex,\n }),\n pollTransactionStatus: (id) =>\n gatewayTransactionStatus({ config, transactionId: id }),\n });\n yield* Console.log(renderSubmit(format, result));\n }),\n).pipe(Command.withDescription('Compile and submit a notarized transaction'));\n\nconst readOnlyOption = Options.boolean('read-only').pipe(\n Options.withDescription('Do not update local transaction artifacts'),\n);\n\nconst txStatusCommand = Command.make(\n 'status',\n {\n transactionId: transactionIdArg,\n readOnly: readOnlyOption,\n },\n ({ readOnly, transactionId }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* queryTransactionStatus({\n artifactRoot: config.artifactRoot,\n transactionId,\n readOnly,\n getNetworkStatus: (id) =>\n gatewayTransactionStatus({ config, transactionId: id }),\n });\n yield* Console.log(renderTxStatus(format, result));\n }),\n).pipe(Command.withDescription('Query Gateway transaction status'));\n\nconst historyLimitOption = Options.integer('limit').pipe(\n Options.withDefault(10),\n Options.withDescription('Maximum transactions to return'),\n);\n\nconst txHistoryCommand = Command.make(\n 'history',\n {\n accountAddress: accountAddressArg,\n limit: historyLimitOption,\n },\n ({ accountAddress, limit }) =>\n Effect.gen(function* () {\n const { format } = yield* rdxCommand;\n const config = yield* resolveRdxConfig({ cwd: process.cwd() });\n const result = yield* getAccountTransactionHistory({\n accountAddress,\n limit,\n readHistory: (address, itemLimit) =>\n gatewayAccountHistory({\n config,\n accountAddress: address,\n limit: itemLimit,\n }),\n });\n yield* Console.log(renderCommandResult(format, result));\n }),\n).pipe(Command.withDescription('Read account transaction history'));\n\nconst templateCommand = Command.make('template').pipe(\n Command.withDescription('Print workflow file templates'),\n);\n\nconst templateKindArg = Args.choice<TemplateKind>(\n [\n ['subintents', 'subintents'],\n ['signing-request', 'signing-request'],\n ['signature-template', 'signature-template'],\n ['signature-file', 'signature-file'],\n ],\n { name: 'kind' },\n).pipe(Args.withDescription('Workflow template kind'));\n\nconst templatePrintCommand = Command.make(\n 'print',\n { kind: templateKindArg },\n ({ kind }) => Console.log(renderTemplate(kind)),\n).pipe(Command.withDescription('Print a JSON workflow template'));\n\nexport const command = rdxCommand.pipe(\n Command.withSubcommands([\n accountCommand.pipe(\n Command.withSubcommands([\n accountDeriveCommand,\n accountFungiblesCommand,\n accountNftsCommand,\n accountShowCommand,\n ]),\n ),\n configCommand.pipe(Command.withSubcommands([configShowCommand])),\n llmCommand,\n templateCommand.pipe(Command.withSubcommands([templatePrintCommand])),\n txCommand.pipe(\n Command.withSubcommands([\n txAddSignaturesCommand,\n txNotarizeCommand,\n txPrepareCommand,\n txPathCommand,\n txListCommand,\n txSubmitCommand,\n txStatusCommand,\n txHistoryCommand,\n ]),\n ),\n ]),\n);\n\nexport const cli = Command.run(command, {\n name: 'rdx',\n version: '0.1.0',\n});\n"],"mappings":"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"}