kokio-sdk 2.1.0 → 3.0.1
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/README.md +40 -10
- package/dist/esm/abis/DeviceWallet.js +60 -59
- package/dist/esm/abis/ESIMWallet.js +263 -58
- package/dist/esm/abis/ESIMWalletFactory.js +2 -2
- package/dist/esm/abis/LazyWalletRegistry.js +68 -24
- package/dist/esm/abis/PaymentAdapter.js +861 -0
- package/dist/esm/abis/Registry.js +294 -18
- package/dist/esm/abis/RegistryHelper.js +101 -9
- package/dist/esm/abis/index.js +2 -1
- package/dist/esm/admin/config-admin.js +4 -0
- package/dist/esm/admin/interface/deviceWalletClass.js +3 -3
- package/dist/esm/admin/interface/eSIMWalletClass.js +6 -6
- package/dist/esm/admin/interface/lazyWalletRegistryClass.js +4 -1
- package/dist/esm/admin/interface/paymentAdapterClass.js +54 -0
- package/dist/esm/admin/interface/protocolAdminClass.js +6 -3
- package/dist/esm/admin/interface/registryClass.js +15 -6
- package/dist/esm/config.js +3 -0
- package/dist/esm/interface/deviceWalletClass.js +5 -5
- package/dist/esm/interface/eSIMWalletClass.js +10 -7
- package/dist/esm/interface/paymentAdapterClass.js +28 -0
- package/dist/esm/interface/registryClass.js +12 -3
- package/dist/esm/logic/admin/eSIMWallet.eoa.js +12 -10
- package/dist/esm/logic/admin/paymentAdapter.eoa.js +123 -0
- package/dist/esm/logic/admin/protocolAdmin.eoa.js +21 -3
- package/dist/esm/logic/admin/reads/deviceWallet.reads.js +2 -2
- package/dist/esm/logic/admin/reads/eSIMWallet.reads.js +8 -7
- package/dist/esm/logic/admin/reads/lazyWalletRegistry.reads.js +19 -2
- package/dist/esm/logic/admin/reads/paymentAdapter.reads.js +106 -0
- package/dist/esm/logic/admin/reads/registry.reads.js +34 -6
- package/dist/esm/logic/admin/registry.eoa.js +32 -8
- package/dist/esm/logic/constants.js +17 -87
- package/dist/esm/logic/deviceWallet.js +11 -11
- package/dist/esm/logic/eSIMWallet.js +51 -22
- package/dist/esm/logic/paymentAdapter.js +116 -0
- package/dist/esm/logic/registry.js +50 -5
- package/dist/esm/types-export.js +1 -1
- package/dist/esm/types.js +11 -1
- package/dist/types/abis/DeviceWallet.d.ts +50 -49
- package/dist/types/abis/ESIMWallet.d.ts +215 -55
- package/dist/types/abis/ESIMWalletFactory.d.ts +2 -2
- package/dist/types/abis/LazyWalletRegistry.d.ts +58 -24
- package/dist/types/abis/PaymentAdapter.d.ts +661 -0
- package/dist/types/abis/Registry.d.ts +233 -18
- package/dist/types/abis/RegistryHelper.d.ts +83 -9
- package/dist/types/abis/index.d.ts +2 -1
- package/dist/types/admin/config-admin.d.ts +2 -0
- package/dist/types/admin/interface/deviceWalletClass.d.ts +1 -1
- package/dist/types/admin/interface/eSIMWalletClass.d.ts +3 -3
- package/dist/types/admin/interface/lazyWalletRegistryClass.d.ts +1 -0
- package/dist/types/admin/interface/paymentAdapterClass.d.ts +20 -0
- package/dist/types/admin/interface/protocolAdminClass.d.ts +2 -1
- package/dist/types/admin/interface/registryClass.d.ts +6 -2
- package/dist/types/config.d.ts +2 -0
- package/dist/types/interface/constantsClass.d.ts +2 -2
- package/dist/types/interface/deviceWalletClass.d.ts +2 -2
- package/dist/types/interface/eSIMWalletClass.d.ts +5 -4
- package/dist/types/interface/paymentAdapterClass.d.ts +13 -0
- package/dist/types/interface/registryClass.d.ts +5 -2
- package/dist/types/logic/admin/eSIMWallet.eoa.d.ts +9 -6
- package/dist/types/logic/admin/paymentAdapter.eoa.d.ts +28 -0
- package/dist/types/logic/admin/protocolAdmin.eoa.d.ts +12 -2
- package/dist/types/logic/admin/reads/deviceWallet.reads.d.ts +1 -1
- package/dist/types/logic/admin/reads/eSIMWallet.reads.d.ts +5 -4
- package/dist/types/logic/admin/reads/lazyWalletRegistry.reads.d.ts +7 -0
- package/dist/types/logic/admin/reads/paymentAdapter.reads.d.ts +30 -0
- package/dist/types/logic/admin/reads/registry.reads.d.ts +13 -5
- package/dist/types/logic/admin/registry.eoa.d.ts +18 -8
- package/dist/types/logic/constants.d.ts +5 -17
- package/dist/types/logic/deviceWallet.d.ts +7 -7
- package/dist/types/logic/eSIMWallet.d.ts +29 -15
- package/dist/types/logic/paymentAdapter.d.ts +40 -0
- package/dist/types/logic/registry.d.ts +20 -5
- package/dist/types/types-export.d.ts +2 -1
- package/dist/types/types.d.ts +20 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -39,7 +39,8 @@ is ever held in the app.
|
|
|
39
39
|
|
|
40
40
|
You will need:
|
|
41
41
|
|
|
42
|
-
- a viem `WalletClient` connected to the target chain,
|
|
42
|
+
- a viem `WalletClient` connected to the target chain, carrying an `account`
|
|
43
|
+
and an explicit RPC URL (see the note under the example),
|
|
43
44
|
- the passkey `credentialId` and `rpId` registered for the device,
|
|
44
45
|
- a Pimlico API key and a gas policy id (used by the bundler and paymaster).
|
|
45
46
|
|
|
@@ -48,7 +49,11 @@ import { Kokio } from "kokio-sdk";
|
|
|
48
49
|
import { createWalletClient, http } from "viem";
|
|
49
50
|
import { baseSepolia } from "viem/chains";
|
|
50
51
|
|
|
51
|
-
const walletClient = createWalletClient({
|
|
52
|
+
const walletClient = createWalletClient({
|
|
53
|
+
account: knownAddress,
|
|
54
|
+
chain: baseSepolia,
|
|
55
|
+
transport: http(rpcUrl),
|
|
56
|
+
});
|
|
52
57
|
|
|
53
58
|
const kokio = new Kokio(
|
|
54
59
|
walletClient,
|
|
@@ -80,15 +85,26 @@ const session = new Kokio(
|
|
|
80
85
|
);
|
|
81
86
|
|
|
82
87
|
// 4. Send a user operation. The passkey signs it on the device.
|
|
83
|
-
const hash = await session.deviceWallet!.
|
|
84
|
-
await smartAccountClient.
|
|
88
|
+
const hash = await session.deviceWallet!.toggleAccessToFunds(eSIMWalletAddress, true);
|
|
89
|
+
const receipt = await smartAccountClient.waitForUserOperationReceipt({ hash });
|
|
90
|
+
if (!receipt.success) throw new Error("operation reverted");
|
|
85
91
|
```
|
|
86
92
|
|
|
93
|
+
Two things about the wallet client. It has to carry an `account`:
|
|
94
|
+
`getSmartWallet` refuses a client without one, though it never asks it for a
|
|
95
|
+
signature, since the passkey signs everything. And give `http()` a real RPC
|
|
96
|
+
URL, because the SDK reads `client.transport.url` to build the public client
|
|
97
|
+
it uses for contract reads.
|
|
98
|
+
|
|
99
|
+
Check `receipt.success`. An operation whose calls revert is still mined and
|
|
100
|
+
still returns a receipt, so the await resolving is not on its own proof the
|
|
101
|
+
write landed. `receipt.receipt.transactionHash` is the onchain transaction.
|
|
102
|
+
|
|
87
103
|
The contract surfaces (`deviceWallet`, `eSIMWallet`, `deviceWalletFactory`,
|
|
88
|
-
`eSIMWalletFactory`, `registry`, `P256Verifier`) are only
|
|
89
|
-
`smartAccountClient` is supplied, which is why the example
|
|
90
|
-
twice. Instance surfaces (`deviceWallet`, `eSIMWallet`) also
|
|
91
|
-
address. They stay `undefined` until you pass it.
|
|
104
|
+
`eSIMWalletFactory`, `registry`, `paymentAdapter`, `P256Verifier`) are only
|
|
105
|
+
present once a `smartAccountClient` is supplied, which is why the example
|
|
106
|
+
constructs `Kokio` twice. Instance surfaces (`deviceWallet`, `eSIMWallet`) also
|
|
107
|
+
need their contract address. They stay `undefined` until you pass it.
|
|
92
108
|
|
|
93
109
|
A device wallet often holds more than one eSIM wallet, and the app needs to
|
|
94
110
|
switch which one it is acting on without resolving the smart account again.
|
|
@@ -97,7 +113,15 @@ reference:
|
|
|
97
113
|
|
|
98
114
|
```ts
|
|
99
115
|
session.setESIMWalletAddress(anotherESIMWalletAddress);
|
|
100
|
-
const
|
|
116
|
+
const asset = "0x5553444300000000000000000000000000000000000000000000000000000000"; // "USDC"
|
|
117
|
+
const priceUSDCents = 500n; // $5.00
|
|
118
|
+
const maxAmountIn = await session.paymentAdapter!.quote(asset, priceUSDCents);
|
|
119
|
+
const hash = await session.eSIMWallet!.buyDataBundleWithToken(
|
|
120
|
+
{ id: bundleId, priceUSDCents, settlement: Settlement.DeviceWallet },
|
|
121
|
+
asset,
|
|
122
|
+
maxAmountIn,
|
|
123
|
+
paymentReference, // from the backend
|
|
124
|
+
);
|
|
101
125
|
```
|
|
102
126
|
|
|
103
127
|
`setDeviceWalletAddress` and `setESIMWalletAddress` each mutate the instance
|
|
@@ -151,7 +175,13 @@ admin.setDeviceWalletAddress(deviceWalletAddress);
|
|
|
151
175
|
await admin.deviceWallet!.deployESIMWallet(salt);
|
|
152
176
|
|
|
153
177
|
admin.setESIMWalletAddress(eSIMWalletAddress);
|
|
154
|
-
await admin.
|
|
178
|
+
const maxAmountIn = await admin.paymentAdapter.quote(asset, priceUSDCents);
|
|
179
|
+
await admin.eSIMWallet!.buyDataBundleWithToken(
|
|
180
|
+
{ id: bundleId, priceUSDCents, settlement: 0 }, // 0 = DeviceWallet pays
|
|
181
|
+
asset,
|
|
182
|
+
maxAmountIn,
|
|
183
|
+
paymentReference,
|
|
184
|
+
);
|
|
155
185
|
```
|
|
156
186
|
|
|
157
187
|
`setDeviceWalletAddress`, `setESIMWalletAddress`, and `setWalletClient` each mutate
|
|
@@ -20,7 +20,7 @@ const DeviceWallet = [
|
|
|
20
20
|
"internalType": "address"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
"name": "
|
|
23
|
+
"name": "_hasAccessToFunds",
|
|
24
24
|
"type": "bool",
|
|
25
25
|
"internalType": "bool"
|
|
26
26
|
}
|
|
@@ -30,7 +30,7 @@ const DeviceWallet = [
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"type": "function",
|
|
33
|
-
"name": "
|
|
33
|
+
"name": "canPullFunds",
|
|
34
34
|
"inputs": [
|
|
35
35
|
{
|
|
36
36
|
"name": "eSIMWalletAddress",
|
|
@@ -40,7 +40,7 @@ const DeviceWallet = [
|
|
|
40
40
|
],
|
|
41
41
|
"outputs": [
|
|
42
42
|
{
|
|
43
|
-
"name": "
|
|
43
|
+
"name": "isAllowedToPullFunds",
|
|
44
44
|
"type": "bool",
|
|
45
45
|
"internalType": "bool"
|
|
46
46
|
}
|
|
@@ -52,7 +52,7 @@ const DeviceWallet = [
|
|
|
52
52
|
"name": "deployESIMWallet",
|
|
53
53
|
"inputs": [
|
|
54
54
|
{
|
|
55
|
-
"name": "
|
|
55
|
+
"name": "_hasAccessToFunds",
|
|
56
56
|
"type": "bool",
|
|
57
57
|
"internalType": "bool"
|
|
58
58
|
},
|
|
@@ -400,8 +400,13 @@ const DeviceWallet = [
|
|
|
400
400
|
},
|
|
401
401
|
{
|
|
402
402
|
"type": "function",
|
|
403
|
-
"name": "
|
|
403
|
+
"name": "pullToken",
|
|
404
404
|
"inputs": [
|
|
405
|
+
{
|
|
406
|
+
"name": "_token",
|
|
407
|
+
"type": "address",
|
|
408
|
+
"internalType": "address"
|
|
409
|
+
},
|
|
405
410
|
{
|
|
406
411
|
"name": "_amount",
|
|
407
412
|
"type": "uint256",
|
|
@@ -469,7 +474,7 @@ const DeviceWallet = [
|
|
|
469
474
|
},
|
|
470
475
|
{
|
|
471
476
|
"type": "function",
|
|
472
|
-
"name": "
|
|
477
|
+
"name": "toggleAccessToFunds",
|
|
473
478
|
"inputs": [
|
|
474
479
|
{
|
|
475
480
|
"name": "_eSIMWalletAddress",
|
|
@@ -477,7 +482,7 @@ const DeviceWallet = [
|
|
|
477
482
|
"internalType": "address"
|
|
478
483
|
},
|
|
479
484
|
{
|
|
480
|
-
"name": "
|
|
485
|
+
"name": "_hasAccessToFunds",
|
|
481
486
|
"type": "bool",
|
|
482
487
|
"internalType": "bool"
|
|
483
488
|
}
|
|
@@ -654,7 +659,7 @@ const DeviceWallet = [
|
|
|
654
659
|
"internalType": "address"
|
|
655
660
|
},
|
|
656
661
|
{
|
|
657
|
-
"name": "
|
|
662
|
+
"name": "_hasAccessToFunds",
|
|
658
663
|
"type": "bool",
|
|
659
664
|
"indexed": false,
|
|
660
665
|
"internalType": "bool"
|
|
@@ -693,25 +698,6 @@ const DeviceWallet = [
|
|
|
693
698
|
],
|
|
694
699
|
"anonymous": false
|
|
695
700
|
},
|
|
696
|
-
{
|
|
697
|
-
"type": "event",
|
|
698
|
-
"name": "ETHAccessUpdated",
|
|
699
|
-
"inputs": [
|
|
700
|
-
{
|
|
701
|
-
"name": "_eSIMWalletAddress",
|
|
702
|
-
"type": "address",
|
|
703
|
-
"indexed": true,
|
|
704
|
-
"internalType": "address"
|
|
705
|
-
},
|
|
706
|
-
{
|
|
707
|
-
"name": "_hasAccessToETH",
|
|
708
|
-
"type": "bool",
|
|
709
|
-
"indexed": false,
|
|
710
|
-
"internalType": "bool"
|
|
711
|
-
}
|
|
712
|
-
],
|
|
713
|
-
"anonymous": false
|
|
714
|
-
},
|
|
715
701
|
{
|
|
716
702
|
"type": "event",
|
|
717
703
|
"name": "ETHCalledBack",
|
|
@@ -727,7 +713,7 @@ const DeviceWallet = [
|
|
|
727
713
|
},
|
|
728
714
|
{
|
|
729
715
|
"type": "event",
|
|
730
|
-
"name": "
|
|
716
|
+
"name": "FundsAccessUpdated",
|
|
731
717
|
"inputs": [
|
|
732
718
|
{
|
|
733
719
|
"name": "_eSIMWalletAddress",
|
|
@@ -736,10 +722,10 @@ const DeviceWallet = [
|
|
|
736
722
|
"internalType": "address"
|
|
737
723
|
},
|
|
738
724
|
{
|
|
739
|
-
"name": "
|
|
740
|
-
"type": "
|
|
725
|
+
"name": "_hasAccessToFunds",
|
|
726
|
+
"type": "bool",
|
|
741
727
|
"indexed": false,
|
|
742
|
-
"internalType": "
|
|
728
|
+
"internalType": "bool"
|
|
743
729
|
}
|
|
744
730
|
],
|
|
745
731
|
"anonymous": false
|
|
@@ -764,35 +750,33 @@ const DeviceWallet = [
|
|
|
764
750
|
"anonymous": false
|
|
765
751
|
},
|
|
766
752
|
{
|
|
767
|
-
"type": "
|
|
768
|
-
"name": "
|
|
753
|
+
"type": "event",
|
|
754
|
+
"name": "TokenSent",
|
|
769
755
|
"inputs": [
|
|
770
756
|
{
|
|
771
|
-
"name": "
|
|
757
|
+
"name": "_token",
|
|
772
758
|
"type": "address",
|
|
759
|
+
"indexed": true,
|
|
773
760
|
"internalType": "address"
|
|
774
|
-
}
|
|
775
|
-
]
|
|
776
|
-
},
|
|
777
|
-
{
|
|
778
|
-
"type": "error",
|
|
779
|
-
"name": "ESIMWalletNotOwnedByThisDeviceWallet",
|
|
780
|
-
"inputs": [
|
|
761
|
+
},
|
|
781
762
|
{
|
|
782
|
-
"name": "
|
|
763
|
+
"name": "_eSIMWalletAddress",
|
|
783
764
|
"type": "address",
|
|
765
|
+
"indexed": true,
|
|
784
766
|
"internalType": "address"
|
|
785
767
|
},
|
|
786
768
|
{
|
|
787
|
-
"name": "
|
|
788
|
-
"type": "
|
|
789
|
-
"
|
|
769
|
+
"name": "_amount",
|
|
770
|
+
"type": "uint256",
|
|
771
|
+
"indexed": false,
|
|
772
|
+
"internalType": "uint256"
|
|
790
773
|
}
|
|
791
|
-
]
|
|
774
|
+
],
|
|
775
|
+
"anonymous": false
|
|
792
776
|
},
|
|
793
777
|
{
|
|
794
778
|
"type": "error",
|
|
795
|
-
"name": "
|
|
779
|
+
"name": "ESIMWalletAlreadyAdded",
|
|
796
780
|
"inputs": [
|
|
797
781
|
{
|
|
798
782
|
"name": "eSIMWallet",
|
|
@@ -803,12 +787,17 @@ const DeviceWallet = [
|
|
|
803
787
|
},
|
|
804
788
|
{
|
|
805
789
|
"type": "error",
|
|
806
|
-
"name": "
|
|
790
|
+
"name": "ESIMWalletNotOwnedByThisDeviceWallet",
|
|
807
791
|
"inputs": [
|
|
808
792
|
{
|
|
809
793
|
"name": "eSIMWallet",
|
|
810
794
|
"type": "address",
|
|
811
795
|
"internalType": "address"
|
|
796
|
+
},
|
|
797
|
+
{
|
|
798
|
+
"name": "eSIMWalletOwner",
|
|
799
|
+
"type": "address",
|
|
800
|
+
"internalType": "address"
|
|
812
801
|
}
|
|
813
802
|
]
|
|
814
803
|
},
|
|
@@ -819,22 +808,23 @@ const DeviceWallet = [
|
|
|
819
808
|
},
|
|
820
809
|
{
|
|
821
810
|
"type": "error",
|
|
822
|
-
"name": "
|
|
823
|
-
"inputs": [
|
|
811
|
+
"name": "FundsAccessNotGrantableAtBind",
|
|
812
|
+
"inputs": [
|
|
813
|
+
{
|
|
814
|
+
"name": "eSIMWallet",
|
|
815
|
+
"type": "address",
|
|
816
|
+
"internalType": "address"
|
|
817
|
+
}
|
|
818
|
+
]
|
|
824
819
|
},
|
|
825
820
|
{
|
|
826
821
|
"type": "error",
|
|
827
|
-
"name": "
|
|
822
|
+
"name": "FundsAccessRevoked",
|
|
828
823
|
"inputs": [
|
|
829
824
|
{
|
|
830
|
-
"name": "
|
|
831
|
-
"type": "
|
|
832
|
-
"internalType": "
|
|
833
|
-
},
|
|
834
|
-
{
|
|
835
|
-
"name": "amount",
|
|
836
|
-
"type": "uint256",
|
|
837
|
-
"internalType": "uint256"
|
|
825
|
+
"name": "eSIMWallet",
|
|
826
|
+
"type": "address",
|
|
827
|
+
"internalType": "address"
|
|
838
828
|
}
|
|
839
829
|
]
|
|
840
830
|
},
|
|
@@ -893,6 +883,17 @@ const DeviceWallet = [
|
|
|
893
883
|
"name": "ReentrancyGuardReentrantCall",
|
|
894
884
|
"inputs": []
|
|
895
885
|
},
|
|
886
|
+
{
|
|
887
|
+
"type": "error",
|
|
888
|
+
"name": "SafeERC20FailedOperation",
|
|
889
|
+
"inputs": [
|
|
890
|
+
{
|
|
891
|
+
"name": "token",
|
|
892
|
+
"type": "address",
|
|
893
|
+
"internalType": "address"
|
|
894
|
+
}
|
|
895
|
+
]
|
|
896
|
+
},
|
|
896
897
|
{
|
|
897
898
|
"type": "error",
|
|
898
899
|
"name": "UnknownESIMWallet",
|