@0xsequence/wallet-primitives 0.0.0-20250520201059

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 (96) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +7 -0
  3. package/LICENSE +202 -0
  4. package/dist/address.d.ts +5 -0
  5. package/dist/address.d.ts.map +1 -0
  6. package/dist/address.js +7 -0
  7. package/dist/address.js.map +1 -0
  8. package/dist/attestation.d.ts +24 -0
  9. package/dist/attestation.d.ts.map +1 -0
  10. package/dist/attestation.js +77 -0
  11. package/dist/attestation.js.map +1 -0
  12. package/dist/config.d.ts +85 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +381 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/constants.d.ts +173 -0
  17. package/dist/constants.d.ts.map +1 -0
  18. package/dist/constants.js +31 -0
  19. package/dist/constants.js.map +1 -0
  20. package/dist/context.d.ts +9 -0
  21. package/dist/context.d.ts.map +1 -0
  22. package/dist/context.js +8 -0
  23. package/dist/context.js.map +1 -0
  24. package/dist/erc-6492.d.ts +19 -0
  25. package/dist/erc-6492.d.ts.map +1 -0
  26. package/dist/erc-6492.js +64 -0
  27. package/dist/erc-6492.js.map +1 -0
  28. package/dist/extensions/index.d.ts +9 -0
  29. package/dist/extensions/index.d.ts.map +1 -0
  30. package/dist/extensions/index.js +7 -0
  31. package/dist/extensions/index.js.map +1 -0
  32. package/dist/extensions/passkeys.d.ts +31 -0
  33. package/dist/extensions/passkeys.d.ts.map +1 -0
  34. package/dist/extensions/passkeys.js +224 -0
  35. package/dist/extensions/passkeys.js.map +1 -0
  36. package/dist/extensions/recovery.d.ts +310 -0
  37. package/dist/extensions/recovery.d.ts.map +1 -0
  38. package/dist/extensions/recovery.js +444 -0
  39. package/dist/extensions/recovery.js.map +1 -0
  40. package/dist/generic-tree.d.ts +14 -0
  41. package/dist/generic-tree.d.ts.map +1 -0
  42. package/dist/generic-tree.js +34 -0
  43. package/dist/generic-tree.js.map +1 -0
  44. package/dist/index.d.ts +16 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +16 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/network.d.ts +15 -0
  49. package/dist/network.d.ts.map +1 -0
  50. package/dist/network.js +24 -0
  51. package/dist/network.js.map +1 -0
  52. package/dist/payload.d.ts +108 -0
  53. package/dist/payload.d.ts.map +1 -0
  54. package/dist/payload.js +627 -0
  55. package/dist/payload.js.map +1 -0
  56. package/dist/permission.d.ts +73 -0
  57. package/dist/permission.d.ts.map +1 -0
  58. package/dist/permission.js +188 -0
  59. package/dist/permission.js.map +1 -0
  60. package/dist/session-config.d.ts +113 -0
  61. package/dist/session-config.d.ts.map +1 -0
  62. package/dist/session-config.js +554 -0
  63. package/dist/session-config.js.map +1 -0
  64. package/dist/session-signature.d.ts +24 -0
  65. package/dist/session-signature.d.ts.map +1 -0
  66. package/dist/session-signature.js +141 -0
  67. package/dist/session-signature.js.map +1 -0
  68. package/dist/signature.d.ts +108 -0
  69. package/dist/signature.d.ts.map +1 -0
  70. package/dist/signature.js +1079 -0
  71. package/dist/signature.js.map +1 -0
  72. package/dist/utils.d.ts +45 -0
  73. package/dist/utils.d.ts.map +1 -0
  74. package/dist/utils.js +100 -0
  75. package/dist/utils.js.map +1 -0
  76. package/eslint.config.mjs +4 -0
  77. package/package.json +27 -0
  78. package/src/address.ts +19 -0
  79. package/src/attestation.ts +114 -0
  80. package/src/config.ts +521 -0
  81. package/src/constants.ts +39 -0
  82. package/src/context.ts +16 -0
  83. package/src/erc-6492.ts +97 -0
  84. package/src/extensions/index.ts +14 -0
  85. package/src/extensions/passkeys.ts +283 -0
  86. package/src/extensions/recovery.ts +542 -0
  87. package/src/generic-tree.ts +55 -0
  88. package/src/index.ts +15 -0
  89. package/src/network.ts +37 -0
  90. package/src/payload.ts +825 -0
  91. package/src/permission.ts +252 -0
  92. package/src/session-config.ts +681 -0
  93. package/src/session-signature.ts +197 -0
  94. package/src/signature.ts +1398 -0
  95. package/src/utils.ts +114 -0
  96. package/tsconfig.json +10 -0
