@openzeppelin/guardian-client 0.13.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 +140 -0
- package/dist/auth-request.d.ts +10 -0
- package/dist/auth-request.d.ts.map +1 -0
- package/dist/auth-request.js +38 -0
- package/dist/auth-request.js.map +1 -0
- package/dist/auth-request.test.d.ts +2 -0
- package/dist/auth-request.test.d.ts.map +1 -0
- package/dist/auth-request.test.js +10 -0
- package/dist/auth-request.test.js.map +1 -0
- package/dist/conversion.d.ts +18 -0
- package/dist/conversion.d.ts.map +1 -0
- package/dist/conversion.js +187 -0
- package/dist/conversion.js.map +1 -0
- package/dist/conversion.test.d.ts +2 -0
- package/dist/conversion.test.d.ts.map +1 -0
- package/dist/conversion.test.js +317 -0
- package/dist/conversion.test.js.map +1 -0
- package/dist/http.d.ts +33 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +191 -0
- package/dist/http.js.map +1 -0
- package/dist/http.test.d.ts +2 -0
- package/dist/http.test.d.ts.map +1 -0
- package/dist/http.test.js +493 -0
- package/dist/http.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/server-types.d.ts +150 -0
- package/dist/server-types.d.ts.map +1 -0
- package/dist/server-types.js +2 -0
- package/dist/server-types.js.map +1 -0
- package/dist/types.d.ts +159 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
- package/src/auth-request.test.ts +11 -0
- package/src/auth-request.ts +49 -0
- package/src/conversion.test.ts +400 -0
- package/src/conversion.ts +247 -0
- package/src/http.test.ts +597 -0
- package/src/http.ts +244 -0
- package/src/index.ts +25 -0
- package/src/server-types.ts +142 -0
- package/src/types.ts +167 -0
package/README.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# @openzeppelin/guardian-client
|
|
2
|
+
|
|
3
|
+
TypeScript HTTP client for Guardian server.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @openzeppelin/guardian-client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { GuardianHttpClient } from '@openzeppelin/guardian-client';
|
|
15
|
+
|
|
16
|
+
const client = new GuardianHttpClient('http://localhost:3000');
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
### Get Server Public Key (Unauthenticated)
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
const pubkey = await client.getPubkey();
|
|
25
|
+
console.log('GUARDIAN pubkey:', pubkey);
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Set Signer for Authenticated Requests
|
|
29
|
+
|
|
30
|
+
All endpoints except `getPubkey()` require authentication. You must provide a signer that implements the `Signer` interface:
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import type { Signer, RequestAuthPayload } from '@openzeppelin/guardian-client';
|
|
34
|
+
|
|
35
|
+
const signer: Signer = {
|
|
36
|
+
commitment: '0x...', // 64 hex chars
|
|
37
|
+
publicKey: '0x...', // Full public key hex
|
|
38
|
+
// Sign account ID + timestamp + request payload digest
|
|
39
|
+
signRequest: (accountId: string, timestamp: number, requestPayload: RequestAuthPayload) => {
|
|
40
|
+
// requestPayload is canonicalized by the client before this call
|
|
41
|
+
// implement your signing logic here
|
|
42
|
+
return '0x...';
|
|
43
|
+
},
|
|
44
|
+
signCommitment: (commitmentHex: string) => '0x...', // Returns signature hex
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
client.setSigner(signer);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Configure an Account
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
await client.configure({
|
|
54
|
+
account_id: '0x...',
|
|
55
|
+
auth: {
|
|
56
|
+
MidenFalconRpo: {
|
|
57
|
+
cosigner_commitments: ['0x...', '0x...'],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
initial_state: { data: '<base64-encoded-account>', account_id: '0x...' },
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Get Account State
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const state = await client.getState(accountId);
|
|
68
|
+
console.log('Commitment:', state.commitment);
|
|
69
|
+
console.log('State data:', state.state_json.data);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Work with Delta Proposals
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
// Get all proposals for an account
|
|
76
|
+
const proposals = await client.getDeltaProposals(accountId);
|
|
77
|
+
|
|
78
|
+
// Get one proposal by commitment
|
|
79
|
+
const proposal = await client.getDeltaProposal(accountId, '0x...');
|
|
80
|
+
|
|
81
|
+
// Push a new proposal
|
|
82
|
+
const response = await client.pushDeltaProposal({
|
|
83
|
+
account_id: accountId,
|
|
84
|
+
nonce: 1,
|
|
85
|
+
delta_payload: {
|
|
86
|
+
tx_summary: { data: '<base64-tx-summary>' },
|
|
87
|
+
signatures: [],
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Sign a proposal
|
|
92
|
+
const delta = await client.signDeltaProposal({
|
|
93
|
+
account_id: accountId,
|
|
94
|
+
commitment: response.commitment,
|
|
95
|
+
signature: { scheme: 'falcon', signature: '0x...' },
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Execute a proposal
|
|
99
|
+
const result = await client.pushDelta({
|
|
100
|
+
account_id: accountId,
|
|
101
|
+
nonce: 1,
|
|
102
|
+
prev_commitment: '0x...',
|
|
103
|
+
delta_payload: { data: '<base64-tx-summary>' },
|
|
104
|
+
status: { status: 'pending', timestamp: '...', proposer_id: '0x...', cosigner_sigs: [] },
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Get Deltas
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Get specific delta by nonce
|
|
112
|
+
const delta = await client.getDelta(accountId, 5);
|
|
113
|
+
|
|
114
|
+
// Get merged delta since a nonce
|
|
115
|
+
const merged = await client.getDeltaSince(accountId, 3);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Error Handling
|
|
119
|
+
|
|
120
|
+
The client throws `GuardianHttpError` for non-2xx responses:
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
import { GuardianHttpError } from '@openzeppelin/guardian-client';
|
|
124
|
+
|
|
125
|
+
try {
|
|
126
|
+
await client.getState(accountId);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
if (error instanceof GuardianHttpError) {
|
|
129
|
+
console.error(`HTTP ${error.status}: ${error.statusText}`);
|
|
130
|
+
console.error('Body:', error.body);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Testing
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm test # Run tests once
|
|
139
|
+
npm run test:watch # Run tests in watch mode
|
|
140
|
+
```
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class RequestAuthPayload {
|
|
2
|
+
private readonly canonicalJson;
|
|
3
|
+
private constructor();
|
|
4
|
+
static fromRequest(requestPayload: unknown): RequestAuthPayload;
|
|
5
|
+
toCanonicalJson(): string;
|
|
6
|
+
toBytes(): Uint8Array;
|
|
7
|
+
private static normalizeJson;
|
|
8
|
+
private static canonicalizeJson;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=auth-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-request.d.ts","sourceRoot":"","sources":["../src/auth-request.ts"],"names":[],"mappings":"AAQA,qBAAa,kBAAkB;IACT,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAlD,OAAO;IAEP,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,GAAG,kBAAkB;IAM/D,eAAe,IAAI,MAAM;IAIzB,OAAO,IAAI,UAAU;IAIrB,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export class RequestAuthPayload {
|
|
2
|
+
canonicalJson;
|
|
3
|
+
constructor(canonicalJson) {
|
|
4
|
+
this.canonicalJson = canonicalJson;
|
|
5
|
+
}
|
|
6
|
+
static fromRequest(requestPayload) {
|
|
7
|
+
const normalized = RequestAuthPayload.normalizeJson(requestPayload);
|
|
8
|
+
const canonical = RequestAuthPayload.canonicalizeJson(normalized);
|
|
9
|
+
return new RequestAuthPayload(JSON.stringify(canonical));
|
|
10
|
+
}
|
|
11
|
+
toCanonicalJson() {
|
|
12
|
+
return this.canonicalJson;
|
|
13
|
+
}
|
|
14
|
+
toBytes() {
|
|
15
|
+
return new TextEncoder().encode(this.canonicalJson);
|
|
16
|
+
}
|
|
17
|
+
static normalizeJson(value) {
|
|
18
|
+
if (value === undefined) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return JSON.parse(JSON.stringify(value));
|
|
22
|
+
}
|
|
23
|
+
static canonicalizeJson(value) {
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
return value.map((item) => RequestAuthPayload.canonicalizeJson(item));
|
|
26
|
+
}
|
|
27
|
+
if (value && typeof value === 'object') {
|
|
28
|
+
const entries = Object.entries(value).sort(([left], [right]) => left.localeCompare(right));
|
|
29
|
+
const normalized = {};
|
|
30
|
+
for (const [key, item] of entries) {
|
|
31
|
+
normalized[key] = RequestAuthPayload.canonicalizeJson(item);
|
|
32
|
+
}
|
|
33
|
+
return normalized;
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=auth-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-request.js","sourceRoot":"","sources":["../src/auth-request.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,kBAAkB;IACQ;IAArC,YAAqC,aAAqB;QAArB,kBAAa,GAAb,aAAa,CAAQ;IAAG,CAAC;IAE9D,MAAM,CAAC,WAAW,CAAC,cAAuB;QACxC,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClE,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,KAAc;QACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAc,CAAC;IACxD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,KAAgB;QAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3F,MAAM,UAAU,GAAiC,EAAE,CAAC;YACpD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;gBAClC,UAAU,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-request.test.d.ts","sourceRoot":"","sources":["../src/auth-request.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { RequestAuthPayload } from './auth-request.js';
|
|
3
|
+
describe('RequestAuthPayload', () => {
|
|
4
|
+
it('canonicalizes object keys recursively', () => {
|
|
5
|
+
const left = RequestAuthPayload.fromRequest({ b: 2, a: { y: 2, x: 1 } });
|
|
6
|
+
const right = RequestAuthPayload.fromRequest({ a: { x: 1, y: 2 }, b: 2 });
|
|
7
|
+
expect(left.toCanonicalJson()).toEqual(right.toCanonicalJson());
|
|
8
|
+
});
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=auth-request.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-request.test.js","sourceRoot":"","sources":["../src/auth-request.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1E,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CosignerSignature, ConfigureRequest, ConfigureResponse, DeltaObject, DeltaProposalRequest, DeltaStatus, ExecutionDelta, ProposalSignature, ProposalMetadata, SignProposalRequest, StateObject } from './types.js';
|
|
2
|
+
import type { ServerCosignerSignature, ServerConfigureRequest, ServerConfigureResponse, ServerDeltaObject, ServerDeltaProposalRequest, ServerDeltaStatus, ServerExecutionDelta, ServerProposalSignature, ServerProposalMetadata, ServerSignProposalRequest, ServerStateObject } from './server-types.js';
|
|
3
|
+
export declare function fromServerSignature(signature: ServerProposalSignature): ProposalSignature;
|
|
4
|
+
export declare function fromServerCosignerSignature(server: ServerCosignerSignature): CosignerSignature;
|
|
5
|
+
export declare function fromServerDeltaStatus(server: ServerDeltaStatus): DeltaStatus;
|
|
6
|
+
export declare function fromServerProposalMetadata(server: ServerProposalMetadata): ProposalMetadata;
|
|
7
|
+
export declare function fromServerDeltaObject(server: ServerDeltaObject): DeltaObject;
|
|
8
|
+
export declare function fromServerStateObject(server: ServerStateObject): StateObject;
|
|
9
|
+
export declare function fromServerConfigureResponse(server: ServerConfigureResponse): ConfigureResponse;
|
|
10
|
+
export declare function toServerSignature(sig: ProposalSignature): ServerProposalSignature;
|
|
11
|
+
export declare function toServerCosignerSignature(sig: CosignerSignature): ServerCosignerSignature;
|
|
12
|
+
export declare function toServerDeltaStatus(status: DeltaStatus): ServerDeltaStatus;
|
|
13
|
+
export declare function toServerProposalMetadata(meta: ProposalMetadata): ServerProposalMetadata;
|
|
14
|
+
export declare function toServerConfigureRequest(req: ConfigureRequest): ServerConfigureRequest;
|
|
15
|
+
export declare function toServerDeltaProposalRequest(req: DeltaProposalRequest): ServerDeltaProposalRequest;
|
|
16
|
+
export declare function toServerSignProposalRequest(req: SignProposalRequest): ServerSignProposalRequest;
|
|
17
|
+
export declare function toServerExecutionDelta(delta: ExecutionDelta): ServerExecutionDelta;
|
|
18
|
+
//# sourceMappingURL=conversion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../src/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AA2B3B,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,uBAAuB,GAAG,iBAAiB,CASzF;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAM9F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAgB5E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,sBAAsB,GAAG,gBAAgB,CAgB3F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAqB5E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAS5E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB,CAO9F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,uBAAuB,CASjF;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,iBAAiB,GAAG,uBAAuB,CAMzF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAgB1E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,sBAAsB,CAgBvF;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,GAAG,sBAAsB,CAMtF;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,oBAAoB,GAAG,0BAA0B,CAalG;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,yBAAyB,CAM/F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,oBAAoB,CAUlF"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
function extractDeltaPayload(payload) {
|
|
2
|
+
const txSummary = 'tx_summary' in payload ? payload.tx_summary : { data: payload.data };
|
|
3
|
+
const signatures = 'signatures' in payload && Array.isArray(payload.signatures) ? payload.signatures : [];
|
|
4
|
+
const metadata = 'metadata' in payload ? payload.metadata : undefined;
|
|
5
|
+
return { txSummary, signatures, metadata };
|
|
6
|
+
}
|
|
7
|
+
export function fromServerSignature(signature) {
|
|
8
|
+
if (signature.scheme === 'ecdsa') {
|
|
9
|
+
return {
|
|
10
|
+
scheme: 'ecdsa',
|
|
11
|
+
signature: signature.signature,
|
|
12
|
+
publicKey: signature.public_key,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return signature;
|
|
16
|
+
}
|
|
17
|
+
export function fromServerCosignerSignature(server) {
|
|
18
|
+
return {
|
|
19
|
+
signerId: server.signer_id,
|
|
20
|
+
signature: fromServerSignature(server.signature),
|
|
21
|
+
timestamp: server.timestamp,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function fromServerDeltaStatus(server) {
|
|
25
|
+
switch (server.status) {
|
|
26
|
+
case 'pending':
|
|
27
|
+
return {
|
|
28
|
+
status: 'pending',
|
|
29
|
+
timestamp: server.timestamp,
|
|
30
|
+
proposerId: server.proposer_id,
|
|
31
|
+
cosignerSigs: server.cosigner_sigs.map(fromServerCosignerSignature),
|
|
32
|
+
};
|
|
33
|
+
case 'candidate':
|
|
34
|
+
return { status: 'candidate', timestamp: server.timestamp };
|
|
35
|
+
case 'canonical':
|
|
36
|
+
return { status: 'canonical', timestamp: server.timestamp };
|
|
37
|
+
case 'discarded':
|
|
38
|
+
return { status: 'discarded', timestamp: server.timestamp };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function fromServerProposalMetadata(server) {
|
|
42
|
+
return {
|
|
43
|
+
proposalType: server.proposal_type,
|
|
44
|
+
targetThreshold: server.target_threshold,
|
|
45
|
+
requiredSignatures: server.required_signatures,
|
|
46
|
+
signerCommitments: server.signer_commitments,
|
|
47
|
+
targetProcedure: server.target_procedure,
|
|
48
|
+
salt: server.salt,
|
|
49
|
+
description: server.description,
|
|
50
|
+
newGuardianPubkey: server.new_guardian_pubkey,
|
|
51
|
+
newGuardianEndpoint: server.new_guardian_endpoint,
|
|
52
|
+
noteIds: server.note_ids,
|
|
53
|
+
recipientId: server.recipient_id,
|
|
54
|
+
faucetId: server.faucet_id,
|
|
55
|
+
amount: server.amount,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function fromServerDeltaObject(server) {
|
|
59
|
+
const { txSummary, signatures, metadata } = extractDeltaPayload(server.delta_payload);
|
|
60
|
+
return {
|
|
61
|
+
accountId: server.account_id,
|
|
62
|
+
nonce: server.nonce,
|
|
63
|
+
prevCommitment: server.prev_commitment,
|
|
64
|
+
newCommitment: server.new_commitment,
|
|
65
|
+
deltaPayload: {
|
|
66
|
+
txSummary,
|
|
67
|
+
signatures: signatures.map((s) => ({
|
|
68
|
+
signerId: s.signer_id,
|
|
69
|
+
signature: fromServerSignature(s.signature),
|
|
70
|
+
})),
|
|
71
|
+
metadata: metadata ? fromServerProposalMetadata(metadata) : undefined,
|
|
72
|
+
},
|
|
73
|
+
ackSig: server.ack_sig,
|
|
74
|
+
ackPubkey: server.ack_pubkey,
|
|
75
|
+
ackScheme: server.ack_scheme,
|
|
76
|
+
status: fromServerDeltaStatus(server.status),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export function fromServerStateObject(server) {
|
|
80
|
+
return {
|
|
81
|
+
accountId: server.account_id,
|
|
82
|
+
commitment: server.commitment,
|
|
83
|
+
stateJson: server.state_json,
|
|
84
|
+
createdAt: server.created_at,
|
|
85
|
+
updatedAt: server.updated_at,
|
|
86
|
+
authScheme: server.auth_scheme,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function fromServerConfigureResponse(server) {
|
|
90
|
+
return {
|
|
91
|
+
success: server.success,
|
|
92
|
+
message: server.message,
|
|
93
|
+
ackPubkey: server.ack_pubkey,
|
|
94
|
+
ackCommitment: server.ack_commitment,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function toServerSignature(sig) {
|
|
98
|
+
if (sig.scheme === 'ecdsa') {
|
|
99
|
+
return {
|
|
100
|
+
scheme: 'ecdsa',
|
|
101
|
+
signature: sig.signature,
|
|
102
|
+
public_key: sig.publicKey,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
return sig;
|
|
106
|
+
}
|
|
107
|
+
export function toServerCosignerSignature(sig) {
|
|
108
|
+
return {
|
|
109
|
+
signer_id: sig.signerId,
|
|
110
|
+
signature: toServerSignature(sig.signature),
|
|
111
|
+
timestamp: sig.timestamp,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export function toServerDeltaStatus(status) {
|
|
115
|
+
switch (status.status) {
|
|
116
|
+
case 'pending':
|
|
117
|
+
return {
|
|
118
|
+
status: 'pending',
|
|
119
|
+
timestamp: status.timestamp,
|
|
120
|
+
proposer_id: status.proposerId,
|
|
121
|
+
cosigner_sigs: status.cosignerSigs.map(toServerCosignerSignature),
|
|
122
|
+
};
|
|
123
|
+
case 'candidate':
|
|
124
|
+
return { status: 'candidate', timestamp: status.timestamp };
|
|
125
|
+
case 'canonical':
|
|
126
|
+
return { status: 'canonical', timestamp: status.timestamp };
|
|
127
|
+
case 'discarded':
|
|
128
|
+
return { status: 'discarded', timestamp: status.timestamp };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function toServerProposalMetadata(meta) {
|
|
132
|
+
return {
|
|
133
|
+
proposal_type: meta.proposalType === 'unknown' ? undefined : meta.proposalType,
|
|
134
|
+
target_threshold: meta.targetThreshold,
|
|
135
|
+
required_signatures: meta.requiredSignatures,
|
|
136
|
+
signer_commitments: meta.signerCommitments,
|
|
137
|
+
target_procedure: meta.targetProcedure,
|
|
138
|
+
salt: meta.salt,
|
|
139
|
+
description: meta.description,
|
|
140
|
+
new_guardian_pubkey: meta.newGuardianPubkey,
|
|
141
|
+
new_guardian_endpoint: meta.newGuardianEndpoint,
|
|
142
|
+
note_ids: meta.noteIds,
|
|
143
|
+
recipient_id: meta.recipientId,
|
|
144
|
+
faucet_id: meta.faucetId,
|
|
145
|
+
amount: meta.amount,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
export function toServerConfigureRequest(req) {
|
|
149
|
+
return {
|
|
150
|
+
account_id: req.accountId,
|
|
151
|
+
auth: req.auth,
|
|
152
|
+
initial_state: { data: req.initialState.data, account_id: req.initialState.accountId },
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
export function toServerDeltaProposalRequest(req) {
|
|
156
|
+
return {
|
|
157
|
+
account_id: req.accountId,
|
|
158
|
+
nonce: req.nonce,
|
|
159
|
+
delta_payload: {
|
|
160
|
+
tx_summary: req.deltaPayload.txSummary,
|
|
161
|
+
signatures: req.deltaPayload.signatures.map((s) => ({
|
|
162
|
+
signer_id: s.signerId,
|
|
163
|
+
signature: toServerSignature(s.signature),
|
|
164
|
+
})),
|
|
165
|
+
metadata: req.deltaPayload.metadata ? toServerProposalMetadata(req.deltaPayload.metadata) : undefined,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function toServerSignProposalRequest(req) {
|
|
170
|
+
return {
|
|
171
|
+
account_id: req.accountId,
|
|
172
|
+
commitment: req.commitment,
|
|
173
|
+
signature: toServerSignature(req.signature),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
export function toServerExecutionDelta(delta) {
|
|
177
|
+
return {
|
|
178
|
+
account_id: delta.accountId,
|
|
179
|
+
nonce: delta.nonce,
|
|
180
|
+
prev_commitment: delta.prevCommitment,
|
|
181
|
+
new_commitment: delta.newCommitment,
|
|
182
|
+
delta_payload: delta.deltaPayload,
|
|
183
|
+
ack_sig: delta.ackSig,
|
|
184
|
+
status: toServerDeltaStatus(delta.status),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=conversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion.js","sourceRoot":"","sources":["../src/conversion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversion.test.d.ts","sourceRoot":"","sources":["../src/conversion.test.ts"],"names":[],"mappings":""}
|