@@ -4,14 +4,13 @@ import {AbortError} from '@shopify/cli-kit/node/error'
44import { fetch } from '@shopify/cli-kit/node/http'
55import {
66 clearStoredStoreAppSession ,
7- getStoredStoreAppSession ,
8- isSessionExpired ,
7+ getCurrentStoredStoreAppSession ,
98 setStoredStoreAppSession ,
10- } from './session.js'
11- import { STORE_AUTH_APP_CLIENT_ID } from './auth- config.js'
9+ } from './auth/ session-store .js'
10+ import { STORE_AUTH_APP_CLIENT_ID } from './auth/ config.js'
1211import { prepareAdminStoreGraphQLContext } from './admin-graphql-context.js'
1312
14- vi . mock ( './session.js' )
13+ vi . mock ( './auth/ session-store .js' )
1514vi . mock ( '@shopify/cli-kit/node/http' )
1615vi . mock ( '@shopify/cli-kit/node/api/admin' , async ( ) => {
1716 const actual = await vi . importActual < typeof import ( '@shopify/cli-kit/node/api/admin' ) > ( '@shopify/cli-kit/node/api/admin' )
@@ -23,6 +22,9 @@ vi.mock('@shopify/cli-kit/node/api/admin', async () => {
2322
2423describe ( 'prepareAdminStoreGraphQLContext' , ( ) => {
2524 const store = 'shop.myshopify.com'
25+ const futureExpiry = new Date ( Date . now ( ) + 60 * 60 * 1000 ) . toISOString ( )
26+ const expiredAt = new Date ( Date . now ( ) - 60 * 1000 ) . toISOString ( )
27+
2628 const storedSession = {
2729 store,
2830 clientId : STORE_AUTH_APP_CLIENT_ID ,
@@ -31,13 +33,12 @@ describe('prepareAdminStoreGraphQLContext', () => {
3133 refreshToken : 'refresh-token' ,
3234 scopes : [ 'read_products' ] ,
3335 acquiredAt : '2026-03-27T00:00:00.000Z' ,
34- expiresAt : '2026-03-27T01:00:00.000Z' ,
36+ expiresAt : futureExpiry ,
3537 }
3638
3739 beforeEach ( ( ) => {
3840 vi . clearAllMocks ( )
39- vi . mocked ( getStoredStoreAppSession ) . mockReturnValue ( storedSession )
40- vi . mocked ( isSessionExpired ) . mockReturnValue ( false )
41+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( storedSession )
4142 vi . mocked ( fetchApiVersions ) . mockResolvedValue ( [
4243 { handle : '2025-10' , supported : true } ,
4344 { handle : '2025-07' , supported : true } ,
@@ -59,7 +60,7 @@ describe('prepareAdminStoreGraphQLContext', () => {
5960 } )
6061
6162 test ( 'refreshes expired sessions before resolving the API version' , async ( ) => {
62- vi . mocked ( isSessionExpired ) . mockReturnValue ( true )
63+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( { ... storedSession , expiresAt : expiredAt } )
6364 vi . mocked ( fetch ) . mockResolvedValue ( {
6465 ok : true ,
6566 text : vi . fn ( ) . mockResolvedValue (
@@ -98,7 +99,7 @@ describe('prepareAdminStoreGraphQLContext', () => {
9899 } )
99100
100101 test ( 'throws when no stored auth exists' , async ( ) => {
101- vi . mocked ( getStoredStoreAppSession ) . mockReturnValue ( undefined )
102+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( undefined )
102103
103104 await expect ( prepareAdminStoreGraphQLContext ( { store} ) ) . rejects . toMatchObject ( {
104105 message : `No stored app authentication found for ${ store } .` ,
@@ -108,7 +109,7 @@ describe('prepareAdminStoreGraphQLContext', () => {
108109 } )
109110
110111 test ( 'clears stored auth when token refresh fails' , async ( ) => {
111- vi . mocked ( isSessionExpired ) . mockReturnValue ( true )
112+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( { ... storedSession , expiresAt : expiredAt } )
112113 vi . mocked ( fetch ) . mockResolvedValue ( {
113114 ok : false ,
114115 status : 401 ,
@@ -124,8 +125,7 @@ describe('prepareAdminStoreGraphQLContext', () => {
124125 } )
125126
126127 test ( 'throws when an expired session cannot be refreshed because no refresh token is stored' , async ( ) => {
127- vi . mocked ( isSessionExpired ) . mockReturnValue ( true )
128- vi . mocked ( getStoredStoreAppSession ) . mockReturnValue ( { ...storedSession , refreshToken : undefined } )
128+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( { ...storedSession , refreshToken : undefined , expiresAt : expiredAt } )
129129
130130 await expect ( prepareAdminStoreGraphQLContext ( { store} ) ) . rejects . toMatchObject ( {
131131 message : `No refresh token stored for ${ store } .` ,
@@ -136,7 +136,7 @@ describe('prepareAdminStoreGraphQLContext', () => {
136136 } )
137137
138138 test ( 'clears only the current stored auth when token refresh returns an invalid response body' , async ( ) => {
139- vi . mocked ( isSessionExpired ) . mockReturnValue ( true )
139+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( { ... storedSession , expiresAt : expiredAt } )
140140 vi . mocked ( fetch ) . mockResolvedValue ( {
141141 ok : true ,
142142 text : vi . fn ( ) . mockResolvedValue ( JSON . stringify ( { refresh_token : 'fresh-refresh-token' } ) ) ,
@@ -151,7 +151,7 @@ describe('prepareAdminStoreGraphQLContext', () => {
151151 } )
152152
153153 test ( 'clears only the current stored auth when token refresh returns malformed JSON' , async ( ) => {
154- vi . mocked ( isSessionExpired ) . mockReturnValue ( true )
154+ vi . mocked ( getCurrentStoredStoreAppSession ) . mockReturnValue ( { ... storedSession , expiresAt : expiredAt } )
155155 vi . mocked ( fetch ) . mockResolvedValue ( {
156156 ok : true ,
157157 text : vi . fn ( ) . mockResolvedValue ( 'not-json' ) ,
0 commit comments