Skip to content

Commit

Permalink
fix: stop polling if interactionId is not in pending state
Browse files Browse the repository at this point in the history
  • Loading branch information
xstelea committed Jun 14, 2024
1 parent 78e7db1 commit 5edb872
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { ResultAsync, err, ok, okAsync } from 'neverthrow'
import { StorageModule } from '../../storage/local-storage.module'
import type { KeyPairProvider } from '../crypto'
import { createSignatureMessage } from '../crypto/create-signature-message'
import { Logger } from '../../../helpers'

export const IdentityKind = {
dApp: 'dApp',
Expand All @@ -14,6 +15,7 @@ export type IdentityStore = {

export type IdentityModule = ReturnType<typeof IdentityModule>
export const IdentityModule = (input: {
logger?: Logger
providers: {
storageModule: StorageModule<IdentitySecret>
KeyPairModule: KeyPairProvider
Expand Down Expand Up @@ -83,6 +85,7 @@ export const IdentityModule = (input: {
interactionId,
dAppDefinitionAddress,
origin,
logger: input.logger,
}).andThen((message) =>
identity.ed25519
.sign(message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export const RadixConnectRelayModule = (input: {
const identityModule =
providers?.identityModule ??
IdentityModule({
logger,
providers: {
storageModule: storageModule.getPartition('identities'),
KeyPairModule: Curve25519,
Expand Down Expand Up @@ -198,6 +199,7 @@ export const RadixConnectRelayModule = (input: {
ResultAsync.fromPromise(
new Promise(async (resolve, reject) => {
let response: WalletInteractionResponse | undefined
let error: SdkError | undefined
let retry = 0

const wait = (timer = 1500) =>
Expand Down Expand Up @@ -227,6 +229,24 @@ export const RadixConnectRelayModule = (input: {
}

while (!response) {
const requestItemResult =
await requestItemModule.getById(interactionId)

if (requestItemResult.isOk()) {
logger?.debug({
method: 'waitForWalletResponse.requestItemResult',
requestItemResult: requestItemResult.value,
})
if (requestItemResult.value?.status !== 'pending') {
error = SdkError(
'RequestItemNotPending',
interactionId,
'request not in pending state',
)
break
}
}

const encryptedWalletResponsesResult =
await getEncryptedWalletResponses()

Expand Down Expand Up @@ -266,7 +286,7 @@ export const RadixConnectRelayModule = (input: {
}
}

return resolve(response)
return response ? resolve(response) : reject(error)
}),
(err) => err as SdkError,
)
Expand Down

0 comments on commit 5edb872

Please sign in to comment.