diff --git a/packages/daemon/__tests__/services/services.test.ts b/packages/daemon/__tests__/services/services.test.ts index 079b58ae..b7226851 100644 --- a/packages/daemon/__tests__/services/services.test.ts +++ b/packages/daemon/__tests__/services/services.test.ts @@ -1675,12 +1675,42 @@ describe('checkForMissedEvents', () => { ); }); - it('should throw error when context has no event', async () => { + it('should throw error when context has no event and no initialEventId', async () => { const context = {}; await expect(checkForMissedEvents(context as any)) .rejects - .toThrow('No event in context when checking for missed events'); + .toThrow('No event in context and no initialEventId when checking for missed events'); + }); + + it('should use initialEventId when context.event is null', async () => { + const mockResponse = { + status: 200, + data: { + events: [], + latest_event_id: 25717039, + }, + }; + + (axios.get as jest.Mock).mockResolvedValue(mockResponse); + + const context = { + event: null, + initialEventId: 25717039, + }; + + const result = await checkForMissedEvents(context as any); + + expect(result.hasNewEvents).toBe(false); + expect(axios.get).toHaveBeenCalledWith( + expect.stringContaining('/event'), + expect.objectContaining({ + params: { + last_ack_event_id: 25717039, + size: 1, + }, + }), + ); }); it('should handle API response with non-array events field', async () => { diff --git a/packages/daemon/src/services/index.ts b/packages/daemon/src/services/index.ts index 82ebf91d..08d1c5f3 100644 --- a/packages/daemon/src/services/index.ts +++ b/packages/daemon/src/services/index.ts @@ -1078,11 +1078,11 @@ export const handleTokenCreated = async (context: Context) => { * This is used to detect if we lost an event due to network packet loss */ export const checkForMissedEvents = async (context: Context): Promise<{ hasNewEvents: boolean; events: any[] }> => { - if (!context.event) { - throw new Error('No event in context when checking for missed events'); - } + const lastAckEventId = context.event?.event.id ?? context.initialEventId; - const lastAckEventId = context.event.event.id; + if (lastAckEventId === null || lastAckEventId === undefined) { + throw new Error('No event in context and no initialEventId when checking for missed events'); + } const fullnodeUrl = getFullnodeHttpUrl(); logger.debug(`Checking for missed events after event ID ${lastAckEventId}`); diff --git a/packages/wallet-service/src/api/auth.ts b/packages/wallet-service/src/api/auth.ts index 283bb6d9..6c3fbbb1 100644 --- a/packages/wallet-service/src/api/auth.ts +++ b/packages/wallet-service/src/api/auth.ts @@ -274,6 +274,7 @@ const _generatePolicy = (principalId: string, effect: string, resource: string, `${resourcePrefix}/wallet/status`, `${resourcePrefix}/wallet/addresses`, `${resourcePrefix}/wallet/addresses/new`, + `${resourcePrefix}/wallet/addresses/has-transactions-outside-first-address`, `${resourcePrefix}/wallet/balances`, `${resourcePrefix}/wallet/tokens`, `${resourcePrefix}/wallet/tokens/*/details`,