@seams/wallet-server 0.23.0 → 0.25.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 +182 -5
- 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/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- 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,26 +439,44 @@ Inventory: 451 dependency records (42 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 |
|
|
449
459
|
| npm | borsh | 1.0.0 | Apache-2.0 | Near Inc |
|
|
450
460
|
| npm | bs58 | 6.0.0 | MIT | |
|
|
451
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 |
|
|
452
464
|
| npm | idb | 8.0.3 | ISC | Jake Archibald |
|
|
453
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 |
|
|
454
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> |
|
|
455
471
|
| npm | preact | 10.29.8 | MIT | |
|
|
472
|
+
| npm | protobufjs | 7.6.6 | BSD-3-Clause | Daniel Wirtz <dcode+protobufjs@dcode.io> |
|
|
456
473
|
| npm | pvtsutils | 1.3.6 | MIT | Miroshin Stepan<microshine@mail.ru>; PeculiarVentures |
|
|
457
474
|
| npm | pvutils | 1.1.5 | MIT | Miroshin Stepan microshine@mail.ru; Ryan Hurst rmh@unmitigatedrisk.com; Yury Strozhevsky yury@strozhevsky.com |
|
|
458
475
|
| npm | reflect-metadata | 0.2.2 | Apache-2.0 | Ron Buckton ron.buckton@microsoft.com |
|
|
459
476
|
| npm | tslib | 1.14.1 | 0BSD | Microsoft Corp. |
|
|
460
477
|
| npm | tslib | 2.8.1 | 0BSD | Microsoft Corp. |
|
|
461
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 |
|
|
462
480
|
| npm | viem | 2.46.0 | MIT | |
|
|
463
481
|
| npm | voice-glow | 0.2.1 | MIT | Jakub Antalik |
|
|
464
482
|
| npm | ws | 8.18.3 | MIT | Einar Otto Stangvik <einaros@gmail.com> (http://2x.io) |
|
|
@@ -480,6 +498,9 @@ but do not include a top-level license or notice file in the distributed package
|
|
|
480
498
|
- cargo:rustls-platform-verifier-android@0.1.1 — MIT OR Apache-2.0
|
|
481
499
|
- cargo:ts-rs-macros@12.0.1 — MIT
|
|
482
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
|
|
483
504
|
|
|
484
505
|
## Packaged license and notice texts
|
|
485
506
|
|
|
@@ -1864,6 +1885,50 @@ Applies to:
|
|
|
1864
1885
|
THE SOFTWARE.
|
|
1865
1886
|
|
|
1866
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
|
+
|
|
1867
1932
|
### 123a331b5dbf04c3
|
|
1868
1933
|
|
|
1869
1934
|
Packaged as: LICENSE-MIT
|
|
@@ -5056,6 +5121,86 @@ Applies to:
|
|
|
5056
5121
|
DEALINGS IN THE SOFTWARE.
|
|
5057
5122
|
|
|
5058
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
|
+
|
|
5059
5204
|
### 4a883ecc3bb1010f
|
|
5060
5205
|
|
|
5061
5206
|
Packaged as: LICENSE-MIT
|
|
@@ -10100,6 +10245,37 @@ Applies to:
|
|
|
10100
10245
|
END OF TERMS AND CONDITIONS
|
|
10101
10246
|
|
|
10102
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
|
+
|
|
10103
10279
|
### a825bd853ab71619
|
|
10104
10280
|
|
|
10105
10281
|
Packaged as: LICENSE-MIT
|
|
@@ -11918,7 +12094,7 @@ Applies to:
|
|
|
11918
12094
|
|
|
11919
12095
|
### c2cfccb812fe4821
|
|
11920
12096
|
|
|
11921
|
-
Packaged as: license-mit
|
|
12097
|
+
Packaged as: LICENSE, license-mit
|
|
11922
12098
|
|
|
11923
12099
|
Applies to:
|
|
11924
12100
|
|
|
@@ -11934,6 +12110,7 @@ Applies to:
|
|
|
11934
12110
|
- cargo:windows_x86_64_gnu@0.52.6
|
|
11935
12111
|
- cargo:windows_x86_64_gnullvm@0.52.6
|
|
11936
12112
|
- cargo:windows_x86_64_msvc@0.52.6
|
|
12113
|
+
- npm:@types/node@24.2.0
|
|
11937
12114
|
|
|
11938
12115
|
MIT License
|
|
11939
12116
|
|
|
@@ -12447,7 +12624,7 @@ Applies to:
|
|
|
12447
12624
|
|
|
12448
12625
|
### cfc7749b96f63bd3
|
|
12449
12626
|
|
|
12450
|
-
Packaged as: LICENSE-APACHE, LICENSE-APACHE.md, LICENSE-APACHE.txt
|
|
12627
|
+
Packaged as: LICENSE, LICENSE-APACHE, LICENSE-APACHE.md, LICENSE-APACHE.txt
|
|
12451
12628
|
|
|
12452
12629
|
Applies to:
|
|
12453
12630
|
|
|
@@ -12464,6 +12641,8 @@ Applies to:
|
|
|
12464
12641
|
- cargo:zeroize@1.9.0
|
|
12465
12642
|
- cargo:zeroize_derive@1.4.3
|
|
12466
12643
|
- cargo:zeroize_derive@1.5.0
|
|
12644
|
+
- npm:flatbuffers@25.9.23
|
|
12645
|
+
- npm:long@5.3.2
|
|
12467
12646
|
|
|
12468
12647
|
|
|
12469
12648
|
Apache License
|
|
@@ -13589,5 +13768,3 @@ Applies to:
|
|
|
13589
13768
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
|
|
13590
13769
|
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
13591
13770
|
DEALINGS IN THE SOFTWARE.
|
|
13592
|
-
|
|
13593
|
-
|
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.25.0"
|
|
7
7
|
},
|
|
8
8
|
"workers": {
|
|
9
9
|
"router": {
|
|
10
10
|
"entry": "cloudflare-router-ab/build/router/worker/shim.mjs",
|
|
11
|
-
"fingerprint": "
|
|
11
|
+
"fingerprint": "bc9fb3531e4fabd5ae4ed23ff25ef7060d0360d95d701ae35a4ef73e7ff53387",
|
|
12
12
|
"files": [
|
|
13
13
|
{
|
|
14
14
|
"path": "cloudflare-router-ab/build/router/build-stamp.json",
|
|
15
15
|
"bytes": 119,
|
|
16
|
-
"sha256": "
|
|
16
|
+
"sha256": "38700df34141a9a9b5f56993afc3a6a09e9340548a2ccda2eaeef358eea0ae19"
|
|
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": "23584c7b5170336c08c8eb2c20b681302ce7366cd393031e01613831547ad8b9",
|
|
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": "3d2be5ed3a35dabedd5458fdd979a519ca6f76b55a1bdadfab31cc92892464c9"
|
|
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": "d4b3936168fe307352644b1890d316e91e9218374f2b5d849cedd55301394fe7",
|
|
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": "5785a94db706cd3caa6cbe669a9dbfc43caeaccc0d6382d4703d16c933f0e7a1"
|
|
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": "9febdd06ee53f34d7d0c16669e5830a57997bad3ef5da9353fbdd69a20b65025",
|
|
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": "9781be0e16bbcb8eaa0c9d875e7c5da415c3cb1cd2ae4f1aebc86ff31c162287"
|
|
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": "1fe120b0e3fe25f8f93fc0c7a0be1aa7bb7801a353206106c94ac94c9271f1d4",
|
|
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": "fe47434169528ef5eecb5c0bf78370c7f78a577c62fd0224fe7c3e63d31af2d2"
|
|
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":1793120354569}
|
|
@@ -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":1793120528256}
|
|
Binary file
|
|
Binary file
|
|
@@ -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":1793120687937}
|
|
@@ -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":1793120085470}
|
|
@@ -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":1793120875624}
|
|
@@ -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;
|