@seams/wallet-server 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.md +186 -6
- package/artifact-manifest.json +23 -13
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/dist/esm/authorization/voiceIdDeviceProof.js +32 -0
- package/dist/esm/core/ThresholdService/validation.js +17 -1
- package/dist/esm/core/d1WalletAuthMethodStore.js +42 -1
- package/dist/esm/core/deviceLinking/linkedDeviceManagement.js +5 -0
- package/dist/esm/core/signingLanes/WalletExecutionLaneProjection.js +11 -2
- package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +23 -6
- package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceAuthorityInstallService.js +5 -5
- package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpRegistrationAttemptStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.js +6 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1VoiceIdActivation.js +139 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1VoiceIdSessions.js +138 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1VoiceIdWalletSessionChallenges.js +88 -0
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +12 -4
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthorityStore.js +14 -0
- package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +1 -0
- package/dist/esm/router/cloudflare.js +576 -10
- package/dist/esm/router/domains/ed25519Yao/export/routerAbEd25519YaoExport.js +5 -0
- package/dist/esm/router/domains/passkeyCustody/walletRecoveryFinalization.js +1 -0
- package/dist/esm/router/domains/signingOperations/routerAbNormalSigningAdmissionCore.js +1 -0
- package/dist/esm/router/domains/signingOperations/walletExecutionAdmission.js +1 -0
- package/dist/esm/router/domains/voiceId/voiceIdActivation.js +12 -0
- package/dist/esm/router/domains/voiceId/voiceIdSessions.js +0 -0
- package/dist/esm/router/framework/routeDefinitions.js +13 -0
- package/dist/esm/router/transport/fetch/createFetchRouter.js +5 -0
- package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +12 -1
- package/dist/esm/router/transport/fetch/routes/walletExecutionLanePreflight.js +1 -0
- package/dist/esm/router/transport/fetch/routes/walletVoiceIdActivation.js +139 -0
- package/dist/esm/router/transport/fetch/routes/walletVoiceIdNear.js +36 -0
- package/dist/esm/router/transport/fetch/routes/walletVoiceIdSessions.js +127 -0
- package/dist/esm/shared-ts/src/authorization/voiceIdDeviceAssertion.js +110 -0
- package/dist/esm/shared-ts/src/device-linking/authorityActivation.js +1 -0
- package/dist/esm/shared-ts/src/device-linking/committedSignerPackages.js +1 -1
- package/dist/esm/shared-ts/src/passkey-custody/custodyEnvelope.js +30 -3
- package/dist/esm/shared-ts/src/passkey-custody/custodySecretBinding.js +1 -1
- package/dist/esm/shared-ts/src/signing-lanes/recordParsers.js +15 -1
- package/dist/esm/shared-ts/src/threshold/sessionPolicy.js +2 -1
- package/dist/esm/shared-ts/src/utils/registrationIntent.js +1 -3
- package/dist/esm/shared-ts/src/utils/walletAuthAuthority.js +46 -2
- package/dist/esm/shared-ts/src/utils/walletAuthMethodRecord.js +116 -7
- package/dist/esm/shared-ts/src/wallet-recovery/walletRecoveryCommittedProjection.js +1 -0
- package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
- package/dist/types/shared-ts/src/authorization/voiceIdDeviceAssertion.d.ts +32 -0
- package/dist/types/shared-ts/src/device-linking/committedSignerPackages.d.ts +3 -1
- package/dist/types/shared-ts/src/device-linking/contracts.d.ts +8 -0
- package/dist/types/shared-ts/src/passkey-custody/custodyEnvelope.d.ts +29 -0
- package/dist/types/shared-ts/src/passkey-custody/custodySecretBinding.d.ts +1 -0
- package/dist/types/shared-ts/src/signing-lanes/execution.d.ts +2 -2
- package/dist/types/shared-ts/src/signing-lanes/recordParsers.d.ts +2 -1
- package/dist/types/shared-ts/src/signing-lanes/records.d.ts +10 -2
- package/dist/types/shared-ts/src/signing-lanes/rotation.d.ts +2 -2
- package/dist/types/shared-ts/src/threshold/sessionPolicy.d.ts +9 -0
- package/dist/types/shared-ts/src/utils/addWalletAuthMethod.d.ts +3 -3
- package/dist/types/shared-ts/src/utils/domainIds.d.ts +4 -5
- package/dist/types/shared-ts/src/utils/registrationIntent.d.ts +0 -1
- package/dist/types/shared-ts/src/utils/signerDomain.d.ts +3 -0
- package/dist/types/shared-ts/src/utils/walletAuthAuthority.d.ts +32 -2
- package/dist/types/shared-ts/src/utils/walletAuthMethodRecord.d.ts +15 -1
- package/dist/types/shared-ts/src/utils/walletCapabilityBindings.d.ts +20 -0
- package/dist/types/wallet-server/src/authorization/voiceIdDeviceProof.d.ts +29 -0
- package/dist/types/wallet-server/src/core/d1WalletAuthMethodStore.d.ts +13 -2
- package/dist/types/wallet-server/src/core/registrationContracts.d.ts +8 -0
- package/dist/types/wallet-server/src/core/signingLanes/WalletExecutionLaneProjection.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/passkeyCustody/d1PasskeyCustodyEnvelopeStore.d.ts +4 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1VoiceIdActivation.d.ts +14 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1VoiceIdSessions.d.ts +19 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1VoiceIdWalletSessionChallenges.d.ts +26 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletAuthMethodService.d.ts +1 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/wallet/d1WalletRelocationOwner.d.ts +25 -0
- package/dist/types/wallet-server/src/router/domains/voiceId/voiceIdActivation.d.ts +29 -0
- package/dist/types/wallet-server/src/router/domains/voiceId/voiceIdSessions.d.ts +35 -0
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +3 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/walletVoiceIdActivation.d.ts +12 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/walletVoiceIdNear.d.ts +14 -0
- package/dist/types/wallet-server/src/router/transport/fetch/routes/walletVoiceIdSessions.d.ts +19 -0
- package/migrations/d1-signer/0083_voiceid_wallet_session_challenges.sql +29 -0
- package/migrations/d1-signer/0084_voiceid_wallet_auth_methods.sql +373 -0
- package/package.json +1 -1
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -5,7 +5,7 @@ distributed Seams Wallet SDK, server runtime, Wasm, strict Workers, and CLI.
|
|
|
5
5
|
Dependency license expressions come from their package metadata. Packaged
|
|
6
6
|
license and notice wording is reproduced below with normalized whitespace.
|
|
7
7
|
|
|
8
|
-
Inventory:
|
|
8
|
+
Inventory: 469 dependency records (60 npm, 409 Cargo).
|
|
9
9
|
|
|
10
10
|
## Dependency inventory
|
|
11
11
|
|
|
@@ -439,25 +439,44 @@ Inventory: 450 dependency records (41 npm, 409 Cargo).
|
|
|
439
439
|
| npm | @peculiar/asn1-x509-attr | 2.6.0 | MIT | PeculiarVentures, LLC |
|
|
440
440
|
| npm | @peculiar/asn1-x509 | 2.6.0 | MIT | PeculiarVentures, LLC |
|
|
441
441
|
| npm | @peculiar/x509 | 1.14.3 | MIT | Miroshin Stepan<microshine@mail.ru>; Peculiar Ventures LLC |
|
|
442
|
+
| npm | @protobufjs/aspromise | 1.1.2 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
443
|
+
| npm | @protobufjs/base64 | 1.1.2 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
444
|
+
| npm | @protobufjs/codegen | 2.0.5 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
445
|
+
| npm | @protobufjs/eventemitter | 1.1.1 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
446
|
+
| npm | @protobufjs/fetch | 1.1.1 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
447
|
+
| npm | @protobufjs/float | 1.0.2 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
448
|
+
| npm | @protobufjs/path | 1.1.2 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
449
|
+
| npm | @protobufjs/pool | 1.1.0 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
450
|
+
| npm | @protobufjs/utf8 | 1.1.2 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
442
451
|
| npm | @scure/base | 1.2.6 | MIT | Paul Miller (https://paulmillr.com) |
|
|
443
452
|
| npm | @scure/bip32 | 1.7.0 | MIT | Paul Miller (https://paulmillr.com) |
|
|
444
453
|
| npm | @scure/bip39 | 1.6.0 | MIT | Paul Miller (https://paulmillr.com) |
|
|
445
454
|
| npm | @simplewebauthn/server | 13.2.2 | MIT | Matthew Miller <matthew@millerti.me> |
|
|
455
|
+
| npm | @types/node | 24.2.0 | MIT | Alberto Schiabel; Andrew Makarov; Anna Henningsen; Benjamin Toueg; David Junger; Dmitry Semigradsky; ExE Boss; Ilia Baryshnikov; Junxiao Shi; Linus Unnebäck; Marcin Kopacz; Matteo Collina; Microsoft TypeScript; Mohsen Azimi; Nikita Galkin; NodeJS Contributors; Piotr Błażejewicz; René; Sebastian Silbermann; Trivikram Kamat; Victor Perin; Wilco Bakker; Yagiz Nizipli; wafuwafu13 |
|
|
446
456
|
| npm | abitype | 1.2.3 | MIT | awkweb.eth <t@wevm.dev>; jxom.eth <j@wevm.dev> |
|
|
447
457
|
| npm | asn1js | 3.0.7 | BSD-3-Clause | Ryan Hurst rmh@unmitigatedrisk.com; Yury Strozhevsky yury@strozhevsky.com |
|
|
448
458
|
| npm | base-x | 5.0.1 | MIT | Daniel Cousens |
|
|
459
|
+
| npm | borsh | 1.0.0 | Apache-2.0 | Near Inc |
|
|
449
460
|
| npm | bs58 | 6.0.0 | MIT | |
|
|
450
461
|
| npm | eventemitter3 | 5.0.1 | MIT | Arnout Kazemier |
|
|
462
|
+
| npm | flatbuffers | 25.9.23 | Apache-2.0 | The FlatBuffers project |
|
|
463
|
+
| npm | guid-typescript | 1.0.9 | ISC | nicolas |
|
|
451
464
|
| npm | idb | 8.0.3 | ISC | Jake Archibald |
|
|
452
465
|
| npm | isows | 1.0.7 | MIT | |
|
|
466
|
+
| npm | long | 5.3.2 | Apache-2.0 | Daniel Wirtz <dcode@dcode.io> |
|
|
467
|
+
| npm | onnxruntime-common | 1.30.0 | MIT | fs-eire |
|
|
468
|
+
| npm | onnxruntime-web | 1.30.0 | MIT | fs-eire |
|
|
453
469
|
| npm | ox | 0.12.1 | MIT | |
|
|
470
|
+
| npm | platform | 1.3.6 | MIT | Benjamin Tan <demoneaux@gmail.com>; John-David Dalton <john.david.dalton@gmail.com>; Mathias Bynens <mathias@qiwi.be> |
|
|
454
471
|
| npm | preact | 10.29.8 | MIT | |
|
|
472
|
+
| npm | protobufjs | 7.6.6 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
455
473
|
| npm | pvtsutils | 1.3.6 | MIT | Miroshin Stepan<microshine@mail.ru>; PeculiarVentures |
|
|
456
474
|
| npm | pvutils | 1.1.5 | MIT | Miroshin Stepan microshine@mail.ru; Ryan Hurst rmh@unmitigatedrisk.com; Yury Strozhevsky yury@strozhevsky.com |
|
|
457
475
|
| npm | reflect-metadata | 0.2.2 | Apache-2.0 | Ron Buckton ron.buckton@microsoft.com |
|
|
458
476
|
| npm | tslib | 1.14.1 | 0BSD | Microsoft Corp. |
|
|
459
477
|
| npm | tslib | 2.8.1 | 0BSD | Microsoft Corp. |
|
|
460
478
|
| npm | tsyringe | 4.10.0 | MIT | Steven Hobson-Campbell |
|
|
479
|
+
| npm | undici-types | 7.10.0 | MIT | Daniele Belardi; Ethan Arrowood; Matteo Collina; Matthew Aitken; Robert Nagy; Szymon Marczak; Tomas Della Vedova |
|
|
461
480
|
| npm | viem | 2.46.0 | MIT | |
|
|
462
481
|
| npm | voice-glow | 0.2.1 | MIT | Jakub Antalik |
|
|
463
482
|
| npm | ws | 8.18.3 | MIT | Einar Otto Stangvik <einaros@gmail.com> (http://2x.io) |
|
|
@@ -479,6 +498,9 @@ but do not include a top-level license or notice file in the distributed package
|
|
|
479
498
|
- cargo:rustls-platform-verifier-android@0.1.1 — MIT OR Apache-2.0
|
|
480
499
|
- cargo:ts-rs-macros@12.0.1 — MIT
|
|
481
500
|
- cargo:ts-rs@12.0.1 — MIT
|
|
501
|
+
- npm:guid-typescript@1.0.9 — ISC
|
|
502
|
+
- npm:onnxruntime-common@1.30.0 — MIT
|
|
503
|
+
- npm:onnxruntime-web@1.30.0 — MIT
|
|
482
504
|
|
|
483
505
|
## Packaged license and notice texts
|
|
484
506
|
|
|
@@ -1863,6 +1885,50 @@ Applies to:
|
|
|
1863
1885
|
THE SOFTWARE.
|
|
1864
1886
|
|
|
1865
1887
|
|
|
1888
|
+
### 1033ec013241782e
|
|
1889
|
+
|
|
1890
|
+
Packaged as: LICENSE
|
|
1891
|
+
|
|
1892
|
+
Applies to:
|
|
1893
|
+
|
|
1894
|
+
- npm:@protobufjs/aspromise@1.1.2
|
|
1895
|
+
- npm:@protobufjs/base64@1.1.2
|
|
1896
|
+
- npm:@protobufjs/codegen@2.0.5
|
|
1897
|
+
- npm:@protobufjs/eventemitter@1.1.1
|
|
1898
|
+
- npm:@protobufjs/fetch@1.1.1
|
|
1899
|
+
- npm:@protobufjs/float@1.0.2
|
|
1900
|
+
- npm:@protobufjs/path@1.1.2
|
|
1901
|
+
- npm:@protobufjs/pool@1.1.0
|
|
1902
|
+
- npm:@protobufjs/utf8@1.1.2
|
|
1903
|
+
|
|
1904
|
+
Copyright (c) 2016, Daniel Wirtz All rights reserved.
|
|
1905
|
+
|
|
1906
|
+
Redistribution and use in source and binary forms, with or without
|
|
1907
|
+
modification, are permitted provided that the following conditions are
|
|
1908
|
+
met:
|
|
1909
|
+
|
|
1910
|
+
* Redistributions of source code must retain the above copyright
|
|
1911
|
+
notice, this list of conditions and the following disclaimer.
|
|
1912
|
+
* Redistributions in binary form must reproduce the above copyright
|
|
1913
|
+
notice, this list of conditions and the following disclaimer in the
|
|
1914
|
+
documentation and/or other materials provided with the distribution.
|
|
1915
|
+
* Neither the name of its author, nor the names of its contributors
|
|
1916
|
+
may be used to endorse or promote products derived from this software
|
|
1917
|
+
without specific prior written permission.
|
|
1918
|
+
|
|
1919
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
1920
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
1921
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
1922
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
1923
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
1924
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
1925
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
1926
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
1927
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
1928
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
1929
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1930
|
+
|
|
1931
|
+
|
|
1866
1932
|
### 123a331b5dbf04c3
|
|
1867
1933
|
|
|
1868
1934
|
Packaged as: LICENSE-MIT
|
|
@@ -2767,7 +2833,7 @@ Applies to:
|
|
|
2767
2833
|
|
|
2768
2834
|
### 23f18e03dc49df91
|
|
2769
2835
|
|
|
2770
|
-
Packaged as: LICENSE, LICENSE-MIT
|
|
2836
|
+
Packaged as: LICENSE, LICENSE-MIT, LICENSE-MIT.txt
|
|
2771
2837
|
|
|
2772
2838
|
Applies to:
|
|
2773
2839
|
|
|
@@ -2837,6 +2903,7 @@ Applies to:
|
|
|
2837
2903
|
- cargo:zmij@1.0.21
|
|
2838
2904
|
- cargo:zmij@1.0.23
|
|
2839
2905
|
- npm:@near-js/types@2.4.0
|
|
2906
|
+
- npm:borsh@1.0.0
|
|
2840
2907
|
|
|
2841
2908
|
Permission is hereby granted, free of charge, to any
|
|
2842
2909
|
person obtaining a copy of this software and associated
|
|
@@ -5054,6 +5121,86 @@ Applies to:
|
|
|
5054
5121
|
DEALINGS IN THE SOFTWARE.
|
|
5055
5122
|
|
|
5056
5123
|
|
|
5124
|
+
### 49d6a1c9a623784c
|
|
5125
|
+
|
|
5126
|
+
Packaged as: LICENSE
|
|
5127
|
+
|
|
5128
|
+
Applies to:
|
|
5129
|
+
|
|
5130
|
+
- npm:protobufjs@7.6.6
|
|
5131
|
+
|
|
5132
|
+
This license applies to all parts of protobuf.js except those files
|
|
5133
|
+
either explicitly including or referencing a different license or
|
|
5134
|
+
located in a directory containing a different LICENSE file.
|
|
5135
|
+
|
|
5136
|
+
---
|
|
5137
|
+
|
|
5138
|
+
Copyright (c) 2016, Daniel Wirtz All rights reserved.
|
|
5139
|
+
|
|
5140
|
+
Redistribution and use in source and binary forms, with or without
|
|
5141
|
+
modification, are permitted provided that the following conditions are
|
|
5142
|
+
met:
|
|
5143
|
+
|
|
5144
|
+
* Redistributions of source code must retain the above copyright
|
|
5145
|
+
notice, this list of conditions and the following disclaimer.
|
|
5146
|
+
* Redistributions in binary form must reproduce the above copyright
|
|
5147
|
+
notice, this list of conditions and the following disclaimer in the
|
|
5148
|
+
documentation and/or other materials provided with the distribution.
|
|
5149
|
+
* Neither the name of its author, nor the names of its contributors
|
|
5150
|
+
may be used to endorse or promote products derived from this software
|
|
5151
|
+
without specific prior written permission.
|
|
5152
|
+
|
|
5153
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
5154
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
5155
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
5156
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
5157
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
5158
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
5159
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
5160
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
5161
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
5162
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
5163
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
5164
|
+
|
|
5165
|
+
---
|
|
5166
|
+
|
|
5167
|
+
Code generated by the command line utilities is owned by the owner
|
|
5168
|
+
of the input file used when generating it. This code is not
|
|
5169
|
+
standalone and requires a support library to be linked with it. This
|
|
5170
|
+
support library is itself covered by the above license.
|
|
5171
|
+
|
|
5172
|
+
|
|
5173
|
+
### 4a161ebed4f1ef93
|
|
5174
|
+
|
|
5175
|
+
Packaged as: LICENSE
|
|
5176
|
+
|
|
5177
|
+
Applies to:
|
|
5178
|
+
|
|
5179
|
+
- npm:platform@1.3.6
|
|
5180
|
+
|
|
5181
|
+
Copyright 2014-2020 Benjamin Tan
|
|
5182
|
+
Copyright 2011-2013 John-David Dalton
|
|
5183
|
+
|
|
5184
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
5185
|
+
a copy of this software and associated documentation files (the
|
|
5186
|
+
"Software"), to deal in the Software without restriction, including
|
|
5187
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
5188
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
5189
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
5190
|
+
the following conditions:
|
|
5191
|
+
|
|
5192
|
+
The above copyright notice and this permission notice shall be
|
|
5193
|
+
included in all copies or substantial portions of the Software.
|
|
5194
|
+
|
|
5195
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
5196
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
5197
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
5198
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
5199
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
5200
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
5201
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
5202
|
+
|
|
5203
|
+
|
|
5057
5204
|
### 4a883ecc3bb1010f
|
|
5058
5205
|
|
|
5059
5206
|
Packaged as: LICENSE-MIT
|
|
@@ -7353,6 +7500,7 @@ Applies to:
|
|
|
7353
7500
|
- cargo:borsh@1.6.1
|
|
7354
7501
|
- cargo:borsh@1.8.0
|
|
7355
7502
|
- cargo:borsh@1.8.1
|
|
7503
|
+
- npm:borsh@1.0.0
|
|
7356
7504
|
|
|
7357
7505
|
Apache License
|
|
7358
7506
|
Version 2.0, January 2004
|
|
@@ -10097,6 +10245,37 @@ Applies to:
|
|
|
10097
10245
|
END OF TERMS AND CONDITIONS
|
|
10098
10246
|
|
|
10099
10247
|
|
|
10248
|
+
### a6db8096b2707bc0
|
|
10249
|
+
|
|
10250
|
+
Packaged as: LICENSE
|
|
10251
|
+
|
|
10252
|
+
Applies to:
|
|
10253
|
+
|
|
10254
|
+
- npm:undici-types@7.10.0
|
|
10255
|
+
|
|
10256
|
+
MIT License
|
|
10257
|
+
|
|
10258
|
+
Copyright (c) Matteo Collina and Undici contributors
|
|
10259
|
+
|
|
10260
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10261
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10262
|
+
in the Software without restriction, including without limitation the rights
|
|
10263
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10264
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10265
|
+
furnished to do so, subject to the following conditions:
|
|
10266
|
+
|
|
10267
|
+
The above copyright notice and this permission notice shall be included in all
|
|
10268
|
+
copies or substantial portions of the Software.
|
|
10269
|
+
|
|
10270
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
10271
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
10272
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
10273
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
10274
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
10275
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
10276
|
+
SOFTWARE.
|
|
10277
|
+
|
|
10278
|
+
|
|
10100
10279
|
### a825bd853ab71619
|
|
10101
10280
|
|
|
10102
10281
|
Packaged as: LICENSE-MIT
|
|
@@ -11915,7 +12094,7 @@ Applies to:
|
|
|
11915
12094
|
|
|
11916
12095
|
### c2cfccb812fe4821
|
|
11917
12096
|
|
|
11918
|
-
Packaged as: license-mit
|
|
12097
|
+
Packaged as: LICENSE, license-mit
|
|
11919
12098
|
|
|
11920
12099
|
Applies to:
|
|
11921
12100
|
|
|
@@ -11931,6 +12110,7 @@ Applies to:
|
|
|
11931
12110
|
- cargo:windows_x86_64_gnu@0.52.6
|
|
11932
12111
|
- cargo:windows_x86_64_gnullvm@0.52.6
|
|
11933
12112
|
- cargo:windows_x86_64_msvc@0.52.6
|
|
12113
|
+
- npm:@types/node@24.2.0
|
|
11934
12114
|
|
|
11935
12115
|
MIT License
|
|
11936
12116
|
|
|
@@ -12444,7 +12624,7 @@ Applies to:
|
|
|
12444
12624
|
|
|
12445
12625
|
### cfc7749b96f63bd3
|
|
12446
12626
|
|
|
12447
|
-
Packaged as: LICENSE-APACHE, LICENSE-APACHE.md, LICENSE-APACHE.txt
|
|
12627
|
+
Packaged as: LICENSE, LICENSE-APACHE, LICENSE-APACHE.md, LICENSE-APACHE.txt
|
|
12448
12628
|
|
|
12449
12629
|
Applies to:
|
|
12450
12630
|
|
|
@@ -12461,6 +12641,8 @@ Applies to:
|
|
|
12461
12641
|
- cargo:zeroize@1.9.0
|
|
12462
12642
|
- cargo:zeroize_derive@1.4.3
|
|
12463
12643
|
- cargo:zeroize_derive@1.5.0
|
|
12644
|
+
- npm:flatbuffers@25.9.23
|
|
12645
|
+
- npm:long@5.3.2
|
|
12464
12646
|
|
|
12465
12647
|
|
|
12466
12648
|
Apache License
|
|
@@ -13586,5 +13768,3 @@ Applies to:
|
|
|
13586
13768
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
13587
13769
|
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
13588
13770
|
DEALINGS IN THE SOFTWARE.
|
|
13589
|
-
|
|
13590
|
-
|
package/artifact-manifest.json
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
"walletSecurityPolicy": "scoped_seals_and_owner_proofs_v1",
|
|
4
4
|
"package": {
|
|
5
5
|
"name": "@seams/wallet-server",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.24.0"
|
|
7
7
|
},
|
|
8
8
|
"workers": {
|
|
9
9
|
"router": {
|
|
10
10
|
"entry": "cloudflare-router-ab/build/router/worker/shim.mjs",
|
|
11
|
-
"fingerprint": "
|
|
11
|
+
"fingerprint": "6ddb5e651770db6620ea6c32e819ec2d342ea633f5eec2a4e7edcf055322c60f",
|
|
12
12
|
"files": [
|
|
13
13
|
{
|
|
14
14
|
"path": "cloudflare-router-ab/build/router/build-stamp.json",
|
|
15
15
|
"bytes": 119,
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "4263de73def4a3454ccd32cae1edf398be77c0ab96676236bd15b5affb745512"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"path": "cloudflare-router-ab/build/router/index.js",
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
},
|
|
40
40
|
"deriver-a": {
|
|
41
41
|
"entry": "cloudflare-router-ab/build/deriver-a/worker/shim.mjs",
|
|
42
|
-
"fingerprint": "
|
|
42
|
+
"fingerprint": "da7b4be7de2cb4744e9bf926d7cc3d5e9cb0a4da71a574ed03e2cc5a63324abd",
|
|
43
43
|
"files": [
|
|
44
44
|
{
|
|
45
45
|
"path": "cloudflare-router-ab/build/deriver-a/build-stamp.json",
|
|
46
46
|
"bytes": 122,
|
|
47
|
-
"sha256": "
|
|
47
|
+
"sha256": "a2098d1915517951bc2bb8739503587b8f62a5282a9b72e9c68fa1c389732e70"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"path": "cloudflare-router-ab/build/deriver-a/index.js",
|
|
@@ -70,12 +70,12 @@
|
|
|
70
70
|
},
|
|
71
71
|
"deriver-b": {
|
|
72
72
|
"entry": "cloudflare-router-ab/build/deriver-b/worker/shim.mjs",
|
|
73
|
-
"fingerprint": "
|
|
73
|
+
"fingerprint": "b8c7b108d8246adb0280e0fd465c047d86a5f6328e840963a1dc461918ab5f33",
|
|
74
74
|
"files": [
|
|
75
75
|
{
|
|
76
76
|
"path": "cloudflare-router-ab/build/deriver-b/build-stamp.json",
|
|
77
77
|
"bytes": 122,
|
|
78
|
-
"sha256": "
|
|
78
|
+
"sha256": "258f61a014c49c0cfce17b15e188b3ba9d22643da0c1ae1d28092fbea3cce9e1"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
"path": "cloudflare-router-ab/build/deriver-b/index.js",
|
|
@@ -101,12 +101,12 @@
|
|
|
101
101
|
},
|
|
102
102
|
"signing-worker": {
|
|
103
103
|
"entry": "cloudflare-router-ab/build/signing-worker/worker/shim.mjs",
|
|
104
|
-
"fingerprint": "
|
|
104
|
+
"fingerprint": "565d10337fbe6468a3ea52d1974283fd469850946930dfc5c4d22279f5b86efd",
|
|
105
105
|
"files": [
|
|
106
106
|
{
|
|
107
107
|
"path": "cloudflare-router-ab/build/signing-worker/build-stamp.json",
|
|
108
108
|
"bytes": 127,
|
|
109
|
-
"sha256": "
|
|
109
|
+
"sha256": "04a4a9ba73c933fbb3ea406e5445005154afc7c8754f3a1f8c92b0acdacdad73"
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
"path": "cloudflare-router-ab/build/signing-worker/index.js",
|
|
@@ -132,12 +132,12 @@
|
|
|
132
132
|
},
|
|
133
133
|
"tenant-root-control-plane": {
|
|
134
134
|
"entry": "cloudflare-router-ab/build/tenant-root-control-plane/worker/shim.mjs",
|
|
135
|
-
"fingerprint": "
|
|
135
|
+
"fingerprint": "8efa3977d3148161d1c5e65f71e10339df1b46ec784215e626bf880296427d6a",
|
|
136
136
|
"files": [
|
|
137
137
|
{
|
|
138
138
|
"path": "cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json",
|
|
139
139
|
"bytes": 139,
|
|
140
|
-
"sha256": "
|
|
140
|
+
"sha256": "5c5188771e96f492b1141971e898979ad545304b429b66e99cddf0f26e65f25a"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"path": "cloudflare-router-ab/build/tenant-root-control-plane/index.js",
|
|
@@ -165,8 +165,8 @@
|
|
|
165
165
|
"migrations": {
|
|
166
166
|
"signer": {
|
|
167
167
|
"directory": "migrations/d1-signer",
|
|
168
|
-
"head": "
|
|
169
|
-
"fingerprint": "
|
|
168
|
+
"head": "0084_voiceid_wallet_auth_methods.sql",
|
|
169
|
+
"fingerprint": "724414d2bc4d41dd761541a0dc465145957275303a1c49610f1fbdc1e60c0316",
|
|
170
170
|
"files": [
|
|
171
171
|
{
|
|
172
172
|
"path": "migrations/d1-signer/0001_signer_d1_initial.sql",
|
|
@@ -577,6 +577,16 @@
|
|
|
577
577
|
"path": "migrations/d1-signer/0082_wallet_signature_completions.sql",
|
|
578
578
|
"bytes": 1781,
|
|
579
579
|
"sha256": "0b9372c31b650eee2b2dcb23396de327654cdc1b14fc51b460010ae656e39fc0"
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
"path": "migrations/d1-signer/0083_voiceid_wallet_session_challenges.sql",
|
|
583
|
+
"bytes": 1515,
|
|
584
|
+
"sha256": "ab2094d360b086944d8cb79bae3086993bdc2784e8e4ba4151d34dd5932cc3ec"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"path": "migrations/d1-signer/0084_voiceid_wallet_auth_methods.sql",
|
|
588
|
+
"bytes": 17185,
|
|
589
|
+
"sha256": "01af96f95131fb6ce8e42301bfdc2bd99ead260c817833b6b03a501f836d34a9"
|
|
580
590
|
}
|
|
581
591
|
]
|
|
582
592
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"profile":"release","wallet_objects":true,"features":"strict-worker-deriver-a-entrypoint","started_at_ms":
|
|
1
|
+
{"profile":"release","wallet_objects":true,"features":"strict-worker-deriver-a-entrypoint","started_at_ms":1793078068083}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"profile":"release","wallet_objects":true,"features":"strict-worker-deriver-b-entrypoint","started_at_ms":
|
|
1
|
+
{"profile":"release","wallet_objects":true,"features":"strict-worker-deriver-b-entrypoint","started_at_ms":1793078249784}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"profile":"release","wallet_objects":true,"features":"strict-worker-router-entrypoint","started_at_ms":
|
|
1
|
+
{"profile":"release","wallet_objects":true,"features":"strict-worker-router-entrypoint","started_at_ms":1793078412480}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"profile":"release","wallet_objects":true,"features":"strict-worker-signing-worker-entrypoint","started_at_ms":
|
|
1
|
+
{"profile":"release","wallet_objects":true,"features":"strict-worker-signing-worker-entrypoint","started_at_ms":1793077790894}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"profile":"release","wallet_objects":false,"features":"strict-worker-tenant-root-control-plane-entrypoint","started_at_ms":
|
|
1
|
+
{"profile":"release","wallet_objects":false,"features":"strict-worker-tenant-root-control-plane-entrypoint","started_at_ms":1793078605175}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { base64UrlDecode } from "../shared-ts/src/utils/base64.js";
|
|
2
|
+
import { sha256DigestB64u } from "../shared-ts/src/utils/canonicalPrimitives.js";
|
|
3
|
+
import { parseVoiceIdDeviceAssertion, voiceIdWalletSessionChallengeBytes } from "../shared-ts/src/authorization/voiceIdDeviceAssertion.js";
|
|
4
|
+
//#region src/authorization/voiceIdDeviceProof.ts
|
|
5
|
+
var VerifiedVoiceIdWalletSessionProof = class {
|
|
6
|
+
proofBrand = true;
|
|
7
|
+
constructor(challenge, deviceKeyId) {
|
|
8
|
+
this.challenge = challenge;
|
|
9
|
+
this.deviceKeyId = deviceKeyId;
|
|
10
|
+
this.proofBrand;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
function sameChallenge(left, right) {
|
|
14
|
+
return left.kind === right.kind && left.walletId === right.walletId && left.walletAuthMethodId === right.walletAuthMethodId && left.walletAuthorityId === right.walletAuthorityId && left.deviceKeyId === right.deviceKeyId && left.challengeId === right.challengeId && left.nonce === right.nonce && left.requestOrigin === right.requestOrigin && left.audience === right.audience && left.issuedAtMs === right.issuedAtMs && left.expiresAtMs === right.expiresAtMs;
|
|
15
|
+
}
|
|
16
|
+
/** Only this server boundary turns a signed device result into verified proof. */
|
|
17
|
+
async function verifyVoiceIdWalletSessionAssertion(input) {
|
|
18
|
+
const challenge = input.expectedChallenge;
|
|
19
|
+
if (!Number.isSafeInteger(input.nowMs) || input.nowMs < challenge.issuedAtMs - 5e3 || input.nowMs >= challenge.expiresAtMs || challenge.walletId !== input.registered.walletId || challenge.walletAuthMethodId !== input.registered.walletAuthMethodId || challenge.walletAuthorityId !== input.registered.walletAuthorityId || challenge.deviceKeyId !== input.registered.deviceKeyId) throw new Error("VoiceID Wallet Session challenge is unavailable");
|
|
20
|
+
const assertion = parseVoiceIdDeviceAssertion(input.assertion);
|
|
21
|
+
if (!sameChallenge(assertion.challenge, challenge)) throw new Error("VoiceID assertion names a different challenge");
|
|
22
|
+
const publicKeyBytes = base64UrlDecode(input.registered.publicKeyB64u);
|
|
23
|
+
if (await sha256DigestB64u(publicKeyBytes) !== input.registered.deviceKeyId) throw new Error("VoiceID device key identity is invalid");
|
|
24
|
+
const publicKey = await crypto.subtle.importKey("raw", publicKeyBytes, "Ed25519", false, ["verify"]);
|
|
25
|
+
if (!await crypto.subtle.verify("Ed25519", publicKey, base64UrlDecode(assertion.signatureB64u), voiceIdWalletSessionChallengeBytes(challenge))) throw new Error("VoiceID device signature is invalid");
|
|
26
|
+
if (!await input.consumeChallenge(challenge, input.nowMs)) throw new Error("VoiceID challenge was already consumed");
|
|
27
|
+
return new VerifiedVoiceIdWalletSessionProof(challenge, input.registered.deviceKeyId);
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { verifyVoiceIdWalletSessionAssertion };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=voiceIdDeviceProof.js.map
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { parseWebAuthnRpId } from "../../shared-ts/src/utils/domainIds.js";
|
|
2
2
|
import { normalizeOptionalString } from "../../shared-ts/src/utils/normalize.js";
|
|
3
3
|
import { isPlainObject } from "../../shared-ts/src/utils/validation.js";
|
|
4
|
+
import { rejectUnknownFields } from "../../shared-ts/src/utils/exactRecord.js";
|
|
4
5
|
import { base64UrlDecode } from "../../shared-ts/src/utils/base64.js";
|
|
6
|
+
import { parseDigestB64u } from "../../shared-ts/src/utils/canonicalPrimitives.js";
|
|
5
7
|
import "../../shared-ts/src/utils/encoders.js";
|
|
6
|
-
import { isEmailOtpWalletAuthAuthority, isPasskeyWalletAuthAuthority } from "../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
8
|
+
import { isEmailOtpWalletAuthAuthority, isPasskeyWalletAuthAuthority, isVoiceIdWalletAuthAuthority } from "../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
7
9
|
//#region src/core/ThresholdService/validation.ts
|
|
8
10
|
function decodeFixedB64u(value, expectedLength) {
|
|
9
11
|
try {
|
|
@@ -41,6 +43,15 @@ function parseThresholdEd25519AuthorityScope(raw) {
|
|
|
41
43
|
if (!isPlainObject(raw)) return null;
|
|
42
44
|
const kind = normalizeOptionalString(raw.kind);
|
|
43
45
|
switch (kind) {
|
|
46
|
+
case "voiceid": try {
|
|
47
|
+
rejectUnknownFields(raw, ["kind", "deviceKeyId"], "device authority scope");
|
|
48
|
+
return {
|
|
49
|
+
kind: "voiceid",
|
|
50
|
+
deviceKeyId: parseDigestB64u(raw.deviceKeyId)
|
|
51
|
+
};
|
|
52
|
+
} catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
44
55
|
case "passkey_rp": {
|
|
45
56
|
const rpId = parseWebAuthnRpId(raw.rpId);
|
|
46
57
|
if (!rpId.ok || normalizeOptionalString(raw.proofKind) || normalizeOptionalString(raw.email) || normalizeOptionalString(raw.provider) || normalizeOptionalString(raw.providerUserId) || normalizeOptionalString(raw.challengeId) || normalizeOptionalString(raw.googleEmailOtpRegistrationAttemptId) || normalizeOptionalString(raw.googleEmailOtpRegistrationOfferId) || normalizeOptionalString(raw.googleEmailOtpRegistrationCandidateId)) return null;
|
|
@@ -73,11 +84,16 @@ function thresholdEd25519AuthorityScopeFromWalletAuthAuthority(authority) {
|
|
|
73
84
|
provider: authority.factor.provider,
|
|
74
85
|
providerUserId: authority.factor.providerUserId
|
|
75
86
|
};
|
|
87
|
+
if (isVoiceIdWalletAuthAuthority(authority)) return {
|
|
88
|
+
kind: "voiceid",
|
|
89
|
+
deviceKeyId: authority.factor.deviceKeyId
|
|
90
|
+
};
|
|
76
91
|
throw new Error("[threshold-ed25519] unsupported wallet auth authority");
|
|
77
92
|
}
|
|
78
93
|
function thresholdEd25519AuthorityScopesMatch(left, right) {
|
|
79
94
|
if (left.kind !== right.kind) return false;
|
|
80
95
|
switch (left.kind) {
|
|
96
|
+
case "voiceid": return right.kind === "voiceid" && left.deviceKeyId === right.deviceKeyId;
|
|
81
97
|
case "passkey_rp": return right.kind === "passkey_rp" && left.rpId === right.rpId;
|
|
82
98
|
case "email_otp": return right.kind === "email_otp" && left.provider === right.provider && left.providerUserId === right.providerUserId;
|
|
83
99
|
}
|
|
@@ -143,6 +143,8 @@ const WALLET_AUTH_METHOD_STORE_D1_SCHEMA_V2_SQL = Object.freeze([
|
|
|
143
143
|
updated_at_ms INTEGER NOT NULL,
|
|
144
144
|
activated_at_ms INTEGER,
|
|
145
145
|
revoked_at_ms INTEGER,
|
|
146
|
+
provider TEXT,
|
|
147
|
+
provider_user_id TEXT,
|
|
146
148
|
PRIMARY KEY (namespace, org_id, project_id, env_id, wallet_auth_method_id),
|
|
147
149
|
FOREIGN KEY (
|
|
148
150
|
namespace,
|
|
@@ -159,7 +161,7 @@ const WALLET_AUTH_METHOD_STORE_D1_SCHEMA_V2_SQL = Object.freeze([
|
|
|
159
161
|
),
|
|
160
162
|
CHECK (length(wallet_id) > 0),
|
|
161
163
|
CHECK (length(wallet_authority_id) > 0),
|
|
162
|
-
CHECK (kind IN ('passkey', 'email_otp')),
|
|
164
|
+
CHECK (kind IN ('passkey', 'email_otp', 'voiceid')),
|
|
163
165
|
CHECK (status IN ('pending_local_install', 'active', 'revoked')),
|
|
164
166
|
CHECK (length(wallet_auth_method_id) > 0),
|
|
165
167
|
CHECK (length(auth_identifier_key) > 0),
|
|
@@ -193,6 +195,18 @@ const WALLET_AUTH_METHOD_STORE_D1_SCHEMA_V2_SQL = Object.freeze([
|
|
|
193
195
|
AND registration_authority_id IS NOT NULL
|
|
194
196
|
AND length(registration_authority_id) > 0
|
|
195
197
|
AND auth_identifier_key = email_hash_hex)
|
|
198
|
+
OR
|
|
199
|
+
(kind = 'voiceid'
|
|
200
|
+
AND rp_id = ''
|
|
201
|
+
AND credential_id_b64u IS NULL
|
|
202
|
+
AND credential_public_key_b64u IS NOT NULL
|
|
203
|
+
AND length(credential_public_key_b64u) = 43
|
|
204
|
+
AND email_hash_hex IS NULL
|
|
205
|
+
AND registration_authority_id IS NULL
|
|
206
|
+
AND provider IS NULL
|
|
207
|
+
AND provider_user_id IS NULL
|
|
208
|
+
AND length(auth_identifier_key) = 43
|
|
209
|
+
AND COALESCE(auth_identifier_key = json_extract(record_json, '$.deviceKeyId'), 0))
|
|
196
210
|
),
|
|
197
211
|
CHECK (json_extract(record_json, '$.version') = 'wallet_auth_method_v2'),
|
|
198
212
|
CHECK (json_extract(record_json, '$.walletAuthMethodId') = wallet_auth_method_id),
|
|
@@ -212,6 +226,10 @@ const WALLET_AUTH_METHOD_STORE_D1_SCHEMA_V2_SQL = Object.freeze([
|
|
|
212
226
|
(kind = 'email_otp'
|
|
213
227
|
AND json_extract(record_json, '$.emailHashHex') = email_hash_hex
|
|
214
228
|
AND json_extract(record_json, '$.registrationAuthorityId') = registration_authority_id)
|
|
229
|
+
OR
|
|
230
|
+
(kind = 'voiceid'
|
|
231
|
+
AND COALESCE(json_extract(record_json, '$.deviceKeyId') = auth_identifier_key, 0)
|
|
232
|
+
AND COALESCE(json_extract(record_json, '$.devicePublicKeyB64u') = credential_public_key_b64u, 0))
|
|
215
233
|
)
|
|
216
234
|
)
|
|
217
235
|
`,
|
|
@@ -226,6 +244,13 @@ const WALLET_AUTH_METHOD_STORE_D1_SCHEMA_V2_SQL = Object.freeze([
|
|
|
226
244
|
wallet_authority_id,
|
|
227
245
|
status
|
|
228
246
|
)
|
|
247
|
+
`,
|
|
248
|
+
`
|
|
249
|
+
CREATE UNIQUE INDEX IF NOT EXISTS wallet_auth_methods_v2_voiceid_key_uidx
|
|
250
|
+
ON wallet_auth_methods (
|
|
251
|
+
namespace, org_id, project_id, env_id, auth_identifier_key
|
|
252
|
+
)
|
|
253
|
+
WHERE kind = 'voiceid'
|
|
229
254
|
`,
|
|
230
255
|
`
|
|
231
256
|
CREATE UNIQUE INDEX IF NOT EXISTS wallet_auth_methods_v2_passkey_uidx
|
|
@@ -322,6 +347,16 @@ function bindWalletAuthMethodIdentityV2(record) {
|
|
|
322
347
|
activatedAtMs: record.status === "pending_local_install" ? null : record.activatedAtMs,
|
|
323
348
|
revokedAtMs: record.status === "revoked" ? record.revokedAtMs : null
|
|
324
349
|
};
|
|
350
|
+
case "voiceid": return {
|
|
351
|
+
rpId: "",
|
|
352
|
+
authIdentifierKey: record.deviceKeyId,
|
|
353
|
+
credentialIdB64u: null,
|
|
354
|
+
credentialPublicKeyB64u: record.devicePublicKeyB64u,
|
|
355
|
+
emailHashHex: null,
|
|
356
|
+
registrationAuthorityId: null,
|
|
357
|
+
activatedAtMs: record.status === "pending_local_install" ? null : record.activatedAtMs,
|
|
358
|
+
revokedAtMs: record.status === "revoked" ? record.revokedAtMs : null
|
|
359
|
+
};
|
|
325
360
|
}
|
|
326
361
|
}
|
|
327
362
|
function walletAuthMethodV2IdentityColumns(record) {
|
|
@@ -646,6 +681,12 @@ var D1WalletAuthMethodStore = class {
|
|
|
646
681
|
await this.v2Schema.ensure();
|
|
647
682
|
return normalizeWalletAuthMethodV2(await readD1WalletAuthMethodJsonById(this.table.database, this.table.scope, String(input.walletAuthMethodId)));
|
|
648
683
|
}
|
|
684
|
+
/** Checks the method record. Session issuance must also check its parent authority. */
|
|
685
|
+
async getActiveVoiceIdV2(input) {
|
|
686
|
+
const record = await this.readByIdV2({ walletAuthMethodId: input.walletAuthMethodId });
|
|
687
|
+
if (!record || record.kind !== "voiceid" || record.status !== "active" || record.walletId !== input.walletId || record.walletAuthorityId !== input.walletAuthorityId) return null;
|
|
688
|
+
return record;
|
|
689
|
+
}
|
|
649
690
|
async getPasskeyV2(input) {
|
|
650
691
|
await this.v2Schema.ensure();
|
|
651
692
|
const rpId = normalizeOptionalTrimmedString(input.rpId);
|
|
@@ -185,6 +185,11 @@ async function credentialMetadataV1(credentials, walletId, authMethod) {
|
|
|
185
185
|
kind: "email_otp",
|
|
186
186
|
walletAuthMethodId: authMethod.walletAuthMethodId
|
|
187
187
|
};
|
|
188
|
+
if (authMethod.kind === "voiceid") return {
|
|
189
|
+
kind: "voiceid",
|
|
190
|
+
walletAuthMethodId: authMethod.walletAuthMethodId,
|
|
191
|
+
deviceKeyId: authMethod.deviceKeyId
|
|
192
|
+
};
|
|
188
193
|
const device = await credentials.readPasskeyDeviceInfoV1({
|
|
189
194
|
walletId,
|
|
190
195
|
credentialIdB64u: authMethod.credentialIdB64u
|
|
@@ -6,12 +6,12 @@ import { parseEd25519PublicKeyB64u, parseKeyCreationSignerSlot, parseSecp256k1Co
|
|
|
6
6
|
import { base58Encode } from "../../shared-ts/src/utils/base58.js";
|
|
7
7
|
import { routerAbMpcMaterialActivationRefFromWire, sameRouterAbMpcMaterialActivationRef } from "../../shared-ts/src/utils/routerAbNormalSigningIdentity.js";
|
|
8
8
|
import { deriveEvmFamilySigningKeySlotId } from "../../shared-ts/src/signing-lanes/evmFamilySigningKeySlotId.js";
|
|
9
|
-
import { walletAuthAuthorityRef } from "../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
9
|
+
import { buildVoiceIdWalletAuthAuthority, walletAuthAuthorityRef } from "../../shared-ts/src/utils/walletAuthAuthority.js";
|
|
10
10
|
import { sameRouterAbEcdsaDerivationPublicCapabilityV1, sameRouterAbEcdsaDerivationPublicIdentityV1, sameRouterAbEcdsaRegistrationActivationReceiptV1, sameRouterAbServerIdentityV1 } from "../../shared-ts/src/utils/routerAbEcdsaDerivation.js";
|
|
11
11
|
import { parseNearEd25519SigningKeyId } from "../../shared-ts/src/utils/registrationIds.js";
|
|
12
12
|
import { buildOwnerLaneParticipantContinuityV1, computeOwnerLaneParticipantBindingDigestV1, parseWalletSignerId } from "../../shared-ts/src/signing-lanes/ownerContinuity.js";
|
|
13
13
|
import "../../shared-ts/src/signing-lanes/index.js";
|
|
14
|
-
import { buildActiveSigningLaneLifecycle, buildActiveWalletKeyLifecycle, buildEd25519WalletKeyRecord, buildEvmFamilyWalletKeyRecord, buildOwnerEmailOtpSigningLaneRecord, buildOwnerPasskeySigningLaneRecord, parseWalletKeyVersion } from "../../shared-ts/src/signing-lanes/recordParsers.js";
|
|
14
|
+
import { buildActiveSigningLaneLifecycle, buildActiveWalletKeyLifecycle, buildEd25519WalletKeyRecord, buildEvmFamilyWalletKeyRecord, buildOwnerEmailOtpSigningLaneRecord, buildOwnerPasskeySigningLaneRecord, buildOwnerVoiceIdSigningLaneRecord, parseWalletKeyVersion } from "../../shared-ts/src/signing-lanes/recordParsers.js";
|
|
15
15
|
//#region src/core/signingLanes/WalletExecutionLaneProjection.ts
|
|
16
16
|
const SOURCE_IDENTITY_DOMAIN = "seams/wallet-execution-lane/source-identity/v1";
|
|
17
17
|
const ED25519_RECEIPT_DOMAIN = "seams/wallet-execution-lane/ed25519-receipt/v1";
|
|
@@ -191,6 +191,7 @@ async function buildOwnerLane(input) {
|
|
|
191
191
|
switch (input.authMethod.kind) {
|
|
192
192
|
case "passkey": return buildOwnerPasskeySigningLaneRecord(base);
|
|
193
193
|
case "email_otp": return buildOwnerEmailOtpSigningLaneRecord(base);
|
|
194
|
+
case "voiceid": return buildOwnerVoiceIdSigningLaneRecord(base);
|
|
194
195
|
}
|
|
195
196
|
}
|
|
196
197
|
async function ownerContinuity(input) {
|
|
@@ -270,6 +271,14 @@ function walletAuthorityForAuthMethod(authMethod, authSource) {
|
|
|
270
271
|
bindingId: authMethod.walletAuthMethodId
|
|
271
272
|
};
|
|
272
273
|
}
|
|
274
|
+
if (authMethod.kind === "voiceid") {
|
|
275
|
+
if (authSource.kind !== "voiceid" || authSource.deviceKeyId !== authMethod.deviceKeyId) return null;
|
|
276
|
+
return buildVoiceIdWalletAuthAuthority({
|
|
277
|
+
walletId: authMethod.walletId,
|
|
278
|
+
walletAuthMethodId: authMethod.walletAuthMethodId,
|
|
279
|
+
deviceKeyId: authMethod.deviceKeyId
|
|
280
|
+
});
|
|
281
|
+
}
|
|
273
282
|
if (authSource.kind !== "oidc_provider") return null;
|
|
274
283
|
const providerUserId = parseEmailOtpProviderUserId(authSource.providerSubject);
|
|
275
284
|
if (!providerUserId.ok) return null;
|