@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.
Files changed (47) hide show
  1. package/README.md +140 -0
  2. package/dist/auth-request.d.ts +10 -0
  3. package/dist/auth-request.d.ts.map +1 -0
  4. package/dist/auth-request.js +38 -0
  5. package/dist/auth-request.js.map +1 -0
  6. package/dist/auth-request.test.d.ts +2 -0
  7. package/dist/auth-request.test.d.ts.map +1 -0
  8. package/dist/auth-request.test.js +10 -0
  9. package/dist/auth-request.test.js.map +1 -0
  10. package/dist/conversion.d.ts +18 -0
  11. package/dist/conversion.d.ts.map +1 -0
  12. package/dist/conversion.js +187 -0
  13. package/dist/conversion.js.map +1 -0
  14. package/dist/conversion.test.d.ts +2 -0
  15. package/dist/conversion.test.d.ts.map +1 -0
  16. package/dist/conversion.test.js +317 -0
  17. package/dist/conversion.test.js.map +1 -0
  18. package/dist/http.d.ts +33 -0
  19. package/dist/http.d.ts.map +1 -0
  20. package/dist/http.js +191 -0
  21. package/dist/http.js.map +1 -0
  22. package/dist/http.test.d.ts +2 -0
  23. package/dist/http.test.d.ts.map +1 -0
  24. package/dist/http.test.js +493 -0
  25. package/dist/http.test.js.map +1 -0
  26. package/dist/index.d.ts +4 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +3 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/server-types.d.ts +150 -0
  31. package/dist/server-types.d.ts.map +1 -0
  32. package/dist/server-types.js +2 -0
  33. package/dist/server-types.js.map +1 -0
  34. package/dist/types.d.ts +159 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/dist/types.js.map +1 -0
  38. package/package.json +36 -0
  39. package/src/auth-request.test.ts +11 -0
  40. package/src/auth-request.ts +49 -0
  41. package/src/conversion.test.ts +400 -0
  42. package/src/conversion.ts +247 -0
  43. package/src/http.test.ts +597 -0
  44. package/src/http.ts +244 -0
  45. package/src/index.ts +25 -0
  46. package/src/server-types.ts +142 -0
  47. package/src/types.ts +167 -0
