bitbadgesjs-sdk 0.31.1 → 0.31.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 (99) hide show
  1. package/dist/cjs/api-indexer/BitBadgesCollection.d.ts +1 -0
  2. package/dist/cjs/api-indexer/BitBadgesCollection.d.ts.map +1 -1
  3. package/dist/cjs/api-indexer/BitBadgesCollection.js +4 -1
  4. package/dist/cjs/api-indexer/BitBadgesCollection.js.map +1 -1
  5. package/dist/cjs/core/approval-utils.spec.d.ts +2 -0
  6. package/dist/cjs/core/approval-utils.spec.d.ts.map +1 -0
  7. package/dist/cjs/core/approval-utils.spec.js +240 -0
  8. package/dist/cjs/core/approval-utils.spec.js.map +1 -0
  9. package/dist/cjs/core/approvals.spec.js +96 -0
  10. package/dist/cjs/core/approvals.spec.js.map +1 -1
  11. package/dist/cjs/core/bids.spec.d.ts +2 -0
  12. package/dist/cjs/core/bids.spec.d.ts.map +1 -0
  13. package/dist/cjs/core/bids.spec.js +201 -0
  14. package/dist/cjs/core/bids.spec.js.map +1 -0
  15. package/dist/cjs/core/blockin.spec.d.ts +2 -0
  16. package/dist/cjs/core/blockin.spec.d.ts.map +1 -0
  17. package/dist/cjs/core/blockin.spec.js +163 -0
  18. package/dist/cjs/core/blockin.spec.js.map +1 -0
  19. package/dist/cjs/core/coin.spec.d.ts +2 -0
  20. package/dist/cjs/core/coin.spec.d.ts.map +1 -0
  21. package/dist/cjs/core/coin.spec.js +80 -0
  22. package/dist/cjs/core/coin.spec.js.map +1 -0
  23. package/dist/cjs/core/cosmos-wrappers.spec.d.ts +2 -0
  24. package/dist/cjs/core/cosmos-wrappers.spec.d.ts.map +1 -0
  25. package/dist/cjs/core/cosmos-wrappers.spec.js +623 -0
  26. package/dist/cjs/core/cosmos-wrappers.spec.js.map +1 -0
  27. package/dist/cjs/core/managersplitter.spec.d.ts +2 -0
  28. package/dist/cjs/core/managersplitter.spec.d.ts.map +1 -0
  29. package/dist/cjs/core/managersplitter.spec.js +170 -0
  30. package/dist/cjs/core/managersplitter.spec.js.map +1 -0
  31. package/dist/cjs/core/overlaps.spec.js +201 -0
  32. package/dist/cjs/core/overlaps.spec.js.map +1 -1
  33. package/dist/cjs/core/permission-utils.spec.d.ts +2 -0
  34. package/dist/cjs/core/permission-utils.spec.d.ts.map +1 -0
  35. package/dist/cjs/core/permission-utils.spec.js +192 -0
  36. package/dist/cjs/core/permission-utils.spec.js.map +1 -0
  37. package/dist/cjs/core/permissions.spec.js +1069 -0
  38. package/dist/cjs/core/permissions.spec.js.map +1 -1
  39. package/dist/cjs/core/transfers.spec.js +524 -0
  40. package/dist/cjs/core/transfers.spec.js.map +1 -1
  41. package/dist/cjs/core/userBalances.spec.d.ts +2 -0
  42. package/dist/cjs/core/userBalances.spec.d.ts.map +1 -0
  43. package/dist/cjs/core/userBalances.spec.js +184 -0
  44. package/dist/cjs/core/userBalances.spec.js.map +1 -0
  45. package/dist/cjs/core/validate-utils.spec.d.ts +2 -0
  46. package/dist/cjs/core/validate-utils.spec.d.ts.map +1 -0
  47. package/dist/cjs/core/validate-utils.spec.js +202 -0
  48. package/dist/cjs/core/validate-utils.spec.js.map +1 -0
  49. package/dist/cjs/tsconfig.build.tsbuildinfo +1 -1
  50. package/dist/esm/api-indexer/BitBadgesCollection.d.ts +1 -0
  51. package/dist/esm/api-indexer/BitBadgesCollection.d.ts.map +1 -1
  52. package/dist/esm/api-indexer/BitBadgesCollection.js +4 -1
  53. package/dist/esm/api-indexer/BitBadgesCollection.js.map +1 -1
  54. package/dist/esm/core/approval-utils.spec.d.ts +2 -0
  55. package/dist/esm/core/approval-utils.spec.d.ts.map +1 -0
  56. package/dist/esm/core/approval-utils.spec.js +238 -0
  57. package/dist/esm/core/approval-utils.spec.js.map +1 -0
  58. package/dist/esm/core/approvals.spec.js +97 -1
  59. package/dist/esm/core/approvals.spec.js.map +1 -1
  60. package/dist/esm/core/bids.spec.d.ts +2 -0
  61. package/dist/esm/core/bids.spec.d.ts.map +1 -0
  62. package/dist/esm/core/bids.spec.js +199 -0
  63. package/dist/esm/core/bids.spec.js.map +1 -0
  64. package/dist/esm/core/blockin.spec.d.ts +2 -0
  65. package/dist/esm/core/blockin.spec.d.ts.map +1 -0
  66. package/dist/esm/core/blockin.spec.js +161 -0
  67. package/dist/esm/core/blockin.spec.js.map +1 -0
  68. package/dist/esm/core/coin.spec.d.ts +2 -0
  69. package/dist/esm/core/coin.spec.d.ts.map +1 -0
  70. package/dist/esm/core/coin.spec.js +78 -0
  71. package/dist/esm/core/coin.spec.js.map +1 -0
  72. package/dist/esm/core/cosmos-wrappers.spec.d.ts +2 -0
  73. package/dist/esm/core/cosmos-wrappers.spec.d.ts.map +1 -0
  74. package/dist/esm/core/cosmos-wrappers.spec.js +621 -0
  75. package/dist/esm/core/cosmos-wrappers.spec.js.map +1 -0
  76. package/dist/esm/core/managersplitter.spec.d.ts +2 -0
  77. package/dist/esm/core/managersplitter.spec.d.ts.map +1 -0
  78. package/dist/esm/core/managersplitter.spec.js +168 -0
  79. package/dist/esm/core/managersplitter.spec.js.map +1 -0
  80. package/dist/esm/core/overlaps.spec.js +202 -1
  81. package/dist/esm/core/overlaps.spec.js.map +1 -1
  82. package/dist/esm/core/permission-utils.spec.d.ts +2 -0
  83. package/dist/esm/core/permission-utils.spec.d.ts.map +1 -0
  84. package/dist/esm/core/permission-utils.spec.js +190 -0
  85. package/dist/esm/core/permission-utils.spec.js.map +1 -0
  86. package/dist/esm/core/permissions.spec.js +1069 -0
  87. package/dist/esm/core/permissions.spec.js.map +1 -1
  88. package/dist/esm/core/transfers.spec.js +525 -1
  89. package/dist/esm/core/transfers.spec.js.map +1 -1
  90. package/dist/esm/core/userBalances.spec.d.ts +2 -0
  91. package/dist/esm/core/userBalances.spec.d.ts.map +1 -0
  92. package/dist/esm/core/userBalances.spec.js +182 -0
  93. package/dist/esm/core/userBalances.spec.js.map +1 -0
  94. package/dist/esm/core/validate-utils.spec.d.ts +2 -0
  95. package/dist/esm/core/validate-utils.spec.d.ts.map +1 -0
  96. package/dist/esm/core/validate-utils.spec.js +200 -0
  97. package/dist/esm/core/validate-utils.spec.js.map +1 -0
  98. package/dist/esm/tsconfig-esm.build.tsbuildinfo +1 -1
  99. package/package.json +4 -5
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const managersplitter_js_1 = require("./managersplitter.js");
4
+ BigInt.prototype.toJSON = function () {
5
+ return this.toString();
6
+ };
7
+ describe('PermissionCriteria', () => {
8
+ describe('constructor', () => {
9
+ it('should construct with approved addresses', () => {
10
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: ['bb1abc', 'bb1def'] });
11
+ expect(pc.approvedAddresses).toEqual(['bb1abc', 'bb1def']);
12
+ });
13
+ it('should default to empty array when approvedAddresses is undefined', () => {
14
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: undefined });
15
+ expect(pc.approvedAddresses).toEqual([]);
16
+ });
17
+ it('should construct with empty array', () => {
18
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: [] });
19
+ expect(pc.approvedAddresses).toEqual([]);
20
+ });
21
+ });
22
+ describe('getNumberFieldNames', () => {
23
+ it('should return empty array', () => {
24
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: [] });
25
+ expect(pc.getNumberFieldNames()).toEqual([]);
26
+ });
27
+ });
28
+ describe('convert', () => {
29
+ it('should return a deep copy (no number fields)', () => {
30
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: ['bb1abc'] });
31
+ const converted = pc.convert(String);
32
+ expect(converted.approvedAddresses).toEqual(['bb1abc']);
33
+ converted.approvedAddresses.push('bb1new');
34
+ expect(pc.approvedAddresses.length).toBe(1);
35
+ });
36
+ });
37
+ describe('toProto / fromProto round-trip', () => {
38
+ it('should survive proto round-trip with addresses', () => {
39
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: ['bb1abc', 'bb1def'] });
40
+ const proto = pc.toProto();
41
+ const restored = managersplitter_js_1.PermissionCriteria.fromProto(proto);
42
+ expect(restored.approvedAddresses).toEqual(['bb1abc', 'bb1def']);
43
+ });
44
+ it('should survive proto round-trip with empty addresses', () => {
45
+ const pc = new managersplitter_js_1.PermissionCriteria({ approvedAddresses: [] });
46
+ const proto = pc.toProto();
47
+ const restored = managersplitter_js_1.PermissionCriteria.fromProto(proto);
48
+ expect(restored.approvedAddresses).toEqual([]);
49
+ });
50
+ });
51
+ describe('fromJson / fromJsonString', () => {
52
+ it('should construct from JSON value', () => {
53
+ const json = { approvedAddresses: ['bb1test'] };
54
+ const pc = managersplitter_js_1.PermissionCriteria.fromJson(json);
55
+ expect(pc.approvedAddresses).toEqual(['bb1test']);
56
+ });
57
+ it('should construct from JSON string', () => {
58
+ const jsonStr = JSON.stringify({ approvedAddresses: ['bb1test', 'bb1other'] });
59
+ const pc = managersplitter_js_1.PermissionCriteria.fromJsonString(jsonStr);
60
+ expect(pc.approvedAddresses).toEqual(['bb1test', 'bb1other']);
61
+ });
62
+ });
63
+ });
64
+ describe('ManagerSplitterPermissions', () => {
65
+ describe('constructor', () => {
66
+ it('should construct with all permissions set', () => {
67
+ const perms = new managersplitter_js_1.ManagerSplitterPermissions({
68
+ canDeleteCollection: { approvedAddresses: ['bb1admin'] },
69
+ canArchiveCollection: { approvedAddresses: ['bb1admin'] },
70
+ canUpdateStandards: { approvedAddresses: [] },
71
+ canUpdateCustomData: { approvedAddresses: ['bb1a', 'bb1b'] },
72
+ canUpdateManager: { approvedAddresses: ['bb1admin'] },
73
+ canUpdateCollectionMetadata: undefined,
74
+ canUpdateValidTokenIds: undefined,
75
+ canUpdateTokenMetadata: undefined,
76
+ canUpdateCollectionApprovals: { approvedAddresses: ['bb1admin'] }
77
+ });
78
+ expect(perms.canDeleteCollection?.approvedAddresses).toEqual(['bb1admin']);
79
+ expect(perms.canUpdateStandards?.approvedAddresses).toEqual([]);
80
+ expect(perms.canUpdateCustomData?.approvedAddresses).toEqual(['bb1a', 'bb1b']);
81
+ expect(perms.canUpdateCollectionMetadata).toBeUndefined();
82
+ expect(perms.canUpdateValidTokenIds).toBeUndefined();
83
+ expect(perms.canUpdateTokenMetadata).toBeUndefined();
84
+ });
85
+ it('should construct with all permissions undefined', () => {
86
+ const perms = new managersplitter_js_1.ManagerSplitterPermissions({});
87
+ expect(perms.canDeleteCollection).toBeUndefined();
88
+ expect(perms.canArchiveCollection).toBeUndefined();
89
+ expect(perms.canUpdateManager).toBeUndefined();
90
+ });
91
+ });
92
+ describe('getNumberFieldNames', () => {
93
+ it('should return empty array', () => {
94
+ const perms = new managersplitter_js_1.ManagerSplitterPermissions({});
95
+ expect(perms.getNumberFieldNames()).toEqual([]);
96
+ });
97
+ });
98
+ describe('convert', () => {
99
+ it('should return a deep copy', () => {
100
+ const perms = new managersplitter_js_1.ManagerSplitterPermissions({
101
+ canDeleteCollection: { approvedAddresses: ['bb1admin'] }
102
+ });
103
+ const converted = perms.convert(String);
104
+ expect(converted.canDeleteCollection?.approvedAddresses).toEqual(['bb1admin']);
105
+ });
106
+ });
107
+ describe('toProto / fromProto round-trip', () => {
108
+ it('should survive proto round-trip with all permissions set', () => {
109
+ const perms = new managersplitter_js_1.ManagerSplitterPermissions({
110
+ canDeleteCollection: { approvedAddresses: ['bb1admin'] },
111
+ canArchiveCollection: { approvedAddresses: ['bb1archive'] },
112
+ canUpdateStandards: { approvedAddresses: [] },
113
+ canUpdateCustomData: { approvedAddresses: ['bb1data'] },
114
+ canUpdateManager: { approvedAddresses: ['bb1mgr'] },
115
+ canUpdateCollectionMetadata: { approvedAddresses: ['bb1meta'] },
116
+ canUpdateValidTokenIds: { approvedAddresses: ['bb1tok'] },
117
+ canUpdateTokenMetadata: { approvedAddresses: ['bb1tmeta'] },
118
+ canUpdateCollectionApprovals: { approvedAddresses: ['bb1appr'] }
119
+ });
120
+ const proto = perms.toProto();
121
+ const restored = managersplitter_js_1.ManagerSplitterPermissions.fromProto(proto);
122
+ expect(restored.canDeleteCollection?.approvedAddresses).toEqual(['bb1admin']);
123
+ expect(restored.canArchiveCollection?.approvedAddresses).toEqual(['bb1archive']);
124
+ expect(restored.canUpdateStandards?.approvedAddresses).toEqual([]);
125
+ expect(restored.canUpdateCustomData?.approvedAddresses).toEqual(['bb1data']);
126
+ expect(restored.canUpdateManager?.approvedAddresses).toEqual(['bb1mgr']);
127
+ expect(restored.canUpdateCollectionMetadata?.approvedAddresses).toEqual(['bb1meta']);
128
+ expect(restored.canUpdateValidTokenIds?.approvedAddresses).toEqual(['bb1tok']);
129
+ expect(restored.canUpdateTokenMetadata?.approvedAddresses).toEqual(['bb1tmeta']);
130
+ expect(restored.canUpdateCollectionApprovals?.approvedAddresses).toEqual(['bb1appr']);
131
+ });
132
+ it('should survive proto round-trip with all permissions undefined', () => {
133
+ const perms = new managersplitter_js_1.ManagerSplitterPermissions({});
134
+ const proto = perms.toProto();
135
+ const restored = managersplitter_js_1.ManagerSplitterPermissions.fromProto(proto);
136
+ expect(restored.canDeleteCollection).toBeUndefined();
137
+ expect(restored.canArchiveCollection).toBeUndefined();
138
+ expect(restored.canUpdateStandards).toBeUndefined();
139
+ expect(restored.canUpdateCustomData).toBeUndefined();
140
+ expect(restored.canUpdateManager).toBeUndefined();
141
+ expect(restored.canUpdateCollectionMetadata).toBeUndefined();
142
+ expect(restored.canUpdateValidTokenIds).toBeUndefined();
143
+ expect(restored.canUpdateTokenMetadata).toBeUndefined();
144
+ expect(restored.canUpdateCollectionApprovals).toBeUndefined();
145
+ });
146
+ });
147
+ describe('fromJson / fromJsonString', () => {
148
+ it('should construct from JSON value', () => {
149
+ const json = {
150
+ canDeleteCollection: { approvedAddresses: ['bb1admin'] }
151
+ };
152
+ const perms = managersplitter_js_1.ManagerSplitterPermissions.fromJson(json);
153
+ expect(perms.canDeleteCollection?.approvedAddresses).toEqual(['bb1admin']);
154
+ });
155
+ it('should construct from JSON string', () => {
156
+ const jsonStr = JSON.stringify({
157
+ canUpdateManager: { approvedAddresses: ['bb1mgr'] },
158
+ canUpdateCollectionApprovals: { approvedAddresses: ['bb1a', 'bb1b'] }
159
+ });
160
+ const perms = managersplitter_js_1.ManagerSplitterPermissions.fromJsonString(jsonStr);
161
+ expect(perms.canUpdateManager?.approvedAddresses).toEqual(['bb1mgr']);
162
+ expect(perms.canUpdateCollectionApprovals?.approvedAddresses).toEqual(['bb1a', 'bb1b']);
163
+ });
164
+ it('should handle empty JSON', () => {
165
+ const perms = managersplitter_js_1.ManagerSplitterPermissions.fromJson({});
166
+ expect(perms.canDeleteCollection).toBeUndefined();
167
+ });
168
+ });
169
+ });
170
+ //# sourceMappingURL=managersplitter.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managersplitter.spec.js","sourceRoot":"","sources":["../../../src/core/managersplitter.spec.ts"],"names":[],"mappings":"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"}
@@ -524,6 +524,207 @@ describe('overlaps', () => {
524
524
  expect(overlaps_js_1.ApprovalPermissionUsedFlags.usesOwnershipTimes).toBe(true);
525
525
  expect(overlaps_js_1.ApprovalPermissionUsedFlags.usesApprovalIdList).toBe(true);
526
526
  });
