@openzeppelin/guardian-client 0.15.0 → 0.16.0
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 +16 -0
- package/dist/conversion.d.ts.map +1 -1
- package/dist/conversion.js +4 -2
- package/dist/conversion.js.map +1 -1
- package/dist/error-codes.d.ts +30 -0
- package/dist/error-codes.d.ts.map +1 -0
- package/dist/error-codes.js +81 -0
- package/dist/error-codes.js.map +1 -0
- package/dist/http.d.ts +70 -2
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +166 -3
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server-types.d.ts +21 -0
- package/dist/server-types.d.ts.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -1
- package/src/conversion.test.ts +16 -0
- package/src/conversion.ts +4 -2
- package/src/error-codes.test.ts +69 -0
- package/src/error-codes.ts +91 -0
- package/src/http.test.ts +301 -22
- package/src/http.ts +203 -3
- package/src/index.ts +10 -0
- package/src/server-types.ts +24 -1
- package/src/types.ts +32 -1
- package/dist/auth-request.test.d.ts +0 -2
- package/dist/auth-request.test.d.ts.map +0 -1
- package/dist/auth-request.test.js +0 -10
- package/dist/auth-request.test.js.map +0 -1
- package/dist/conversion.test.d.ts +0 -2
- package/dist/conversion.test.d.ts.map +0 -1
- package/dist/conversion.test.js +0 -332
- package/dist/conversion.test.js.map +0 -1
- package/dist/http.test.d.ts +0 -2
- package/dist/http.test.d.ts.map +0 -1
- package/dist/http.test.js +0 -672
- package/dist/http.test.js.map +0 -1
package/dist/server-types.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export type ServerDeltaStatus = {
|
|
|
27
27
|
} | {
|
|
28
28
|
status: 'discarded';
|
|
29
29
|
timestamp: string;
|
|
30
|
+
reason?: string;
|
|
30
31
|
};
|
|
31
32
|
export type ServerProposalType = 'add_signer' | 'remove_signer' | 'change_threshold' | 'update_procedure_threshold' | 'switch_guardian' | 'consume_notes' | 'p2id' | 'custom' | (string & {});
|
|
32
33
|
export interface ServerProposalMetadata {
|
|
@@ -47,6 +48,8 @@ export interface ServerProposalMetadata {
|
|
|
47
48
|
recipient_id?: string;
|
|
48
49
|
faucet_id?: string;
|
|
49
50
|
amount?: string;
|
|
51
|
+
/** P2ID note visibility, "public" or "private" (issue #322). Absent => public. */
|
|
52
|
+
note_type?: string;
|
|
50
53
|
}
|
|
51
54
|
export interface ServerDeltaObject {
|
|
52
55
|
account_id: string;
|
|
@@ -142,6 +145,16 @@ export interface ServerDeltaProposalResponse {
|
|
|
142
145
|
export interface ServerProposalsResponse {
|
|
143
146
|
proposals: ServerDeltaObject[];
|
|
144
147
|
}
|
|
148
|
+
export interface ServerAbandonCandidateRequest {
|
|
149
|
+
account_id: string;
|
|
150
|
+
nonce: number;
|
|
151
|
+
}
|
|
152
|
+
export interface ServerAbandonCandidateResponse {
|
|
153
|
+
account_id: string;
|
|
154
|
+
nonce: number;
|
|
155
|
+
state: 'pending' | 'abandoned';
|
|
156
|
+
abandon_requested_at?: string;
|
|
157
|
+
}
|
|
145
158
|
export interface ServerSignProposalRequest {
|
|
146
159
|
account_id: string;
|
|
147
160
|
commitment: string;
|
|
@@ -151,6 +164,14 @@ export interface ServerPubkeyResponse {
|
|
|
151
164
|
commitment: string;
|
|
152
165
|
pubkey?: string;
|
|
153
166
|
}
|
|
167
|
+
export interface ServerStatusResponse {
|
|
168
|
+
status: string;
|
|
169
|
+
version: string;
|
|
170
|
+
git_commit: string;
|
|
171
|
+
environment: string;
|
|
172
|
+
started_at: string;
|
|
173
|
+
uptime_seconds: number;
|
|
174
|
+
}
|
|
154
175
|
export interface ServerLookupAccount {
|
|
155
176
|
account_id: string;
|
|
156
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-types.d.ts","sourceRoot":"","sources":["../src/server-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,uBAAuB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AAEnF,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,uBAAuB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,uBAAuB,EAAE,CAAA;CAAE,GACvG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"server-types.d.ts","sourceRoot":"","sources":["../src/server-types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ export type DeltaStatus = {
|
|
|
57
57
|
} | {
|
|
58
58
|
status: 'discarded';
|
|
59
59
|
timestamp: string;
|
|
60
|
+
reason?: string;
|
|
60
61
|
};
|
|
61
62
|
export type ProposalType = 'add_signer' | 'remove_signer' | 'change_threshold' | 'update_procedure_threshold' | 'switch_guardian' | 'consume_notes' | 'p2id' | 'custom' | (string & {});
|
|
62
63
|
export interface ProposalMetadata {
|
|
@@ -77,6 +78,8 @@ export interface ProposalMetadata {
|
|
|
77
78
|
recipientId?: string;
|
|
78
79
|
faucetId?: string;
|
|
79
80
|
amount?: string;
|
|
81
|
+
/** P2ID note visibility, "public" or "private" (issue #322). Absent => public. */
|
|
82
|
+
noteType?: string;
|
|
80
83
|
}
|
|
81
84
|
export interface DeltaObject {
|
|
82
85
|
accountId: string;
|
|
@@ -137,6 +140,14 @@ export interface PubkeyResponse {
|
|
|
137
140
|
commitment: string;
|
|
138
141
|
pubkey?: string;
|
|
139
142
|
}
|
|
143
|
+
export interface StatusResponse {
|
|
144
|
+
status: string;
|
|
145
|
+
version: string;
|
|
146
|
+
gitCommit: string;
|
|
147
|
+
environment: string;
|
|
148
|
+
startedAt: string;
|
|
149
|
+
uptimeSeconds: number;
|
|
150
|
+
}
|
|
140
151
|
export interface DeltaProposalRequest {
|
|
141
152
|
accountId: string;
|
|
142
153
|
nonce: number;
|
|
@@ -163,6 +174,24 @@ export interface SignProposalRequest {
|
|
|
163
174
|
commitment: string;
|
|
164
175
|
signature: ProposalSignature;
|
|
165
176
|
}
|
|
177
|
+
export interface AbandonCandidateResponse {
|
|
178
|
+
accountId: string;
|
|
179
|
+
nonce: number;
|
|
180
|
+
/**
|
|
181
|
+
* `'pending'` while the guardian's worker still has to resolve the
|
|
182
|
+
* abandon intent (the account stays locked until then); `'abandoned'`
|
|
183
|
+
* once the delta is discarded as client-abandoned and the account
|
|
184
|
+
* released.
|
|
185
|
+
*/
|
|
186
|
+
state: 'pending' | 'abandoned';
|
|
187
|
+
/**
|
|
188
|
+
* RFC 3339 UTC timestamp of the recorded abandon request. Retries
|
|
189
|
+
* return the original timestamp; absent once resolved.
|
|
190
|
+
*/
|
|
191
|
+
abandonRequestedAt?: string;
|
|
192
|
+
}
|
|
193
|
+
/** Resolution of an abandon request, as observed via the delta feed. */
|
|
194
|
+
export type AbandonStatus = 'waiting' | 'landed' | 'abandoned' | 'unexpected';
|
|
166
195
|
export interface PushDeltaResponse {
|
|
167
196
|
accountId: string;
|
|
168
197
|
nonce: number;
|
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,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;;;;;;;;;OASG;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;CACpB;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,GAC1C;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openzeppelin/guardian-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "TypeScript HTTP client for Guardian server",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/OpenZeppelin/guardian.git",
|
|
8
|
+
"directory": "packages/guardian-client"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/OpenZeppelin/guardian/tree/main/packages/guardian-client#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/OpenZeppelin/guardian/issues"
|
|
13
|
+
},
|
|
5
14
|
"type": "module",
|
|
6
15
|
"main": "./dist/index.js",
|
|
7
16
|
"module": "./dist/index.js",
|
package/src/conversion.test.ts
CHANGED
|
@@ -416,5 +416,21 @@ describe('conversion', () => {
|
|
|
416
416
|
expect(result.amount).toBe(original.amount);
|
|
417
417
|
expect(result.salt).toBe(original.salt);
|
|
418
418
|
});
|
|
419
|
+
|
|
420
|
+
it('p2id noteType survives roundtrip as note_type on the wire (issue #322)', () => {
|
|
421
|
+
const original: ProposalMetadata = {
|
|
422
|
+
proposalType: 'p2id',
|
|
423
|
+
recipientId: '0xrecipient',
|
|
424
|
+
faucetId: '0xfaucet',
|
|
425
|
+
amount: '1000',
|
|
426
|
+
noteType: 'private',
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
const server = toServerProposalMetadata(original);
|
|
430
|
+
expect(server.note_type).toBe('private');
|
|
431
|
+
|
|
432
|
+
const result = fromServerProposalMetadata(server);
|
|
433
|
+
expect(result.noteType).toBe('private');
|
|
434
|
+
});
|
|
419
435
|
});
|
|
420
436
|
});
|
package/src/conversion.ts
CHANGED
|
@@ -85,7 +85,7 @@ export function fromServerDeltaStatus(server: ServerDeltaStatus): DeltaStatus {
|
|
|
85
85
|
case 'canonical':
|
|
86
86
|
return { status: 'canonical', timestamp: server.timestamp };
|
|
87
87
|
case 'discarded':
|
|
88
|
-
return { status: 'discarded', timestamp: server.timestamp };
|
|
88
|
+
return { status: 'discarded', timestamp: server.timestamp, reason: server.reason };
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -106,6 +106,7 @@ export function fromServerProposalMetadata(server: ServerProposalMetadata): Prop
|
|
|
106
106
|
recipientId: server.recipient_id,
|
|
107
107
|
faucetId: server.faucet_id,
|
|
108
108
|
amount: server.amount,
|
|
109
|
+
noteType: server.note_type,
|
|
109
110
|
};
|
|
110
111
|
}
|
|
111
112
|
|
|
@@ -194,7 +195,7 @@ export function toServerDeltaStatus(status: DeltaStatus): ServerDeltaStatus {
|
|
|
194
195
|
case 'canonical':
|
|
195
196
|
return { status: 'canonical', timestamp: status.timestamp };
|
|
196
197
|
case 'discarded':
|
|
197
|
-
return { status: 'discarded', timestamp: status.timestamp };
|
|
198
|
+
return { status: 'discarded', timestamp: status.timestamp, reason: status.reason };
|
|
198
199
|
}
|
|
199
200
|
}
|
|
200
201
|
|
|
@@ -215,6 +216,7 @@ export function toServerProposalMetadata(meta: ProposalMetadata): ServerProposal
|
|
|
215
216
|
recipient_id: meta.recipientId,
|
|
216
217
|
faucet_id: meta.faucetId,
|
|
217
218
|
amount: meta.amount,
|
|
219
|
+
note_type: meta.noteType,
|
|
218
220
|
};
|
|
219
221
|
}
|
|
220
222
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import {
|
|
6
|
+
GUARDIAN_ERROR_CODES,
|
|
7
|
+
isGuardianErrorCode,
|
|
8
|
+
normalizeGuardianErrorCode,
|
|
9
|
+
} from './error-codes.js';
|
|
10
|
+
|
|
11
|
+
describe('normalizeGuardianErrorCode', () => {
|
|
12
|
+
it('maps the SCREAMING_SNAKE wire forms to their snake_case union members', () => {
|
|
13
|
+
expect(normalizeGuardianErrorCode('GUARDIAN_ACCOUNT_PAUSED')).toBe('account_paused');
|
|
14
|
+
expect(normalizeGuardianErrorCode('GUARDIAN_ACCOUNT_RELEASED')).toBe('account_released');
|
|
15
|
+
expect(normalizeGuardianErrorCode('GUARDIAN_INSUFFICIENT_OPERATOR_PERMISSION')).toBe(
|
|
16
|
+
'insufficient_operator_permission'
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('passes recognized snake_case codes through', () => {
|
|
21
|
+
expect(normalizeGuardianErrorCode('commitment_mismatch')).toBe('commitment_mismatch');
|
|
22
|
+
expect(normalizeGuardianErrorCode('rate_limit_exceeded')).toBe('rate_limit_exceeded');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('returns null for unknown codes instead of widening to string', () => {
|
|
26
|
+
expect(normalizeGuardianErrorCode('some_future_code')).toBeNull();
|
|
27
|
+
expect(normalizeGuardianErrorCode('')).toBeNull();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe('isGuardianErrorCode', () => {
|
|
32
|
+
it('narrows members and rejects non-members', () => {
|
|
33
|
+
expect(isGuardianErrorCode('account_paused')).toBe(true);
|
|
34
|
+
expect(isGuardianErrorCode('GUARDIAN_ACCOUNT_PAUSED')).toBe(false);
|
|
35
|
+
expect(isGuardianErrorCode('acount_paused')).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe('drift guard against GuardianError::code()', () => {
|
|
40
|
+
it('the TS union matches the server vocabulary exactly', () => {
|
|
41
|
+
// Source of truth: the match arms of `pub fn code(&self)` in the server's
|
|
42
|
+
// error module. The OpenAPI spec is not usable here — it declares `code`
|
|
43
|
+
// as a bare string with no enum (see issue #318).
|
|
44
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
45
|
+
const errorRs = readFileSync(
|
|
46
|
+
join(here, '../../../crates/server/src/error.rs'),
|
|
47
|
+
'utf8'
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const codeFnStart = errorRs.indexOf('pub fn code(&self)');
|
|
51
|
+
expect(codeFnStart).toBeGreaterThan(-1);
|
|
52
|
+
// The function body ends at the first line containing only ` }` after
|
|
53
|
+
// the match block; slicing to the next `pub fn` is a robust over-bound.
|
|
54
|
+
const nextFn = errorRs.indexOf('pub fn', codeFnStart + 1);
|
|
55
|
+
const codeFn = errorRs.slice(codeFnStart, nextFn === -1 ? undefined : nextFn);
|
|
56
|
+
|
|
57
|
+
const serverWireCodes = [...codeFn.matchAll(/"([A-Za-z_]+)"/g)].map((m) => m[1]);
|
|
58
|
+
expect(serverWireCodes.length).toBeGreaterThan(0);
|
|
59
|
+
|
|
60
|
+
const normalizedServerCodes = new Set(
|
|
61
|
+
serverWireCodes.map((wire) => normalizeGuardianErrorCode(wire) ?? `UNKNOWN:${wire}`)
|
|
62
|
+
);
|
|
63
|
+
const unionCodes = new Set<string>(GUARDIAN_ERROR_CODES);
|
|
64
|
+
|
|
65
|
+
// Every server code must normalize into the union (no UNKNOWN: entries),
|
|
66
|
+
// and the union must not carry stale members the server no longer emits.
|
|
67
|
+
expect([...normalizedServerCodes].sort()).toEqual([...unionCodes].sort());
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed vocabulary of Guardian's stable, machine-readable error codes
|
|
3
|
+
* (issue #318). Mirrors `GuardianError::code()` in
|
|
4
|
+
* `crates/server/src/error.rs` — a drift-guard test asserts the two stay in
|
|
5
|
+
* sync. The four codes the server emits in SCREAMING_SNAKE wire form
|
|
6
|
+
* (`GUARDIAN_ACCOUNT_PAUSED`, `GUARDIAN_ACCOUNT_RELEASED`,
|
|
7
|
+
* `GUARDIAN_INSUFFICIENT_OPERATOR_PERMISSION`, `GUARDIAN_CANDIDATE_LANDED`)
|
|
8
|
+
* are normalized to snake_case here so the union has one consistent shape; use
|
|
9
|
+
* {@link normalizeGuardianErrorCode} at the wire boundary.
|
|
10
|
+
*/
|
|
11
|
+
export const GUARDIAN_ERROR_CODES = [
|
|
12
|
+
'account_already_exists',
|
|
13
|
+
'account_data_unavailable',
|
|
14
|
+
'account_not_found',
|
|
15
|
+
'account_paused',
|
|
16
|
+
'account_released',
|
|
17
|
+
'authentication_failed',
|
|
18
|
+
'authorization_failed',
|
|
19
|
+
'candidate_landed',
|
|
20
|
+
'commitment_mismatch',
|
|
21
|
+
'configuration_error',
|
|
22
|
+
'conflict_pending_delta',
|
|
23
|
+
'conflict_pending_proposal',
|
|
24
|
+
'data_unavailable',
|
|
25
|
+
'delta_not_found',
|
|
26
|
+
'insufficient_operator_permission',
|
|
27
|
+
'insufficient_signatures',
|
|
28
|
+
'invalid_account_id',
|
|
29
|
+
'invalid_commitment',
|
|
30
|
+
'invalid_cursor',
|
|
31
|
+
'invalid_delta',
|
|
32
|
+
'invalid_evm_proposal',
|
|
33
|
+
'invalid_input',
|
|
34
|
+
'invalid_limit',
|
|
35
|
+
'invalid_network_config',
|
|
36
|
+
'invalid_proposal_signature',
|
|
37
|
+
'invalid_status_filter',
|
|
38
|
+
'network_error',
|
|
39
|
+
'pending_proposals_limit',
|
|
40
|
+
'proposal_already_signed',
|
|
41
|
+
'proposal_not_found',
|
|
42
|
+
'rate_limit_exceeded',
|
|
43
|
+
'rpc_unavailable',
|
|
44
|
+
'rpc_validation_failed',
|
|
45
|
+
'signer_not_authorized',
|
|
46
|
+
'signing_error',
|
|
47
|
+
'state_not_found',
|
|
48
|
+
'storage_error',
|
|
49
|
+
'unsupported_evm_chain',
|
|
50
|
+
'unsupported_for_network',
|
|
51
|
+
] as const;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* A stable Guardian error code, compiler-checked: comparing against a
|
|
55
|
+
* non-member literal is a type error, and `switch` statements can be
|
|
56
|
+
* exhaustiveness-checked. Branch and localize on this — never on message
|
|
57
|
+
* text or the HTTP status alone.
|
|
58
|
+
*/
|
|
59
|
+
export type GuardianErrorCode = (typeof GUARDIAN_ERROR_CODES)[number];
|
|
60
|
+
|
|
61
|
+
const CODE_SET: ReadonlySet<string> = new Set(GUARDIAN_ERROR_CODES);
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Wire form → union form for the codes the server emits in SCREAMING_SNAKE.
|
|
65
|
+
* Every other code is already snake_case on the wire.
|
|
66
|
+
*/
|
|
67
|
+
const WIRE_ALIASES: Readonly<Record<string, GuardianErrorCode>> = {
|
|
68
|
+
GUARDIAN_ACCOUNT_PAUSED: 'account_paused',
|
|
69
|
+
GUARDIAN_ACCOUNT_RELEASED: 'account_released',
|
|
70
|
+
GUARDIAN_INSUFFICIENT_OPERATOR_PERMISSION: 'insufficient_operator_permission',
|
|
71
|
+
GUARDIAN_CANDIDATE_LANDED: 'candidate_landed',
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/** Type guard narrowing an arbitrary string to {@link GuardianErrorCode}. */
|
|
75
|
+
export function isGuardianErrorCode(value: string): value is GuardianErrorCode {
|
|
76
|
+
return CODE_SET.has(value);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Normalize a server-emitted wire code to the typed union: SCREAMING_SNAKE
|
|
81
|
+
* aliases map to their snake_case form; recognized snake_case codes pass
|
|
82
|
+
* through. Returns `null` for codes outside the known vocabulary (e.g. a
|
|
83
|
+
* newer server) — callers keep the verbatim wire string separately (see
|
|
84
|
+
* `GuardianHttpError.rawCode`) rather than letting an unknown code silently
|
|
85
|
+
* satisfy a string branch.
|
|
86
|
+
*/
|
|
87
|
+
export function normalizeGuardianErrorCode(raw: string): GuardianErrorCode | null {
|
|
88
|
+
const aliased = WIRE_ALIASES[raw];
|
|
89
|
+
if (aliased !== undefined) return aliased;
|
|
90
|
+
return isGuardianErrorCode(raw) ? raw : null;
|
|
91
|
+
}
|