Skip to content

Commit 09c88cf

Browse files
authored
Merge pull request #563 from InjectiveLabs/fix/turnkey-refresh
fix: ensure expiration seconds is always used
2 parents f27adbe + 18adf99 commit 09c88cf

File tree

3 files changed

+29
-17
lines changed

3 files changed

+29
-17
lines changed

packages/wallets/wallet-turnkey/src/strategy/turnkey/oauth.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import { sha256 } from '@injectivelabs/sdk-ts'
77
import type { TurnkeyOauthLoginResponse } from '../types.js'
88
import type { TurnkeyIframeClient } from '@turnkey/sdk-browser'
99
import { type HttpRestClient } from '@injectivelabs/utils'
10-
import { TURNKEY_OAUTH_PATH } from '../consts.js'
10+
import {
11+
DEFAULT_TURNKEY_REFRESH_SECONDS,
12+
TURNKEY_OAUTH_PATH,
13+
} from '../consts.js'
1114

1215
export class TurnkeyOauthWallet {
1316
static async generateOAuthNonce(iframeClient: TurnkeyIframeClient) {
@@ -34,13 +37,13 @@ export class TurnkeyOauthWallet {
3437
oidcToken: string
3538
client: HttpRestClient
3639
oauthLoginPath?: string
37-
expirationSeconds?: number
3840
providerName: 'google' | 'apple'
3941
iframeClient: TurnkeyIframeClient
42+
expirationSeconds?: number
4043
}): Promise<
4144
{ organizationId: string; credentialBundle: string } | undefined
4245
> {
43-
const { client, iframeClient } = args
46+
const { client, iframeClient, expirationSeconds } = args
4447

4548
const path = args.oauthLoginPath || TURNKEY_OAUTH_PATH
4649

@@ -57,6 +60,9 @@ export class TurnkeyOauthWallet {
5760
targetPublicKey,
5861
oidcToken: args.oidcToken,
5962
providerName: args.providerName,
63+
expirationSeconds: (
64+
expirationSeconds || DEFAULT_TURNKEY_REFRESH_SECONDS
65+
)?.toString(),
6066
})
6167

6268
return response.data

packages/wallets/wallet-turnkey/src/strategy/turnkey/otp.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ import {
99
type TurnkeyOTPCredentialsResponse,
1010
} from './../types.js'
1111
import { type HttpRestClient } from '@injectivelabs/utils'
12-
import { TURNKEY_OTP_INIT_PATH, TURNKEY_OTP_VERIFY_PATH } from '../consts.js'
12+
import {
13+
DEFAULT_TURNKEY_REFRESH_SECONDS,
14+
TURNKEY_OTP_INIT_PATH,
15+
TURNKEY_OTP_VERIFY_PATH,
16+
} from '../consts.js'
1317

1418
export class TurnkeyOtpWallet {
1519
static async initEmailOTP(args: {
@@ -56,8 +60,9 @@ export class TurnkeyOtpWallet {
5660
organizationId: string
5761
iframeClient: TurnkeyIframeClient
5862
otpVerifyPath?: string
63+
expirationSeconds?: number
5964
}) {
60-
const { client, iframeClient } = args
65+
const { client, iframeClient, expirationSeconds } = args
6166

6267
try {
6368
const organizationId = args.organizationId
@@ -84,6 +89,9 @@ export class TurnkeyOtpWallet {
8489
otpId: emailOTPId,
8590
otpCode: args.otpCode,
8691
suborgID: organizationId,
92+
expirationSeconds: (
93+
expirationSeconds || DEFAULT_TURNKEY_REFRESH_SECONDS
94+
)?.toString(),
8795
})
8896

8997
return response?.data

packages/wallets/wallet-turnkey/src/strategy/turnkey/turnkey.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -235,28 +235,25 @@ export class TurnkeyWallet {
235235
const expirationSeconds =
236236
options.expirationSeconds || DEFAULT_TURNKEY_REFRESH_SECONDS
237237
const iframeClient = await this.getIframeClient()
238-
239238
await iframeClient.injectCredentialBundle(credentialBundle)
240239
await iframeClient.refreshSession({
241240
sessionType: SessionType.READ_WRITE,
242-
expirationSeconds: options.expirationSeconds,
243241
targetPublicKey: iframeClient.iframePublicKey,
242+
expirationSeconds,
244243
})
245244

246-
// If we just logged in, we have the new org ID here and don't need to wait on getSession method
247-
if (options.organizationId) {
248-
this.organizationId = options.organizationId
249-
this.metadata.organizationId = options.organizationId
250-
} else {
251-
const session = await this.getSession()
252-
this.organizationId = session.organizationId
253-
this.metadata.organizationId = session.organizationId
245+
const session = await this.turnkey?.getSession()
246+
if (!session) {
247+
throw new WalletException(new Error('Failed to refresh session'))
254248
}
255249

250+
this.organizationId = session.organizationId
251+
this.metadata.organizationId = session.organizationId
252+
256253
// Refresh the session 2 minutes before it expires
257254
setTimeout(() => {
258255
iframeClient.refreshSession({
259-
expirationSeconds,
256+
expirationSeconds: session?.expiry,
260257
sessionType: SessionType.READ_WRITE,
261258
targetPublicKey: iframeClient.iframePublicKey,
262259
})
@@ -372,7 +369,8 @@ export class TurnkeyWallet {
372369

373370
if (session.session?.token) {
374371
await this.injectAndRefresh(session.session.token, {
375-
expirationSeconds: this.metadata.expirationSeconds,
372+
expirationSeconds:
373+
this.metadata.expirationSeconds || DEFAULT_TURNKEY_REFRESH_SECONDS,
376374
})
377375

378376
return session.session.token

0 commit comments

Comments
 (0)