Skip to content
This repository has been archived by the owner on Aug 16, 2024. It is now read-only.

Commit

Permalink
refactor: replace logging lib
Browse files Browse the repository at this point in the history
  • Loading branch information
xstelea committed Apr 18, 2023
1 parent 53973d7 commit 6eff872
Show file tree
Hide file tree
Showing 22 changed files with 94 additions and 80 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@ const walletSdk = WalletSdk({
type WalletSdkInput = {
dAppDefinitionAddress: string
networkId?: number
logLevel?: LogLevelDesc
logger?: AppLogger
}
```
- **requires** dAppDefinitionAddress - Specifies the dApp that is interacting with the wallet. Used in dApp verification process on the wallet side.
- **optional** networkId - Specifies which network to use, defaults to mainnet (0x01)
- **optional** logLevel - Specifies level of log output. Used internally for debugging.
- **optional** logger - Used internally for debugging.
## Get Wallet Data
Expand Down
3 changes: 2 additions & 1 deletion examples/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ import { WalletSdk, requestBuilder, requestItem } from '../lib/wallet-sdk'
import { Result } from 'neverthrow'
import { login } from '../lib/IO/request-items/login'
import { reset } from '../lib/IO/request-items/reset'
import { createLogger } from '../lib/helpers/logger'

const sdk = WalletSdk({
dAppDefinitionAddress:
'account_tdx_a_1qd5svul20u30qnq408zhj2tw5evqrunq48eg0jsjf9qsx5t8qu',
logLevel: 'DEBUG',
logger: createLogger(1),
})

const transactionManifest = `
Expand Down
5 changes: 5 additions & 0 deletions lib/IO/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -336,9 +336,14 @@ export type WalletTransactionItems = z.infer<
typeof WalletTransactionItemsSchema
>

const WalletCancelRequestItemsSchema = object({
discriminator: literal('cancel'),
})

const WalletInteractionItemsSchema = union([
WalletRequestItemsSchema,
WalletTransactionItemsSchema,
WalletCancelRequestItemsSchema,
])

export type WalletInteractionItems = z.infer<
Expand Down
8 changes: 5 additions & 3 deletions lib/__tests__/wallet-sdk.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
/* eslint-disable max-nested-callbacks */
import { Network, WalletSdk } from '../wallet-sdk'
import { subscribeSpyTo } from '@hirez_io/observer-spy'
import log from 'loglevel'
import { messageLifeCycleEvent } from '../messages/events/_types'

import { OneTimeAccounts } from '../IO/request-items/one-time-accounts'
import { WalletInteractionSuccessResponse } from '../IO/schemas'
import { createLogger } from '../helpers/logger'

const mockAccountWalletResponse: OneTimeAccounts['WithoutProofOfOwnership']['wallet']['response'] =
{
Expand Down Expand Up @@ -39,15 +39,17 @@ const delay = (millis: number) =>

describe('sdk flow', () => {
let sdk: WalletSdk
let logger = createLogger(1)
beforeEach(() => {
logger.settings.minLevel = 1
sdk = WalletSdk({
dAppDefinitionAddress: 'radixDashboard',
logLevel: 'debug',
logger,
})
})

afterEach(() => {
log.setLevel('silent')
logger.settings.minLevel = 4
sdk.destroy()
})

Expand Down
2 changes: 0 additions & 2 deletions lib/config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import { LogLevelDesc } from 'loglevel'
import { NumberOfAccountsQuantifier } from './IO/schemas'

export const config = {
extensionDetectionTime: 100,
defaultNumberOfAccountsQuantity: 1,
defaultNumberOfAccountsQuantifier: 'atLeast' as NumberOfAccountsQuantifier,
logLevel: 'info' as LogLevelDesc,
}
8 changes: 8 additions & 0 deletions lib/helpers/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Logger } from 'tslog'

export type AppLogger = ReturnType<typeof createLogger>
export const createLogger = (minLevel: number) =>
new Logger({
minLevel,
prettyLogTemplate: '{{hh}}:{{MM}}:{{ss}}:{{ms}}\t{{logLevelName}}\t',
})
12 changes: 7 additions & 5 deletions lib/helpers/validate-wallet-request.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,22 @@ import { ZodError } from 'zod'
import { ResultAsync } from 'neverthrow'
import { WalletInteraction, WalletInteractionSchema } from '../IO/schemas'
import { createSdkError, errorType, SdkError } from './error'
import log from 'loglevel'
import { AppLogger } from './logger'

export const validateWalletRequest = (
walletInteraction: WalletInteraction
walletInteraction: WalletInteraction,
logger?: AppLogger
): ResultAsync<WalletInteraction, SdkError> =>
ResultAsync.fromPromise(
WalletInteractionSchema.parseAsync(walletInteraction),
(error) => (error as any).issues as ZodError[]
)
.map(() => walletInteraction)
.mapErr((issues) => {
log.error(`🔵💥 invalid wallet request`)
log.debug(JSON.stringify(walletInteraction, null, 2))
log.debug(JSON.stringify(issues, null, 2))
logger?.error(`🔵⬆️❌ invalidWalletRequest`, {
issues,
walletInteraction,
})
return createSdkError(
errorType.walletRequestValidation,
walletInteraction.interactionId
Expand Down
7 changes: 4 additions & 3 deletions lib/helpers/validate-wallet-response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@ import {
WalletInteractionResponseSchema,
WalletInteractionSuccessResponse,
} from '../IO/schemas'
import log from 'loglevel'
import { createSdkError, errorType, SdkError } from './error'
import { AppLogger } from './logger'

export const validateWalletResponse = (
walletResponse: WalletInteractionSuccessResponse
walletResponse: WalletInteractionSuccessResponse,
logger?: AppLogger
): ResultAsync<WalletInteractionSuccessResponse, SdkError> =>
ResultAsync.fromPromise(
WalletInteractionResponseSchema.parseAsync(walletResponse),
(error) => (error as any).issues as ZodError[]
)
.map(() => walletResponse)
.mapErr(() => {
log.error(`🔵💥 invalid wallet response`)
logger?.error(`🔵💥 invalid wallet response`)
return createSdkError(
errorType.walletRequestValidation,
walletResponse.interactionId
Expand Down
3 changes: 3 additions & 0 deletions lib/messages/events/_types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ export type IncomingMessageEvent = typeof eventType['incomingMessage']

export const messageLifeCycleEvent = {
receivedByExtension: 'receivedByExtension',
receivedByWallet: 'receivedByWallet',
requestCancelSuccess: 'requestCancelSuccess',
requestCancelFail: 'requestCancelFail',
} as const

export type MessageLifeCycleEvent = keyof typeof messageLifeCycleEvent
Expand Down
4 changes: 2 additions & 2 deletions lib/messages/events/register-event-listeners.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { SubjectsType } from '../subjects'
import { Subjects } from '../subjects'
import { IncomingMessage } from '../_types'
import { eventType } from './_types'

export const registerEventListeners = (subjects: SubjectsType) => {
export const registerEventListeners = (subjects: Subjects) => {
const handleIncomingMessage = (event: Event) => {
const message = (
event as CustomEvent<
Expand Down
7 changes: 4 additions & 3 deletions lib/messages/message-client.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { Subjects } from './subjects'
import { Subscriptions } from './subscriptions'
import { registerEventListeners } from './events/register-event-listeners'
import { AppLogger } from '../helpers/logger'

export type MessageClientType = ReturnType<typeof MessageClient>
export type MessageClient = ReturnType<typeof MessageClient>

export const MessageClient = (subjects = Subjects()) => {
const subscriptions = Subscriptions(subjects)
export const MessageClient = (subjects: Subjects, logger?: AppLogger) => {
const subscriptions = Subscriptions(subjects, logger)
const eventListeners = registerEventListeners(subjects)

const destroy = () => {
Expand Down
8 changes: 4 additions & 4 deletions lib/messages/observables/dispatch-event.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { SubjectsType } from '../subjects'
import { tap } from 'rxjs'
import log from 'loglevel'
import { AppLogger } from '../../helpers/logger'
import { Subjects } from '../subjects'

export const dispatchEvent = (subjects: SubjectsType) =>
export const dispatchEvent = (subjects: Subjects, logger?: AppLogger) =>
subjects.dispatchEventSubject.pipe(
tap(({ event, payload }) => {
log.debug(`🔵⬆️ wallet request\n${JSON.stringify(payload, null, 2)}`)
logger?.debug(`🔵⬆️ walletRequest`, payload)
window.dispatchEvent(
new CustomEvent(event, {
detail: payload,
Expand Down
16 changes: 16 additions & 0 deletions lib/messages/observables/handle-wallet-response.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { AppLogger } from '../../helpers/logger'
import { Subjects } from '../subjects'
import { tap } from 'rxjs'

export const handleWalletResponse = (subjects: Subjects, logger?: AppLogger) =>
subjects.incomingMessageSubject.pipe(
tap((message) => {
if ('eventType' in message) {
logger?.debug(`🔵💬⬇️ messageLifecycleEvent`, message)
subjects.messageLifeCycleEventSubject.next(message)
} else {
logger?.debug(`🔵⬇️ walletResponse`, message)
subjects.responseSubject.next(message)
}
})
)
4 changes: 2 additions & 2 deletions lib/messages/observables/message-events.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { filter } from 'rxjs'
import { SubjectsType } from '../subjects'
import { Subjects } from '../subjects'

export const messageEvents = (subjects: SubjectsType, interactionId: string) =>
export const messageEvents = (subjects: Subjects, interactionId: string) =>
subjects.messageLifeCycleEventSubject.pipe(
filter((message) => message.interactionId === interactionId)
)
14 changes: 4 additions & 10 deletions lib/messages/observables/send-message.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import log from 'loglevel'
import { Err, err, ok, Result, ResultAsync } from 'neverthrow'
import {
filter,
Expand All @@ -21,13 +20,14 @@ import {
WalletInteractionSuccessResponse,
} from '../../IO/schemas'
import { CallbackFns } from '../events/_types'
import { SubjectsType } from '../subjects'
import { Subjects } from '../subjects'
import { messageEvents } from './message-events'
import { AppLogger } from '../../helpers/logger'

export type CreateSendMessage = ReturnType<typeof createSendMessage>

export const createSendMessage =
(subjects: SubjectsType) =>
(subjects: Subjects, logger?: AppLogger) =>
(callbackFns: Partial<CallbackFns>) =>
(
message: WalletInteraction
Expand All @@ -37,13 +37,7 @@ export const createSendMessage =
if (callbackFns.requestControl)
callbackFns.requestControl({
cancelRequest: () => {
log.debug(
`🔵⬆️❌ wallet request canceled\n${JSON.stringify(
message,
null,
2
)}`
)
logger?.debug(`🔵⬆️❌ walletRequestCanceled`, message)
return cancelRequestSubject.next()
},
})
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { SubjectsType } from '../subjects'
import { Subjects } from '../subjects'
import { tap, share, map } from 'rxjs'
import { eventType } from '../events/_types'

export const walletRequest = (subjects: SubjectsType) =>
export const sendWalletRequest = (subjects: Subjects) =>
subjects.outgoingMessageSubject.pipe(
map((payload) => ({
event: eventType.outgoingMessage,
Expand Down
18 changes: 0 additions & 18 deletions lib/messages/observables/wallet-response.ts

This file was deleted.

2 changes: 1 addition & 1 deletion lib/messages/subjects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '../IO/schemas'
import { IncomingMessage, MessageDispatch } from './_types'

export type SubjectsType = ReturnType<typeof Subjects>
export type Subjects = ReturnType<typeof Subjects>

export const Subjects = () => ({
outgoingMessageSubject: new Subject<WalletInteraction>(),
Expand Down
15 changes: 8 additions & 7 deletions lib/messages/subscriptions.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { SubjectsType } from './subjects'
import { Subjects } from './subjects'
import { Subscription } from 'rxjs'
import { walletRequest } from './observables/wallet-request'
import { walletResponse } from './observables/wallet-response'
import { sendWalletRequest } from './observables/send-wallet-request'
import { handleWalletResponse } from './observables/handle-wallet-response'
import { dispatchEvent } from './observables/dispatch-event'
import { AppLogger } from '../helpers/logger'

export const Subscriptions = (subjects: SubjectsType) => {
export const Subscriptions = (subjects: Subjects, logger?: AppLogger) => {
const subscription = new Subscription()

subscription.add(dispatchEvent(subjects).subscribe())
subscription.add(walletRequest(subjects).subscribe())
subscription.add(walletResponse(subjects).subscribe())
subscription.add(dispatchEvent(subjects, logger).subscribe())
subscription.add(sendWalletRequest(subjects).subscribe())
subscription.add(handleWalletResponse(subjects, logger).subscribe())

return subscription
}
18 changes: 9 additions & 9 deletions lib/wallet-sdk.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { MessageClient } from './messages/message-client'
import log, { LogLevelDesc } from 'loglevel'
import { createSendMessage } from './messages/observables/send-message'
import { createMethods } from './create-methods'
import { config } from './config'
import { AppLogger } from './helpers/logger'
import { Subjects } from './messages/subjects'

type WalletSdkInput = {
networkId?: number
dAppDefinitionAddress: string
logLevel?: LogLevelDesc
logger?: AppLogger
}

export const Network = {
Expand All @@ -25,20 +25,19 @@ export type WalletSdk = ReturnType<typeof WalletSdk>
export const WalletSdk = ({
networkId = Network.Mainnet,
dAppDefinitionAddress,
logLevel = config.logLevel,
logger,
}: WalletSdkInput) => {
log.setLevel(logLevel)
log.debug(`🔵 wallet sdk instantiated`)
const messageClient = MessageClient()
logger?.debug(`🔵 walletSdkInstantiated`)
const messageClient = MessageClient(Subjects(), logger)

const destroy = () => {
log.debug(`🔵🧹 destroying wallet sdk instance`)
logger?.debug(`🔵🧹 destroyingWalletSdkInstance`)
messageClient.destroy()
}

const methods = createMethods(
{ networkId, dAppDefinitionAddress },
createSendMessage(messageClient.subjects)
createSendMessage(messageClient.subjects, logger)
)

return {
Expand All @@ -54,3 +53,4 @@ export { requestBuilder } from './request-builder'
export * from './IO/request-items'
export * from './IO/schemas'
export * from './helpers/error'
export * from './helpers/logger'
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@
},
"dependencies": {
"lodash.flow": "^3.5.0",
"loglevel": "^1.8.1",
"neverthrow": "^6.0.0",
"rxjs": "^7.6.0",
"tslog": "^4.8.2",
"zod": "^3.19.1"
},
"repository": {
Expand Down
Loading

0 comments on commit 6eff872

Please sign in to comment.