@@ -4,7 +4,7 @@ import { AddressPrefixChain, Chain, ChainRune, ExtrinsicSender } from "../../flu
4
4
import { SignerError } from "../../frame_metadata/mod.ts"
5
5
import { Rune , RunicArgs } from "../../rune/mod.ts"
6
6
7
- export type PjsSigner = { signPayload ( payload : any ) : Promise < { signature : string } > }
7
+ export type PjsSigner = { signPayload ? ( payload : any ) : Promise < { signature : string } > }
8
8
9
9
export function pjsSender < C extends AddressPrefixChain , CU > (
10
10
chain : ChainRune < C , CU > ,
@@ -43,7 +43,7 @@ export function pjsSender<C extends AddressPrefixChain, CU>(
43
43
payload . address = address
44
44
let sig
45
45
try {
46
- sig = await pjsSigner . signPayload ( payload )
46
+ sig = await pjsSigner . signPayload ! ( payload )
47
47
} catch ( e ) {
48
48
throw new SignerError ( e )
49
49
}
@@ -55,14 +55,18 @@ export function pjsSender<C extends AddressPrefixChain, CU>(
55
55
}
56
56
}
57
57
58
- const convertExtensionCodec = ( keyMap : Record < string , string > ) => {
58
+ type KeyHandler = ( codec : $ . Codec < any > ) => $ . Codec < any >
59
+
60
+ const simpleKeyHandler = ( pjsKey : string ) : KeyHandler => ( value ) => $ . field ( pjsKey , $pjs ( value ) )
61
+
62
+ const convertExtensionCodec = ( keyMap : Record < string , KeyHandler > ) => {
59
63
const visitor : $ . CodecVisitor < $ . Codec < any > > = new $ . CodecVisitor < $ . Codec < any > > ( )
60
64
. add ( $ . field , ( _ , key : string , value ) => {
61
- const pjsKey = keyMap [ key ]
62
- if ( pjsKey === undefined ) {
65
+ const handler = keyMap [ key ]
66
+ if ( handler === undefined ) {
63
67
throw new Error ( `pjs signer: unknown extension ${ key } ` )
64
68
}
65
- return $ . field ( pjsKey , $pjs ( value ) )
69
+ return handler ( value )
66
70
} )
67
71
. add ( $ . object , ( _ , ...fields ) => $ . object ( ...fields . map ( ( x ) => visitor . visit ( x ) ) ) )
68
72
return visitor
@@ -72,20 +76,30 @@ const keys: $.CodecVisitor<string[]> = new $.CodecVisitor<string[]>()
72
76
. add ( $ . field , ( _ , key : string , _v ) => [ key ] )
73
77
. add ( $ . object , ( _ , ...fields ) => fields . flatMap ( ( x ) => keys . visit ( x ) ) )
74
78
75
- const pjsExtraKeyMap : Record < string , string > = {
76
- CheckEra : "era" ,
77
- CheckMortality : "era" ,
78
- ChargeTransactionPayment : "tip" ,
79
- CheckNonce : "nonce" ,
79
+ // https://github.com/polkadot-js/api/tree/8282159/packages/types/src/extrinsic/signedExtensions
80
+
81
+ const pjsExtraKeyMap : Record < string , KeyHandler > = {
82
+ CheckEra : simpleKeyHandler ( "era" ) ,
83
+ CheckMortality : simpleKeyHandler ( "era" ) ,
84
+ ChargeTransactionPayment : simpleKeyHandler ( "tip" ) ,
85
+ CheckNonce : simpleKeyHandler ( "nonce" ) ,
86
+ ChargeAssetTxPayment : ( value ) => {
87
+ // https://github.com/polkadot-js/api/blob/8282159/packages/types/src/extrinsic/signedExtensions/statemint.ts
88
+ // pjs essentially spreads this into the extrinsic
89
+ const visitor : $ . CodecVisitor < $ . Codec < any > > = new $ . CodecVisitor < $ . Codec < any > > ( )
90
+ . add ( $ . field , ( _ , key , value ) => $ . field ( key , $pjs ( value ) ) )
91
+ . add ( $ . object , ( _ , ...fields ) => $ . object ( ...fields . map ( ( x ) => visitor . visit ( x ) ) ) )
92
+ return visitor . visit ( value )
93
+ } ,
80
94
}
81
95
82
- const pjsAdditionalKeyMap : Record < string , string > = {
83
- CheckEra : "blockHash" ,
84
- CheckMortality : "blockHash" ,
85
- CheckSpecVersion : "specVersion" ,
86
- CheckTxVersion : "transactionVersion" ,
87
- CheckVersion : "specVersion" ,
88
- CheckGenesis : "genesisHash" ,
96
+ const pjsAdditionalKeyMap : Record < string , KeyHandler > = {
97
+ CheckEra : simpleKeyHandler ( "blockHash" ) ,
98
+ CheckMortality : simpleKeyHandler ( "blockHash" ) ,
99
+ CheckSpecVersion : simpleKeyHandler ( "specVersion" ) ,
100
+ CheckTxVersion : simpleKeyHandler ( "transactionVersion" ) ,
101
+ CheckVersion : simpleKeyHandler ( "specVersion" ) ,
102
+ CheckGenesis : simpleKeyHandler ( "genesisHash" ) ,
89
103
}
90
104
91
105
function $pjs < T > ( $inner : $ . Codec < T > ) : $ . Codec < ( T & number ) | string > {
0 commit comments