@novasamatech/host-api 0.9.1 → 0.9.3

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/dist/hostApi.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { errAsync, fromPromise, okAsync } from 'neverthrow';
2
2
  import { extractErrorMessage } from './helpers.js';
3
3
  import { GenericError } from './protocol/commonCodecs.js';
4
- import { CreateProofErr, GetAliasErr, GetUserIdErr, LoginErr, RequestCredentialsErr, SignVrfErr, } from './protocol/v1/accounts.js';
4
+ import { CreateProofErr, GetAliasErr, GetUserIdErr, ListRingVrfKeysErr, LoginErr, RegisterRingVrfKeyErr, RequestCredentialsErr, RingVrfSignErr, SignVrfErr, } from './protocol/v1/accounts.js';
5
5
  import { ChatBotRegistrationErr, ChatMessagePostingErr, ChatRoomRegistrationErr } from './protocol/v1/chat.js';
6
6
  import { CreateTransactionErr } from './protocol/v1/createTransaction.js';
7
7
  import { DeriveEntropyErr } from './protocol/v1/deriveEntropy.js';
@@ -124,6 +124,24 @@ export function createHostApi(transport) {
124
124
  value: new SignVrfErr.Unknown({ reason }),
125
125
  }));
126
126
  },
127
+ accountRegisterRingVrfKey(payload) {
128
+ return makeRequest(transport.request('host_account_register_ring_vrf_key', payload), reason => ({
129
+ tag: payload.tag,
130
+ value: new RegisterRingVrfKeyErr.Unknown({ reason }),
131
+ }));
132
+ },
133
+ accountListRingVrfKeys(payload) {
134
+ return makeRequest(transport.request('host_account_list_ring_vrf_keys', payload), reason => ({
135
+ tag: payload.tag,
136
+ value: new ListRingVrfKeysErr.Unknown({ reason }),
137
+ }));
138
+ },
139
+ accountRingVrfSign(payload) {
140
+ return makeRequest(transport.request('host_account_ring_vrf_sign', payload), reason => ({
141
+ tag: payload.tag,
142
+ value: new RingVrfSignErr.Unknown({ reason }),
143
+ }));
144
+ },
127
145
  getLegacyAccounts(payload) {
128
146
  return makeRequest(transport.request('host_get_legacy_accounts', payload), reason => ({
129
147
  tag: payload.tag,
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ export { GenericError } from './protocol/commonCodecs.js';
15
15
  export { CreateTransactionErr, LegacyTransaction, ProductAccountTransaction } from './protocol/v1/createTransaction.js';
16
16
  export type { AccountSelector } from './protocol/v1/accounts.js';
17
17
  export { derivationIndexOf } from './protocol/v1/accounts.js';
18
- export { AccountConnectionStatus, AccountId, ContextualAlias, CreateProofErr, DerivationIndex, DotNsIdentifier, GetAliasErr, GetUserIdErr, LegacyAccount, LoginErr, LoginResult, ProductAccount, ProductAccountId, ProductId, ProductProofContext, ProductProofContextSuffix, RawDerivationIndex, RequestCredentialsErr, RingLocation, RingLocationJunction, RingVrfProof, SignVrfErr, UserIdentity, VrfSignature, VrfTranscriptItem, } from './protocol/v1/accounts.js';
18
+ export { AccountConnectionStatus, AccountId, ContextualAlias, CreateProofErr, DerivationIndex, DotNsIdentifier, GetAliasErr, GetUserIdErr, LegacyAccount, ListRingVrfKeysErr, LoginErr, LoginResult, ProductAccount, ProductAccountId, ProductId, ProductProofContext, ProductProofContextSuffix, RawDerivationIndex, RegisterRingVrfKeyErr, RegisteredRingVrfKey, RequestCredentialsErr, RingLocation, RingLocationJunction, RingVrfKeyDisclosure, RingVrfKeyHandle, RingVrfProof, RingVrfPublicKey, RingVrfSignErr, SignVrfErr, UserIdentity, VrfSignature, VrfTranscriptItem, } from './protocol/v1/accounts.js';
19
19
  export { ChatActionPayload, ChatBotRegistrationErr, ChatBotRegistrationStatus, ChatMessageContent, ChatMessagePostingErr, ChatRoom, ChatRoomRegistrationErr, ChatRoomRegistrationResult, ChatRoomRegistrationStatus, ReceivedChatAction, } from './protocol/v1/chat.js';
20
20
  export { DeriveEntropyErr } from './protocol/v1/deriveEntropy.js';
21
21
  export { HandshakeErr } from './protocol/v1/handshake.js';
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ export { assertEnumVariant, enumValue, fromHex, isEnumVariant, resultErr, result
8
8
  export { GenericError } from './protocol/commonCodecs.js';
9
9
  export { CreateTransactionErr, LegacyTransaction, ProductAccountTransaction } from './protocol/v1/createTransaction.js';
10
10
  export { derivationIndexOf } from './protocol/v1/accounts.js';
11
- export { AccountConnectionStatus, AccountId, ContextualAlias, CreateProofErr, DerivationIndex, DotNsIdentifier, GetAliasErr, GetUserIdErr, LegacyAccount, LoginErr, LoginResult, ProductAccount, ProductAccountId, ProductId, ProductProofContext, ProductProofContextSuffix, RawDerivationIndex, RequestCredentialsErr, RingLocation, RingLocationJunction, RingVrfProof, SignVrfErr, UserIdentity, VrfSignature, VrfTranscriptItem, } from './protocol/v1/accounts.js';
11
+ export { AccountConnectionStatus, AccountId, ContextualAlias, CreateProofErr, DerivationIndex, DotNsIdentifier, GetAliasErr, GetUserIdErr, LegacyAccount, ListRingVrfKeysErr, LoginErr, LoginResult, ProductAccount, ProductAccountId, ProductId, ProductProofContext, ProductProofContextSuffix, RawDerivationIndex, RegisterRingVrfKeyErr, RegisteredRingVrfKey, RequestCredentialsErr, RingLocation, RingLocationJunction, RingVrfKeyDisclosure, RingVrfKeyHandle, RingVrfProof, RingVrfPublicKey, RingVrfSignErr, SignVrfErr, UserIdentity, VrfSignature, VrfTranscriptItem, } from './protocol/v1/accounts.js';
12
12
  export { ChatActionPayload, ChatBotRegistrationErr, ChatBotRegistrationStatus, ChatMessageContent, ChatMessagePostingErr, ChatRoom, ChatRoomRegistrationErr, ChatRoomRegistrationResult, ChatRoomRegistrationStatus, ReceivedChatAction, } from './protocol/v1/chat.js';
13
13
  export { DeriveEntropyErr } from './protocol/v1/deriveEntropy.js';
14
14
  export { HandshakeErr } from './protocol/v1/handshake.js';
@@ -113,6 +113,12 @@ export declare const hostApiProtocol: {
113
113
  } | {
114
114
  tag: "Raw";
115
115
  value: Uint8Array<ArrayBufferLike>;
116
+ }], [string, {
117
+ tag: "Index";
118
+ value: number;
119
+ } | {
120
+ tag: "Raw";
121
+ value: Uint8Array<ArrayBufferLike>;
116
122
  }], {
117
123
  chainId: `0x${string}`;
118
124
  junctions: ({
@@ -127,7 +133,7 @@ export declare const hostApiProtocol: {
127
133
  alias: Uint8Array<ArrayBufferLike>;
128
134
  }, import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
129
135
  reason: string;
130
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>>];
136
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>>];
131
137
  }>;
132
138
  readonly host_account_create_proof: VersionedProtocolRequest<{
133
139
  readonly v1: [Codec<[[string, {
@@ -136,6 +142,12 @@ export declare const hostApiProtocol: {
136
142
  } | {
137
143
  tag: "Raw";
138
144
  value: Uint8Array<ArrayBufferLike>;
145
+ }], [string, {
146
+ tag: "Index";
147
+ value: number;
148
+ } | {
149
+ tag: "Raw";
150
+ value: Uint8Array<ArrayBufferLike>;
139
151
  }], {
140
152
  chainId: `0x${string}`;
141
153
  junctions: ({
@@ -155,7 +167,7 @@ export declare const hostApiProtocol: {
155
167
  ringRevision: number;
156
168
  }, import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
157
169
  reason: string;
158
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>>];
170
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>>];
159
171
  }>;
160
172
  readonly host_get_legacy_accounts: VersionedProtocolRequest<{
161
173
  readonly v1: [Codec<undefined>, Codec<import("scale-ts").ResultPayload<{
@@ -1099,5 +1111,60 @@ export declare const hostApiProtocol: {
1099
1111
  reason: string;
1100
1112
  }, "SignVrfErr::Unknown">>>];
1101
1113
  }>;
1114
+ readonly host_account_register_ring_vrf_key: VersionedProtocolRequest<{
1115
+ readonly v1: [Codec<[{
1116
+ tag: "Index";
1117
+ value: number;
1118
+ } | {
1119
+ tag: "Raw";
1120
+ value: Uint8Array<ArrayBufferLike>;
1121
+ }, {
1122
+ chainId: `0x${string}`;
1123
+ junctions: ({
1124
+ tag: "PalletInstance";
1125
+ value: number;
1126
+ } | {
1127
+ tag: "CollectionId";
1128
+ value: Uint8Array<ArrayBufferLike>;
1129
+ })[];
1130
+ }]>, Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1131
+ reason: string;
1132
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>>];
1133
+ }>;
1134
+ readonly host_account_list_ring_vrf_keys: VersionedProtocolRequest<{
1135
+ readonly v1: [Codec<[string, "Anonymized" | "PublicKey"]>, Codec<import("scale-ts").ResultPayload<{
1136
+ handle: [string, {
1137
+ tag: "Index";
1138
+ value: number;
1139
+ } | {
1140
+ tag: "Raw";
1141
+ value: Uint8Array<ArrayBufferLike>;
1142
+ }];
1143
+ rings: {
1144
+ chainId: `0x${string}`;
1145
+ junctions: ({
1146
+ tag: "PalletInstance";
1147
+ value: number;
1148
+ } | {
1149
+ tag: "CollectionId";
1150
+ value: Uint8Array<ArrayBufferLike>;
1151
+ })[];
1152
+ }[];
1153
+ publicKey: Uint8Array<ArrayBufferLike> | undefined;
1154
+ }[], import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1155
+ reason: string;
1156
+ }, "ListRingVrfKeysErr::Unknown">>>];
1157
+ }>;
1158
+ readonly host_account_ring_vrf_sign: VersionedProtocolRequest<{
1159
+ readonly v1: [Codec<[[string, {
1160
+ tag: "Index";
1161
+ value: number;
1162
+ } | {
1163
+ tag: "Raw";
1164
+ value: Uint8Array<ArrayBufferLike>;
1165
+ }], Uint8Array<ArrayBufferLike>]>, Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1166
+ reason: string;
1167
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>>];
1168
+ }>;
1102
1169
  };
1103
1170
  export {};
@@ -1,5 +1,5 @@
1
1
  import { Enum } from '@novasamatech/scale';
2
- import { AccountConnectionStatusV1_interrupt, AccountConnectionStatusV1_receive, AccountConnectionStatusV1_start, AccountCreateProofV1_request, AccountCreateProofV1_response, AccountGetAliasV1_request, AccountGetAliasV1_response, AccountGetV1_request, AccountGetV1_response, AccountSignVrfV1_request, AccountSignVrfV1_response, GetLegacyAccountsV1_request, GetLegacyAccountsV1_response, GetUserIdV1_request, GetUserIdV1_response, RequestLoginV1_request, RequestLoginV1_response, } from './v1/accounts.js';
2
+ import { AccountConnectionStatusV1_interrupt, AccountConnectionStatusV1_receive, AccountConnectionStatusV1_start, AccountCreateProofV1_request, AccountCreateProofV1_response, AccountGetAliasV1_request, AccountGetAliasV1_response, AccountGetV1_request, AccountGetV1_response, AccountListRingVrfKeysV1_request, AccountListRingVrfKeysV1_response, AccountRegisterRingVrfKeyV1_request, AccountRegisterRingVrfKeyV1_response, AccountRingVrfSignV1_request, AccountRingVrfSignV1_response, AccountSignVrfV1_request, AccountSignVrfV1_response, GetLegacyAccountsV1_request, GetLegacyAccountsV1_response, GetUserIdV1_request, GetUserIdV1_response, RequestLoginV1_request, RequestLoginV1_response, } from './v1/accounts.js';
3
3
  import { ChainHeadBodyV1_request, ChainHeadBodyV1_response, ChainHeadCallV1_request, ChainHeadCallV1_response, ChainHeadContinueV1_request, ChainHeadContinueV1_response, ChainHeadFollowV1_interrupt, ChainHeadFollowV1_receive, ChainHeadFollowV1_start, ChainHeadHeaderV1_request, ChainHeadHeaderV1_response, ChainHeadStopOperationV1_request, ChainHeadStopOperationV1_response, ChainHeadStorageV1_request, ChainHeadStorageV1_response, ChainHeadUnpinV1_request, ChainHeadUnpinV1_response, ChainSpecChainNameV1_request, ChainSpecChainNameV1_response, ChainSpecGenesisHashV1_request, ChainSpecGenesisHashV1_response, ChainSpecPropertiesV1_request, ChainSpecPropertiesV1_response, TransactionBroadcastV1_request, TransactionBroadcastV1_response, TransactionStopV1_request, TransactionStopV1_response, } from './v1/chainInteraction.js';
4
4
  import { ChatActionSubscribeV1_interrupt, ChatActionSubscribeV1_receive, ChatActionSubscribeV1_start, ChatCreateRoomV1_request, ChatCreateRoomV1_response, ChatCustomMessageRenderingV1_interrupt, ChatCustomMessageRenderingV1_receive, ChatCustomMessageRenderingV1_start, ChatListSubscribeV1_interrupt, ChatListSubscribeV1_receive, ChatListSubscribeV1_start, ChatPostMessageV1_request, ChatPostMessageV1_response, ChatRegisterBotV1_request, ChatRegisterBotV1_response, } from './v1/chat.js';
5
5
  import { CreateTransactionV1_request, CreateTransactionV1_response, CreateTransactionWithLegacyAccountV1_request, CreateTransactionWithLegacyAccountV1_response, } from './v1/createTransaction.js';
@@ -229,4 +229,16 @@ export const hostApiProtocol = {
229
229
  host_account_sign_vrf: versionedRequest(indexer.request(28), {
230
230
  v1: [AccountSignVrfV1_request, AccountSignVrfV1_response],
231
231
  }),
232
+ // RFC-0024 — explicit ring VRF key management. Appended so every index above
233
+ // stays stable; `create_proof` / `get_alias` changed shape in place instead,
234
+ // since a key handle is now mandatory there.
235
+ host_account_register_ring_vrf_key: versionedRequest(indexer.request(), {
236
+ v1: [AccountRegisterRingVrfKeyV1_request, AccountRegisterRingVrfKeyV1_response],
237
+ }),
238
+ host_account_list_ring_vrf_keys: versionedRequest(indexer.request(), {
239
+ v1: [AccountListRingVrfKeysV1_request, AccountListRingVrfKeysV1_response],
240
+ }),
241
+ host_account_ring_vrf_sign: versionedRequest(indexer.request(), {
242
+ v1: [AccountRingVrfSignV1_request, AccountRingVrfSignV1_response],
243
+ }),
232
244
  };
@@ -112,6 +112,12 @@ export declare const MessagePayload: EnumCodec<Record<"host_handshake_request",
112
112
  } | {
113
113
  tag: "Raw";
114
114
  value: Uint8Array<ArrayBufferLike>;
115
+ }], [string, {
116
+ tag: "Index";
117
+ value: number;
118
+ } | {
119
+ tag: "Raw";
120
+ value: Uint8Array<ArrayBufferLike>;
115
121
  }], {
116
122
  chainId: `0x${string}`;
117
123
  junctions: ({
@@ -128,7 +134,7 @@ export declare const MessagePayload: EnumCodec<Record<"host_handshake_request",
128
134
  alias: Uint8Array<ArrayBufferLike>;
129
135
  }, import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
130
136
  reason: string;
131
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>>;
137
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>>;
132
138
  }>> & Record<"host_account_create_proof_request", EnumCodec<{
133
139
  readonly v1: Codec<[[string, {
134
140
  tag: "Index";
@@ -136,6 +142,12 @@ export declare const MessagePayload: EnumCodec<Record<"host_handshake_request",
136
142
  } | {
137
143
  tag: "Raw";
138
144
  value: Uint8Array<ArrayBufferLike>;
145
+ }], [string, {
146
+ tag: "Index";
147
+ value: number;
148
+ } | {
149
+ tag: "Raw";
150
+ value: Uint8Array<ArrayBufferLike>;
139
151
  }], {
140
152
  chainId: `0x${string}`;
141
153
  junctions: ({
@@ -157,7 +169,7 @@ export declare const MessagePayload: EnumCodec<Record<"host_handshake_request",
157
169
  ringRevision: number;
158
170
  }, import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
159
171
  reason: string;
160
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>>;
172
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>>;
161
173
  }>> & Record<"host_get_legacy_accounts_request", EnumCodec<{
162
174
  readonly v1: Codec<undefined>;
163
175
  }>> & Record<"host_get_legacy_accounts_response", EnumCodec<{
@@ -1161,6 +1173,64 @@ export declare const MessagePayload: EnumCodec<Record<"host_handshake_request",
1161
1173
  }, import("@novasamatech/scale").CodecError<undefined, "SignVrfErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "SignVrfErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1162
1174
  reason: string;
1163
1175
  }, "SignVrfErr::Unknown">>>;
1176
+ }>> & Record<"host_account_register_ring_vrf_key_request", EnumCodec<{
1177
+ readonly v1: Codec<[{
1178
+ tag: "Index";
1179
+ value: number;
1180
+ } | {
1181
+ tag: "Raw";
1182
+ value: Uint8Array<ArrayBufferLike>;
1183
+ }, {
1184
+ chainId: `0x${string}`;
1185
+ junctions: ({
1186
+ tag: "PalletInstance";
1187
+ value: number;
1188
+ } | {
1189
+ tag: "CollectionId";
1190
+ value: Uint8Array<ArrayBufferLike>;
1191
+ })[];
1192
+ }]>;
1193
+ }>> & Record<"host_account_register_ring_vrf_key_response", EnumCodec<{
1194
+ readonly v1: Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1195
+ reason: string;
1196
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>>;
1197
+ }>> & Record<"host_account_list_ring_vrf_keys_request", EnumCodec<{
1198
+ readonly v1: Codec<[string, "Anonymized" | "PublicKey"]>;
1199
+ }>> & Record<"host_account_list_ring_vrf_keys_response", EnumCodec<{
1200
+ readonly v1: Codec<import("scale-ts").ResultPayload<{
1201
+ handle: [string, {
1202
+ tag: "Index";
1203
+ value: number;
1204
+ } | {
1205
+ tag: "Raw";
1206
+ value: Uint8Array<ArrayBufferLike>;
1207
+ }];
1208
+ rings: {
1209
+ chainId: `0x${string}`;
1210
+ junctions: ({
1211
+ tag: "PalletInstance";
1212
+ value: number;
1213
+ } | {
1214
+ tag: "CollectionId";
1215
+ value: Uint8Array<ArrayBufferLike>;
1216
+ })[];
1217
+ }[];
1218
+ publicKey: Uint8Array<ArrayBufferLike> | undefined;
1219
+ }[], import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1220
+ reason: string;
1221
+ }, "ListRingVrfKeysErr::Unknown">>>;
1222
+ }>> & Record<"host_account_ring_vrf_sign_request", EnumCodec<{
1223
+ readonly v1: Codec<[[string, {
1224
+ tag: "Index";
1225
+ value: number;
1226
+ } | {
1227
+ tag: "Raw";
1228
+ value: Uint8Array<ArrayBufferLike>;
1229
+ }], Uint8Array<ArrayBufferLike>]>;
1230
+ }>> & Record<"host_account_ring_vrf_sign_response", EnumCodec<{
1231
+ readonly v1: Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1232
+ reason: string;
1233
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>>;
1164
1234
  }>>>;
1165
1235
  export declare const Message: Codec<{
1166
1236
  requestId: string;
@@ -1365,6 +1435,12 @@ export declare const Message: Codec<{
1365
1435
  } | {
1366
1436
  tag: "Raw";
1367
1437
  value: Uint8Array<ArrayBufferLike>;
1438
+ }], [string, {
1439
+ tag: "Index";
1440
+ value: number;
1441
+ } | {
1442
+ tag: "Raw";
1443
+ value: Uint8Array<ArrayBufferLike>;
1368
1444
  }], {
1369
1445
  chainId: `0x${string}`;
1370
1446
  junctions: ({
@@ -1385,7 +1461,7 @@ export declare const Message: Codec<{
1385
1461
  alias: Uint8Array<ArrayBufferLike>;
1386
1462
  }, import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1387
1463
  reason: string;
1388
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>;
1464
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>;
1389
1465
  };
1390
1466
  } | {
1391
1467
  tag: "host_account_create_proof_request";
@@ -1397,6 +1473,12 @@ export declare const Message: Codec<{
1397
1473
  } | {
1398
1474
  tag: "Raw";
1399
1475
  value: Uint8Array<ArrayBufferLike>;
1476
+ }], [string, {
1477
+ tag: "Index";
1478
+ value: number;
1479
+ } | {
1480
+ tag: "Raw";
1481
+ value: Uint8Array<ArrayBufferLike>;
1400
1482
  }], {
1401
1483
  chainId: `0x${string}`;
1402
1484
  junctions: ({
@@ -1422,7 +1504,7 @@ export declare const Message: Codec<{
1422
1504
  ringRevision: number;
1423
1505
  }, import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
1424
1506
  reason: string;
1425
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>;
1507
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>;
1426
1508
  };
1427
1509
  } | {
1428
1510
  tag: "host_get_legacy_accounts_request";
@@ -2798,6 +2880,88 @@ export declare const Message: Codec<{
2798
2880
  reason: string;
2799
2881
  }, "SignVrfErr::Unknown">>;
2800
2882
  };
2883
+ } | {
2884
+ tag: "host_account_register_ring_vrf_key_request";
2885
+ value: {
2886
+ tag: "v1";
2887
+ value: [{
2888
+ tag: "Index";
2889
+ value: number;
2890
+ } | {
2891
+ tag: "Raw";
2892
+ value: Uint8Array<ArrayBufferLike>;
2893
+ }, {
2894
+ chainId: `0x${string}`;
2895
+ junctions: ({
2896
+ tag: "PalletInstance";
2897
+ value: number;
2898
+ } | {
2899
+ tag: "CollectionId";
2900
+ value: Uint8Array<ArrayBufferLike>;
2901
+ })[];
2902
+ }];
2903
+ };
2904
+ } | {
2905
+ tag: "host_account_register_ring_vrf_key_response";
2906
+ value: {
2907
+ tag: "v1";
2908
+ value: import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
2909
+ reason: string;
2910
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>;
2911
+ };
2912
+ } | {
2913
+ tag: "host_account_list_ring_vrf_keys_request";
2914
+ value: {
2915
+ tag: "v1";
2916
+ value: [string, "Anonymized" | "PublicKey"];
2917
+ };
2918
+ } | {
2919
+ tag: "host_account_list_ring_vrf_keys_response";
2920
+ value: {
2921
+ tag: "v1";
2922
+ value: import("scale-ts").ResultPayload<{
2923
+ handle: [string, {
2924
+ tag: "Index";
2925
+ value: number;
2926
+ } | {
2927
+ tag: "Raw";
2928
+ value: Uint8Array<ArrayBufferLike>;
2929
+ }];
2930
+ rings: {
2931
+ chainId: `0x${string}`;
2932
+ junctions: ({
2933
+ tag: "PalletInstance";
2934
+ value: number;
2935
+ } | {
2936
+ tag: "CollectionId";
2937
+ value: Uint8Array<ArrayBufferLike>;
2938
+ })[];
2939
+ }[];
2940
+ publicKey: Uint8Array<ArrayBufferLike> | undefined;
2941
+ }[], import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
2942
+ reason: string;
2943
+ }, "ListRingVrfKeysErr::Unknown">>;
2944
+ };
2945
+ } | {
2946
+ tag: "host_account_ring_vrf_sign_request";
2947
+ value: {
2948
+ tag: "v1";
2949
+ value: [[string, {
2950
+ tag: "Index";
2951
+ value: number;
2952
+ } | {
2953
+ tag: "Raw";
2954
+ value: Uint8Array<ArrayBufferLike>;
2955
+ }], Uint8Array<ArrayBufferLike>];
2956
+ };
2957
+ } | {
2958
+ tag: "host_account_ring_vrf_sign_response";
2959
+ value: {
2960
+ tag: "v1";
2961
+ value: import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
2962
+ reason: string;
2963
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>;
2964
+ };
2801
2965
  };
2802
2966
  }>;
2803
2967
  export type MessageAction = MessagePayloadSchema['tag'];
@@ -30,6 +30,25 @@ export declare const ProductAccountId: import("scale-ts").Codec<[string, {
30
30
  value: Uint8Array<ArrayBufferLike>;
31
31
  }]>;
32
32
  export declare const RingVrgAlias: import("@novasamatech/scale").BytesCodec<undefined>;
33
+ /**
34
+ * Public name of a registered ring VRF key (RFC-0024): the owning product plus
35
+ * the index of the key inside that product's ring VRF domain (`//{productId}//{index}`
36
+ * of the ring VRF tree, RFC-0022).
37
+ *
38
+ * Structurally a {@link ProductAccountId}, but it names a slot in the ring VRF
39
+ * tree — *not* the sr25519 product account at the same `(product, index)`.
40
+ * Consumers MUST treat it as opaque and select keys by declared
41
+ * {@link RingLocation}; the index is the owner's implementation detail.
42
+ */
43
+ export declare const RingVrfKeyHandle: import("scale-ts").Codec<[string, {
44
+ tag: "Index";
45
+ value: number;
46
+ } | {
47
+ tag: "Raw";
48
+ value: Uint8Array<ArrayBufferLike>;
49
+ }]>;
50
+ /** Ring VRF member public key. Linkable across every ring the key appears in. */
51
+ export declare const RingVrfPublicKey: import("@novasamatech/scale").BytesCodec<number>;
33
52
  /**
34
53
  * Ergonomic form of an account selector: a plain index or a raw 32-byte index.
35
54
  */
@@ -100,6 +119,41 @@ export declare const RingLocation: import("scale-ts").Codec<{
100
119
  value: Uint8Array<ArrayBufferLike>;
101
120
  })[];
102
121
  }>;
122
+ /**
123
+ * How much of a registry entry the caller is asking for (RFC-0024).
124
+ *
125
+ * `PublicKey` is owner-visible by default but permissioned cross-product: a
126
+ * member public key is linkable across every ring it appears in.
127
+ */
128
+ export declare const RingVrfKeyDisclosure: import("scale-ts").Codec<"Anonymized" | "PublicKey">;
129
+ /**
130
+ * A ring VRF key registry entry as returned to a caller (RFC-0024).
131
+ *
132
+ * `rings` is what the owning product *declared* the key for, not proof of
133
+ * membership — membership is still discovered only by attempting a proof, which
134
+ * fails with `NotMember`. `publicKey` is present only when the caller owns the
135
+ * key or asked for (and was granted) `PublicKey` disclosure.
136
+ */
137
+ export declare const RegisteredRingVrfKey: import("scale-ts").Codec<{
138
+ handle: [string, {
139
+ tag: "Index";
140
+ value: number;
141
+ } | {
142
+ tag: "Raw";
143
+ value: Uint8Array<ArrayBufferLike>;
144
+ }];
145
+ rings: {
146
+ chainId: `0x${string}`;
147
+ junctions: ({
148
+ tag: "PalletInstance";
149
+ value: number;
150
+ } | {
151
+ tag: "CollectionId";
152
+ value: Uint8Array<ArrayBufferLike>;
153
+ })[];
154
+ }[];
155
+ publicKey: Uint8Array<ArrayBufferLike> | undefined;
156
+ }>;
103
157
  /** One `transcript.append_message(label, value)` call replayed by the host. */
104
158
  export declare const VrfTranscriptItem: import("scale-ts").Codec<{
105
159
  label: Uint8Array<ArrayBufferLike>;
@@ -135,18 +189,21 @@ export declare const RequestCredentialsErr: [import("scale-ts").Encoder<import("
135
189
  };
136
190
  export declare const CreateProofErr: [import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
137
191
  reason: string;
138
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
192
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
139
193
  reason: string;
140
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>] & {
194
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>] & {
141
195
  enc: import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
142
196
  reason: string;
143
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>;
197
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>;
144
198
  dec: import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
145
199
  reason: string;
146
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>;
200
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>;
147
201
  } & {
148
202
  readonly RingNotFound: import("@novasamatech/scale").ErrCodec<undefined, "CreateProofErr::RingNotFound">;
149
203
  readonly NotMember: import("@novasamatech/scale").ErrCodec<undefined, "CreateProofErr::NotMember">;
204
+ readonly KeyNotRegistered: import("@novasamatech/scale").ErrCodec<undefined, "CreateProofErr::KeyNotRegistered">;
205
+ readonly KeyNotInRing: import("@novasamatech/scale").ErrCodec<undefined, "CreateProofErr::KeyNotInRing">;
206
+ readonly NotAllowlisted: import("@novasamatech/scale").ErrCodec<undefined, "CreateProofErr::NotAllowlisted">;
150
207
  readonly Rejected: import("@novasamatech/scale").ErrCodec<undefined, "CreateProofErr::Rejected">;
151
208
  readonly Unknown: import("@novasamatech/scale").ErrCodec<{
152
209
  reason: string;
@@ -154,22 +211,24 @@ export declare const CreateProofErr: [import("scale-ts").Encoder<import("@novasa
154
211
  } & {
155
212
  [Symbol.hasInstance](v: unknown): v is import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
156
213
  reason: string;
157
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">;
214
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">;
158
215
  };
159
216
  export declare const GetAliasErr: [import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
160
217
  reason: string;
161
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
218
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
162
219
  reason: string;
163
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>] & {
220
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>] & {
164
221
  enc: import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
165
222
  reason: string;
166
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>;
223
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>;
167
224
  dec: import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
168
225
  reason: string;
169
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>;
226
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>;
170
227
  } & {
171
228
  readonly RingNotFound: import("@novasamatech/scale").ErrCodec<undefined, "GetAliasErr::RingNotFound">;
172
229
  readonly NotMember: import("@novasamatech/scale").ErrCodec<undefined, "GetAliasErr::NotMember">;
230
+ readonly KeyNotRegistered: import("@novasamatech/scale").ErrCodec<undefined, "GetAliasErr::KeyNotRegistered">;
231
+ readonly KeyNotInRing: import("@novasamatech/scale").ErrCodec<undefined, "GetAliasErr::KeyNotInRing">;
173
232
  readonly Rejected: import("@novasamatech/scale").ErrCodec<undefined, "GetAliasErr::Rejected">;
174
233
  readonly Unknown: import("@novasamatech/scale").ErrCodec<{
175
234
  reason: string;
@@ -177,7 +236,76 @@ export declare const GetAliasErr: [import("scale-ts").Encoder<import("@novasamat
177
236
  } & {
178
237
  [Symbol.hasInstance](v: unknown): v is import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
179
238
  reason: string;
180
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">;
239
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">;
240
+ };
241
+ export declare const RegisterRingVrfKeyErr: [import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
242
+ reason: string;
243
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
244
+ reason: string;
245
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>] & {
246
+ enc: import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
247
+ reason: string;
248
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>;
249
+ dec: import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
250
+ reason: string;
251
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>;
252
+ } & {
253
+ readonly NotConnected: import("@novasamatech/scale").ErrCodec<undefined, "RegisterRingVrfKeyErr::NotConnected">;
254
+ readonly RingNotFound: import("@novasamatech/scale").ErrCodec<undefined, "RegisterRingVrfKeyErr::RingNotFound">;
255
+ readonly Rejected: import("@novasamatech/scale").ErrCodec<undefined, "RegisterRingVrfKeyErr::Rejected">;
256
+ readonly Unknown: import("@novasamatech/scale").ErrCodec<{
257
+ reason: string;
258
+ }, "RegisterRingVrfKeyErr::Unknown">;
259
+ } & {
260
+ [Symbol.hasInstance](v: unknown): v is import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
261
+ reason: string;
262
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">;
263
+ };
264
+ export declare const ListRingVrfKeysErr: [import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
265
+ reason: string;
266
+ }, "ListRingVrfKeysErr::Unknown">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
267
+ reason: string;
268
+ }, "ListRingVrfKeysErr::Unknown">>] & {
269
+ enc: import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
270
+ reason: string;
271
+ }, "ListRingVrfKeysErr::Unknown">>;
272
+ dec: import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
273
+ reason: string;
274
+ }, "ListRingVrfKeysErr::Unknown">>;
275
+ } & {
276
+ readonly NotConnected: import("@novasamatech/scale").ErrCodec<undefined, "ListRingVrfKeysErr::NotConnected">;
277
+ readonly Rejected: import("@novasamatech/scale").ErrCodec<undefined, "ListRingVrfKeysErr::Rejected">;
278
+ readonly Unknown: import("@novasamatech/scale").ErrCodec<{
279
+ reason: string;
280
+ }, "ListRingVrfKeysErr::Unknown">;
281
+ } & {
282
+ [Symbol.hasInstance](v: unknown): v is import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
283
+ reason: string;
284
+ }, "ListRingVrfKeysErr::Unknown">;
285
+ };
286
+ export declare const RingVrfSignErr: [import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
287
+ reason: string;
288
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>, import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
289
+ reason: string;
290
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>] & {
291
+ enc: import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
292
+ reason: string;
293
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>;
294
+ dec: import("scale-ts").Decoder<import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
295
+ reason: string;
296
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>;
297
+ } & {
298
+ readonly NotConnected: import("@novasamatech/scale").ErrCodec<undefined, "RingVrfSignErr::NotConnected">;
299
+ readonly KeyNotRegistered: import("@novasamatech/scale").ErrCodec<undefined, "RingVrfSignErr::KeyNotRegistered">;
300
+ readonly NotAllowlisted: import("@novasamatech/scale").ErrCodec<undefined, "RingVrfSignErr::NotAllowlisted">;
301
+ readonly Rejected: import("@novasamatech/scale").ErrCodec<undefined, "RingVrfSignErr::Rejected">;
302
+ readonly Unknown: import("@novasamatech/scale").ErrCodec<{
303
+ reason: string;
304
+ }, "RingVrfSignErr::Unknown">;
305
+ } & {
306
+ [Symbol.hasInstance](v: unknown): v is import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
307
+ reason: string;
308
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">;
181
309
  };
182
310
  export declare const GetUserIdErr: [import("scale-ts").Encoder<import("@novasamatech/scale").CodecError<undefined, "GetUserIdErr::NotConnected"> | import("@novasamatech/scale").CodecError<{
183
311
  reason: string;
@@ -245,12 +373,24 @@ export declare const AccountGetV1_response: import("scale-ts").Codec<import("sca
245
373
  }, import("@novasamatech/scale").CodecError<undefined, "RequestCredentialsErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RequestCredentialsErr::Rejected"> | import("@novasamatech/scale").CodecError<undefined, "RequestCredentialsErr::DomainNotValid"> | import("@novasamatech/scale").CodecError<{
246
374
  reason: string;
247
375
  }, "RequestCredentialsErr::Unknown">>>;
376
+ /**
377
+ * `(keyHandle, context, ring)` — RFC-0024 replaced RFC-0004's host-side member
378
+ * key selection with an explicit handle. `ring` stays a separate argument
379
+ * because a key may be registered for several; the host MUST check that `ring`
380
+ * is among the handle's declared rings and fail with `KeyNotInRing` otherwise.
381
+ */
248
382
  export declare const AccountGetAliasV1_request: import("scale-ts").Codec<[[string, {
249
383
  tag: "Index";
250
384
  value: number;
251
385
  } | {
252
386
  tag: "Raw";
253
387
  value: Uint8Array<ArrayBufferLike>;
388
+ }], [string, {
389
+ tag: "Index";
390
+ value: number;
391
+ } | {
392
+ tag: "Raw";
393
+ value: Uint8Array<ArrayBufferLike>;
254
394
  }], {
255
395
  chainId: `0x${string}`;
256
396
  junctions: ({
@@ -266,13 +406,20 @@ export declare const AccountGetAliasV1_response: import("scale-ts").Codec<import
266
406
  alias: Uint8Array<ArrayBufferLike>;
267
407
  }, import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::Rejected"> | import("@novasamatech/scale").CodecError<{
268
408
  reason: string;
269
- }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember">>>;
409
+ }, "GetAliasErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "GetAliasErr::KeyNotInRing">>>;
410
+ /** `(keyHandle, context, ring, message)` — see {@link AccountGetAliasV1_request}. */
270
411
  export declare const AccountCreateProofV1_request: import("scale-ts").Codec<[[string, {
271
412
  tag: "Index";
272
413
  value: number;
273
414
  } | {
274
415
  tag: "Raw";
275
416
  value: Uint8Array<ArrayBufferLike>;
417
+ }], [string, {
418
+ tag: "Index";
419
+ value: number;
420
+ } | {
421
+ tag: "Raw";
422
+ value: Uint8Array<ArrayBufferLike>;
276
423
  }], {
277
424
  chainId: `0x${string}`;
278
425
  junctions: ({
@@ -293,7 +440,76 @@ export declare const AccountCreateProofV1_response: import("scale-ts").Codec<imp
293
440
  ringRevision: number;
294
441
  }, import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::Rejected"> | import("@novasamatech/scale").CodecError<{
295
442
  reason: string;
296
- }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember">>>;
443
+ }, "CreateProofErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::RingNotFound"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotMember"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::KeyNotInRing"> | import("@novasamatech/scale").CodecError<undefined, "CreateProofErr::NotAllowlisted">>>;
444
+ /**
445
+ * `(index, ring)` — registers a key the *calling* product owns. Ownership is the
446
+ * calling product id and is never a parameter, so registration needs no
447
+ * capability gate and no prompt. Registering an already-registered `index` for
448
+ * an additional `ring` extends the existing entry rather than creating a second
449
+ * one (RFC-0024).
450
+ */
451
+ export declare const AccountRegisterRingVrfKeyV1_request: import("scale-ts").Codec<[{
452
+ tag: "Index";
453
+ value: number;
454
+ } | {
455
+ tag: "Raw";
456
+ value: Uint8Array<ArrayBufferLike>;
457
+ }, {
458
+ chainId: `0x${string}`;
459
+ junctions: ({
460
+ tag: "PalletInstance";
461
+ value: number;
462
+ } | {
463
+ tag: "CollectionId";
464
+ value: Uint8Array<ArrayBufferLike>;
465
+ })[];
466
+ }]>;
467
+ export declare const AccountRegisterRingVrfKeyV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::Rejected"> | import("@novasamatech/scale").CodecError<{
468
+ reason: string;
469
+ }, "RegisterRingVrfKeyErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RegisterRingVrfKeyErr::RingNotFound">>>;
470
+ /** `(owner, disclosure)` — lists the registry entries owned by `owner` (RFC-0024). */
471
+ export declare const AccountListRingVrfKeysV1_request: import("scale-ts").Codec<[string, "Anonymized" | "PublicKey"]>;
472
+ export declare const AccountListRingVrfKeysV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<{
473
+ handle: [string, {
474
+ tag: "Index";
475
+ value: number;
476
+ } | {
477
+ tag: "Raw";
478
+ value: Uint8Array<ArrayBufferLike>;
479
+ }];
480
+ rings: {
481
+ chainId: `0x${string}`;
482
+ junctions: ({
483
+ tag: "PalletInstance";
484
+ value: number;
485
+ } | {
486
+ tag: "CollectionId";
487
+ value: Uint8Array<ArrayBufferLike>;
488
+ })[];
489
+ }[];
490
+ publicKey: Uint8Array<ArrayBufferLike> | undefined;
491
+ }[], import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "ListRingVrfKeysErr::Rejected"> | import("@novasamatech/scale").CodecError<{
492
+ reason: string;
493
+ }, "ListRingVrfKeysErr::Unknown">>>;
494
+ /**
495
+ * `(keyHandle, message)` — signs `message` with the member key itself, producing
496
+ * an ordinary signature rather than an anonymous ring proof (RFC-0024).
497
+ *
498
+ * Takes neither a context nor a ring: it derives no alias and proves no
499
+ * membership, so there is nothing for either to scope. Verified against the
500
+ * member public key, which makes every such signature linkable to every other
501
+ * use of that key.
502
+ */
503
+ export declare const AccountRingVrfSignV1_request: import("scale-ts").Codec<[[string, {
504
+ tag: "Index";
505
+ value: number;
506
+ } | {
507
+ tag: "Raw";
508
+ value: Uint8Array<ArrayBufferLike>;
509
+ }], Uint8Array<ArrayBufferLike>]>;
510
+ export declare const AccountRingVrfSignV1_response: import("scale-ts").Codec<import("scale-ts").ResultPayload<Uint8Array<ArrayBufferLike>, import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotConnected"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::Rejected"> | import("@novasamatech/scale").CodecError<{
511
+ reason: string;
512
+ }, "RingVrfSignErr::Unknown"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::KeyNotRegistered"> | import("@novasamatech/scale").CodecError<undefined, "RingVrfSignErr::NotAllowlisted">>>;
297
513
  /**
298
514
  * The host replays the transcript verbatim — `Transcript::new(transcriptLabel)`
299
515
  * followed by `append_message(item.label, item.value)` per item, in order — and
@@ -24,6 +24,19 @@ export const DerivationIndex = Enum({
24
24
  });
25
25
  export const ProductAccountId = Tuple(DotNsIdentifier, DerivationIndex);
26
26
  export const RingVrgAlias = Bytes();
27
+ /**
28
+ * Public name of a registered ring VRF key (RFC-0024): the owning product plus
29
+ * the index of the key inside that product's ring VRF domain (`//{productId}//{index}`
30
+ * of the ring VRF tree, RFC-0022).
31
+ *
32
+ * Structurally a {@link ProductAccountId}, but it names a slot in the ring VRF
33
+ * tree — *not* the sr25519 product account at the same `(product, index)`.
34
+ * Consumers MUST treat it as opaque and select keys by declared
35
+ * {@link RingLocation}; the index is the owner's implementation detail.
36
+ */
37
+ export const RingVrfKeyHandle = ProductAccountId;
38
+ /** Ring VRF member public key. Linkable across every ring the key appears in. */
39
+ export const RingVrfPublicKey = Bytes(32);
27
40
  /**
28
41
  * Normalizes an {@link AccountSelector} into the wire {@link DerivationIndex}:
29
42
  * numbers become `Index`, 32-byte arrays become `Raw`.
@@ -75,6 +88,26 @@ export const RingLocation = Struct({
75
88
  chainId: GenesisHash,
76
89
  junctions: Vector(RingLocationJunction),
77
90
  });
91
+ /**
92
+ * How much of a registry entry the caller is asking for (RFC-0024).
93
+ *
94
+ * `PublicKey` is owner-visible by default but permissioned cross-product: a
95
+ * member public key is linkable across every ring it appears in.
96
+ */
97
+ export const RingVrfKeyDisclosure = Status('Anonymized', 'PublicKey');
98
+ /**
99
+ * A ring VRF key registry entry as returned to a caller (RFC-0024).
100
+ *
101
+ * `rings` is what the owning product *declared* the key for, not proof of
102
+ * membership — membership is still discovered only by attempting a proof, which
103
+ * fails with `NotMember`. `publicKey` is present only when the caller owns the
104
+ * key or asked for (and was granted) `PublicKey` disclosure.
105
+ */
106
+ export const RegisteredRingVrfKey = Struct({
107
+ handle: RingVrfKeyHandle,
108
+ rings: Vector(RingLocation),
109
+ publicKey: Option(RingVrfPublicKey),
110
+ });
78
111
  /** One `transcript.append_message(label, value)` call replayed by the host. */
79
112
  export const VrfTranscriptItem = Struct({
80
113
  label: Bytes(),
@@ -95,15 +128,38 @@ export const RequestCredentialsErr = ErrEnum('RequestCredentialsErr', {
95
128
  export const CreateProofErr = ErrEnum('CreateProofErr', {
96
129
  RingNotFound: [_void, 'CreateProof: ring not found'],
97
130
  NotMember: [_void, 'CreateProof: selected member key is not a member of the ring'],
131
+ KeyNotRegistered: [_void, 'CreateProof: key handle has no registry entry'],
132
+ KeyNotInRing: [_void, 'CreateProof: key handle is registered, but not for the requested ring'],
133
+ NotAllowlisted: [_void, 'CreateProof: key handle is foreign and its owner has not allowlisted the caller'],
98
134
  Rejected: [_void, 'CreateProof: rejected'],
99
135
  Unknown: [GenericErr, 'CreateProof: unknown error'],
100
136
  });
101
137
  export const GetAliasErr = ErrEnum('GetAliasErr', {
102
138
  RingNotFound: [_void, 'GetAlias: ring not found'],
103
139
  NotMember: [_void, 'GetAlias: selected member key is not a member of the ring'],
140
+ KeyNotRegistered: [_void, 'GetAlias: key handle has no registry entry'],
141
+ KeyNotInRing: [_void, 'GetAlias: key handle is registered, but not for the requested ring'],
104
142
  Rejected: [_void, 'GetAlias: rejected'],
105
143
  Unknown: [GenericErr, 'GetAlias: unknown error'],
106
144
  });
145
+ export const RegisterRingVrfKeyErr = ErrEnum('RegisterRingVrfKeyErr', {
146
+ NotConnected: [_void, 'RegisterRingVrfKey: not connected'],
147
+ RingNotFound: [_void, 'RegisterRingVrfKey: ring not found'],
148
+ Rejected: [_void, 'RegisterRingVrfKey: rejected'],
149
+ Unknown: [GenericErr, 'RegisterRingVrfKey: unknown error'],
150
+ });
151
+ export const ListRingVrfKeysErr = ErrEnum('ListRingVrfKeysErr', {
152
+ NotConnected: [_void, 'ListRingVrfKeys: not connected'],
153
+ Rejected: [_void, 'ListRingVrfKeys: owner is not the calling product and the caller has no grant for it'],
154
+ Unknown: [GenericErr, 'ListRingVrfKeys: unknown error'],
155
+ });
156
+ export const RingVrfSignErr = ErrEnum('RingVrfSignErr', {
157
+ NotConnected: [_void, 'RingVrfSign: not connected'],
158
+ KeyNotRegistered: [_void, 'RingVrfSign: key handle has no registry entry'],
159
+ NotAllowlisted: [_void, 'RingVrfSign: key handle is foreign and its owner has not allowlisted the caller'],
160
+ Rejected: [_void, 'RingVrfSign: rejected'],
161
+ Unknown: [GenericErr, 'RingVrfSign: unknown error'],
162
+ });
107
163
  export const GetUserIdErr = ErrEnum('GetUserIdErr', {
108
164
  PermissionDenied: [_void, 'GetUserId: permission denied'],
109
165
  NotConnected: [_void, 'GetUserId: not connected'],
@@ -126,11 +182,44 @@ export const GetUserIdV1_response = Result(UserIdentity, GetUserIdErr);
126
182
  export const AccountGetV1_request = ProductAccountId;
127
183
  export const AccountGetV1_response = Result(ProductAccount, RequestCredentialsErr);
128
184
  // account_get_alias
129
- export const AccountGetAliasV1_request = Tuple(ProductProofContext, RingLocation);
185
+ /**
186
+ * `(keyHandle, context, ring)` — RFC-0024 replaced RFC-0004's host-side member
187
+ * key selection with an explicit handle. `ring` stays a separate argument
188
+ * because a key may be registered for several; the host MUST check that `ring`
189
+ * is among the handle's declared rings and fail with `KeyNotInRing` otherwise.
190
+ */
191
+ export const AccountGetAliasV1_request = Tuple(RingVrfKeyHandle, ProductProofContext, RingLocation);
130
192
  export const AccountGetAliasV1_response = Result(ContextualAlias, GetAliasErr);
131
193
  // account_create_proof
132
- export const AccountCreateProofV1_request = Tuple(ProductProofContext, RingLocation, Bytes());
194
+ /** `(keyHandle, context, ring, message)` — see {@link AccountGetAliasV1_request}. */
195
+ export const AccountCreateProofV1_request = Tuple(RingVrfKeyHandle, ProductProofContext, RingLocation, Bytes());
133
196
  export const AccountCreateProofV1_response = Result(RingVrfProof, CreateProofErr);
197
+ // account_register_ring_vrf_key
198
+ /**
199
+ * `(index, ring)` — registers a key the *calling* product owns. Ownership is the
200
+ * calling product id and is never a parameter, so registration needs no
201
+ * capability gate and no prompt. Registering an already-registered `index` for
202
+ * an additional `ring` extends the existing entry rather than creating a second
203
+ * one (RFC-0024).
204
+ */
205
+ export const AccountRegisterRingVrfKeyV1_request = Tuple(DerivationIndex, RingLocation);
206
+ export const AccountRegisterRingVrfKeyV1_response = Result(RingVrfPublicKey, RegisterRingVrfKeyErr);
207
+ // account_list_ring_vrf_keys
208
+ /** `(owner, disclosure)` — lists the registry entries owned by `owner` (RFC-0024). */
209
+ export const AccountListRingVrfKeysV1_request = Tuple(ProductId, RingVrfKeyDisclosure);
210
+ export const AccountListRingVrfKeysV1_response = Result(Vector(RegisteredRingVrfKey), ListRingVrfKeysErr);
211
+ // account_ring_vrf_sign
212
+ /**
213
+ * `(keyHandle, message)` — signs `message` with the member key itself, producing
214
+ * an ordinary signature rather than an anonymous ring proof (RFC-0024).
215
+ *
216
+ * Takes neither a context nor a ring: it derives no alias and proves no
217
+ * membership, so there is nothing for either to scope. Verified against the
218
+ * member public key, which makes every such signature linkable to every other
219
+ * use of that key.
220
+ */
221
+ export const AccountRingVrfSignV1_request = Tuple(RingVrfKeyHandle, Bytes());
222
+ export const AccountRingVrfSignV1_response = Result(Bytes(), RingVrfSignErr);
134
223
  // account_sign_vrf
135
224
  /**
136
225
  * The host replays the transcript verbatim — `Transcript::new(transcriptLabel)`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@novasamatech/host-api",
3
3
  "type": "module",
4
- "version": "0.9.1",
4
+ "version": "0.9.3",
5
5
  "description": "Host API: transport implementation for host - product integration.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -22,7 +22,7 @@
22
22
  "README.md"
23
23
  ],
24
24
  "dependencies": {
25
- "@novasamatech/scale": "0.9.1",
25
+ "@novasamatech/scale": "0.9.3",
26
26
  "nanoevents": "10.0.0",
27
27
  "nanoid": "6.0.0",
28
28
  "neverthrow": "^8.2.0",