@@ -0,0 +1,73 @@
1
+ import { Address, Bytes } from 'ox';
2
+ export declare enum ParameterOperation {
3
+ EQUAL = 0,
4
+ NOT_EQUAL = 1,
5
+ GREATER_THAN_OR_EQUAL = 2,
6
+ LESS_THAN_OR_EQUAL = 3
7
+ }
8
+ export type ParameterRule = {
9
+ cumulative: boolean;
10
+ operation: ParameterOperation;
11
+ value: Bytes.Bytes;
12
+ offset: bigint;
13
+ mask: Bytes.Bytes;
14
+ };
15
+ export type Permission = {
16
+ target: Address.Address;
17
+ rules: ParameterRule[];
18
+ };
19
+ export type SessionPermissions = {
20
+ signer: Address.Address;
21
+ valueLimit: bigint;
22
+ deadline: bigint;
23
+ permissions: [Permission, ...Permission[]];
24
+ };
25
+ export declare const MAX_PERMISSIONS_COUNT: number;
26
+ export declare const MAX_RULES_COUNT: number;
27
+ export declare function encodeSessionPermissions(sessionPermissions: SessionPermissions): Bytes.Bytes;
28
+ export declare function encodePermission(permission: Permission): Bytes.Bytes;
29
+ export declare function decodeSessionPermissions(bytes: Bytes.Bytes): SessionPermissions;
30
+ export declare const permissionStructAbi: {
31
+ readonly internalType: "struct Permission";
32
+ readonly name: "permission";
33
+ readonly type: "tuple";
34
+ readonly components: readonly [{
35
+ readonly internalType: "address";
36
+ readonly name: "target";
37
+ readonly type: "address";
38
+ }, {
39
+ readonly internalType: "struct ParameterRule[]";
40
+ readonly name: "rules";
41
+ readonly type: "tuple[]";
42
+ readonly components: readonly [{
43
+ readonly internalType: "bool";
44
+ readonly name: "cumulative";
45
+ readonly type: "bool";
46
+ }, {
47
+ readonly internalType: "enum ParameterOperation";
48
+ readonly name: "operation";
49
+ readonly type: "uint8";
50
+ }, {
51
+ readonly internalType: "bytes32";
52
+ readonly name: "value";
53
+ readonly type: "bytes32";
54
+ }, {
55
+ readonly internalType: "uint256";
56
+ readonly name: "offset";
57
+ readonly type: "uint256";
58
+ }, {
59
+ readonly internalType: "bytes32";
60
+ readonly name: "mask";
61
+ readonly type: "bytes32";
62
+ }];
63
+ }];
64
+ };
65
+ export declare function abiEncodePermission(permission: Permission): string;
66
+ export declare function sessionPermissionsToJson(sessionPermissions: SessionPermissions): string;
67
+ export declare function encodeSessionPermissionsForJson(sessionPermissions: SessionPermissions): any;
68
+ export declare function permissionToJson(permission: Permission): string;
69
+ export declare function parameterRuleToJson(rule: ParameterRule): string;
70
+ export declare function sessionPermissionsFromJson(json: string): SessionPermissions;
71
+ export declare function sessionPermissionsFromParsed(parsed: any): SessionPermissions;
72
+ export declare function permissionFromJson(json: string): Permission;
73
+ //# sourceMappingURL=permission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../src/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAA;AAElD,oBAAY,kBAAkB;IAC5B,KAAK,IAAI;IACT,SAAS,IAAI;IACb,qBAAqB,IAAI;IACzB,kBAAkB,IAAI;CACvB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,EAAE,kBAAkB,CAAA;IAC7B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,KAAK,CAAC,KAAK,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;IACvB,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC,CAAA;CAC3C,CAAA;AAED,eAAO,MAAM,qBAAqB,QAAa,CAAA;AAC/C,eAAO,MAAM,eAAe,QAAa,CAAA;AAIzC,wBAAgB,wBAAwB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAc5F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,KAAK,CAWpE;AAiBD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAsB/E;AAwCD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBtB,CAAA;AAEV,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAgBlE;AAID,wBAAgB,wBAAwB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,MAAM,CAEvF;AAED,wBAAgB,+BAA+B,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,GAAG,CAO3F;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAE/D;AASD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAE/D;AAYD,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAE3E;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,GAAG,GAAG,kBAAkB,CAO5E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAE3D"}
@@ -0,0 +1,188 @@
1
+ import { AbiParameters, Address, Bytes } from 'ox';
2
+ export var ParameterOperation;
3
+ (function (ParameterOperation) {
4
+ ParameterOperation[ParameterOperation["EQUAL"] = 0] = "EQUAL";
5
+ ParameterOperation[ParameterOperation["NOT_EQUAL"] = 1] = "NOT_EQUAL";
6
+ ParameterOperation[ParameterOperation["GREATER_THAN_OR_EQUAL"] = 2] = "GREATER_THAN_OR_EQUAL";
7
+ ParameterOperation[ParameterOperation["LESS_THAN_OR_EQUAL"] = 3] = "LESS_THAN_OR_EQUAL";
8
+ })(ParameterOperation || (ParameterOperation = {}));
9
+ export const MAX_PERMISSIONS_COUNT = 2 ** 7 - 1;
10
+ export const MAX_RULES_COUNT = 2 ** 8 - 1;
11
+ // Encoding
12
+ export function encodeSessionPermissions(sessionPermissions) {
13
+ if (sessionPermissions.permissions.length > MAX_PERMISSIONS_COUNT) {
14
+ throw new Error('Too many permissions');
15
+ }
16
+ const encodedPermissions = sessionPermissions.permissions.map(encodePermission);
17
+ return Bytes.concat(Bytes.padLeft(Bytes.fromHex(sessionPermissions.signer), 20), Bytes.padLeft(Bytes.fromNumber(sessionPermissions.valueLimit), 32), Bytes.padLeft(Bytes.fromNumber(sessionPermissions.deadline), 32), Bytes.fromNumber(sessionPermissions.permissions.length, { size: 1 }), Bytes.concat(...encodedPermissions));
18
+ }
19
+ export function encodePermission(permission) {
20
+ if (permission.rules.length > MAX_RULES_COUNT) {
21
+ throw new Error('Too many rules');
22
+ }
23
+ const encodedRules = permission.rules.map(encodeParameterRule);
24
+ return Bytes.concat(Bytes.padLeft(Bytes.fromHex(permission.target), 20), Bytes.fromNumber(permission.rules.length, { size: 1 }), Bytes.concat(...encodedRules));
25
+ }
26
+ function encodeParameterRule(rule) {
27
+ // Combine operation and cumulative flag into a single byte
28
+ // 0x[operationx3][cumulative]
29
+ const operationCumulative = (Number(rule.operation) << 1) | (rule.cumulative ? 1 : 0);
30
+ return Bytes.concat(Bytes.fromNumber(operationCumulative), Bytes.padLeft(rule.value, 32), Bytes.padLeft(Bytes.fromNumber(rule.offset), 32), Bytes.padLeft(rule.mask, 32));
31
+ }
32
+ // Decoding
33
+ export function decodeSessionPermissions(bytes) {
34
+ const signer = Bytes.toHex(bytes.slice(0, 20));
35
+ const valueLimit = Bytes.toBigInt(bytes.slice(20, 52));
36
+ const deadline = Bytes.toBigInt(bytes.slice(52, 84));
37
+ const permissionsLength = Number(bytes[84]);
38
+ const permissions = [];
39
+ let pointer = 85;
40
+ for (let i = 0; i < permissionsLength; i++) {
41
+ // Pass the remaining bytes instead of a fixed slice length
42
+ const { permission, consumed } = decodePermission(bytes.slice(pointer));
43
+ permissions.push(permission);
44
+ pointer += consumed;
45
+ }
46
+ if (permissions.length === 0) {
47
+ throw new Error('No permissions');
48
+ }
49
+ return {
50
+ signer,
51
+ valueLimit,
52
+ deadline,
53
+ permissions: permissions,
54
+ };
55
+ }
56
+ // Returns the permission and the number of bytes consumed in the permission block
57
+ function decodePermission(bytes) {
58
+ const target = Bytes.toHex(bytes.slice(0, 20));
59
+ const rulesLength = Number(bytes[20]);
60
+ const rules = [];
61
+ let pointer = 21;
62
+ for (let i = 0; i < rulesLength; i++) {
63
+ const ruleBytes = bytes.slice(pointer, pointer + 97);
64
+ rules.push(decodeParameterRule(ruleBytes));
65
+ pointer += 97;
66
+ }
67
+ return {
68
+ permission: {
69
+ target,
70
+ rules,
71
+ },
72
+ consumed: pointer,
73
+ };
74
+ }
75
+ function decodeParameterRule(bytes) {
76
+ const operationCumulative = Number(bytes[0]);
77
+ const cumulative = (operationCumulative & 1) === 1;
78
+ const operation = operationCumulative >> 1;
79
+ const value = bytes.slice(1, 33);
80
+ const offset = Bytes.toBigInt(bytes.slice(33, 65));
81
+ const mask = bytes.slice(65, 97);
82
+ return {
83
+ cumulative,
84
+ operation,
85
+ value,
86
+ offset,
87
+ mask,
88
+ };
89
+ }
90
+ // ABI encode
91
+ export const permissionStructAbi = {
92
+ internalType: 'struct Permission',
93
+ name: 'permission',
94
+ type: 'tuple',
95
+ components: [
96
+ { internalType: 'address', name: 'target', type: 'address' },
97
+ {
98
+ internalType: 'struct ParameterRule[]',
99
+ name: 'rules',
100
+ type: 'tuple[]',
101
+ components: [
102
+ { internalType: 'bool', name: 'cumulative', type: 'bool' },
103
+ {
104
+ internalType: 'enum ParameterOperation',
105
+ name: 'operation',
106
+ type: 'uint8',
107
+ },
108
+ { internalType: 'bytes32', name: 'value', type: 'bytes32' },
109
+ { internalType: 'uint256', name: 'offset', type: 'uint256' },
110
+ { internalType: 'bytes32', name: 'mask', type: 'bytes32' },
111
+ ],
112
+ },
113
+ ],
114
+ };
115
+ export function abiEncodePermission(permission) {
116
+ return AbiParameters.encode([permissionStructAbi], [
117
+ {
118
+ target: permission.target,
119
+ rules: permission.rules.map((rule) => ({
120
+ cumulative: rule.cumulative,
121
+ operation: rule.operation,
122
+ value: Bytes.toHex(rule.value),
123
+ offset: rule.offset,
124
+ mask: Bytes.toHex(rule.mask),
125
+ })),
126
+ },
127
+ ]);
128
+ }
129
+ // JSON
130
+ export function sessionPermissionsToJson(sessionPermissions) {
131
+ return JSON.stringify(encodeSessionPermissionsForJson(sessionPermissions));
132
+ }
133
+ export function encodeSessionPermissionsForJson(sessionPermissions) {
134
+ return {
135
+ signer: sessionPermissions.signer.toString(),
136
+ valueLimit: sessionPermissions.valueLimit.toString(),
137
+ deadline: sessionPermissions.deadline.toString(),
138
+ permissions: sessionPermissions.permissions.map(encodePermissionForJson),
139
+ };
140
+ }
141
+ export function permissionToJson(permission) {
142
+ return JSON.stringify(encodePermissionForJson(permission));
143
+ }
144
+ function encodePermissionForJson(permission) {
145
+ return {
146
+ target: permission.target.toString(),
147
+ rules: permission.rules.map(encodeParameterRuleForJson),
148
+ };
149
+ }
150
+ export function parameterRuleToJson(rule) {
151
+ return JSON.stringify(encodeParameterRuleForJson(rule));
152
+ }
153
+ function encodeParameterRuleForJson(rule) {
154
+ return {
155
+ cumulative: rule.cumulative,
156
+ operation: rule.operation,
157
+ value: Bytes.toHex(rule.value),
158
+ offset: rule.offset.toString(),
159
+ mask: Bytes.toHex(rule.mask),
160
+ };
161
+ }
162
+ export function sessionPermissionsFromJson(json) {
163
+ return sessionPermissionsFromParsed(JSON.parse(json));
164
+ }
165
+ export function sessionPermissionsFromParsed(parsed) {
166
+ return {
167
+ signer: Address.from(parsed.signer),
168
+ valueLimit: BigInt(parsed.valueLimit),
169
+ deadline: BigInt(parsed.deadline),
170
+ permissions: parsed.permissions.map(permissionFromParsed),
171
+ };
172
+ }
173
+ export function permissionFromJson(json) {
174
+ return permissionFromParsed(JSON.parse(json));
175
+ }
176
+ function permissionFromParsed(parsed) {
177
+ return {
178
+ target: Address.from(parsed.target),
179
+ rules: parsed.rules.map((decoded) => ({
180
+ cumulative: decoded.cumulative,
181
+ operation: decoded.operation,
182
+ value: Bytes.fromHex(decoded.value),
183
+ offset: BigInt(decoded.offset),
184
+ mask: Bytes.fromHex(decoded.mask),
185
+ })),
186
+ };
187
+ }
188
+ //# sourceMappingURL=permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.js","sourceRoot":"","sources":["../src/permission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { Address, Bytes, Hex } from 'ox';
2
+ import * as GenericTree from './generic-tree.js';
3
+ import { SessionPermissions } from './permission.js';
4
+ export declare const SESSIONS_FLAG_PERMISSIONS = 0;
5
+ export declare const SESSIONS_FLAG_NODE = 1;
6
+ export declare const SESSIONS_FLAG_BRANCH = 2;
7
+ export declare const SESSIONS_FLAG_BLACKLIST = 3;
8
+ export declare const SESSIONS_FLAG_IDENTITY_SIGNER = 4;
9
+ export type ImplicitBlacklistLeaf = {
10
+ type: 'implicit-blacklist';
11
+ blacklist: Address.Address[];
12
+ };
13
+ export type IdentitySignerLeaf = {
14
+ type: 'identity-signer';
15
+ identitySigner: Address.Address;
16
+ };
17
+ export type SessionPermissionsLeaf = SessionPermissions & {
18
+ type: 'session-permissions';
19
+ };
20
+ export type SessionNode = Hex.Hex;
21
+ export type SessionLeaf = SessionPermissionsLeaf | ImplicitBlacklistLeaf | IdentitySignerLeaf;
22
+ export type SessionBranch = [SessionsTopology, SessionsTopology, ...SessionsTopology[]];
23
+ export type SessionsTopology = SessionBranch | SessionLeaf | SessionNode;
24
+ export declare function isSessionsTopology(topology: any): topology is SessionsTopology;
25
+ /**
26
+ * Checks if the topology is complete.
27
+ * A complete topology has exactly one identity signer and one blacklist.
28
+ * @param topology The topology to check
29
+ * @returns True if the topology is complete
30
+ */
31
+ export declare function isCompleteSessionsTopology(topology: any): topology is SessionsTopology;
32
+ /**
33
+ * Gets the identity signer from the topology.
34
+ * @param topology The topology to get the identity signer from
35
+ * @returns The identity signer or null if it's not present
36
+ */
37
+ export declare function getIdentitySigner(topology: SessionsTopology): Address.Address | null;
38
+ /**
39
+ * Gets the implicit blacklist from the topology.
40
+ * @param topology The topology to get the implicit blacklist from
41
+ * @returns The implicit blacklist or null if it's not present
42
+ */
43
+ export declare function getImplicitBlacklist(topology: SessionsTopology): Address.Address[] | null;
44
+ /**
45
+ * Gets the implicit blacklist leaf from the topology.
46
+ * @param topology The topology to get the implicit blacklist leaf from
47
+ * @returns The implicit blacklist leaf or null if it's not present
48
+ */
49
+ export declare function getImplicitBlacklistLeaf(topology: SessionsTopology): ImplicitBlacklistLeaf | null;
50
+ export declare function getSessionPermissions(topology: SessionsTopology, address: Address.Address): SessionPermissions | null;
51
+ export declare function getExplicitSigners(topology: SessionsTopology): Address.Address[];
52
+ /**
53
+ * Encodes a leaf to bytes.
54
+ * This can be Hash.keccak256'd to convert to a node..
55
+ * @param leaf The leaf to encode
56
+ * @returns The encoded leaf
57
+ */
58
+ export declare function encodeLeafToGeneric(leaf: SessionLeaf): GenericTree.Leaf;
59
+ export declare function decodeLeafFromBytes(bytes: Bytes.Bytes): SessionLeaf;
60
+ export declare function sessionsTopologyToConfigurationTree(topology: SessionsTopology): GenericTree.Tree;
61
+ export declare function configurationTreeToSessionsTopology(tree: GenericTree.Tree): SessionsTopology;
62
+ /**
63
+ * Encodes a topology into bytes for contract validation.
64
+ * @param topology The topology to encode
65
+ * @returns The encoded topology
66
+ */
67
+ export declare function encodeSessionsTopology(topology: SessionsTopology): Bytes.Bytes;
68
+ export declare function sessionsTopologyToJson(topology: SessionsTopology): string;
69
+ export declare function sessionsTopologyFromJson(json: string): SessionsTopology;
70
+ /**
71
+ * Removes all explicit sessions (permissions leaf nodes) that match the given signer from the topology.
72
+ * Returns the updated topology or null if it becomes empty (for nesting).
73
+ * If the signer is not found, the topology is returned unchanged.
74
+ */
75
+ export declare function removeExplicitSession(topology: SessionsTopology, signerAddress: `0x${string}`): SessionsTopology | null;
76
+ export declare function addExplicitSession(topology: SessionsTopology, sessionPermissions: SessionPermissions): SessionsTopology;
77
+ /**
78
+ * Merges two topologies into a new branch of [a, b].
79
+ */
80
+ export declare function mergeSessionsTopologies(a: SessionsTopology, b: SessionsTopology): SessionsTopology;
81
+ /**
82
+ * Balances the topology by flattening and rebuilding as a balanced binary tree.
83
+ * This does not make a binary tree as the blacklist and identity signer are included at the top level.
84
+ */
85
+ export declare function balanceSessionsTopology(topology: SessionsTopology): SessionsTopology;
86
+ /**
87
+ * Cleans a topology by removing leaves (SessionPermissions) whose deadline has expired.
88
+ * - currentTime is compared against `session.deadline`.
89
+ * - If a branch ends up with zero valid leaves, return `null`.
90
+ * - If it has one child, collapse that child upward.
91
+ */
92
+ export declare function cleanSessionsTopology(topology: SessionsTopology, currentTime?: bigint): SessionsTopology | null;
93
+ /**
94
+ * Minimise the topology by rolling unused signers into nodes.
95
+ * @param topology The topology to minimise
96
+ * @param signers The list of signers to consider
97
+ * @returns The minimised topology
98
+ */
99
+ export declare function minimiseSessionsTopology(topology: SessionsTopology, explicitSigners?: Address.Address[], implicitSigners?: Address.Address[]): SessionsTopology;
100
+ /**
101
+ * Adds an address to the implicit session's blacklist.
102
+ * If the address is not already in the blacklist, it is added and the list is sorted.
103
+ */
104
+ export declare function addToImplicitBlacklist(topology: SessionsTopology, address: Address.Address): SessionsTopology;
105
+ /**
106
+ * Removes an address from the implicit session's blacklist.
107
+ */
108
+ export declare function removeFromImplicitBlacklist(topology: SessionsTopology, address: Address.Address): SessionsTopology;
109
+ /**
110
+ * Generate an empty sessions topology with the given identity signer. No session permission and an empty blacklist
111
+ */
112
+ export declare function emptySessionsTopology(identitySigner: Address.Address): SessionsTopology;
113
+ //# sourceMappingURL=session-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-config.d.ts","sourceRoot":"","sources":["../src/session-config.ts"],"names":[],"mappings":"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"}