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

Commit

Permalink
feat: wallet api v2
Browse files Browse the repository at this point in the history
  • Loading branch information
xstelea committed Jul 14, 2023
1 parent fe5889f commit 27a3c7f
Show file tree
Hide file tree
Showing 15 changed files with 69 additions and 1,424 deletions.
13 changes: 10 additions & 3 deletions examples/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ const sdk = WalletSdk({
'account_tdx_a_1qd5svul20u30qnq408zhj2tw5evqrunq48eg0jsjf9qsx5t8qu',
logger: createLogger(1),
networkId: 12,
version: 1,
})

const displayResults = (result: Result<any, any>) => {
Expand All @@ -26,8 +25,16 @@ document.getElementById('login-btn')!.onclick = async () => {
clearResults()
const result = await sdk.request({
discriminator: 'authorizedRequest',
login: {},
auth: { discriminator: 'loginWithoutChallenge' },
ongoingPersonaData: {
isRequestingName: true,
numberOfRequestedEmailAddresses: { quantifier: 'atLeast', quantity: 1 },
numberOfRequestedPhoneNumbers: { quantifier: 'exactly', quantity: 1 },
},
})
if (result.isErr()) return
result.value.discriminator === 'authorizedRequest' &&
result.value.ongoingPersonaData?.fullName!.given!

displayResults(result)
}
Expand Down Expand Up @@ -58,7 +65,7 @@ document.getElementById('persona-data-btn')!.onclick = async () => {

const result = await sdk.request({
discriminator: 'unauthorizedRequest',
oneTimePersonaData: { fields: ['givenName'] },
oneTimePersonaData: { isRequestingName: true },
})

displayResults(result)
Expand Down
2 changes: 2 additions & 0 deletions lib/IO/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './schemas'
export * as walletInteractionFactoryV2 from './wallet-interaction-factory'
45 changes: 25 additions & 20 deletions lib/IO/v1/schemas.ts → lib/IO/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,34 @@ export const AccountProof = object({
export type Persona = z.infer<typeof Persona>
export const Persona = object({ identityAddress: string(), label: string() })

export const personaDataField = {
givenName: 'givenName',
familyName: 'familyName',
emailAddress: 'emailAddress',
phoneNumber: 'phoneNumber',
export const personaDataFullNameVariant = {
western: 'western',
eastern: 'eastern',
} as const
export type PersonaDataField = z.infer<typeof PersonaDataField>
export const PersonaDataField = union([
literal('givenName'),
literal('familyName'),
literal('emailAddress'),
literal('phoneNumber'),
export type PersonaDataNameVariant = z.infer<typeof PersonaDataNameVariant>
export const PersonaDataNameVariant = union([
literal(personaDataFullNameVariant.eastern),
literal(personaDataFullNameVariant.western),
])

export type PersonaData = z.infer<typeof PersonaData>
export const PersonaData = object({ field: PersonaDataField, value: string() })
export type PersonaDataFullName = z.infer<typeof PersonaDataFullName>
export const PersonaDataFullName = object({
variant: PersonaDataNameVariant,
familyName: string(),
nickname: string(),
givenNames: string(),
})

export type NumberOfAccounts = z.infer<typeof NumberOfAccounts>
export const NumberOfAccounts = object({
export type NumberOfValues = z.infer<typeof NumberOfValues>
export const NumberOfValues = object({
quantifier: union([literal('exactly'), literal('atLeast')]),
quantity: number().gte(1),
})

export type AccountsRequestItem = z.infer<typeof AccountsRequestItem>
export const AccountsRequestItem = object({
challenge: string().optional(),
numberOfAccounts: NumberOfAccounts,
numberOfAccounts: NumberOfValues,
})

export type AccountsRequestResponseItem = z.infer<
Expand All @@ -69,14 +70,18 @@ export const AccountsRequestResponseItem = object({

export type PersonaDataRequestItem = z.infer<typeof PersonaDataRequestItem>
export const PersonaDataRequestItem = object({
fields: array(PersonaDataField),
isRequestingName: boolean().optional(),
numberOfRequestedEmailAddresses: NumberOfValues.optional(),
numberOfRequestedPhoneNumbers: NumberOfValues.optional(),
})

export type PersonaDataRequestResponseItem = z.infer<
typeof PersonaDataRequestResponseItem
>
export const PersonaDataRequestResponseItem = object({
fields: array(PersonaData),
fullName: PersonaDataFullName.optional(),
emailAddresses: array(string()).optional(),
phoneNumbers: array(string()).optional(),
})

export type ResetRequestItem = z.infer<typeof ResetRequestItem>
Expand Down Expand Up @@ -200,7 +205,7 @@ export const WalletInteractionItems = union([

export type Metadata = z.infer<typeof Metadata>
export const Metadata = object({
version: literal(1),
version: literal(2),
networkId: number(),
dAppDefinitionAddress: string(),
})
Expand Down Expand Up @@ -265,8 +270,8 @@ export const WalletAuthorizedRequestResponseItems = object({
discriminator: literal('authorizedRequest'),
auth: AuthRequestResponseItem,
oneTimeAccounts: AccountsRequestResponseItem.optional(),
oneTimePersonaData: PersonaDataRequestResponseItem.optional(),
ongoingAccounts: AccountsRequestResponseItem.optional(),
oneTimePersonaData: PersonaDataRequestResponseItem.optional(),
ongoingPersonaData: PersonaDataRequestResponseItem.optional(),
})

Expand Down
26 changes: 0 additions & 26 deletions lib/IO/v2/create-wallet-interaction-factory.ts

This file was deleted.

Loading

0 comments on commit 27a3c7f

Please sign in to comment.