@@ -0,0 +1,150 @@
1
+ export interface ServerFalconSignature {
2
+ scheme: 'falcon';
3
+ signature: string;
4
+ }
5
+ export interface ServerEcdsaSignature {
6
+ scheme: 'ecdsa';
7
+ signature: string;
8
+ public_key?: string;
9
+ }
10
+ export type ServerProposalSignature = ServerFalconSignature | ServerEcdsaSignature;
11
+ export interface ServerCosignerSignature {
12
+ signer_id: string;
13
+ signature: ServerProposalSignature;
14
+ timestamp: string;
15
+ }
16
+ export type ServerDeltaStatus = {
17
+ status: 'pending';
18
+ timestamp: string;
19
+ proposer_id: string;
20
+ cosigner_sigs: ServerCosignerSignature[];
21
+ } | {
22
+ status: 'candidate';
23
+ timestamp: string;
24
+ } | {
25
+ status: 'canonical';
26
+ timestamp: string;
27
+ } | {
28
+ status: 'discarded';
29
+ timestamp: string;
30
+ };
31
+ export type ServerProposalType = 'add_signer' | 'remove_signer' | 'change_threshold' | 'update_procedure_threshold' | 'switch_guardian' | 'consume_notes' | 'p2id' | 'custom';
32
+ export interface ServerProposalMetadata {
33
+ proposal_type?: ServerProposalType;
34
+ target_threshold?: number;
35
+ required_signatures?: number;
36
+ signer_commitments?: string[];
37
+ target_procedure?: string;
38
+ salt?: string;
39
+ description?: string;
40
+ new_guardian_pubkey?: string;
41
+ new_guardian_endpoint?: string;
42
+ note_ids?: string[];
43
+ recipient_id?: string;
44
+ faucet_id?: string;
45
+ amount?: string;
46
+ }
47
+ export interface ServerDeltaObject {
48
+ account_id: string;
49
+ nonce: number;
50
+ prev_commitment: string;
51
+ new_commitment?: string;
52
+ delta_payload: {
53
+ tx_summary?: {
54
+ data: string;
55
+ };
56
+ data?: string;
57
+ signatures?: Array<{
58
+ signer_id: string;
59
+ signature: ServerProposalSignature;
60
+ }>;
61
+ metadata?: ServerProposalMetadata;
62
+ };
63
+ ack_sig?: string;
64
+ ack_pubkey?: string;
65
+ ack_scheme?: string;
66
+ status: ServerDeltaStatus;
67
+ }
68
+ export interface ServerPushDeltaResponse {
69
+ account_id: string;
70
+ nonce: number;
71
+ new_commitment?: string;
72
+ ack_sig?: string;
73
+ ack_pubkey?: string;
74
+ ack_scheme?: string;
75
+ }
76
+ export interface ServerExecutionDelta {
77
+ account_id: string;
78
+ nonce: number;
79
+ prev_commitment: string;
80
+ new_commitment?: string;
81
+ delta_payload: {
82
+ data: string;
83
+ };
84
+ ack_sig?: string;
85
+ status: ServerDeltaStatus;
86
+ }
87
+ export interface ServerStateObject {
88
+ account_id: string;
89
+ commitment: string;
90
+ state_json: {
91
+ data: string;
92
+ };
93
+ created_at: string;
94
+ updated_at: string;
95
+ auth_scheme?: string;
96
+ }
97
+ export type ServerAuthConfig = {
98
+ MidenFalconRpo: {
99
+ cosigner_commitments: string[];
100
+ };
101
+ } | {
102
+ MidenEcdsa: {
103
+ cosigner_commitments: string[];
104
+ };
105
+ };
106
+ export interface ServerConfigureRequest {
107
+ account_id: string;
108
+ auth: ServerAuthConfig;
109
+ initial_state: {
110
+ data: string;
111
+ account_id: string;
112
+ };
113
+ }
114
+ export interface ServerConfigureResponse {
115
+ success: boolean;
116
+ message: string;
117
+ ack_pubkey?: string;
118
+ ack_commitment?: string;
119
+ }
120
+ export interface ServerDeltaProposalRequest {
121
+ account_id: string;
122
+ nonce: number;
123
+ delta_payload: {
124
+ tx_summary: {
125
+ data: string;
126
+ };
127
+ signatures: Array<{
128
+ signer_id: string;
129
+ signature: ServerProposalSignature;
130
+ }>;
131
+ metadata?: ServerProposalMetadata;
132
+ };
133
+ }
134
+ export interface ServerDeltaProposalResponse {
135
+ delta: ServerDeltaObject;
136
+ commitment: string;
137
+ }
138
+ export interface ServerProposalsResponse {
139
+ proposals: ServerDeltaObject[];
140
+ }
141
+ export interface ServerSignProposalRequest {
142
+ account_id: string;
143
+ commitment: string;
144
+ signature: ServerProposalSignature;
145
+ }
146
+ export interface ServerPubkeyResponse {
147
+ commitment: string;
148
+ pubkey?: string;
149
+ }
150
+ //# sourceMappingURL=server-types.d.ts.map
@@ -0,0 +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;AAE/C,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,4BAA4B,GAC5B,iBAAiB,GACjB,eAAe,GACf,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE;QACb,UAAU,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,uBAAuB,CAAA;SAAE,CAAC,CAAC;QAC9E,QAAQ,CAAC,EAAE,sBAAsB,CAAC;KACnC,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,cAAc,EAAE;QAAE,oBAAoB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GACtD;IAAE,UAAU,EAAE;QAAE,oBAAoB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE;QACb,UAAU,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,UAAU,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,uBAAuB,CAAA;SAAE,CAAC,CAAC;QAC7E,QAAQ,CAAC,EAAE,sBAAsB,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-types.js","sourceRoot":"","sources":["../src/server-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,159 @@
1
+ import type { RequestAuthPayload } from './auth-request.js';
2
+ export interface Signer {
3
+ readonly commitment: string;
4
+ readonly publicKey: string;
5
+ readonly scheme: SignatureScheme;
6
+ signAccountIdWithTimestamp(accountId: string, timestamp: number): Promise<string> | string;
7
+ signRequest?(accountId: string, timestamp: number, requestPayload: RequestAuthPayload): Promise<string> | string;
8
+ signCommitment(commitmentHex: string): Promise<string> | string;
9
+ }
10
+ export interface FalconSignature {
11
+ scheme: 'falcon';
12
+ signature: string;
13
+ }
14
+ export interface EcdsaSignature {
15
+ scheme: 'ecdsa';
16
+ signature: string;
17
+ publicKey?: string;
18
+ }
19
+ export type ProposalSignature = FalconSignature | EcdsaSignature;
20
+ export type SignatureScheme = 'falcon' | 'ecdsa';
21
+ export type AuthConfig = {
22
+ MidenFalconRpo: {
23
+ cosigner_commitments: string[];
24
+ };
25
+ } | {
26
+ MidenEcdsa: {
27
+ cosigner_commitments: string[];
28
+ };
29
+ };
30
+ export interface CosignerSignature {
31
+ signerId: string;
32
+ signature: ProposalSignature;
33
+ timestamp: string;
34
+ }
35
+ export type DeltaStatus = {
36
+ status: 'pending';
37
+ timestamp: string;
38
+ proposerId: string;
39
+ cosignerSigs: CosignerSignature[];
40
+ } | {
41
+ status: 'candidate';
42
+ timestamp: string;
43
+ } | {
44
+ status: 'canonical';
45
+ timestamp: string;
46
+ } | {
47
+ status: 'discarded';
48
+ timestamp: string;
49
+ };
50
+ export type ProposalType = 'add_signer' | 'remove_signer' | 'change_threshold' | 'update_procedure_threshold' | 'switch_guardian' | 'consume_notes' | 'p2id' | 'custom' | 'unknown';
51
+ export interface ProposalMetadata {
52
+ proposalType?: ProposalType;
53
+ targetThreshold?: number;
54
+ requiredSignatures?: number;
55
+ signerCommitments?: string[];
56
+ targetProcedure?: string;
57
+ salt?: string;
58
+ description?: string;
59
+ newGuardianPubkey?: string;
60
+ newGuardianEndpoint?: string;
61
+ noteIds?: string[];
62
+ recipientId?: string;
63
+ faucetId?: string;
64
+ amount?: string;
65
+ }
66
+ export interface DeltaObject {
67
+ accountId: string;
68
+ nonce: number;
69
+ prevCommitment: string;
70
+ newCommitment?: string;
71
+ deltaPayload: {
72
+ txSummary: {
73
+ data: string;
74
+ };
75
+ signatures: Array<{
76
+ signerId: string;
77
+ signature: ProposalSignature;
78
+ }>;
79
+ metadata?: ProposalMetadata;
80
+ };
81
+ ackSig?: string;
82
+ ackPubkey?: string;
83
+ ackScheme?: string;
84
+ status: DeltaStatus;
85
+ }
86
+ export interface ExecutionDelta {
87
+ accountId: string;
88
+ nonce: number;
89
+ prevCommitment: string;
90
+ newCommitment?: string;
91
+ deltaPayload: {
92
+ data: string;
93
+ };
94
+ ackSig?: string;
95
+ status: DeltaStatus;
96
+ }
97
+ export interface StateObject {
98
+ accountId: string;
99
+ commitment: string;
100
+ stateJson: {
101
+ data: string;
102
+ };
103
+ createdAt: string;
104
+ updatedAt: string;
105
+ authScheme?: string;
106
+ }
107
+ export interface ConfigureRequest {
108
+ accountId: string;
109
+ auth: AuthConfig;
110
+ initialState: {
111
+ data: string;
112
+ accountId: string;
113
+ };
114
+ }
115
+ export interface ConfigureResponse {
116
+ success: boolean;
117
+ message: string;
118
+ ackPubkey?: string;
119
+ ackCommitment?: string;
120
+ }
121
+ export interface PubkeyResponse {
122
+ commitment: string;
123
+ pubkey?: string;
124
+ }
125
+ export interface DeltaProposalRequest {
126
+ accountId: string;
127
+ nonce: number;
128
+ deltaPayload: {
129
+ txSummary: {
130
+ data: string;
131
+ };
132
+ signatures: Array<{
133
+ signerId: string;
134
+ signature: ProposalSignature;
135
+ }>;
136
+ metadata?: ProposalMetadata;
137
+ };
138
+ }
139
+ export interface DeltaProposalResponse {
140
+ delta: DeltaObject;
141
+ commitment: string;
142
+ }
143
+ export interface ProposalsResponse {
144
+ proposals: DeltaObject[];
145
+ }
146
+ export interface SignProposalRequest {
147
+ accountId: string;
148
+ commitment: string;
149
+ signature: ProposalSignature;
150
+ }
151
+ export interface PushDeltaResponse {
152
+ accountId: string;
153
+ nonce: number;
154
+ newCommitment?: string;
155
+ ackSig?: string;
156
+ ackPubkey?: string;
157
+ ackScheme?: string;
158
+ }
159
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@openzeppelin/guardian-client",
3
+ "version": "0.13.2",
4
+ "description": "TypeScript HTTP client for Guardian server",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "src"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "dev": "tsc --watch",
22
+ "typecheck": "tsc --noEmit",
23
+ "clean": "rm -rf dist",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest"
26
+ },
27
+ "dependencies": {},
28
+ "devDependencies": {
29
+ "typescript": "^5.7.2",
30
+ "vitest": "^2.1.8"
31
+ },
32
+ "engines": {
33
+ "node": ">=18"
34
+ },
35
+ "license": "MIT"
36
+ }
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { RequestAuthPayload } from './auth-request.js';
3
+
4
+ describe('RequestAuthPayload', () => {
5
+ it('canonicalizes object keys recursively', () => {
6
+ const left = RequestAuthPayload.fromRequest({ b: 2, a: { y: 2, x: 1 } });
7
+ const right = RequestAuthPayload.fromRequest({ a: { x: 1, y: 2 }, b: 2 });
8
+
9
+ expect(left.toCanonicalJson()).toEqual(right.toCanonicalJson());
10
+ });
11
+ });
@@ -0,0 +1,49 @@
1
+ type JsonValue =
2
+ | null
3
+ | boolean
4
+ | number
5
+ | string
6
+ | JsonValue[]
7
+ | { [key: string]: JsonValue };
8
+
9
+ export class RequestAuthPayload {
10
+ private constructor(private readonly canonicalJson: string) {}
11
+
12
+ static fromRequest(requestPayload: unknown): RequestAuthPayload {
13
+ const normalized = RequestAuthPayload.normalizeJson(requestPayload);
14
+ const canonical = RequestAuthPayload.canonicalizeJson(normalized);
15
+ return new RequestAuthPayload(JSON.stringify(canonical));
16
+ }
17
+
18
+ toCanonicalJson(): string {
19
+ return this.canonicalJson;
20
+ }
21
+
22
+ toBytes(): Uint8Array {
23
+ return new TextEncoder().encode(this.canonicalJson);
24
+ }
25
+
26
+ private static normalizeJson(value: unknown): JsonValue {
27
+ if (value === undefined) {
28
+ return null;
29
+ }
30
+ return JSON.parse(JSON.stringify(value)) as JsonValue;
31
+ }
32
+
33
+ private static canonicalizeJson(value: JsonValue): JsonValue {
34
+ if (Array.isArray(value)) {
35
+ return value.map((item) => RequestAuthPayload.canonicalizeJson(item));
36
+ }
37
+
38
+ if (value && typeof value === 'object') {
39
+ const entries = Object.entries(value).sort(([left], [right]) => left.localeCompare(right));
40
+ const normalized: { [key: string]: JsonValue } = {};
41
+ for (const [key, item] of entries) {
42
+ normalized[key] = RequestAuthPayload.canonicalizeJson(item);
43
+ }
44
+ return normalized;
45
+ }
46
+
47
+ return value;
48
+ }
49
+ }