diff --git a/examples/add-example-Web3Id/package.json b/examples/add-example-Web3Id/package.json index 28449575..2793deb6 100644 --- a/examples/add-example-Web3Id/package.json +++ b/examples/add-example-Web3Id/package.json @@ -8,6 +8,6 @@ "start": "live-server ./index.html --mount=/sdk.js:../../node_modules/@concordium/web-sdk/lib/concordium.min.js --mount=/helpers.js:../../packages/browser-wallet-api-helpers/lib/concordiumHelpers.min.js" }, "dependencies": { - "@concordium/web-sdk": "^6.2.1" + "@concordium/web-sdk": "^6.3.0" } } diff --git a/examples/eSealing/package.json b/examples/eSealing/package.json index e0a8b836..58fea74d 100644 --- a/examples/eSealing/package.json +++ b/examples/eSealing/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/react-components": "^0.3.0", - "@concordium/web-sdk": "^6.2.1", + "@concordium/web-sdk": "^6.3.0", "@thi.ng/leb128": "^2.1.18", "@types/sha256": "^0.2.0", "@walletconnect/types": "^2.1.4", diff --git a/examples/nft-minting/package.json b/examples/nft-minting/package.json index 0c19ae64..9f3ae96a 100644 --- a/examples/nft-minting/package.json +++ b/examples/nft-minting/package.json @@ -3,7 +3,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^6.2.1", + "@concordium/web-sdk": "^6.3.0", "cors": "^2.8.5", "express": "^4.18.1", "express-fileupload": "^1.4.0", diff --git a/examples/piggybank/package.json b/examples/piggybank/package.json index 24dc6d26..efd88d6c 100644 --- a/examples/piggybank/package.json +++ b/examples/piggybank/package.json @@ -3,7 +3,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^6.2.1", + "@concordium/web-sdk": "^6.3.0", "react": "^18.1.0", "react-dom": "^18.1.0" }, diff --git a/examples/two-step-transfer/package.json b/examples/two-step-transfer/package.json index 6ed259a5..15c1fcc1 100644 --- a/examples/two-step-transfer/package.json +++ b/examples/two-step-transfer/package.json @@ -8,6 +8,6 @@ "start": "live-server ../two-step-transfer/index.html --mount=/sdk.js:../../node_modules/@concordium/web-sdk/lib/concordium.min.js --mount=/helpers.js:../../packages/browser-wallet-api-helpers/lib/concordiumHelpers.min.js" }, "dependencies": { - "@concordium/web-sdk": "^6.2.1" + "@concordium/web-sdk": "^6.3.0" } } diff --git a/examples/voting/package.json b/examples/voting/package.json index 441681f1..6187a3bb 100644 --- a/examples/voting/package.json +++ b/examples/voting/package.json @@ -5,7 +5,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "^2.0.0", - "@concordium/web-sdk": "^6.2.1", + "@concordium/web-sdk": "^6.3.0", "bootstrap": "^5.2.1", "cross-env": "^7.0.3", "moment": "^2.29.4", diff --git a/examples/wCCD/package.json b/examples/wCCD/package.json index 2dc7924f..edb97172 100644 --- a/examples/wCCD/package.json +++ b/examples/wCCD/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/react-components": "^0.2.0", - "@concordium/web-sdk": "^6.2.1", + "@concordium/web-sdk": "^6.3.0", "@thi.ng/leb128": "^2.1.18", "@walletconnect/types": "^2.1.4", "mathjs": "^11.4.0", diff --git a/packages/browser-wallet-api-helpers/package.json b/packages/browser-wallet-api-helpers/package.json index 4afcbb53..3c609b62 100644 --- a/packages/browser-wallet-api-helpers/package.json +++ b/packages/browser-wallet-api-helpers/package.json @@ -19,7 +19,7 @@ "url": "https://concordium.com" }, "dependencies": { - "@concordium/web-sdk": "^6.2.1" + "@concordium/web-sdk": "^6.3.0" }, "devDependencies": { "@babel/core": "^7.17.10", diff --git a/packages/browser-wallet-api/package.json b/packages/browser-wallet-api/package.json index ea653959..40179bac 100644 --- a/packages/browser-wallet-api/package.json +++ b/packages/browser-wallet-api/package.json @@ -7,7 +7,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/common-sdk": "^9.2.1", + "@concordium/common-sdk": "^9.3.0", "@protobuf-ts/grpcweb-transport": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", "buffer": "^6.0.3", diff --git a/packages/browser-wallet/CHANGELOG.md b/packages/browser-wallet/CHANGELOG.md index 9733a172..931543dd 100644 --- a/packages/browser-wallet/CHANGELOG.md +++ b/packages/browser-wallet/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## Unreleased + +### Changed + +- Update according to the change to AttributeType from the SDK. In particular the timestamp type is now explicit, and therefore we have removed hhe special serialization/parsing of Dates when exporting/import verifiable credentials. + +### Fixed + +- Verifiable credentials are now validated according to the schema when being added. This will e.g. block setting an attribute as an integer if the schema defines it as a string. +- Refreshed the schema for credential schemas so that attribute types are now restricted as expected (`string`, `integer` and the special types are allowed). + ## 1.1.5 ### Added diff --git a/packages/browser-wallet/package.json b/packages/browser-wallet/package.json index 74ab31ee..ed66edcd 100644 --- a/packages/browser-wallet/package.json +++ b/packages/browser-wallet/package.json @@ -19,7 +19,7 @@ "dependencies": { "@concordium/browser-wallet-api": "workspace:^", "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^6.2.1", + "@concordium/web-sdk": "^6.3.0", "@noble/ed25519": "^1.7.0", "@protobuf-ts/runtime-rpc": "^2.8.2", "@scure/bip39": "^1.1.0", diff --git a/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/AddWeb3IdCredential.tsx b/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/AddWeb3IdCredential.tsx index 6d4c86a0..23679e08 100644 --- a/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/AddWeb3IdCredential.tsx +++ b/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/AddWeb3IdCredential.tsx @@ -24,6 +24,7 @@ import { fetchLocalization, findNextUnusedVerifiableCredentialIndex, getCredentialRegistryContractAddress, + withIdRemovedFromSchema, } from '@shared/utils/verifiable-credential-helpers'; import { APIVerifiableCredential } from '@concordium/browser-wallet-api-helpers'; import { grpcClientAtom, networkConfigurationAtom } from '@popup/store/settings'; @@ -31,6 +32,7 @@ import { MetadataUrl } from '@concordium/browser-wallet-api-helpers/lib/wallet-a import { parse } from '@shared/utils/payload-helpers'; import { logError } from '@shared/utils/log-helpers'; import { addToastAtom } from '@popup/state'; +import { Schema, Validator } from 'jsonschema'; import { VerifiableCredentialCard } from '../VerifiableCredential/VerifiableCredentialCard'; type Props = { @@ -115,23 +117,32 @@ export default function AddWeb3IdCredential({ onAllow, onReject }: Props) { useEffect(() => { if (schema) { - // Ensure that all attributes required by the schema are in the attributes. If not, then - // the credential should not be allowed to be added. - const missingRequiredAttributeKeys = []; - const requiredAttributes = schema.properties.credentialSubject.properties.attributes.required; - for (const requiredAttribute of requiredAttributes) { - if (!Object.keys(credential.credentialSubject.attributes).includes(requiredAttribute)) { - missingRequiredAttributeKeys.push(requiredAttribute); + // Use the schema to validate the credential. + const validator = new Validator(); + try { + const schemaWithNoId = withIdRemovedFromSchema(schema); + const validationResult = validator.validate( + { credentialSubject: credential.credentialSubject }, + schemaWithNoId as unknown as Schema + ); + if (!validationResult.valid) { + setError(t('error.schemaValidation', { errors: validationResult.errors.toString() })); + setValidationComplete(true); + return; } - } - - if (missingRequiredAttributeKeys.length > 0) { - setError(t('error.attribute.required', { attributeKeys: missingRequiredAttributeKeys })); + } catch (e) { + logError(e); + setError( + t('error.schemaValidation', { + errors: 'An error occurred while attempting to validate credential.', + }) + ); setValidationComplete(true); return; } // Ensure that a credential with more attributes than listed by the schema cannot be added. + // The schema might not check this in the current iteration of schemas (additionalProperties: false). const schemaAttributes = Object.keys(schema.properties.credentialSubject.properties.attributes.properties); for (const credentialAttribute of Object.keys(credential.credentialSubject.attributes)) { if (!schemaAttributes.includes(credentialAttribute)) { diff --git a/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/da.ts b/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/da.ts index 1e952c59..ee92483c 100644 --- a/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/da.ts +++ b/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/da.ts @@ -13,6 +13,7 @@ const t: typeof en = { attribute: en.error.attribute, localization: en.error.localization, findingNextIndex: en.error.findingNextIndex, + schemaValidation: en.error.schemaValidation, }, }; diff --git a/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/en.ts b/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/en.ts index ac24816e..90215cdf 100644 --- a/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/en.ts +++ b/packages/browser-wallet/src/popup/pages/AddWeb3IdCredential/i18n/en.ts @@ -14,6 +14,7 @@ const t = { }, localization: 'Failed to get localization', findingNextIndex: 'An error ocurred while attempting to add the credential. Please try again.', + schemaValidation: 'The credential did not validate according to the schema: [{{ errors }}]', }, }; diff --git a/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/VerifiableCredentialImport.tsx b/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/VerifiableCredentialImport.tsx index 74dd36a9..a981c7e3 100644 --- a/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/VerifiableCredentialImport.tsx +++ b/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/VerifiableCredentialImport.tsx @@ -15,7 +15,6 @@ import { decrypt } from '@shared/utils/crypto'; import { useHdWallet } from '@popup/shared/utils/account-helpers'; import JSONBigInt from 'json-bigint'; import { FileInput } from '@popup/shared/Form/FileInput'; -import { reviveDateFromTimeStampAttribute } from '@concordium/web-sdk'; import { VerifiableCredentialCardWithStatusFromChain } from '../VerifiableCredential/VerifiableCredentialList'; import { ExportFormat, VerifiableCredentialExport } from './utils'; @@ -47,7 +46,7 @@ async function parseExport(data: EncryptedData, encryptionKey: string): Promise< const backup: ExportFormat = JSONBigInt({ alwaysParseAsBig: true, useNativeBigInt: true, - }).parse(decrypted, reviveDateFromTimeStampAttribute); + }).parse(decrypted); // Change index to number, due to parse changing all numbers to bigints. backup.value.verifiableCredentials = backup.value.verifiableCredentials.map((v) => ({ ...v, diff --git a/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/utils.ts b/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/utils.ts index 5fc8d814..56cd74ed 100644 --- a/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/utils.ts +++ b/packages/browser-wallet/src/popup/pages/VerifiableCredentialBackup/utils.ts @@ -12,7 +12,6 @@ import { import { networkConfigurationAtom } from '@popup/store/settings'; import { saveData } from '@popup/shared/utils/file-helpers'; import { stringify } from 'json-bigint'; -import { replaceDateWithTimeStampAttribute } from '@concordium/web-sdk'; export type VerifiableCredentialExport = { verifiableCredentials: VerifiableCredential[]; @@ -47,7 +46,7 @@ function createExport( // Use json-bigint to serialize bigints as json numbers. // Ensure that Dates are stored as timestamps to not lose typing (otherwise they are serialized as strings). - return encrypt(stringify(exportContent, replaceDateWithTimeStampAttribute), encryptionKey); + return encrypt(stringify(exportContent), encryptionKey); } export function useVerifiableCredentialExport() { diff --git a/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/DisplayStatementLine.tsx b/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/DisplayStatementLine.tsx index 1eb9b81d..ab84a9d7 100644 --- a/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/DisplayStatementLine.tsx +++ b/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/DisplayStatementLine.tsx @@ -20,9 +20,9 @@ export function DisplayStatementLine({ attribute, value, isRequirementMet, class
{value} {isRequirementMet ? ( - + ) : ( - + )}
diff --git a/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/utils.ts b/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/utils.ts index 0d716bd6..2c367611 100644 --- a/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/utils.ts +++ b/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Display/utils.ts @@ -1,4 +1,4 @@ -import { AttributeType, CredentialSchemaSubject } from '@concordium/web-sdk'; +import { AttributeType, CredentialSchemaSubject, isTimestampAttribute } from '@concordium/web-sdk'; import { withDateAndTime } from '@shared/utils/time-helpers'; import { ClassName } from 'wallet-common-helpers'; import { SecretStatementV2 } from '../utils'; @@ -25,5 +25,7 @@ export type DisplayProps = ClassName & { }; export function defaultFormatAttribute(_: string, value: Attribute) { - return value instanceof Date ? withDateAndTime(value) : value?.toString(); + return value !== undefined && isTimestampAttribute(value) + ? withDateAndTime(Date.parse(value.timestamp)) + : value?.toString(); } diff --git a/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Web3ProofRequest.scss b/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Web3ProofRequest.scss index cb326ee2..4a347558 100644 --- a/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Web3ProofRequest.scss +++ b/packages/browser-wallet/src/popup/pages/Web3ProofRequest/Web3ProofRequest.scss @@ -267,3 +267,11 @@ $standard-box-shadow: 0 0 15px 0 rgb(0 0 0 / $color-shadow-alpha); fill: $color-feedback-positive-base; } } + +.display-statement-cross { + flex-shrink: 0; + + path { + fill: $color-feedback-negative-base; + } +} diff --git a/packages/browser-wallet/src/shared/utils/verifiable-credential-helpers.ts b/packages/browser-wallet/src/shared/utils/verifiable-credential-helpers.ts index a5c136af..3d2989dc 100644 --- a/packages/browser-wallet/src/shared/utils/verifiable-credential-helpers.ts +++ b/packages/browser-wallet/src/shared/utils/verifiable-credential-helpers.ts @@ -396,107 +396,123 @@ const verifiableCredentialSchemaSchema = { $ref: '#/definitions/VerifiableCredentialSchema', $schema: 'http://json-schema.org/draft-07/schema#', definitions: { - SchemaProperties: { + CredentialSchemaProperty: { + anyOf: [ + { + $ref: '#/definitions/SimpleProperty', + }, + { + $ref: '#/definitions/TimestampProperty', + }, + ], + }, + CredentialSchemaSubject: { additionalProperties: false, properties: { - credentialSubject: { + properties: { additionalProperties: false, properties: { - properties: { + attributes: { additionalProperties: false, properties: { - attributes: { - additionalProperties: false, - properties: { - description: { - type: 'string', - }, - properties: { - additionalProperties: { - anyOf: [ - { - additionalProperties: false, - properties: { - description: { - type: 'string', - }, - format: { - type: 'string', - }, - title: { - type: 'string', - }, - type: { - type: 'string', - }, - }, - required: ['title', 'type', 'description'], - type: 'object', - }, - { - $ref: '#/definitions/TimestampProperty', - }, - ], + description: { + type: 'string', + }, + properties: { + additionalProperties: { + anyOf: [ + { + $ref: '#/definitions/CredentialSchemaProperty', }, - type: 'object', - }, - required: { - items: { - type: 'string', + { + $ref: '#/definitions/TimestampProperty', }, - type: 'array', - }, - title: { - type: 'string', - }, - type: { - const: 'object', - type: 'string', - }, + ], }, - required: ['type', 'properties', 'required'], type: 'object', }, - id: { - additionalProperties: false, - properties: { - description: { - type: 'string', - }, - format: { - type: 'string', - }, - title: { - type: 'string', - }, - type: { - type: 'string', - }, + required: { + items: { + type: 'string', }, - required: ['title', 'type', 'description'], - type: 'object', + type: 'array', + }, + title: { + type: 'string', + }, + type: { + const: 'object', + type: 'string', }, }, - required: ['id', 'attributes'], + required: ['type', 'properties', 'required'], type: 'object', }, - required: { - items: { - type: 'string', + id: { + additionalProperties: false, + properties: { + description: { + type: 'string', + }, + title: { + type: 'string', + }, + type: { + const: 'string', + type: 'string', + }, }, - type: 'array', - }, - type: { - type: 'string', + required: ['title', 'type'], + type: 'object', }, }, - required: ['type', 'properties', 'required'], + required: ['id', 'attributes'], type: 'object', }, + required: { + items: { + type: 'string', + }, + type: 'array', + }, + type: { + const: 'object', + type: 'string', + }, + }, + required: ['type', 'properties', 'required'], + type: 'object', + }, + SchemaProperties: { + additionalProperties: false, + properties: { + credentialSubject: { + $ref: '#/definitions/CredentialSchemaSubject', + }, }, required: ['credentialSubject'], type: 'object', }, + SimpleProperty: { + additionalProperties: false, + properties: { + description: { + type: 'string', + }, + format: { + type: 'string', + }, + title: { + type: 'string', + }, + type: { + enum: ['string', 'integer'], + type: 'string', + }, + }, + required: ['title', 'type'], + type: 'object', + }, TimestampProperty: { additionalProperties: false, properties: { @@ -1195,3 +1211,28 @@ export async function findNextUnusedVerifiableCredentialIndex( return index; } + +/** + * Creates a schema like the input with the id removed. This is used to be able to use the + * schema to validate an incoming credential being added, as the wallet is responsible for + * adding the id at a later point. + * @param schema the schema to create a version of without an id + * @returns the schema without the required id field + */ +export function withIdRemovedFromSchema(schema: VerifiableCredentialSchema) { + const propertiesWithNoId = { + attributes: schema.properties.credentialSubject.properties.attributes, + }; + const requiredAttributes = schema.properties.credentialSubject.required.filter((req) => req !== 'id'); + const credentialSubjectWithNoId = { + ...schema.properties.credentialSubject, + properties: propertiesWithNoId, + required: requiredAttributes, + }; + const schemaOuterPropertiesWithNoId = { + ...schema.properties, + credentialSubject: credentialSubjectWithNoId, + }; + + return { ...schema, properties: schemaOuterPropertiesWithNoId }; +} diff --git a/yarn.lock b/yarn.lock index 6f0c55aa..3e4cc589 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1918,7 +1918,7 @@ __metadata: "@babel/plugin-transform-modules-commonjs": ^7.12.1 "@babel/plugin-transform-runtime": ^7.12.1 "@babel/preset-env": ^7.12.1 - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 typescript: ^4.3.5 webpack: ^5.72.0 webpack-cli: ^4.9.2 @@ -1930,7 +1930,7 @@ __metadata: resolution: "@concordium/browser-wallet-api@workspace:packages/browser-wallet-api" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/common-sdk": ^9.2.1 + "@concordium/common-sdk": ^9.3.0 "@protobuf-ts/grpcweb-transport": ^2.8.2 "@protobuf-ts/runtime-rpc": ^2.8.2 "@types/json-bigint": ^1.0.1 @@ -1958,7 +1958,7 @@ __metadata: "@babel/core": ^7.18.2 "@concordium/browser-wallet-api": "workspace:^" "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 "@craftamap/esbuild-plugin-html": ^0.4.0 "@mdx-js/react": ^1.6.22 "@noble/ed25519": ^1.7.0 @@ -2027,9 +2027,9 @@ __metadata: languageName: unknown linkType: soft -"@concordium/common-sdk@npm:9.2.1, @concordium/common-sdk@npm:^9.2.1": - version: 9.2.1 - resolution: "@concordium/common-sdk@npm:9.2.1" +"@concordium/common-sdk@npm:9.3.0, @concordium/common-sdk@npm:^9.3.0": + version: 9.3.0 + resolution: "@concordium/common-sdk@npm:9.3.0" dependencies: "@concordium/rust-bindings": 1.2.0 "@grpc/grpc-js": ^1.3.4 @@ -2044,7 +2044,7 @@ __metadata: iso-3166-1: ^2.1.1 json-bigint: ^1.0.0 uuid: ^8.3.2 - checksum: fd308fd31f9833a90e526c672bc8e0fd173ee41841350c2b477b39ac7c336f67b27c20d638416a0a807c631afdd196764f882e59ada5aa65d88f955901715d07 + checksum: 7457c54948feba0e6ad5e6e591c292300fe6457d77235f4aa0d63efc9328bb63a103144502962b53bac323d98af4407b7322bd8c74ad05252329d9ef9c1ad5f3 languageName: node linkType: hard @@ -2126,17 +2126,17 @@ __metadata: languageName: node linkType: hard -"@concordium/web-sdk@npm:^6.2.1": - version: 6.2.1 - resolution: "@concordium/web-sdk@npm:6.2.1" +"@concordium/web-sdk@npm:^6.3.0": + version: 6.3.0 + resolution: "@concordium/web-sdk@npm:6.3.0" dependencies: - "@concordium/common-sdk": 9.2.1 + "@concordium/common-sdk": 9.3.0 "@concordium/rust-bindings": 1.2.0 "@grpc/grpc-js": ^1.3.4 "@protobuf-ts/grpcweb-transport": ^2.8.2 buffer: ^6.0.3 process: ^0.11.10 - checksum: 6344d56fc8f71ab92c6913c4e2755a21660491964503d2f5709d59501e634c279611b620ec067937eb132f9a47109f54bcb0dcbceca87377a9de88e69bb61ed0 + checksum: 86b069988c88e148490dd12b8d0c2bcbe954dee67c4074ec4965a491ab907c5ffba2a76da53479802605313f204fc6dfc0b0e3033fc186391ae3fe3a21ca6796 languageName: node linkType: hard @@ -6758,7 +6758,7 @@ __metadata: resolution: "NFT-Minting@workspace:examples/nft-minting" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 "@craftamap/esbuild-plugin-html": ^0.4.0 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -6901,7 +6901,7 @@ __metadata: version: 0.0.0-use.local resolution: "add-example-web3-id@workspace:examples/add-example-Web3Id" dependencies: - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 live-server: ^1.2.2 languageName: unknown linkType: soft @@ -10217,7 +10217,7 @@ __metadata: resolution: "e_sealing@workspace:examples/eSealing" dependencies: "@concordium/react-components": ^0.3.0 - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 "@craftamap/esbuild-plugin-html": ^0.4.0 "@thi.ng/leb128": ^2.1.18 "@types/node": ^18.7.23 @@ -17597,7 +17597,7 @@ __metadata: resolution: "piggybank@workspace:examples/piggybank" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 "@craftamap/esbuild-plugin-html": ^0.4.0 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -21514,7 +21514,7 @@ __metadata: version: 0.0.0-use.local resolution: "two-step-transfer@workspace:examples/two-step-transfer" dependencies: - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 live-server: ^1.2.2 languageName: unknown linkType: soft @@ -22212,7 +22212,7 @@ __metadata: resolution: "voting@workspace:examples/voting" dependencies: "@concordium/browser-wallet-api-helpers": ^2.0.0 - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 "@types/node": ^18.7.23 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -22337,7 +22337,7 @@ __metadata: resolution: "wccd@workspace:examples/wCCD" dependencies: "@concordium/react-components": ^0.2.0 - "@concordium/web-sdk": ^6.2.1 + "@concordium/web-sdk": ^6.3.0 "@craftamap/esbuild-plugin-html": ^0.4.0 "@thi.ng/leb128": ^2.1.18 "@types/node": ^18.7.23