@openzeppelin/guardian-client 0.18.0 → 0.18.2
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 +52 -4
- package/dist/conversion.d.ts +4 -2
- package/dist/conversion.d.ts.map +1 -1
- package/dist/conversion.js +22 -0
- package/dist/conversion.js.map +1 -1
- package/dist/error-codes.d.ts +1 -1
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +3 -0
- package/dist/error-codes.js.map +1 -1
- package/dist/http.d.ts +46 -1
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +175 -26
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/server-types.d.ts +35 -2
- package/dist/server-types.d.ts.map +1 -1
- package/dist/types.d.ts +104 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/conversion.test.ts +33 -1
- package/src/conversion.ts +30 -0
- package/src/error-codes.ts +3 -0
- package/src/http.test.ts +461 -1
- package/src/http.ts +216 -25
- package/src/index.ts +6 -0
- package/src/server-types.ts +40 -2
- package/src/types.ts +123 -9
package/dist/types.d.ts
CHANGED
|
@@ -22,6 +22,95 @@ export interface Signer {
|
|
|
22
22
|
* throw a clear error rather than send a signature the server will reject.
|
|
23
23
|
*/
|
|
24
24
|
signLookupMessage?(keyCommitmentHex: string, timestampMs: number): Promise<string> | string;
|
|
25
|
+
/**
|
|
26
|
+
* Sign a session grant once, authorizing a delegated signer to sign
|
|
27
|
+
* per-account requests. Raw signers sign the grant's RPO digest; EIP-712
|
|
28
|
+
* signers sign readable `GuardianSession` typed data. The canonical
|
|
29
|
+
* implementation lives in `@openzeppelin/miden-multisig-client`.
|
|
30
|
+
*/
|
|
31
|
+
signSessionGrant?(grant: SessionGrantFields): Promise<string> | string;
|
|
32
|
+
/**
|
|
33
|
+
* Sign the account-less revoke-all message for `POST /session/revoke-all`,
|
|
34
|
+
* which ends every session of this signer on the Guardian. Raw signers sign
|
|
35
|
+
* its RPO digest; EIP-712 signers sign `GuardianSessionRevokeAll` typed data.
|
|
36
|
+
*/
|
|
37
|
+
signSessionRevokeAll?(signerCommitment: string, timestampMs: number): Promise<string> | string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Fields of a session grant, as the wallet signs and displays them. The scope
|
|
41
|
+
* is fixed in v1 (every account the signer cosigns on this Guardian) and is
|
|
42
|
+
* not a field.
|
|
43
|
+
*/
|
|
44
|
+
export interface SessionGrantFields {
|
|
45
|
+
/** Hex commitment of the wallet key that signs the grant. */
|
|
46
|
+
signerCommitment: string;
|
|
47
|
+
/** Hex SEC1-compressed P-256 delegated-signer public key (33 bytes). */
|
|
48
|
+
sessionPublicKey: string;
|
|
49
|
+
/**
|
|
50
|
+
* The website asking for the session, e.g. `https://app.example`; empty
|
|
51
|
+
* outside a browser. The wallet displays it so the user sees who asks;
|
|
52
|
+
* Guardian does not check it against requests.
|
|
53
|
+
*/
|
|
54
|
+
origin: string;
|
|
55
|
+
/** Unix seconds. */
|
|
56
|
+
issuedAt: number;
|
|
57
|
+
/** Unix seconds. */
|
|
58
|
+
expiresAt: number;
|
|
59
|
+
/** This Guardian's ACK key commitment for the wallet's scheme (`GET /pubkey`). */
|
|
60
|
+
guardianCommitment: string;
|
|
61
|
+
/** `environment` from `GET /status`. */
|
|
62
|
+
network: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Why a client stopped using a session:
|
|
66
|
+
* - `logout`: the app ended it with `revokeSession` or `revokeAllSessions`
|
|
67
|
+
* (the multisig SDK also logs out a session it replaces); do not start a
|
|
68
|
+
* new one in response;
|
|
69
|
+
* - `expired`: it reached its expiry;
|
|
70
|
+
* - `revoked`: Guardian answered `session_revoked` (logout or revoke-all
|
|
71
|
+
* elsewhere);
|
|
72
|
+
* - `rejected`: Guardian no longer accepts it (`authentication_failed`, e.g.
|
|
73
|
+
* after a restart forgot it or the Guardian key was rotated).
|
|
74
|
+
*/
|
|
75
|
+
export type SessionEndReason = 'logout' | 'expired' | 'revoked' | 'rejected';
|
|
76
|
+
/**
|
|
77
|
+
* Signs session-eligible requests on behalf of a wallet after a session grant
|
|
78
|
+
* was registered. Requests carry `x-auth-format: session`.
|
|
79
|
+
*/
|
|
80
|
+
export interface SessionRequestSigner {
|
|
81
|
+
/** Hex SEC1-compressed P-256 session public key, sent as `x-pubkey`. */
|
|
82
|
+
readonly publicKey: string;
|
|
83
|
+
/**
|
|
84
|
+
* Commitment of the wallet that granted the session. The client only uses
|
|
85
|
+
* the session while that wallet is its signer.
|
|
86
|
+
*/
|
|
87
|
+
readonly signerCommitment: string;
|
|
88
|
+
/** Unix seconds. */
|
|
89
|
+
readonly expiresAt: number;
|
|
90
|
+
signRequest(accountId: string, timestamp: number, requestPayload: RequestAuthPayload): Promise<string> | string;
|
|
91
|
+
/** Sign the account-less `SessionLogoutMessage` for `POST /session/logout`. */
|
|
92
|
+
signLogout(timestampMs: number): Promise<string> | string;
|
|
93
|
+
/** Called once when the client stops using the session. */
|
|
94
|
+
onEnded?(reason: SessionEndReason): void;
|
|
95
|
+
}
|
|
96
|
+
export interface CreateSessionRequest {
|
|
97
|
+
scheme: SignatureScheme;
|
|
98
|
+
/** `eip712` for EIP-712 wallet signatures; omitted for raw signatures. */
|
|
99
|
+
authFormat?: 'eip712';
|
|
100
|
+
/** Wallet public key; required for ECDSA. */
|
|
101
|
+
publicKey?: string;
|
|
102
|
+
signature: string;
|
|
103
|
+
grant: SessionGrantFields;
|
|
104
|
+
}
|
|
105
|
+
export interface CreateSessionResponse {
|
|
106
|
+
signerCommitment: string;
|
|
107
|
+
/** RFC 3339 UTC. */
|
|
108
|
+
expiresAt: string;
|
|
109
|
+
}
|
|
110
|
+
/** Session parameters a Guardian advertises on `GET /status`. */
|
|
111
|
+
export interface SessionsStatus {
|
|
112
|
+
/** Grants may expire at most this many seconds after registration. */
|
|
113
|
+
maxTtlSeconds: number;
|
|
25
114
|
}
|
|
26
115
|
export interface FalconSignature {
|
|
27
116
|
scheme: 'falcon';
|
|
@@ -61,14 +150,16 @@ export type DeltaStatus = {
|
|
|
61
150
|
status: 'canonical';
|
|
62
151
|
timestamp: string;
|
|
63
152
|
}
|
|
64
|
-
/** Candidate the Guardian gave up verifying (retry exhaustion
|
|
65
|
-
* confirmed-diverged observation
|
|
66
|
-
*
|
|
67
|
-
*
|
|
153
|
+
/** Candidate the Guardian gave up verifying (retry exhaustion, a
|
|
154
|
+
* confirmed-diverged observation, or an orphaned position in the
|
|
155
|
+
* account's candidate queue after its predecessor was parked) but
|
|
156
|
+
* kept for background reconciliation (issue #345 / #17); promoted to
|
|
157
|
+
* `canonical` if the chain ever shows it landed, dropped after a
|
|
158
|
+
* server-side TTL otherwise. */
|
|
68
159
|
| {
|
|
69
160
|
status: 'retained';
|
|
70
161
|
timestamp: string;
|
|
71
|
-
reason?: 'retry_exhausted' | 'diverged';
|
|
162
|
+
reason?: 'retry_exhausted' | 'diverged' | 'orphaned';
|
|
72
163
|
} | {
|
|
73
164
|
status: 'discarded';
|
|
74
165
|
timestamp: string;
|
|
@@ -96,11 +187,13 @@ export interface ProposalMetadata {
|
|
|
96
187
|
/** P2ID note visibility, "public" or "private" (issue #322). Absent => public. */
|
|
97
188
|
noteType?: string;
|
|
98
189
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
190
|
+
* The block the proposal's transaction summary binds. Not signed: the
|
|
191
|
+
* multisig SDKs read the block from the summary and refuse a proposal whose
|
|
192
|
+
* value disagrees, so a wrong value can deny a proposal but never get a
|
|
193
|
+
* wrong one accepted.
|
|
103
194
|
*/
|
|
195
|
+
boundBlockNum?: number;
|
|
196
|
+
/** Legacy: the base64 Miden `ChainAnchor` 0.18 clients wrote instead of `boundBlockNum`. */
|
|
104
197
|
chainAnchor?: string;
|
|
105
198
|
/** P2IDE reclaim block height (issue #366). Presence of either height means a P2IDE note. */
|
|
106
199
|
reclaimHeight?: number;
|
|
@@ -186,6 +279,8 @@ export interface StatusResponse {
|
|
|
186
279
|
environment: string;
|
|
187
280
|
startedAt: string;
|
|
188
281
|
uptimeSeconds: number;
|
|
282
|
+
/** Present on every Guardian that accepts session grants; absent on older servers. */
|
|
283
|
+
sessions?: SessionsStatus;
|
|
189
284
|
}
|
|
190
285
|
export interface DeltaProposalRequest {
|
|
191
286
|
accountId: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC;IACtC,mFAAmF;IACnF,QAAQ,CAAC,qBAAqB,CAAC,EAAE,QAAQ,CAAC;IAC1C,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC3F,WAAW,CAAC,CACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,kBAAkB,GACjC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5B,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAEhE;;;;;;;;;;OAUG;IACH,iBAAiB,CAAC,CAChB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,cAAc,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,MAAM,MAAM,UAAU,GAClB;IACE,cAAc,EAAE;QACd,oBAAoB,EAAE,MAAM,EAAE,CAAC;KAChC,CAAC;CACH,GACD;IACE,UAAU,EAAE;QACV,oBAAoB,EAAE,MAAM,EAAE,CAAC;KAChC,CAAC;CACH,CAAC;AAEN,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,iBAAiB,EAAE,CAAA;CAAE,GAC/F;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAC5C
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/conversion.test.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
1
2
|
import { describe, it, expect } from 'vitest';
|
|
2
3
|
import {
|
|
3
4
|
fromServerCanonicalNonce,
|
|
@@ -503,7 +504,7 @@ describe('conversion', () => {
|
|
|
503
504
|
expect(result.salt).toBe(original.salt);
|
|
504
505
|
});
|
|
505
506
|
|
|
506
|
-
it('chainAnchor survives roundtrip as chain_anchor on the wire', () => {
|
|
507
|
+
it('a legacy chainAnchor survives roundtrip as chain_anchor on the wire', () => {
|
|
507
508
|
const original: ProposalMetadata = {
|
|
508
509
|
proposalType: 'add_signer',
|
|
509
510
|
targetThreshold: 2,
|
|
@@ -518,6 +519,22 @@ describe('conversion', () => {
|
|
|
518
519
|
expect(result.chainAnchor).toBe('bW9jay1jaGFpbi1hbmNob3I=');
|
|
519
520
|
});
|
|
520
521
|
|
|
522
|
+
it('boundBlockNum survives roundtrip as bound_block_num on the wire', () => {
|
|
523
|
+
const original: ProposalMetadata = {
|
|
524
|
+
proposalType: 'add_signer',
|
|
525
|
+
targetThreshold: 2,
|
|
526
|
+
signerCommitments: ['0xabc'],
|
|
527
|
+
boundBlockNum: 42,
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
const server = toServerProposalMetadata(original);
|
|
531
|
+
expect(server.bound_block_num).toBe(42);
|
|
532
|
+
expect(server.chain_anchor).toBeUndefined();
|
|
533
|
+
|
|
534
|
+
const result = fromServerProposalMetadata(server);
|
|
535
|
+
expect(result.boundBlockNum).toBe(42);
|
|
536
|
+
});
|
|
537
|
+
|
|
521
538
|
it('p2id noteType survives roundtrip as note_type on the wire (issue #322)', () => {
|
|
522
539
|
const original: ProposalMetadata = {
|
|
523
540
|
proposalType: 'p2id',
|
|
@@ -552,5 +569,20 @@ describe('conversion', () => {
|
|
|
552
569
|
expect(result.reclaimHeight).toBe(12345);
|
|
553
570
|
expect(result.timelockHeight).toBe(700);
|
|
554
571
|
});
|
|
572
|
+
|
|
573
|
+
describe('shared proposal metadata wire sample (issue #538)', () => {
|
|
574
|
+
const fixture = JSON.parse(
|
|
575
|
+
readFileSync(
|
|
576
|
+
new URL('../../../fixtures/miden-multisig-client/proposal-metadata-wire.json', import.meta.url),
|
|
577
|
+
'utf-8',
|
|
578
|
+
),
|
|
579
|
+
) as Record<'current' | 'legacy', { wire: ServerProposalMetadata; guardian: ProposalMetadata }>;
|
|
580
|
+
const onTheWire = (value: unknown): unknown => JSON.parse(JSON.stringify(value));
|
|
581
|
+
|
|
582
|
+
it.each(['current', 'legacy'] as const)('maps the %s sample both ways', (sample) => {
|
|
583
|
+
expect(onTheWire(fromServerProposalMetadata(fixture[sample].wire))).toEqual(fixture[sample].guardian);
|
|
584
|
+
expect(onTheWire(toServerProposalMetadata(fixture[sample].guardian))).toEqual(fixture[sample].wire);
|
|
585
|
+
});
|
|
586
|
+
});
|
|
555
587
|
});
|
|
556
588
|
});
|
package/src/conversion.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type {
|
|
|
3
3
|
CosignerSignature,
|
|
4
4
|
ConfigureRequest,
|
|
5
5
|
ConfigureResponse,
|
|
6
|
+
CreateSessionRequest,
|
|
7
|
+
CreateSessionResponse,
|
|
6
8
|
DeltaObject,
|
|
7
9
|
DeltaProposalRequest,
|
|
8
10
|
DeltaStatus,
|
|
@@ -21,6 +23,8 @@ import type {
|
|
|
21
23
|
ServerCosignerSignature,
|
|
22
24
|
ServerConfigureRequest,
|
|
23
25
|
ServerConfigureResponse,
|
|
26
|
+
ServerCreateSessionRequest,
|
|
27
|
+
ServerCreateSessionResponse,
|
|
24
28
|
ServerDeltaObject,
|
|
25
29
|
ServerDeltaProposalRequest,
|
|
26
30
|
ServerDeltaStatus,
|
|
@@ -119,6 +123,7 @@ export function fromServerProposalMetadata(server: ServerProposalMetadata): Prop
|
|
|
119
123
|
amount: server.amount,
|
|
120
124
|
noteType: server.note_type,
|
|
121
125
|
chainAnchor: server.chain_anchor,
|
|
126
|
+
boundBlockNum: server.bound_block_num,
|
|
122
127
|
reclaimHeight: server.reclaim_height,
|
|
123
128
|
timelockHeight: server.timelock_height,
|
|
124
129
|
};
|
|
@@ -246,6 +251,7 @@ export function toServerProposalMetadata(meta: ProposalMetadata): ServerProposal
|
|
|
246
251
|
amount: meta.amount,
|
|
247
252
|
note_type: meta.noteType,
|
|
248
253
|
chain_anchor: meta.chainAnchor,
|
|
254
|
+
bound_block_num: meta.boundBlockNum,
|
|
249
255
|
reclaim_height: meta.reclaimHeight,
|
|
250
256
|
timelock_height: meta.timelockHeight,
|
|
251
257
|
};
|
|
@@ -259,6 +265,30 @@ export function toServerConfigureRequest(req: ConfigureRequest): ServerConfigure
|
|
|
259
265
|
};
|
|
260
266
|
}
|
|
261
267
|
|
|
268
|
+
export function toServerCreateSessionRequest(req: CreateSessionRequest): ServerCreateSessionRequest {
|
|
269
|
+
return {
|
|
270
|
+
scheme: req.scheme,
|
|
271
|
+
...(req.authFormat ? { auth_format: req.authFormat } : {}),
|
|
272
|
+
...(req.publicKey ? { public_key: req.publicKey } : {}),
|
|
273
|
+
signature: req.signature,
|
|
274
|
+
grant: {
|
|
275
|
+
signer_commitment: req.grant.signerCommitment,
|
|
276
|
+
session_public_key: req.grant.sessionPublicKey,
|
|
277
|
+
origin: req.grant.origin,
|
|
278
|
+
issued_at: req.grant.issuedAt,
|
|
279
|
+
expires_at: req.grant.expiresAt,
|
|
280
|
+
guardian_commitment: req.grant.guardianCommitment,
|
|
281
|
+
network: req.grant.network,
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
export function fromServerCreateSessionResponse(
|
|
287
|
+
server: ServerCreateSessionResponse
|
|
288
|
+
): CreateSessionResponse {
|
|
289
|
+
return { signerCommitment: server.signer_commitment, expiresAt: server.expires_at };
|
|
290
|
+
}
|
|
291
|
+
|
|
262
292
|
export function toServerDeltaProposalRequest(req: DeltaProposalRequest): ServerDeltaProposalRequest {
|
|
263
293
|
return {
|
|
264
294
|
account_id: req.accountId,
|
package/src/error-codes.ts
CHANGED
|
@@ -44,6 +44,8 @@ export const GUARDIAN_ERROR_CODES = [
|
|
|
44
44
|
'rate_limit_exceeded',
|
|
45
45
|
'rpc_unavailable',
|
|
46
46
|
'rpc_validation_failed',
|
|
47
|
+
'session_expired',
|
|
48
|
+
'session_revoked',
|
|
47
49
|
'signature_scheme_not_allowed',
|
|
48
50
|
'signer_not_authorized',
|
|
49
51
|
'signing_error',
|
|
@@ -51,6 +53,7 @@ export const GUARDIAN_ERROR_CODES = [
|
|
|
51
53
|
'storage_error',
|
|
52
54
|
'unsupported_evm_chain',
|
|
53
55
|
'unsupported_for_network',
|
|
56
|
+
'wallet_signature_required',
|
|
54
57
|
] as const;
|
|
55
58
|
|
|
56
59
|
/**
|