527
+ test('TimedUpdateWithTokenIdsPermissionUsedFlags should have tokenIds and timelineTimes true', () => {
528
+ expect(overlaps_js_1.TimedUpdateWithTokenIdsPermissionUsedFlags.usesTokenIds).toBe(true);
529
+ expect(overlaps_js_1.TimedUpdateWithTokenIdsPermissionUsedFlags.usesTimelineTimes).toBe(true);
530
+ expect(overlaps_js_1.TimedUpdateWithTokenIdsPermissionUsedFlags.usesTransferTimes).toBe(false);
531
+ expect(overlaps_js_1.TimedUpdateWithTokenIdsPermissionUsedFlags.usesToList).toBe(false);
532
+ });
533
+ test('TokenIdsActionPermissionUsedFlags should only have usesTokenIds true', () => {
534
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesTokenIds).toBe(true);
535
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesTimelineTimes).toBe(false);
536
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesTransferTimes).toBe(false);
537
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesToList).toBe(false);
538
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesFromList).toBe(false);
539
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesInitiatedByList).toBe(false);
540
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesOwnershipTimes).toBe(false);
541
+ expect(overlaps_js_1.TokenIdsActionPermissionUsedFlags.usesApprovalIdList).toBe(false);
542
+ });
543
+ });
544
+ describe('GetListIdWithOptions', () => {
545
+ test('should return original listId when uses is true', () => {
546
+ const result = (0, overlaps_js_1.GetListIdWithOptions)('custom-list', true);
547
+ expect(result).toBe('custom-list');
548
+ });
549
+ test('should return "All" when uses is false', () => {
550
+ const result = (0, overlaps_js_1.GetListIdWithOptions)('custom-list', false);
551
+ expect(result).toBe('All');
552
+ });
553
+ test('should return "All" when uses is undefined', () => {
554
+ const result = (0, overlaps_js_1.GetListIdWithOptions)('custom-list', undefined);
555
+ expect(result).toBe('All');
556
+ });
557
+ test('should return "All" when uses is explicitly false and listId is empty', () => {
558
+ const result = (0, overlaps_js_1.GetListIdWithOptions)('', false);
559
+ expect(result).toBe('All');
560
+ });
561
+ });
562
+ describe('Boundary conditions for universalRemoveOverlaps', () => {
563
+ test('should handle adjacent non-overlapping ranges', () => {
564
+ const handled = createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
565
+ const valueToCheck = createPermissionDetails({ start: 6n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
566
+ const [remaining, removed] = (0, overlaps_js_1.universalRemoveOverlaps)(handled, valueToCheck);
567
+ expect(remaining.length).toBe(1);
568
+ expect(removed.length).toBe(0);
569
+ expect(remaining[0].tokenId.start).toBe(6n);
570
+ expect(remaining[0].tokenId.end).toBe(10n);
571
+ });
572
+ test('should handle single-point overlap at boundary', () => {
573
+ const handled = createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
574
+ const valueToCheck = createPermissionDetails({ start: 5n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
575
+ const [remaining, removed] = (0, overlaps_js_1.universalRemoveOverlaps)(handled, valueToCheck);
576
+ expect(removed.length).toBe(1);
577
+ expect(removed[0].tokenId.start).toBe(5n);
578
+ expect(removed[0].tokenId.end).toBe(5n);
579
+ expect(remaining.length).toBeGreaterThan(0);
580
+ const hasRemaining = remaining.some((r) => r.tokenId.start === 6n && r.tokenId.end === 10n);
581
+ expect(hasRemaining).toBe(true);
582
+ });
583
+ test('should handle start == end (single point range)', () => {
584
+ const handled = createPermissionDetails({ start: 5n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
585
+ const valueToCheck = createPermissionDetails({ start: 5n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false });
586
+ const [remaining, removed] = (0, overlaps_js_1.universalRemoveOverlaps)(handled, valueToCheck);
587
+ expect(remaining.length).toBe(0);
588
+ expect(removed.length).toBe(1);
589
+ expect(removed[0].tokenId.start).toBe(5n);
590
+ expect(removed[0].tokenId.end).toBe(5n);
591
+ });
592
+ });
593
+ describe('ValidateUniversalPermissionUpdate - additional edge cases', () => {
594
+ test('should allow adding forbidden times that were not previously defined', () => {
595
+ const oldPermissions = [
596
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
597
+ ];
598
+ oldPermissions[0].permanentlyForbiddenTimes = uintRanges_js_1.UintRangeArray.From([]);
599
+ oldPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([]);
600
+ const newPermissions = [
601
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
602
+ ];
603
+ newPermissions[0].permanentlyForbiddenTimes = uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 100n }]);
604
+ newPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([]);
605
+ const error = (0, overlaps_js_1.ValidateUniversalPermissionUpdate)(oldPermissions, newPermissions);
606
+ expect(error).toBeNull();
607
+ });
608
+ test('should return error when revoking previously forbidden times', () => {
609
+ const oldPermissions = [
610
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
611
+ ];
612
+ oldPermissions[0].permanentlyForbiddenTimes = uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 100n }]);
613
+ oldPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([]);
614
+ const newPermissions = [
615
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
616
+ ];
617
+ newPermissions[0].permanentlyForbiddenTimes = uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 49n }]);
618
+ newPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([]);
619
+ const error = (0, overlaps_js_1.ValidateUniversalPermissionUpdate)(oldPermissions, newPermissions);
620
+ expect(error).not.toBeNull();
621
+ expect(error.message).toContain('previously explicitly disApproved');
622
+ });
623
+ });
624
+ describe('GetFirstMatchOnly - additional edge cases', () => {
625
+ test('should handle permission with all uses flags true', () => {
626
+ const permission = {
627
+ tokenIds: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 10n }]),
628
+ timelineTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 5n }]),
629
+ transferTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 5n }]),
630
+ ownershipTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 5n }]),
631
+ toList: addressLists_js_1.AddressList.AllAddresses(),
632
+ fromList: addressLists_js_1.AddressList.AllAddresses(),
633
+ initiatedByList: addressLists_js_1.AddressList.AllAddresses(),
634
+ approvalIdList: new addressLists_js_1.AddressList({ listId: '', addresses: [], whitelist: false, uri: '', customData: '' }),
635
+ permanentlyPermittedTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 100n }]),
636
+ permanentlyForbiddenTimes: uintRanges_js_1.UintRangeArray.From([]),
637
+ usesTokenIds: true,
638
+ usesTimelineTimes: true,
639
+ usesTransferTimes: true,
640
+ usesToList: true,
641
+ usesFromList: true,
642
+ usesInitiatedByList: true,
643
+ usesOwnershipTimes: true,
644
+ usesApprovalIdList: false,
645
+ arbitraryValue: {}
646
+ };
647
+ const result = (0, overlaps_js_1.GetFirstMatchOnly)([permission]);
648
+ expect(result.length).toBeGreaterThanOrEqual(1);
649
+ for (const r of result) {
650
+ expect(r.permanentlyPermittedTimes[0].start).toBe(1n);
651
+ expect(r.permanentlyPermittedTimes[0].end).toBe(100n);
652
+ }
653
+ });
654
+ test('should handle single permission covering entire space', () => {
655
+ const permission = {
656
+ tokenIds: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 18446744073709551615n }]),
657
+ timelineTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 1n }]),
658
+ transferTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 1n }]),
659
+ ownershipTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 1n }]),
660
+ toList: addressLists_js_1.AddressList.AllAddresses(),
661
+ fromList: addressLists_js_1.AddressList.AllAddresses(),
662
+ initiatedByList: addressLists_js_1.AddressList.AllAddresses(),
663
+ approvalIdList: new addressLists_js_1.AddressList({ listId: '', addresses: [], whitelist: false, uri: '', customData: '' }),
664
+ permanentlyPermittedTimes: uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 18446744073709551615n }]),
665
+ permanentlyForbiddenTimes: uintRanges_js_1.UintRangeArray.From([]),
666
+ usesTokenIds: true,
667
+ usesTimelineTimes: false,
668
+ usesTransferTimes: false,
669
+ usesToList: false,
670
+ usesFromList: false,
671
+ usesInitiatedByList: false,
672
+ usesOwnershipTimes: false,
673
+ usesApprovalIdList: false,
674
+ arbitraryValue: {}
675
+ };
676
+ const result = (0, overlaps_js_1.GetFirstMatchOnly)([permission]);
677
+ expect(result.length).toBe(1);
678
+ expect(result[0].tokenId.start).toBe(1n);
679
+ expect(result[0].tokenId.end).toBe(18446744073709551615n);
680
+ });
681
+ });
682
+ describe('universalRemoveOverlaps - approvalIdList remaining branch', () => {
683
+ test('should produce approvalId remaining entry when approvalIdList partially overlaps', () => {
684
+ const handled = createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [alice], whitelist: true });
685
+ const valueToCheck = createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { start: 1n, end: 10n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [alice, bob], whitelist: true });
686
+ const [remaining, removed] = (0, overlaps_js_1.universalRemoveOverlaps)(handled, valueToCheck);
687
+ expect(remaining.length).toBeGreaterThan(0);
688
+ expect(removed.length).toBeGreaterThan(0);
689
+ });
690
+ });
691
+ describe('ValidateUniversalPermissionUpdate - GetPermissionString branches', () => {
692
+ test('should include field info in error message when values are at MAX_UINT64', () => {
693
+ const MAX = 18446744073709551615n;
694
+ const oldPermissions = [
695
+ createPermissionDetails({ start: MAX, end: MAX }, { start: MAX, end: MAX }, { start: MAX, end: MAX }, { start: MAX, end: MAX }, { addresses: [alice], whitelist: true }, { addresses: [alice], whitelist: true }, { addresses: [alice], whitelist: true })
696
+ ];
697
+ oldPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 100n }]);
698
+ const newPermissions = [];
699
+ const error = (0, overlaps_js_1.ValidateUniversalPermissionUpdate)(oldPermissions, newPermissions);
700
+ expect(error).not.toBeNull();
701
+ expect(error.message).toContain('found in old permissions but not in new permissions');
702
+ });
703
+ test('should include address details in error message when address list has 1-5 addresses', () => {
704
+ const oldPermissions = [
705
+ createPermissionDetails({ start: 1n, end: 5n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [alice, bob], whitelist: true }, { addresses: [alice, bob], whitelist: true }, { addresses: [alice, bob], whitelist: true })
706
+ ];
707
+ oldPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 100n }]);
708
+ const newPermissions = [];
709
+ const error = (0, overlaps_js_1.ValidateUniversalPermissionUpdate)(oldPermissions, newPermissions);
710
+ expect(error).not.toBeNull();
711
+ expect(error.message).toContain('found in old permissions but not in new permissions');
712
+ });
713
+ test('should produce error with both permitted and forbidden leftover error message', () => {
714
+ const oldPermissions = [
715
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
716
+ ];
717
+ oldPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([{ start: 1n, end: 50n }]);
718
+ oldPermissions[0].permanentlyForbiddenTimes = uintRanges_js_1.UintRangeArray.From([{ start: 51n, end: 100n }]);
719
+ const newPermissions = [
720
+ createPermissionDetails({ start: 1n, end: 10n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { start: 1n, end: 1n }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false }, { addresses: [], whitelist: false })
721
+ ];
722
+ newPermissions[0].permanentlyPermittedTimes = uintRanges_js_1.UintRangeArray.From([]);
723
+ newPermissions[0].permanentlyForbiddenTimes = uintRanges_js_1.UintRangeArray.From([]);
724
+ const error = (0, overlaps_js_1.ValidateUniversalPermissionUpdate)(oldPermissions, newPermissions);
725
+ expect(error).not.toBeNull();
726
+ expect(error.message.toLowerCase()).toMatch(/allowed|disapproved/i);
727
+ });
527
728
  });
528
729
  });
529
730
  //# sourceMappingURL=overlaps.spec.js.map