@sd-jwt/core 0.9.3-next.3 → 0.10.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/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.10.0](https://github.com/openwallet-foundation-labs/sd-jwt-js/compare/v0.9.2...v0.10.0) (2025-03-24)
7
+
8
+
9
+ ### Features
10
+
11
+ * fix encoding bug for flattenJSON and generalJSON ([#277](https://github.com/openwallet-foundation-labs/sd-jwt-js/issues/277)) ([cc455a6](https://github.com/openwallet-foundation-labs/sd-jwt-js/commit/cc455a6f3d431fa59cca1d21dad49daac135d3bc))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [0.9.2](https://github.com/openwallet-foundation-labs/sd-jwt-js/compare/v0.9.1...v0.9.2) (2025-01-29)
7
18
 
8
19
  **Note:** Version bump only for package @sd-jwt/core
package/dist/index.js CHANGED
@@ -489,10 +489,16 @@ var FlattenJSON = class _FlattenJSON {
489
489
  }
490
490
  toEncoded() {
491
491
  var _a;
492
+ const data = [];
492
493
  const jwt = `${this.protected}.${this.payload}.${this.signature}`;
493
- const disclosures = this.disclosures.join(import_types3.SD_SEPARATOR);
494
+ data.push(jwt);
495
+ if (this.disclosures && this.disclosures.length > 0) {
496
+ const disclosures = this.disclosures.join(import_types3.SD_SEPARATOR);
497
+ data.push(disclosures);
498
+ }
494
499
  const kb_jwt = (_a = this.kb_jwt) != null ? _a : "";
495
- return [jwt, disclosures, kb_jwt].join(import_types3.SD_SEPARATOR);
500
+ data.push(kb_jwt);
501
+ return data.join(import_types3.SD_SEPARATOR);
496
502
  }
497
503
  };
498
504
 
@@ -576,11 +582,17 @@ var GeneralJSON = class _GeneralJSON {
576
582
  if (index < 0 || index >= this.signatures.length) {
577
583
  throw new import_utils6.SDJWTException("Index out of bounds");
578
584
  }
585
+ const data = [];
579
586
  const { protected: protectedHeader, signature } = this.signatures[index];
580
- const disclosures = this.disclosures.join(import_types4.SD_SEPARATOR);
581
- const kb_jwt = (_a = this.kb_jwt) != null ? _a : "";
582
587
  const jwt = `${protectedHeader}.${this.payload}.${signature}`;
583
- return [jwt, disclosures, kb_jwt].join(import_types4.SD_SEPARATOR);
588
+ data.push(jwt);
589
+ if (this.disclosures && this.disclosures.length > 0) {
590
+ const disclosures = this.disclosures.join(import_types4.SD_SEPARATOR);
591
+ data.push(disclosures);
592
+ }
593
+ const kb = (_a = this.kb_jwt) != null ? _a : "";
594
+ data.push(kb);
595
+ return data.join(import_types4.SD_SEPARATOR);
584
596
  }
585
597
  addSignature(protectedHeader, signer, kid) {
586
598
  return __async(this, null, function* () {
package/dist/index.mjs CHANGED
@@ -474,10 +474,16 @@ var FlattenJSON = class _FlattenJSON {
474
474
  }
475
475
  toEncoded() {
476
476
  var _a;
477
+ const data = [];
477
478
  const jwt = `${this.protected}.${this.payload}.${this.signature}`;
478
- const disclosures = this.disclosures.join(SD_SEPARATOR2);
479
+ data.push(jwt);
480
+ if (this.disclosures && this.disclosures.length > 0) {
481
+ const disclosures = this.disclosures.join(SD_SEPARATOR2);
482
+ data.push(disclosures);
483
+ }
479
484
  const kb_jwt = (_a = this.kb_jwt) != null ? _a : "";
480
- return [jwt, disclosures, kb_jwt].join(SD_SEPARATOR2);
485
+ data.push(kb_jwt);
486
+ return data.join(SD_SEPARATOR2);
481
487
  }
482
488
  };
483
489
 
@@ -561,11 +567,17 @@ var GeneralJSON = class _GeneralJSON {
561
567
  if (index < 0 || index >= this.signatures.length) {
562
568
  throw new SDJWTException5("Index out of bounds");
563
569
  }
570
+ const data = [];
564
571
  const { protected: protectedHeader, signature } = this.signatures[index];
565
- const disclosures = this.disclosures.join(SD_SEPARATOR3);
566
- const kb_jwt = (_a = this.kb_jwt) != null ? _a : "";
567
572
  const jwt = `${protectedHeader}.${this.payload}.${signature}`;
568
- return [jwt, disclosures, kb_jwt].join(SD_SEPARATOR3);
573
+ data.push(jwt);
574
+ if (this.disclosures && this.disclosures.length > 0) {
575
+ const disclosures = this.disclosures.join(SD_SEPARATOR3);
576
+ data.push(disclosures);
577
+ }
578
+ const kb = (_a = this.kb_jwt) != null ? _a : "";
579
+ data.push(kb);
580
+ return data.join(SD_SEPARATOR3);
569
581
  }
570
582
  addSignature(protectedHeader, signer, kid) {
571
583
  return __async(this, null, function* () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sd-jwt/core",
3
- "version": "0.9.3-next.3+b1a1a48",
3
+ "version": "0.10.0",
4
4
  "description": "sd-jwt draft 7 implementation in typescript",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -38,13 +38,13 @@
38
38
  },
39
39
  "license": "Apache-2.0",
40
40
  "devDependencies": {
41
- "@sd-jwt/crypto-nodejs": "0.9.3-next.3+b1a1a48"
41
+ "@sd-jwt/crypto-nodejs": "0.10.0"
42
42
  },
43
43
  "dependencies": {
44
- "@sd-jwt/decode": "0.9.3-next.3+b1a1a48",
45
- "@sd-jwt/present": "0.9.3-next.3+b1a1a48",
46
- "@sd-jwt/types": "0.9.3-next.3+b1a1a48",
47
- "@sd-jwt/utils": "0.9.3-next.3+b1a1a48"
44
+ "@sd-jwt/decode": "0.10.0",
45
+ "@sd-jwt/present": "0.10.0",
46
+ "@sd-jwt/types": "0.10.0",
47
+ "@sd-jwt/utils": "0.10.0"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"
@@ -62,5 +62,5 @@
62
62
  "esm"
63
63
  ]
64
64
  },
65
- "gitHead": "b1a1a481270e3ad720fc17bd24345a11575f00d6"
65
+ "gitHead": "afd604d1f15a3b59bcbc43589a13815f657b89fd"
66
66
  }
@@ -82,9 +82,18 @@ export class FlattenJSON {
82
82
  }
83
83
 
84
84
  public toEncoded() {
85
+ const data: string[] = [];
86
+
85
87
  const jwt = `${this.protected}.${this.payload}.${this.signature}`;
86
- const disclosures = this.disclosures.join(SD_SEPARATOR);
88
+ data.push(jwt);
89
+
90
+ if (this.disclosures && this.disclosures.length > 0) {
91
+ const disclosures = this.disclosures.join(SD_SEPARATOR);
92
+ data.push(disclosures);
93
+ }
94
+
87
95
  const kb_jwt = this.kb_jwt ?? '';
88
- return [jwt, disclosures, kb_jwt].join(SD_SEPARATOR);
96
+ data.push(kb_jwt);
97
+ return data.join(SD_SEPARATOR);
89
98
  }
90
99
  }
@@ -116,12 +116,20 @@ export class GeneralJSON {
116
116
  if (index < 0 || index >= this.signatures.length) {
117
117
  throw new SDJWTException('Index out of bounds');
118
118
  }
119
+ const data: string[] = [];
119
120
 
120
121
  const { protected: protectedHeader, signature } = this.signatures[index];
121
- const disclosures = this.disclosures.join(SD_SEPARATOR);
122
- const kb_jwt = this.kb_jwt ?? '';
123
122
  const jwt = `${protectedHeader}.${this.payload}.${signature}`;
124
- return [jwt, disclosures, kb_jwt].join(SD_SEPARATOR);
123
+ data.push(jwt);
124
+
125
+ if (this.disclosures && this.disclosures.length > 0) {
126
+ const disclosures = this.disclosures.join(SD_SEPARATOR);
127
+ data.push(disclosures);
128
+ }
129
+
130
+ const kb = this.kb_jwt ?? '';
131
+ data.push(kb);
132
+ return data.join(SD_SEPARATOR);
125
133
  }
126
134
 
127
135
  public async addSignature(
package/src/index.ts CHANGED
@@ -18,7 +18,6 @@ import {
18
18
  type JwtPayload,
19
19
  type Signer,
20
20
  IANA_HASH_ALGORITHMS,
21
- type HashAlgorithm,
22
21
  } from '@sd-jwt/types';
23
22
  import { getSDAlgAndPayload } from '@sd-jwt/decode';
24
23
  import { FlattenJSON } from './flattenJSON';
@@ -53,4 +53,70 @@ describe('FlattenJSON', () => {
53
53
 
54
54
  expect(result.toEncoded()).toEqual(compact);
55
55
  });
56
+
57
+ test('fromSerialized without disclosures and KB JWT', () => {
58
+ const flattenJSON = {
59
+ payload:
60
+ 'eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0',
61
+ signature:
62
+ 'n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg',
63
+ protected: 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9',
64
+ header: {
65
+ disclosures: [],
66
+ },
67
+ };
68
+
69
+ const result = FlattenJSON.fromSerialized(flattenJSON);
70
+ expect(result).toBeDefined();
71
+ const compact =
72
+ 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~';
73
+
74
+ expect(result.toEncoded()).toEqual(compact);
75
+ });
76
+
77
+ test('fromSerialized without KB JWT', () => {
78
+ const flattenJSON = {
79
+ payload:
80
+ 'eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0',
81
+ signature:
82
+ 'n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg',
83
+ protected: 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9',
84
+ header: {
85
+ disclosures: [
86
+ 'WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd',
87
+ 'WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ',
88
+ 'WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ',
89
+ ],
90
+ },
91
+ };
92
+
93
+ const result = FlattenJSON.fromSerialized(flattenJSON);
94
+ expect(result).toBeDefined();
95
+ const compact =
96
+ 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd~WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ~WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ~';
97
+
98
+ expect(result.toEncoded()).toEqual(compact);
99
+ });
100
+
101
+ test('fromSerialized without disclosures', () => {
102
+ const flattenJSON = {
103
+ payload:
104
+ 'eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0',
105
+ signature:
106
+ 'n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg',
107
+ protected: 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9',
108
+ header: {
109
+ disclosures: [],
110
+ kb_jwt:
111
+ 'eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA',
112
+ },
113
+ };
114
+
115
+ const result = FlattenJSON.fromSerialized(flattenJSON);
116
+ expect(result).toBeDefined();
117
+ const compact =
118
+ 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA';
119
+
120
+ expect(result.toEncoded()).toEqual(compact);
121
+ });
56
122
  });
@@ -20,7 +20,7 @@ const createSignerVerifier = () => {
20
20
  return { signer, verifier };
21
21
  };
22
22
 
23
- describe('FlattenJSON', () => {
23
+ describe('GeneralJSON', () => {
24
24
  test('fromEncode', () => {
25
25
  const compact =
26
26
  'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd~WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ~WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA';
@@ -79,6 +79,81 @@ describe('FlattenJSON', () => {
79
79
  expect(result.toEncoded(0)).toEqual(compact);
80
80
  });
81
81
 
82
+ test('fromSerialized without disclosures, KB JWT', () => {
83
+ const generalJSON = {
84
+ payload:
85
+ 'eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0',
86
+ signatures: [
87
+ {
88
+ protected: 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9',
89
+ signature:
90
+ 'n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg',
91
+ header: {
92
+ disclosures: [],
93
+ },
94
+ },
95
+ ],
96
+ };
97
+
98
+ const compact =
99
+ 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~';
100
+ const result = GeneralJSON.fromSerialized(generalJSON);
101
+ expect(result).toBeDefined();
102
+ expect(result.toEncoded(0)).toEqual(compact);
103
+ });
104
+
105
+ test('fromSerialized without KB JWT', () => {
106
+ const generalJSON = {
107
+ payload:
108
+ 'eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0',
109
+ signatures: [
110
+ {
111
+ protected: 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9',
112
+ signature:
113
+ 'n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg',
114
+ header: {
115
+ disclosures: [
116
+ 'WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd',
117
+ 'WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ',
118
+ 'WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ',
119
+ ],
120
+ },
121
+ },
122
+ ],
123
+ };
124
+
125
+ const compact =
126
+ 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~WyI1ZWI4Yzg2MjM0MDJjZjJlIiwiZmlyc3RuYW1lIiwiSm9obiJd~WyJjNWMzMWY2ZWYzNTg4MWJjIiwibGFzdG5hbWUiLCJEb2UiXQ~WyJmYTlkYTUzZWJjOTk3OThlIiwic3NuIiwiMTIzLTQ1LTY3ODkiXQ~';
127
+ const result = GeneralJSON.fromSerialized(generalJSON);
128
+ expect(result).toBeDefined();
129
+ expect(result.toEncoded(0)).toEqual(compact);
130
+ });
131
+
132
+ test('fromSerialized without disclosures', () => {
133
+ const generalJSON = {
134
+ payload:
135
+ 'eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0',
136
+ signatures: [
137
+ {
138
+ protected: 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9',
139
+ signature:
140
+ 'n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg',
141
+ header: {
142
+ disclosures: [],
143
+ kb_jwt:
144
+ 'eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA',
145
+ },
146
+ },
147
+ ],
148
+ };
149
+
150
+ const compact =
151
+ 'eyJ0eXAiOiJzZCtqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpZCI6IjEyMzQiLCJfc2QiOlsiYkRUUnZtNS1Zbi1IRzdjcXBWUjVPVlJJWHNTYUJrNTdKZ2lPcV9qMVZJNCIsImV0M1VmUnlsd1ZyZlhkUEt6Zzc5aGNqRDFJdHpvUTlvQm9YUkd0TW9zRmsiLCJ6V2ZaTlMxOUF0YlJTVGJvN3NKUm4wQlpRdldSZGNob0M3VVphYkZyalk4Il0sIl9zZF9hbGciOiJzaGEtMjU2In0.n27NCtnuwytlBYtUNjgkesDP_7gN7bhaLhWNL4SWT6MaHsOjZ2ZMp987GgQRL6ZkLbJ7Cd3hlePHS84GBXPuvg~eyJ0eXAiOiJrYitqd3QiLCJhbGciOiJFUzI1NiJ9.eyJpYXQiOjE3MTAwNjk3MjIsImF1ZCI6ImRpZDpleGFtcGxlOjEyMyIsIm5vbmNlIjoiazh2ZGYwbmQ2Iiwic2RfaGFzaCI6Il8tTmJWSzNmczl3VzNHaDNOUktSNEt1NmZDMUwzN0R2MFFfalBXd0ppRkUifQ.pqw2OB5IA5ya9Mxf60hE3nr2gsJEIoIlnuCa4qIisijHbwg3WzTDFmW2SuNvK_ORN0WU6RoGbJx5uYZh8k4EbA';
152
+ const result = GeneralJSON.fromSerialized(generalJSON);
153
+ expect(result).toBeDefined();
154
+ expect(result.toEncoded(0)).toEqual(compact);
155
+ });
156
+
82
157
  test('add signature', async () => {
83
158
  const { signer } = createSignerVerifier();
84
159
 
@@ -112,7 +187,6 @@ describe('FlattenJSON', () => {
112
187
  'key-1',
113
188
  );
114
189
  const resultJson = result.toJson();
115
- console.log(resultJson);
116
190
 
117
191
  expect(resultJson.signatures.length).toEqual(2);
118
192
  expect(resultJson.signatures[1].header.kid).toEqual('key-1');