@novasamatech/host-api 0.5.0-18 → 0.5.0-19
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 +103 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +2 -0
- package/dist/helpers.d.ts +33 -0
- package/dist/helpers.js +46 -0
- package/dist/hostApi.d.ts +31 -0
- package/dist/hostApi.js +345 -0
- package/dist/index.d.ts +18 -7
- package/dist/index.js +14 -6
- package/dist/protocol/commonCodecs.d.ts +42 -0
- package/dist/protocol/commonCodecs.js +64 -0
- package/dist/protocol/commonCodecs.spec.js +72 -0
- package/dist/protocol/impl.d.ts +93 -0
- package/dist/protocol/impl.js +97 -0
- package/dist/protocol/messageCodec.d.ts +1245 -0
- package/dist/protocol/messageCodec.js +24 -0
- package/dist/protocol/types.js +1 -0
- package/dist/protocol/v1/accounts.d.ts +265 -0
- package/dist/{interactions → protocol}/v1/accounts.js +11 -11
- package/dist/{interactions → protocol}/v1/chat.d.ts +129 -83
- package/dist/{interactions → protocol}/v1/chat.js +12 -14
- package/dist/{interactions → protocol}/v1/createTransaction.d.ts +119 -78
- package/dist/protocol/v1/createTransaction.js +58 -0
- package/dist/{interactions → protocol}/v1/feature.d.ts +8 -4
- package/dist/protocol/v1/feature.js +7 -0
- package/dist/protocol/v1/handshake.d.ts +85 -0
- package/dist/protocol/v1/handshake.js +12 -0
- package/dist/{interactions → protocol}/v1/jsonRpc.d.ts +6 -2
- package/dist/{interactions → protocol}/v1/jsonRpc.js +2 -2
- package/dist/protocol/v1/permission.d.ts +90 -0
- package/dist/protocol/v1/permission.js +18 -0
- package/dist/protocol/v1/sign.d.ts +152 -0
- package/dist/{interactions → protocol}/v1/sign.js +6 -6
- package/dist/{interactions → protocol}/v1/statementStore.d.ts +77 -20
- package/dist/{interactions → protocol}/v1/statementStore.js +6 -6
- package/dist/protocol/v1/storage.d.ts +87 -0
- package/dist/{interactions → protocol}/v1/storage.js +5 -5
- package/dist/provider.d.ts +8 -0
- package/dist/provider.js +1 -0
- package/dist/transport.d.ts +3 -0
- package/dist/transport.js +248 -0
- package/dist/types.d.ts +15 -15
- package/package.json +2 -4
- package/dist/commonEncoders.d.ts +0 -2
- package/dist/commonEncoders.js +0 -8
- package/dist/createTransport.d.ts +0 -6
- package/dist/createTransport.js +0 -183
- package/dist/createTransportEncoder.d.ts +0 -7
- package/dist/createTransportEncoder.js +0 -5
- package/dist/interactions/accounts.d.ts +0 -12
- package/dist/interactions/accounts.js +0 -40
- package/dist/interactions/commonCodecs.d.ts +0 -7
- package/dist/interactions/commonCodecs.js +0 -8
- package/dist/interactions/features.d.ts +0 -13
- package/dist/interactions/features.js +0 -13
- package/dist/interactions/handshake.d.ts +0 -2
- package/dist/interactions/handshake.js +0 -3
- package/dist/interactions/message.d.ts +0 -1704
- package/dist/interactions/message.js +0 -60
- package/dist/interactions/papiProvider.d.ts +0 -8
- package/dist/interactions/papiProvider.js +0 -10
- package/dist/interactions/sign.d.ts +0 -118
- package/dist/interactions/sign.js +0 -127
- package/dist/interactions/v1/accounts.d.ts +0 -128
- package/dist/interactions/v1/createTransaction.js +0 -41
- package/dist/interactions/v1/feature.js +0 -7
- package/dist/interactions/v1/handshake.d.ts +0 -28
- package/dist/interactions/v1/handshake.js +0 -12
- package/dist/interactions/v1/permission.d.ts +0 -48
- package/dist/interactions/v1/permission.js +0 -18
- package/dist/interactions/v1/sign.d.ts +0 -92
- package/dist/interactions/v1/storage.d.ts +0 -41
- package/dist/messageEncoder.d.ts +0 -178
- package/dist/messageEncoder.js +0 -34
- /package/dist/{interactions/types.js → protocol/commonCodecs.spec.d.ts} +0 -0
- /package/dist/{interactions → protocol}/types.d.ts +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
export declare const SigningErr: [import("scale-ts").Encoder<(Error & {
|
|
2
|
+
name: "SigningErr::Rejected";
|
|
3
|
+
className: string;
|
|
4
|
+
payload: undefined;
|
|
5
|
+
}) | (Error & {
|
|
6
|
+
name: "SigningErr::Unknown";
|
|
7
|
+
className: string;
|
|
8
|
+
payload: {
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
11
|
+
}) | (Error & {
|
|
12
|
+
name: "SigningErr::FailedToDecode";
|
|
13
|
+
className: string;
|
|
14
|
+
payload: undefined;
|
|
15
|
+
})>, import("scale-ts").Decoder<(Error & {
|
|
16
|
+
name: "SigningErr::Rejected";
|
|
17
|
+
className: string;
|
|
18
|
+
payload: undefined;
|
|
19
|
+
}) | (Error & {
|
|
20
|
+
name: "SigningErr::Unknown";
|
|
21
|
+
className: string;
|
|
22
|
+
payload: {
|
|
23
|
+
reason: string;
|
|
24
|
+
};
|
|
25
|
+
}) | (Error & {
|
|
26
|
+
name: "SigningErr::FailedToDecode";
|
|
27
|
+
className: string;
|
|
28
|
+
payload: undefined;
|
|
29
|
+
})>] & {
|
|
30
|
+
enc: import("scale-ts").Encoder<(Error & {
|
|
31
|
+
name: "SigningErr::Rejected";
|
|
32
|
+
className: string;
|
|
33
|
+
payload: undefined;
|
|
34
|
+
}) | (Error & {
|
|
35
|
+
name: "SigningErr::Unknown";
|
|
36
|
+
className: string;
|
|
37
|
+
payload: {
|
|
38
|
+
reason: string;
|
|
39
|
+
};
|
|
40
|
+
}) | (Error & {
|
|
41
|
+
name: "SigningErr::FailedToDecode";
|
|
42
|
+
className: string;
|
|
43
|
+
payload: undefined;
|
|
44
|
+
})>;
|
|
45
|
+
dec: import("scale-ts").Decoder<(Error & {
|
|
46
|
+
name: "SigningErr::Rejected";
|
|
47
|
+
className: string;
|
|
48
|
+
payload: undefined;
|
|
49
|
+
}) | (Error & {
|
|
50
|
+
name: "SigningErr::Unknown";
|
|
51
|
+
className: string;
|
|
52
|
+
payload: {
|
|
53
|
+
reason: string;
|
|
54
|
+
};
|
|
55
|
+
}) | (Error & {
|
|
56
|
+
name: "SigningErr::FailedToDecode";
|
|
57
|
+
className: string;
|
|
58
|
+
payload: undefined;
|
|
59
|
+
})>;
|
|
60
|
+
} & {
|
|
61
|
+
readonly FailedToDecode: import("../commonCodecs.js").ErrCodec<undefined, "SigningErr::FailedToDecode">;
|
|
62
|
+
readonly Rejected: import("../commonCodecs.js").ErrCodec<undefined, "SigningErr::Rejected">;
|
|
63
|
+
readonly Unknown: import("../commonCodecs.js").ErrCodec<{
|
|
64
|
+
reason: string;
|
|
65
|
+
}, "SigningErr::Unknown">;
|
|
66
|
+
};
|
|
67
|
+
export declare const SigningResult: import("scale-ts").Codec<{
|
|
68
|
+
signature: `0x${string}`;
|
|
69
|
+
signedTransaction: `0x${string}` | undefined;
|
|
70
|
+
}>;
|
|
71
|
+
export declare const SignRawV1_request: import("scale-ts").Codec<{
|
|
72
|
+
address: string;
|
|
73
|
+
data: {
|
|
74
|
+
tag: "Bytes";
|
|
75
|
+
value: Uint8Array<ArrayBufferLike>;
|
|
76
|
+
} | {
|
|
77
|
+
tag: "Payload";
|
|
78
|
+
value: string;
|
|
79
|
+
};
|
|
80
|
+
}>;
|
|
81
|
+
export declare const SignRawV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<{
|
|
82
|
+
signature: `0x${string}`;
|
|
83
|
+
signedTransaction: `0x${string}` | undefined;
|
|
84
|
+
}, (Error & {
|
|
85
|
+
name: "SigningErr::Rejected";
|
|
86
|
+
className: string;
|
|
87
|
+
payload: undefined;
|
|
88
|
+
}) | (Error & {
|
|
89
|
+
name: "SigningErr::Unknown";
|
|
90
|
+
className: string;
|
|
91
|
+
payload: {
|
|
92
|
+
reason: string;
|
|
93
|
+
};
|
|
94
|
+
}) | (Error & {
|
|
95
|
+
name: "SigningErr::FailedToDecode";
|
|
96
|
+
className: string;
|
|
97
|
+
payload: undefined;
|
|
98
|
+
})>>;
|
|
99
|
+
export declare const SigningPayload: import("scale-ts").Codec<{
|
|
100
|
+
address: string;
|
|
101
|
+
blockHash: `0x${string}`;
|
|
102
|
+
blockNumber: `0x${string}`;
|
|
103
|
+
era: `0x${string}`;
|
|
104
|
+
genesisHash: `0x${string}`;
|
|
105
|
+
method: `0x${string}`;
|
|
106
|
+
nonce: `0x${string}`;
|
|
107
|
+
specVersion: `0x${string}`;
|
|
108
|
+
tip: `0x${string}`;
|
|
109
|
+
transactionVersion: `0x${string}`;
|
|
110
|
+
signedExtensions: string[];
|
|
111
|
+
version: number;
|
|
112
|
+
assetId: `0x${string}` | undefined;
|
|
113
|
+
metadataHash: `0x${string}` | undefined;
|
|
114
|
+
mode: number | undefined;
|
|
115
|
+
withSignedTransaction: boolean | undefined;
|
|
116
|
+
}>;
|
|
117
|
+
export declare const SignPayloadV1_request: import("scale-ts").Codec<{
|
|
118
|
+
address: string;
|
|
119
|
+
blockHash: `0x${string}`;
|
|
120
|
+
blockNumber: `0x${string}`;
|
|
121
|
+
era: `0x${string}`;
|
|
122
|
+
genesisHash: `0x${string}`;
|
|
123
|
+
method: `0x${string}`;
|
|
124
|
+
nonce: `0x${string}`;
|
|
125
|
+
specVersion: `0x${string}`;
|
|
126
|
+
tip: `0x${string}`;
|
|
127
|
+
transactionVersion: `0x${string}`;
|
|
128
|
+
signedExtensions: string[];
|
|
129
|
+
version: number;
|
|
130
|
+
assetId: `0x${string}` | undefined;
|
|
131
|
+
metadataHash: `0x${string}` | undefined;
|
|
132
|
+
mode: number | undefined;
|
|
133
|
+
withSignedTransaction: boolean | undefined;
|
|
134
|
+
}>;
|
|
135
|
+
export declare const SignPayloadV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<{
|
|
136
|
+
signature: `0x${string}`;
|
|
137
|
+
signedTransaction: `0x${string}` | undefined;
|
|
138
|
+
}, (Error & {
|
|
139
|
+
name: "SigningErr::Rejected";
|
|
140
|
+
className: string;
|
|
141
|
+
payload: undefined;
|
|
142
|
+
}) | (Error & {
|
|
143
|
+
name: "SigningErr::Unknown";
|
|
144
|
+
className: string;
|
|
145
|
+
payload: {
|
|
146
|
+
reason: string;
|
|
147
|
+
};
|
|
148
|
+
}) | (Error & {
|
|
149
|
+
name: "SigningErr::FailedToDecode";
|
|
150
|
+
className: string;
|
|
151
|
+
payload: undefined;
|
|
152
|
+
})>>;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Bytes,
|
|
2
|
-
import { GenericErr, GenesisHash, Hex } from '../commonCodecs.js';
|
|
1
|
+
import { Bytes, Option, Result, Struct, Vector, _void, bool, str, u32 } from 'scale-ts';
|
|
2
|
+
import { Enum, ErrEnum, GenericErr, GenesisHash, Hex } from '../commonCodecs.js';
|
|
3
3
|
// common structures
|
|
4
|
-
export const SigningErr =
|
|
5
|
-
FailedToDecode: _void,
|
|
6
|
-
Rejected: _void,
|
|
7
|
-
Unknown: GenericErr,
|
|
4
|
+
export const SigningErr = ErrEnum('SigningErr', {
|
|
5
|
+
FailedToDecode: [_void, 'Signing: failed to decode'],
|
|
6
|
+
Rejected: [_void, 'Signing: rejected'],
|
|
7
|
+
Unknown: [GenericErr, 'Signing: unknown error'],
|
|
8
8
|
});
|
|
9
9
|
export const SigningResult = Struct({
|
|
10
10
|
signature: Hex(),
|
|
@@ -34,18 +34,72 @@ export declare const Statement: import("scale-ts").Codec<{
|
|
|
34
34
|
topics: Uint8Array<ArrayBufferLike>[];
|
|
35
35
|
data: Uint8Array<ArrayBufferLike> | undefined;
|
|
36
36
|
}>;
|
|
37
|
-
export declare const StatementProofErr: import("scale-ts").
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
export declare const StatementProofErr: [import("scale-ts").Encoder<(Error & {
|
|
38
|
+
name: "StatementProofErr::Unknown";
|
|
39
|
+
className: string;
|
|
40
|
+
payload: {
|
|
40
41
|
reason: string;
|
|
41
42
|
};
|
|
42
|
-
} | {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
}) | (Error & {
|
|
44
|
+
name: "StatementProofErr::UnableToSign";
|
|
45
|
+
className: string;
|
|
46
|
+
payload: undefined;
|
|
47
|
+
}) | (Error & {
|
|
48
|
+
name: "StatementProofErr::UnknownAccount";
|
|
49
|
+
className: string;
|
|
50
|
+
payload: undefined;
|
|
51
|
+
})>, import("scale-ts").Decoder<(Error & {
|
|
52
|
+
name: "StatementProofErr::Unknown";
|
|
53
|
+
className: string;
|
|
54
|
+
payload: {
|
|
55
|
+
reason: string;
|
|
56
|
+
};
|
|
57
|
+
}) | (Error & {
|
|
58
|
+
name: "StatementProofErr::UnableToSign";
|
|
59
|
+
className: string;
|
|
60
|
+
payload: undefined;
|
|
61
|
+
}) | (Error & {
|
|
62
|
+
name: "StatementProofErr::UnknownAccount";
|
|
63
|
+
className: string;
|
|
64
|
+
payload: undefined;
|
|
65
|
+
})>] & {
|
|
66
|
+
enc: import("scale-ts").Encoder<(Error & {
|
|
67
|
+
name: "StatementProofErr::Unknown";
|
|
68
|
+
className: string;
|
|
69
|
+
payload: {
|
|
70
|
+
reason: string;
|
|
71
|
+
};
|
|
72
|
+
}) | (Error & {
|
|
73
|
+
name: "StatementProofErr::UnableToSign";
|
|
74
|
+
className: string;
|
|
75
|
+
payload: undefined;
|
|
76
|
+
}) | (Error & {
|
|
77
|
+
name: "StatementProofErr::UnknownAccount";
|
|
78
|
+
className: string;
|
|
79
|
+
payload: undefined;
|
|
80
|
+
})>;
|
|
81
|
+
dec: import("scale-ts").Decoder<(Error & {
|
|
82
|
+
name: "StatementProofErr::Unknown";
|
|
83
|
+
className: string;
|
|
84
|
+
payload: {
|
|
85
|
+
reason: string;
|
|
86
|
+
};
|
|
87
|
+
}) | (Error & {
|
|
88
|
+
name: "StatementProofErr::UnableToSign";
|
|
89
|
+
className: string;
|
|
90
|
+
payload: undefined;
|
|
91
|
+
}) | (Error & {
|
|
92
|
+
name: "StatementProofErr::UnknownAccount";
|
|
93
|
+
className: string;
|
|
94
|
+
payload: undefined;
|
|
95
|
+
})>;
|
|
96
|
+
} & {
|
|
97
|
+
readonly UnableToSign: import("../commonCodecs.js").ErrCodec<undefined, "StatementProofErr::UnableToSign">;
|
|
98
|
+
readonly UnknownAccount: import("../commonCodecs.js").ErrCodec<undefined, "StatementProofErr::UnknownAccount">;
|
|
99
|
+
readonly Unknown: import("../commonCodecs.js").ErrCodec<{
|
|
100
|
+
reason: string;
|
|
101
|
+
}, "StatementProofErr::Unknown">;
|
|
102
|
+
};
|
|
49
103
|
export declare const StatementStoreCreateProofV1_request: import("scale-ts").Codec<[[string, number], {
|
|
50
104
|
proof: {
|
|
51
105
|
tag: "Sr25519";
|
|
@@ -104,15 +158,18 @@ export declare const StatementStoreCreateProofV1_response: import("scale-ts").Co
|
|
|
104
158
|
blockHash: Uint8Array<ArrayBufferLike>;
|
|
105
159
|
event: bigint;
|
|
106
160
|
};
|
|
107
|
-
}, {
|
|
108
|
-
|
|
109
|
-
|
|
161
|
+
}, (Error & {
|
|
162
|
+
name: "StatementProofErr::Unknown";
|
|
163
|
+
className: string;
|
|
164
|
+
payload: {
|
|
110
165
|
reason: string;
|
|
111
166
|
};
|
|
112
|
-
} | {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
167
|
+
}) | (Error & {
|
|
168
|
+
name: "StatementProofErr::UnableToSign";
|
|
169
|
+
className: string;
|
|
170
|
+
payload: undefined;
|
|
171
|
+
}) | (Error & {
|
|
172
|
+
name: "StatementProofErr::UnknownAccount";
|
|
173
|
+
className: string;
|
|
174
|
+
payload: undefined;
|
|
175
|
+
})>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Bytes,
|
|
2
|
-
import { GenericErr } from '../commonCodecs.js';
|
|
1
|
+
import { Bytes, Option, Result, Struct, Tuple, Vector, _void, u32, u64 } from 'scale-ts';
|
|
2
|
+
import { Enum, ErrEnum, GenericErr } from '../commonCodecs.js';
|
|
3
3
|
import { ProductAccountId } from './accounts.js';
|
|
4
4
|
// structs definition
|
|
5
5
|
export const Topic = Bytes(32);
|
|
@@ -38,10 +38,10 @@ export const Statement = Struct({
|
|
|
38
38
|
data: Option(Bytes()),
|
|
39
39
|
});
|
|
40
40
|
// creating proof
|
|
41
|
-
export const StatementProofErr =
|
|
42
|
-
UnableToSign: _void,
|
|
43
|
-
UnknownAccount: _void,
|
|
44
|
-
Unknown: GenericErr,
|
|
41
|
+
export const StatementProofErr = ErrEnum('StatementProofErr', {
|
|
42
|
+
UnableToSign: [_void, 'StatementProof: unable to sign'],
|
|
43
|
+
UnknownAccount: [_void, 'StatementProof: unknown account'],
|
|
44
|
+
Unknown: [GenericErr, 'StatementProof: unknown error'],
|
|
45
45
|
});
|
|
46
46
|
export const StatementStoreCreateProofV1_request = Tuple(ProductAccountId, Statement);
|
|
47
47
|
export const StatementStoreCreateProofV1_response = Result(StatementProof, StatementProofErr);
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export declare const StorageErr: [import("scale-ts").Encoder<(Error & {
|
|
2
|
+
name: "StorageErr::Unknown";
|
|
3
|
+
className: string;
|
|
4
|
+
payload: {
|
|
5
|
+
reason: string;
|
|
6
|
+
};
|
|
7
|
+
}) | (Error & {
|
|
8
|
+
name: "StorageErr::Full";
|
|
9
|
+
className: string;
|
|
10
|
+
payload: undefined;
|
|
11
|
+
})>, import("scale-ts").Decoder<(Error & {
|
|
12
|
+
name: "StorageErr::Unknown";
|
|
13
|
+
className: string;
|
|
14
|
+
payload: {
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
}) | (Error & {
|
|
18
|
+
name: "StorageErr::Full";
|
|
19
|
+
className: string;
|
|
20
|
+
payload: undefined;
|
|
21
|
+
})>] & {
|
|
22
|
+
enc: import("scale-ts").Encoder<(Error & {
|
|
23
|
+
name: "StorageErr::Unknown";
|
|
24
|
+
className: string;
|
|
25
|
+
payload: {
|
|
26
|
+
reason: string;
|
|
27
|
+
};
|
|
28
|
+
}) | (Error & {
|
|
29
|
+
name: "StorageErr::Full";
|
|
30
|
+
className: string;
|
|
31
|
+
payload: undefined;
|
|
32
|
+
})>;
|
|
33
|
+
dec: import("scale-ts").Decoder<(Error & {
|
|
34
|
+
name: "StorageErr::Unknown";
|
|
35
|
+
className: string;
|
|
36
|
+
payload: {
|
|
37
|
+
reason: string;
|
|
38
|
+
};
|
|
39
|
+
}) | (Error & {
|
|
40
|
+
name: "StorageErr::Full";
|
|
41
|
+
className: string;
|
|
42
|
+
payload: undefined;
|
|
43
|
+
})>;
|
|
44
|
+
} & {
|
|
45
|
+
readonly Full: import("../commonCodecs.js").ErrCodec<undefined, "StorageErr::Full">;
|
|
46
|
+
readonly Unknown: import("../commonCodecs.js").ErrCodec<{
|
|
47
|
+
reason: string;
|
|
48
|
+
}, "StorageErr::Unknown">;
|
|
49
|
+
};
|
|
50
|
+
export declare const StorageKey: import("scale-ts").Codec<`0x${string}`>;
|
|
51
|
+
export declare const StorageValue: import("scale-ts").Codec<Uint8Array<ArrayBufferLike>>;
|
|
52
|
+
export declare const StorageReadV1_request: import("scale-ts").Codec<`0x${string}`>;
|
|
53
|
+
export declare const StorageReadV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike> | undefined, (Error & {
|
|
54
|
+
name: "StorageErr::Unknown";
|
|
55
|
+
className: string;
|
|
56
|
+
payload: {
|
|
57
|
+
reason: string;
|
|
58
|
+
};
|
|
59
|
+
}) | (Error & {
|
|
60
|
+
name: "StorageErr::Full";
|
|
61
|
+
className: string;
|
|
62
|
+
payload: undefined;
|
|
63
|
+
})>>;
|
|
64
|
+
export declare const StorageWriteV1_request: import("scale-ts").Codec<[`0x${string}`, Uint8Array<ArrayBufferLike>]>;
|
|
65
|
+
export declare const StorageWriteV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<undefined, (Error & {
|
|
66
|
+
name: "StorageErr::Unknown";
|
|
67
|
+
className: string;
|
|
68
|
+
payload: {
|
|
69
|
+
reason: string;
|
|
70
|
+
};
|
|
71
|
+
}) | (Error & {
|
|
72
|
+
name: "StorageErr::Full";
|
|
73
|
+
className: string;
|
|
74
|
+
payload: undefined;
|
|
75
|
+
})>>;
|
|
76
|
+
export declare const StorageClearV1_request: import("scale-ts").Codec<`0x${string}`>;
|
|
77
|
+
export declare const StorageClearV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<undefined, (Error & {
|
|
78
|
+
name: "StorageErr::Unknown";
|
|
79
|
+
className: string;
|
|
80
|
+
payload: {
|
|
81
|
+
reason: string;
|
|
82
|
+
};
|
|
83
|
+
}) | (Error & {
|
|
84
|
+
name: "StorageErr::Full";
|
|
85
|
+
className: string;
|
|
86
|
+
payload: undefined;
|
|
87
|
+
})>>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Bytes,
|
|
2
|
-
import { GenericErr, Hex } from '../commonCodecs.js';
|
|
1
|
+
import { Bytes, Option, Result, Tuple, _void } from 'scale-ts';
|
|
2
|
+
import { ErrEnum, GenericErr, Hex } from '../commonCodecs.js';
|
|
3
3
|
// common structures
|
|
4
|
-
export const StorageErr =
|
|
5
|
-
Full: _void,
|
|
6
|
-
Unknown: GenericErr,
|
|
4
|
+
export const StorageErr = ErrEnum('StorageErr', {
|
|
5
|
+
Full: [_void, 'Storage is full'],
|
|
6
|
+
Unknown: [GenericErr, 'Storage: unknown error'],
|
|
7
7
|
});
|
|
8
8
|
export const StorageKey = Hex();
|
|
9
9
|
export const StorageValue = Bytes();
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { createNanoEvents } from 'nanoevents';
|
|
2
|
+
import { HANDSHAKE_INTERVAL, HANDSHAKE_TIMEOUT, JAM_CODEC_PROTOCOL_ID } from './constants.js';
|
|
3
|
+
import { composeAction, createRequestId, delay, enumValue, errResult, isEnumVariant, okResult, promiseWithResolvers, } from './helpers.js';
|
|
4
|
+
import { Message } from './protocol/messageCodec.js';
|
|
5
|
+
import { HandshakeErr } from './protocol/v1/handshake.js';
|
|
6
|
+
const isConnected = (status) => status === 'connected';
|
|
7
|
+
export function createTransport(provider) {
|
|
8
|
+
let codecVersion = JAM_CODEC_PROTOCOL_ID;
|
|
9
|
+
const handshakeAbortController = new AbortController();
|
|
10
|
+
let handshakePromise = null;
|
|
11
|
+
let connectionStatusResolved = false;
|
|
12
|
+
let connectionStatus = 'disconnected';
|
|
13
|
+
let disposed = false;
|
|
14
|
+
const events = createNanoEvents();
|
|
15
|
+
events.on('connectionStatus', value => {
|
|
16
|
+
connectionStatus = value;
|
|
17
|
+
});
|
|
18
|
+
function changeConnectionStatus(status) {
|
|
19
|
+
events.emit('connectionStatus', status);
|
|
20
|
+
}
|
|
21
|
+
function throwIfDisposed() {
|
|
22
|
+
if (disposed) {
|
|
23
|
+
throw new Error('Transport is disposed');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function throwIfIncorrectEnvironment() {
|
|
27
|
+
if (!provider.isCorrectEnvironment()) {
|
|
28
|
+
throw new Error('Environment is not correct');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function throwIfInvalidCodecVersion() {
|
|
32
|
+
if (codecVersion !== JAM_CODEC_PROTOCOL_ID) {
|
|
33
|
+
throw new Error(`Unsupported codec version: ${codecVersion}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function checks() {
|
|
37
|
+
throwIfDisposed();
|
|
38
|
+
throwIfIncorrectEnvironment();
|
|
39
|
+
throwIfInvalidCodecVersion();
|
|
40
|
+
}
|
|
41
|
+
const transport = {
|
|
42
|
+
provider,
|
|
43
|
+
isCorrectEnvironment() {
|
|
44
|
+
return provider.isCorrectEnvironment();
|
|
45
|
+
},
|
|
46
|
+
isReady() {
|
|
47
|
+
checks();
|
|
48
|
+
if (connectionStatusResolved) {
|
|
49
|
+
return Promise.resolve(isConnected(connectionStatus));
|
|
50
|
+
}
|
|
51
|
+
if (handshakePromise) {
|
|
52
|
+
return handshakePromise;
|
|
53
|
+
}
|
|
54
|
+
changeConnectionStatus('connecting');
|
|
55
|
+
const performHandshake = () => {
|
|
56
|
+
const id = createRequestId();
|
|
57
|
+
let resolved = false;
|
|
58
|
+
const cleanup = (interval, unsubscribe) => {
|
|
59
|
+
clearInterval(interval);
|
|
60
|
+
unsubscribe();
|
|
61
|
+
handshakeAbortController.signal.removeEventListener('abort', unsubscribe);
|
|
62
|
+
};
|
|
63
|
+
return new Promise(resolve => {
|
|
64
|
+
const unsubscribe = transport.listenMessages('handshake_response', responseId => {
|
|
65
|
+
if (responseId === id) {
|
|
66
|
+
cleanup(interval, unsubscribe);
|
|
67
|
+
resolved = true;
|
|
68
|
+
resolve(true);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
handshakeAbortController.signal.addEventListener('abort', unsubscribe, { once: true });
|
|
72
|
+
const interval = setInterval(() => {
|
|
73
|
+
if (handshakeAbortController.signal.aborted) {
|
|
74
|
+
clearInterval(interval);
|
|
75
|
+
resolve(false);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
transport.postMessage(id, enumValue('handshake_request', enumValue('v1', codecVersion)));
|
|
79
|
+
}, HANDSHAKE_INTERVAL);
|
|
80
|
+
}).then(success => {
|
|
81
|
+
if (!success && !resolved) {
|
|
82
|
+
handshakeAbortController.abort('Timeout');
|
|
83
|
+
}
|
|
84
|
+
return success;
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const timedOutRequest = Promise.race([performHandshake(), delay(HANDSHAKE_TIMEOUT).then(() => false)]);
|
|
88
|
+
handshakePromise = timedOutRequest.then(result => {
|
|
89
|
+
handshakePromise = null;
|
|
90
|
+
connectionStatusResolved = true;
|
|
91
|
+
changeConnectionStatus(result ? 'connected' : 'disconnected');
|
|
92
|
+
return result;
|
|
93
|
+
});
|
|
94
|
+
return handshakePromise;
|
|
95
|
+
},
|
|
96
|
+
async request(method, payload, signal) {
|
|
97
|
+
checks();
|
|
98
|
+
if (!(await transport.isReady())) {
|
|
99
|
+
throw new Error('Polkadot host is not ready');
|
|
100
|
+
}
|
|
101
|
+
signal?.throwIfAborted();
|
|
102
|
+
const requestId = createRequestId();
|
|
103
|
+
const requestAction = composeAction(method, 'request');
|
|
104
|
+
const responseAction = composeAction(method, 'response');
|
|
105
|
+
const { resolve, reject, promise } = promiseWithResolvers();
|
|
106
|
+
const cleanup = () => {
|
|
107
|
+
unsubscribe();
|
|
108
|
+
signal?.removeEventListener('abort', onAbort);
|
|
109
|
+
};
|
|
110
|
+
const onAbort = () => {
|
|
111
|
+
cleanup();
|
|
112
|
+
reject(signal?.reason ?? new Error('Request aborted'));
|
|
113
|
+
};
|
|
114
|
+
const unsubscribe = transport.listenMessages(responseAction, (receivedId, payload) => {
|
|
115
|
+
if (receivedId === requestId) {
|
|
116
|
+
cleanup();
|
|
117
|
+
resolve(payload.value);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
121
|
+
const requestMessage = enumValue(requestAction, payload);
|
|
122
|
+
transport.postMessage(requestId, requestMessage);
|
|
123
|
+
return promise;
|
|
124
|
+
},
|
|
125
|
+
handleRequest(method, handler) {
|
|
126
|
+
checks();
|
|
127
|
+
const requestAction = composeAction(method, 'request');
|
|
128
|
+
const responseAction = composeAction(method, 'response');
|
|
129
|
+
return transport.listenMessages(requestAction, (requestId, payload) => {
|
|
130
|
+
handler(payload.value).then(result => {
|
|
131
|
+
const responseMessage = enumValue(responseAction, result);
|
|
132
|
+
transport.postMessage(requestId, responseMessage);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
subscribe(method, payload, callback) {
|
|
137
|
+
checks();
|
|
138
|
+
const events = createNanoEvents();
|
|
139
|
+
const requestId = createRequestId();
|
|
140
|
+
const startAction = composeAction(method, 'start');
|
|
141
|
+
const stopAction = composeAction(method, 'stop');
|
|
142
|
+
const interruptAction = composeAction(method, 'interrupt');
|
|
143
|
+
const receiveAction = composeAction(method, 'receive');
|
|
144
|
+
const unsubscribeReceive = transport.listenMessages(receiveAction, (receivedId, data) => {
|
|
145
|
+
if (receivedId === requestId) {
|
|
146
|
+
callback(data.value);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
const unsubscribeInterrupt = transport.listenMessages(interruptAction, receivedId => {
|
|
150
|
+
if (receivedId === requestId) {
|
|
151
|
+
events.emit('interrupt');
|
|
152
|
+
stopSubscription();
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
const stopSubscription = () => {
|
|
156
|
+
unsubscribeReceive();
|
|
157
|
+
unsubscribeInterrupt();
|
|
158
|
+
events.events = {};
|
|
159
|
+
};
|
|
160
|
+
const startPayload = enumValue(startAction, payload);
|
|
161
|
+
transport.postMessage(requestId, startPayload);
|
|
162
|
+
return {
|
|
163
|
+
unsubscribe() {
|
|
164
|
+
stopSubscription();
|
|
165
|
+
const stopPayload = enumValue(stopAction, undefined);
|
|
166
|
+
transport.postMessage(requestId, stopPayload);
|
|
167
|
+
},
|
|
168
|
+
onInterrupt(callback) {
|
|
169
|
+
return events.on('interrupt', callback);
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
handleSubscription(method, handler) {
|
|
174
|
+
checks();
|
|
175
|
+
const startAction = composeAction(method, 'start');
|
|
176
|
+
const stopAction = composeAction(method, 'stop');
|
|
177
|
+
const interruptAction = composeAction(method, 'interrupt');
|
|
178
|
+
const receiveAction = composeAction(method, 'receive');
|
|
179
|
+
const subscriptions = new Map();
|
|
180
|
+
const unsubStart = transport.listenMessages(startAction, (requestId, payload) => {
|
|
181
|
+
if (subscriptions.has(requestId))
|
|
182
|
+
return;
|
|
183
|
+
const unsubscribe = handler(payload.value, value => {
|
|
184
|
+
const receivePayload = enumValue(receiveAction, value);
|
|
185
|
+
transport.postMessage(requestId, receivePayload);
|
|
186
|
+
}, () => {
|
|
187
|
+
transport.postMessage(requestId, enumValue(interruptAction, undefined));
|
|
188
|
+
});
|
|
189
|
+
subscriptions.set(requestId, unsubscribe);
|
|
190
|
+
});
|
|
191
|
+
const unsubStop = transport.listenMessages(stopAction, requestId => {
|
|
192
|
+
subscriptions.get(requestId)?.();
|
|
193
|
+
});
|
|
194
|
+
return () => {
|
|
195
|
+
subscriptions.forEach(unsub => unsub());
|
|
196
|
+
unsubStart();
|
|
197
|
+
unsubStop();
|
|
198
|
+
};
|
|
199
|
+
},
|
|
200
|
+
postMessage(requestId, payload) {
|
|
201
|
+
checks();
|
|
202
|
+
const encoded = Message.enc({ requestId, payload });
|
|
203
|
+
provider.postMessage(encoded);
|
|
204
|
+
},
|
|
205
|
+
listenMessages(action, callback, onError) {
|
|
206
|
+
return provider.subscribe(message => {
|
|
207
|
+
try {
|
|
208
|
+
const result = Message.dec(message);
|
|
209
|
+
if (isEnumVariant(result.payload, action)) {
|
|
210
|
+
callback(result.requestId, result.payload);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
onError?.(e);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
},
|
|
218
|
+
onConnectionStatusChange(callback) {
|
|
219
|
+
callback(connectionStatus);
|
|
220
|
+
return events.on('connectionStatus', callback);
|
|
221
|
+
},
|
|
222
|
+
dispose() {
|
|
223
|
+
disposed = true;
|
|
224
|
+
provider.dispose();
|
|
225
|
+
changeConnectionStatus('disconnected');
|
|
226
|
+
events.events = {};
|
|
227
|
+
handshakeAbortController.abort('Transport disposed');
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
if (provider.isCorrectEnvironment()) {
|
|
231
|
+
transport.handleRequest('handshake', async (version) => {
|
|
232
|
+
switch (version.tag) {
|
|
233
|
+
case 'v1': {
|
|
234
|
+
codecVersion = version.value;
|
|
235
|
+
switch (version.value) {
|
|
236
|
+
case JAM_CODEC_PROTOCOL_ID:
|
|
237
|
+
return enumValue(version.tag, okResult(undefined));
|
|
238
|
+
default:
|
|
239
|
+
return enumValue(version.tag, errResult(new HandshakeErr.UnsupportedProtocolVersion(undefined)));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
default:
|
|
243
|
+
return enumValue(version.tag, errResult(new HandshakeErr.UnsupportedProtocolVersion(undefined)));
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return transport;
|
|
248
|
+
}
|