Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "oreid-js",
"version": "4.7.1",
"version": "4.7.2",
"version": "4.8.0",
"description": "Add authentication and signing to any blockchain app",
"author": "AIKON",
"license": "MIT",
Expand Down
100 changes: 100 additions & 0 deletions src/api/endpoints/validateTransaction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import OreIdContext from '../../core/IOreidContext'
import { ApiEndpoint, ChainNetwork, RequestType, ValidateTransactionFees, ValidateTransactionResources} from '../../models'
import { assertHasApiKeyOrAccessToken, assertParamsHaveRequiredValues } from '../helpers'
import { ApiResultWithErrorCode } from '../models'

export type ValidateTransactionParams = {
chainNetwork: ChainNetwork
encodedTransaction?: string
transactionChainAccount?: string
transactionOptionsStringified?: string
transactionRecordId?: string
}

export type ApiValidateTransactionBodyParams = {
chain_network: ChainNetwork
encoded_transaction?: string
transaction_chain_account?: string
transaction_options_stringified?: string
transaction_record_id?: string
}

export type ValidateTransactionPayerParams = {
chainNetwork: ChainNetwork
encodedTransaction?: string
payerChainAccount: string
transactionChainAccount?: string
transactionOptionsStringified?: string
transactionRecordId?: string
}

export type ApiValidateTransactionPayerBodyParams = {
chain_network: ChainNetwork
encoded_transaction?: string
payer_chain_account: string
transaction_chain_account?: string
transaction_options_stringified?: string
transaction_record_id?: string
}

export type ValidateTransactionResult = {
isValid: boolean
canChange: boolean
validFrom: string
validTo: string
errorMessage: string
fees: ValidateTransactionFees
resources: ValidateTransactionResources
actions: string[]
}

export type ApiCustodialSignStringResult = {
signature: string
} & ApiResultWithErrorCode


export async function callApiValidateTransaction(
oreIdContext: OreIdContext,
params: ValidateTransactionParams,
): Promise<ApiCustodialSignStringResult> {
const apiName = ApiEndpoint.ValidateTransaction

const { chainNetwork, encodedTransaction, transactionChainAccount, transactionOptionsStringified, transactionRecordId } = params
const body: ApiValidateTransactionBodyParams = {
chain_network: chainNetwork,
encoded_transaction: encodedTransaction,
transaction_chain_account: transactionChainAccount,
transaction_options_stringified: transactionOptionsStringified,
transaction_record_id: transactionRecordId
}

assertHasApiKeyOrAccessToken(oreIdContext, apiName)
assertParamsHaveRequiredValues(params, ['chainNetwork'], apiName)

const results = await oreIdContext.callOreIdApi(RequestType.Post, ApiEndpoint.ValidateTransaction, body, null)
return results
}

export async function callApiValidatePayerTransaction(
oreIdContext: OreIdContext,
params: ValidateTransactionPayerParams,
): Promise<ApiCustodialSignStringResult> {
const apiName = ApiEndpoint.ValidatePayerTransaction

const { chainNetwork, encodedTransaction, payerChainAccount, transactionChainAccount, transactionOptionsStringified, transactionRecordId } = params

const body: ApiValidateTransactionPayerBodyParams = {
chain_network: chainNetwork,
encoded_transaction: encodedTransaction,
payer_chain_account: payerChainAccount,
transaction_chain_account: transactionChainAccount,
transaction_options_stringified: transactionOptionsStringified,
transaction_record_id: transactionRecordId
}

assertHasApiKeyOrAccessToken(oreIdContext, apiName)
assertParamsHaveRequiredValues(params, ['chainNetwork', 'payerChainAccount'], apiName)

const results = await oreIdContext.callOreIdApi(RequestType.Post, ApiEndpoint.ValidatePayerTransaction, body, null)
return results
}
2 changes: 2 additions & 0 deletions src/api/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ export enum ApiEndpoint {
PasswordLessSendCode = 'account/login-passwordless-send-code',
PasswordLessVerifyCode = 'account/login-passwordless-verify-code',
TransactionSign = 'transaction/sign',
ValidatePayerTransaction = 'transaction/validate-payer',
ValidateTransaction = 'transaction/validate',
UpdateDelayWalletSetup = 'account/update-delay-wallet-setup',
}

Expand Down
19 changes: 19 additions & 0 deletions src/transaction/models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,24 @@ export type TransactionSignOptions = {
state?: string
}

export type FeesByPriority = {
priority: any
fee: string
lowFeeErrorMessage: string
}

export type ValidateTransactionFees = {
chainSupportsFees: boolean
feesByPriority: FeesByPriority[]
resourceEstimationType: string
}

export type ValidateTransactionResources = {
chainSupportsResources: boolean
resourcesRequired: string
resourceEstimationType: string
lowResourceErrorMessages: string[]
}

export interface CreateTransactionData
extends Omit<TransactionData, 'account' | 'encodedSignedTransaction' | 'encodedTransaction'> {}