@ensdomains/ensjs 3.0.0-beta.1 → 3.0.0-beta.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/dist/cjs/clients/decorators/subgraph.js.map +1 -1
- package/dist/cjs/contracts/consts.js +6 -0
- package/dist/cjs/contracts/consts.js.map +1 -1
- package/dist/cjs/dns.js +3 -3
- package/dist/cjs/dns.js.map +1 -1
- package/dist/cjs/errors/subgraph.js.map +1 -1
- package/dist/cjs/errors/utils.js +15 -18
- package/dist/cjs/errors/utils.js.map +1 -1
- package/dist/cjs/errors/version.js +1 -1
- package/dist/cjs/errors/version.js.map +1 -1
- package/dist/cjs/functions/dns/{prepareDnsImport.js → getDnsImportData.js} +3 -3
- package/dist/cjs/functions/dns/{prepareDnsImport.js.map → getDnsImportData.js.map} +1 -1
- package/dist/cjs/functions/dns/importDnsName.js +7 -7
- package/dist/cjs/functions/dns/importDnsName.js.map +1 -1
- package/dist/cjs/functions/public/_getContentHash.js +1 -1
- package/dist/cjs/functions/public/getSupportedInterfaces.js +1 -1
- package/dist/cjs/functions/public/getSupportedInterfaces.js.map +1 -1
- package/dist/cjs/functions/public/getWrapperData.js.map +1 -1
- package/dist/cjs/functions/subgraph/filters.js +3 -0
- package/dist/cjs/functions/subgraph/filters.js.map +1 -0
- package/dist/cjs/functions/subgraph/getNameHistory.js +1 -1
- package/dist/cjs/functions/subgraph/getNamesForAddress.js +140 -182
- package/dist/cjs/functions/subgraph/getNamesForAddress.js.map +1 -1
- package/dist/cjs/functions/subgraph/getSubnames.js +95 -108
- package/dist/cjs/functions/subgraph/getSubnames.js.map +1 -1
- package/dist/cjs/functions/subgraph/types.js +3 -0
- package/dist/cjs/functions/subgraph/types.js.map +1 -0
- package/dist/cjs/functions/subgraph/utils.js.map +1 -1
- package/dist/cjs/functions/wallet/createSubname.js +1 -1
- package/dist/cjs/functions/wallet/createSubname.js.map +1 -1
- package/dist/cjs/functions/wallet/setChildFuses.js +1 -1
- package/dist/cjs/functions/wallet/setChildFuses.js.map +1 -1
- package/dist/cjs/functions/wallet/setFuses.js +1 -1
- package/dist/cjs/functions/wallet/setFuses.js.map +1 -1
- package/dist/cjs/functions/wallet/wrapName.js +3 -1
- package/dist/cjs/functions/wallet/wrapName.js.map +1 -1
- package/dist/cjs/index.js +1 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/contentHash.js +54 -131
- package/dist/cjs/utils/contentHash.js.map +1 -1
- package/dist/cjs/utils/encoders/encodeSetContentHash.js +1 -4
- package/dist/cjs/utils/encoders/encodeSetContentHash.js.map +1 -1
- package/dist/cjs/utils/format.js +1 -5
- package/dist/cjs/utils/format.js.map +1 -1
- package/dist/cjs/utils/fuses.js +181 -200
- package/dist/cjs/utils/fuses.js.map +1 -1
- package/dist/cjs/utils/index.js +4 -7
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/registerHelpers.js +3 -1
- package/dist/cjs/utils/registerHelpers.js.map +1 -1
- package/dist/esm/clients/decorators/subgraph.js.map +1 -1
- package/dist/esm/contracts/consts.js +6 -0
- package/dist/esm/contracts/consts.js.map +1 -1
- package/dist/esm/dns.js +1 -1
- package/dist/esm/dns.js.map +1 -1
- package/dist/esm/errors/subgraph.js.map +1 -1
- package/dist/esm/errors/utils.js +13 -16
- package/dist/esm/errors/utils.js.map +1 -1
- package/dist/esm/errors/version.js +1 -1
- package/dist/esm/errors/version.js.map +1 -1
- package/dist/esm/functions/dns/{prepareDnsImport.js → getDnsImportData.js} +9 -10
- package/dist/esm/functions/dns/getDnsImportData.js.map +1 -0
- package/dist/esm/functions/dns/importDnsName.js +12 -12
- package/dist/esm/functions/dns/importDnsName.js.map +1 -1
- package/dist/esm/functions/public/_getContentHash.js +2 -2
- package/dist/esm/functions/public/getSupportedInterfaces.js +2 -2
- package/dist/esm/functions/public/getSupportedInterfaces.js.map +1 -1
- package/dist/esm/functions/public/getWrapperData.js.map +1 -1
- package/dist/esm/functions/subgraph/filters.js +2 -0
- package/dist/esm/functions/subgraph/filters.js.map +1 -0
- package/dist/esm/functions/subgraph/getNameHistory.js +2 -2
- package/dist/esm/functions/subgraph/getNamesForAddress.js +144 -183
- package/dist/esm/functions/subgraph/getNamesForAddress.js.map +1 -1
- package/dist/esm/functions/subgraph/getSubnames.js +101 -111
- package/dist/esm/functions/subgraph/getSubnames.js.map +1 -1
- package/dist/esm/functions/subgraph/types.js +2 -0
- package/dist/esm/functions/subgraph/types.js.map +1 -0
- package/dist/esm/functions/subgraph/utils.js.map +1 -1
- package/dist/esm/functions/wallet/createSubname.js +1 -1
- package/dist/esm/functions/wallet/createSubname.js.map +1 -1
- package/dist/esm/functions/wallet/setChildFuses.js +1 -1
- package/dist/esm/functions/wallet/setChildFuses.js.map +1 -1
- package/dist/esm/functions/wallet/setFuses.js +2 -2
- package/dist/esm/functions/wallet/setFuses.js.map +1 -1
- package/dist/esm/functions/wallet/wrapName.js +4 -2
- package/dist/esm/functions/wallet/wrapName.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/contentHash.js +51 -128
- package/dist/esm/utils/contentHash.js.map +1 -1
- package/dist/esm/utils/encoders/encodeSetContentHash.js +2 -5
- package/dist/esm/utils/encoders/encodeSetContentHash.js.map +1 -1
- package/dist/esm/utils/format.js +0 -2
- package/dist/esm/utils/format.js.map +1 -1
- package/dist/esm/utils/fuses.js +180 -201
- package/dist/esm/utils/fuses.js.map +1 -1
- package/dist/esm/utils/index.js +2 -2
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/registerHelpers.js +4 -2
- package/dist/esm/utils/registerHelpers.js.map +1 -1
- package/dist/types/clients/decorators/subgraph.d.ts +1 -1
- package/dist/types/clients/decorators/subgraph.d.ts.map +1 -1
- package/dist/types/clients/public.d.ts +1 -1
- package/dist/types/clients/subgraph.d.ts +1 -1
- package/dist/types/clients/wallet.d.ts +31 -67
- package/dist/types/clients/wallet.d.ts.map +1 -1
- package/dist/types/contracts/consts.d.ts +6 -0
- package/dist/types/contracts/consts.d.ts.map +1 -1
- package/dist/types/dns.d.ts +1 -1
- package/dist/types/dns.d.ts.map +1 -1
- package/dist/types/errors/subgraph.d.ts +4 -4
- package/dist/types/errors/subgraph.d.ts.map +1 -1
- package/dist/types/errors/utils.d.ts +10 -13
- package/dist/types/errors/utils.d.ts.map +1 -1
- package/dist/types/errors/version.d.ts +1 -1
- package/dist/types/errors/version.d.ts.map +1 -1
- package/dist/types/functions/dns/{prepareDnsImport.d.ts → getDnsImportData.d.ts} +11 -12
- package/dist/types/functions/dns/{prepareDnsImport.d.ts.map → getDnsImportData.d.ts.map} +1 -1
- package/dist/types/functions/dns/importDnsName.d.ts +12 -12
- package/dist/types/functions/dns/importDnsName.d.ts.map +1 -1
- package/dist/types/functions/public/getSupportedInterfaces.d.ts +19 -4
- package/dist/types/functions/public/getSupportedInterfaces.d.ts.map +1 -1
- package/dist/types/functions/public/getWrapperData.d.ts +2 -2
- package/dist/types/functions/public/getWrapperData.d.ts.map +1 -1
- package/dist/types/functions/subgraph/filters.d.ts +693 -0
- package/dist/types/functions/subgraph/filters.d.ts.map +1 -0
- package/dist/types/functions/subgraph/getNamesForAddress.d.ts +2 -0
- package/dist/types/functions/subgraph/getNamesForAddress.d.ts.map +1 -1
- package/dist/types/functions/subgraph/getSubnames.d.ts +3 -1
- package/dist/types/functions/subgraph/getSubnames.d.ts.map +1 -1
- package/dist/types/functions/subgraph/types.d.ts +13 -0
- package/dist/types/functions/subgraph/types.d.ts.map +1 -0
- package/dist/types/functions/subgraph/utils.d.ts +2 -2
- package/dist/types/functions/subgraph/utils.d.ts.map +1 -1
- package/dist/types/functions/wallet/commitName.d.ts +1 -1
- package/dist/types/functions/wallet/createSubname.d.ts +4 -4
- package/dist/types/functions/wallet/createSubname.d.ts.map +1 -1
- package/dist/types/functions/wallet/deleteSubname.d.ts +1 -1
- package/dist/types/functions/wallet/setAbiRecord.d.ts +1 -1
- package/dist/types/functions/wallet/setAddressRecord.d.ts +1 -1
- package/dist/types/functions/wallet/setChildFuses.d.ts +3 -3
- package/dist/types/functions/wallet/setChildFuses.d.ts.map +1 -1
- package/dist/types/functions/wallet/setContentHashRecord.d.ts +1 -1
- package/dist/types/functions/wallet/setFuses.d.ts +3 -3
- package/dist/types/functions/wallet/setFuses.d.ts.map +1 -1
- package/dist/types/functions/wallet/setPrimaryName.d.ts +1 -1
- package/dist/types/functions/wallet/setRecords.d.ts +1 -1
- package/dist/types/functions/wallet/setResolver.d.ts +1 -1
- package/dist/types/functions/wallet/setTextRecord.d.ts +1 -1
- package/dist/types/functions/wallet/transferName.d.ts +1 -1
- package/dist/types/functions/wallet/unwrapName.d.ts +1 -1
- package/dist/types/functions/wallet/wrapName.d.ts +3 -3
- package/dist/types/functions/wallet/wrapName.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/contentHash.d.ts +7 -11
- package/dist/types/utils/contentHash.d.ts.map +1 -1
- package/dist/types/utils/encoders/encodeSetContentHash.d.ts.map +1 -1
- package/dist/types/utils/format.d.ts +0 -2
- package/dist/types/utils/format.d.ts.map +1 -1
- package/dist/types/utils/fuses.d.ts +164 -125
- package/dist/types/utils/fuses.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +2 -2
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/registerHelpers.d.ts +2 -2
- package/dist/types/utils/registerHelpers.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/clients/decorators/subgraph.ts +1 -0
- package/src/contracts/consts.ts +6 -0
- package/src/dns.ts +5 -5
- package/src/errors/subgraph.ts +4 -4
- package/src/errors/utils.ts +21 -18
- package/src/errors/version.ts +1 -1
- package/src/functions/dns/{prepareDnsImport.ts → getDnsImportData.ts} +12 -13
- package/src/functions/dns/importDnsName.ts +20 -15
- package/src/functions/public/_getContentHash.ts +2 -2
- package/src/functions/public/getSupportedInterfaces.ts +48 -10
- package/src/functions/public/getWrapperData.ts +2 -2
- package/src/functions/subgraph/filters.ts +702 -0
- package/src/functions/subgraph/getNameHistory.ts +2 -2
- package/src/functions/subgraph/getNamesForAddress.ts +170 -186
- package/src/functions/subgraph/getSubnames.ts +121 -113
- package/src/functions/subgraph/types.ts +13 -0
- package/src/functions/subgraph/utils.ts +2 -2
- package/src/functions/wallet/createSubname.ts +4 -4
- package/src/functions/wallet/setChildFuses.ts +3 -3
- package/src/functions/wallet/setFuses.ts +6 -3
- package/src/functions/wallet/wrapName.ts +8 -3
- package/src/index.ts +0 -1
- package/src/utils/contentHash.ts +59 -113
- package/src/utils/encoders/encodeSetContentHash.ts +2 -4
- package/src/utils/format.ts +0 -6
- package/src/utils/fuses.ts +308 -308
- package/src/utils/index.ts +4 -5
- package/src/utils/registerHelpers.ts +5 -3
- package/dist/esm/functions/dns/prepareDnsImport.js.map +0 -1
- package/src/@types/@ensdomains/content-hash.d.ts +0 -1
- package/src/functions/dns/getDnsOwner.test.ts +0 -195
- package/src/functions/dns/importDnsName.test.ts +0 -117
- package/src/functions/dns/prepareDnsImport.test.ts +0 -115
- package/src/functions/public/batch.test.ts +0 -67
- package/src/functions/public/ccip.test.ts +0 -78
- package/src/functions/public/getAbiRecord.test.ts +0 -174
- package/src/functions/public/getAddressRecord.test.ts +0 -83
- package/src/functions/public/getAvailable.test.ts +0 -17
- package/src/functions/public/getContentHashRecord.test.ts +0 -28
- package/src/functions/public/getExpiry.test.ts +0 -48
- package/src/functions/public/getName.test.ts +0 -66
- package/src/functions/public/getOwner.test.ts +0 -87
- package/src/functions/public/getPrice.test.ts +0 -45
- package/src/functions/public/getRecords.test.ts +0 -49
- package/src/functions/public/getResolver.test.ts +0 -12
- package/src/functions/public/getTextRecord.test.ts +0 -20
- package/src/functions/public/getWrapperData.test.ts +0 -79
- package/src/functions/public/getWrapperName.test.ts +0 -19
- package/src/functions/subgraph/client.test.ts +0 -170
- package/src/functions/subgraph/getDecodedName.test.ts +0 -31
- package/src/functions/subgraph/getNameHistory.test.ts +0 -39
- package/src/functions/subgraph/getNamesForAddress.test.ts +0 -244
- package/src/functions/subgraph/getSubgraphRecords.test.ts +0 -74
- package/src/functions/subgraph/getSubgraphRegistrant.test.ts +0 -34
- package/src/functions/subgraph/getSubnames.test.ts +0 -202
- package/src/functions/wallet/commitName.test.ts +0 -58
- package/src/functions/wallet/createSubname.test.ts +0 -73
- package/src/functions/wallet/deleteSubname.test.ts +0 -150
- package/src/functions/wallet/registerName.test.ts +0 -81
- package/src/functions/wallet/renewNames.test.ts +0 -92
- package/src/functions/wallet/setAbiRecord.test.ts +0 -156
- package/src/functions/wallet/setAddressRecord.test.ts +0 -121
- package/src/functions/wallet/setChildFuses.test.ts +0 -97
- package/src/functions/wallet/setContentHashRecord.test.ts +0 -69
- package/src/functions/wallet/setFuses.test.ts +0 -287
- package/src/functions/wallet/setPrimaryName.test.ts +0 -71
- package/src/functions/wallet/setRecords.test.ts +0 -127
- package/src/functions/wallet/setResolver.test.ts +0 -114
- package/src/functions/wallet/setTextRecord.test.ts +0 -67
- package/src/functions/wallet/transferName.test.ts +0 -201
- package/src/functions/wallet/unwrapName.test.ts +0 -93
- package/src/functions/wallet/wrapName.test.ts +0 -195
- package/src/utils/generateRecordCallArray.test.ts +0 -84
- package/src/utils/labels.test.ts +0 -163
- package/src/utils/makeLabelNodeAndParent.test.ts +0 -11
- package/src/utils/makeSafeSecondsDate.test.ts +0 -14
- package/src/utils/normalise.test.ts +0 -35
- package/src/utils/ownerFromContract.test.ts +0 -52
- package/src/utils/registerHelpers.test.ts +0 -159
- package/src/utils/validation.test.ts +0 -170
- package/src/utils/wrapper.test.ts +0 -46
package/src/utils/fuses.ts
CHANGED
|
@@ -1,381 +1,381 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-redeclare, @typescript-eslint/naming-convention */
|
|
1
2
|
import {
|
|
2
|
-
FusesFuseNotAllowedError,
|
|
3
3
|
FusesInvalidFuseObjectError,
|
|
4
4
|
FusesInvalidNamedFuseError,
|
|
5
5
|
FusesInvalidUnnamedFuseError,
|
|
6
|
-
FusesNonIntegerError,
|
|
7
6
|
FusesOutOfRangeError,
|
|
8
7
|
FusesRestrictionNotAllowedError,
|
|
9
|
-
FusesValueRequiredError,
|
|
10
8
|
} from '../errors/utils.js'
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// parent named fuses
|
|
22
|
-
const PARENT_CANNOT_CONTROL = 0x10000
|
|
23
|
-
const IS_DOT_ETH = 0x20000
|
|
24
|
-
const CAN_EXTEND_EXPIRY = 0x40000
|
|
25
|
-
|
|
26
|
-
// fuse ranges
|
|
27
|
-
export const CHILD_CONTROLLED_FUSES = 0x0000ffff
|
|
28
|
-
export const PARENT_CONTROLLED_FUSES = 0xffff0000
|
|
29
|
-
export const USER_SETTABLE_FUSES = 0xfffdffff
|
|
30
|
-
|
|
31
|
-
// empty fuse
|
|
32
|
-
const CAN_DO_EVERYTHING = 0
|
|
33
|
-
|
|
34
|
-
export const childFuseEnum = {
|
|
35
|
-
CANNOT_UNWRAP,
|
|
36
|
-
CANNOT_BURN_FUSES,
|
|
37
|
-
CANNOT_TRANSFER,
|
|
38
|
-
CANNOT_SET_RESOLVER,
|
|
39
|
-
CANNOT_SET_TTL,
|
|
40
|
-
CANNOT_CREATE_SUBDOMAIN,
|
|
41
|
-
CANNOT_APPROVE,
|
|
10
|
+
export const ChildFuses = {
|
|
11
|
+
CANNOT_UNWRAP: 1n,
|
|
12
|
+
CANNOT_BURN_FUSES: 2n,
|
|
13
|
+
CANNOT_TRANSFER: 4n,
|
|
14
|
+
CANNOT_SET_RESOLVER: 8n,
|
|
15
|
+
CANNOT_SET_TTL: 16n,
|
|
16
|
+
CANNOT_CREATE_SUBDOMAIN: 32n,
|
|
17
|
+
CANNOT_APPROVE: 64n,
|
|
42
18
|
} as const
|
|
19
|
+
export type ChildFuses = typeof ChildFuses
|
|
20
|
+
export const ChildFuseKeys = Object.keys(ChildFuses) as (keyof ChildFuses)[]
|
|
43
21
|
|
|
44
|
-
export const
|
|
45
|
-
PARENT_CANNOT_CONTROL,
|
|
46
|
-
CAN_EXTEND_EXPIRY,
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const fullParentFuseEnum = {
|
|
50
|
-
...parentFuseEnum,
|
|
51
|
-
IS_DOT_ETH,
|
|
22
|
+
export const ParentFuses = {
|
|
23
|
+
PARENT_CANNOT_CONTROL: 0x10000n,
|
|
24
|
+
CAN_EXTEND_EXPIRY: 0x40000n,
|
|
52
25
|
} as const
|
|
26
|
+
export type ParentFuses = typeof ParentFuses
|
|
27
|
+
export const ParentFuseKeys = Object.keys(ParentFuses) as (keyof ParentFuses)[]
|
|
53
28
|
|
|
54
|
-
export const
|
|
55
|
-
...
|
|
56
|
-
...
|
|
29
|
+
export const UserSettableFuses = {
|
|
30
|
+
...ChildFuses,
|
|
31
|
+
...ParentFuses,
|
|
32
|
+
} as const
|
|
33
|
+
export type UserSettableFuses = typeof UserSettableFuses
|
|
34
|
+
export const UserSettableFuseKeys = Object.keys(
|
|
35
|
+
UserSettableFuses,
|
|
36
|
+
) as (keyof UserSettableFuses)[]
|
|
37
|
+
|
|
38
|
+
export const FullParentFuses = {
|
|
39
|
+
...ParentFuses,
|
|
40
|
+
IS_DOT_ETH: 0x20000n,
|
|
57
41
|
} as const
|
|
42
|
+
export type FullParentFuses = typeof FullParentFuses
|
|
43
|
+
export const FullParentFuseKeys = Object.keys(
|
|
44
|
+
FullParentFuses,
|
|
45
|
+
) as (keyof FullParentFuses)[]
|
|
46
|
+
|
|
47
|
+
export const UnnamedChildFuses = [
|
|
48
|
+
0x80n,
|
|
49
|
+
0x100n,
|
|
50
|
+
0x200n,
|
|
51
|
+
0x400n,
|
|
52
|
+
0x800n,
|
|
53
|
+
0x1000n,
|
|
54
|
+
0x2000n,
|
|
55
|
+
0x4000n,
|
|
56
|
+
0x8000n,
|
|
57
|
+
] as const
|
|
58
|
+
export type UnnamedChildFuses = typeof UnnamedChildFuses
|
|
59
|
+
export const UnnamedChildFuseKeys = [
|
|
60
|
+
'0x80',
|
|
61
|
+
'0x100',
|
|
62
|
+
'0x200',
|
|
63
|
+
'0x400',
|
|
64
|
+
'0x800',
|
|
65
|
+
'0x1000',
|
|
66
|
+
'0x2000',
|
|
67
|
+
'0x4000',
|
|
68
|
+
'0x8000',
|
|
69
|
+
] as const
|
|
70
|
+
export type UnnamedChildFuseKeys = typeof UnnamedChildFuseKeys
|
|
71
|
+
|
|
72
|
+
export const UnnamedParentFuses = [
|
|
73
|
+
0x80000n,
|
|
74
|
+
0x100000n,
|
|
75
|
+
0x200000n,
|
|
76
|
+
0x400000n,
|
|
77
|
+
0x800000n,
|
|
78
|
+
0x1000000n,
|
|
79
|
+
0x2000000n,
|
|
80
|
+
0x4000000n,
|
|
81
|
+
0x8000000n,
|
|
82
|
+
0x10000000n,
|
|
83
|
+
0x20000000n,
|
|
84
|
+
0x40000000n,
|
|
85
|
+
0x80000000n,
|
|
86
|
+
] as const
|
|
87
|
+
export type UnnamedParentFuses = typeof UnnamedParentFuses
|
|
88
|
+
export const UnnamedParentFuseKeys = [
|
|
89
|
+
'0x80000',
|
|
90
|
+
'0x100000',
|
|
91
|
+
'0x200000',
|
|
92
|
+
'0x400000',
|
|
93
|
+
'0x800000',
|
|
94
|
+
'0x1000000',
|
|
95
|
+
] as const
|
|
96
|
+
export type UnnamedParentFuseKeys = typeof UnnamedParentFuseKeys
|
|
58
97
|
|
|
59
|
-
export const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
98
|
+
export const FuseRanges = {
|
|
99
|
+
CHILD_CONTROLLED_FUSES: 0x0000ffffn,
|
|
100
|
+
PARENT_CONTROLLED_FUSES: 0xffff0000n,
|
|
101
|
+
USER_SETTABLE_FUSES: 0xfffdffffn,
|
|
102
|
+
} as const
|
|
64
103
|
|
|
65
|
-
|
|
66
|
-
128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768,
|
|
67
|
-
] as const
|
|
104
|
+
type FuseRestriction = 'parent' | 'child'
|
|
68
105
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
]
|
|
106
|
+
type GenericFuseEnum<TGroupName extends FuseRestriction = FuseRestriction> = {
|
|
107
|
+
Name: TGroupName
|
|
108
|
+
Object: Record<string, bigint>
|
|
109
|
+
Keys: string[]
|
|
110
|
+
Range: bigint
|
|
111
|
+
Unnamed: readonly bigint[]
|
|
112
|
+
UnnamedKeys: readonly string[]
|
|
113
|
+
Minimum: bigint
|
|
114
|
+
Maximum: bigint
|
|
115
|
+
}
|
|
73
116
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
117
|
+
const ChildReference = {
|
|
118
|
+
Name: 'child',
|
|
119
|
+
Object: ChildFuses,
|
|
120
|
+
Keys: ChildFuseKeys,
|
|
121
|
+
Range: FuseRanges.CHILD_CONTROLLED_FUSES,
|
|
122
|
+
Unnamed: UnnamedChildFuses,
|
|
123
|
+
UnnamedKeys: UnnamedChildFuseKeys,
|
|
124
|
+
Minimum: 0n,
|
|
125
|
+
Maximum: 2n ** 16n - 1n,
|
|
126
|
+
} as const
|
|
127
|
+
type ChildReference = typeof ChildReference & {
|
|
128
|
+
Key: keyof ChildReference['Object']
|
|
129
|
+
UnnamedKey: ChildReference['Unnamed'][number]
|
|
130
|
+
}
|
|
78
131
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
type FuseType<
|
|
93
|
-
Enum extends Record<string, number>,
|
|
94
|
-
UnnamedTuple extends readonly number[],
|
|
95
|
-
CustomFuses extends string = never,
|
|
96
|
-
> = {
|
|
97
|
-
fuse: keyof Enum
|
|
98
|
-
options: { -readonly [K in keyof Enum]?: boolean }
|
|
99
|
-
current: { [K in keyof Enum]: boolean } & {
|
|
100
|
-
readonly [K in CustomFuses]: boolean
|
|
101
|
-
}
|
|
102
|
-
unnamed: UnnamedTuple
|
|
103
|
-
unnamedValues: UnnamedTuple[number]
|
|
104
|
-
unnamedObject: { [K in UnnamedTuple[number]]: boolean }
|
|
132
|
+
const ParentReference = {
|
|
133
|
+
Name: 'parent',
|
|
134
|
+
Object: ParentFuses,
|
|
135
|
+
Keys: ParentFuseKeys,
|
|
136
|
+
Range: FuseRanges.PARENT_CONTROLLED_FUSES,
|
|
137
|
+
Unnamed: UnnamedParentFuses,
|
|
138
|
+
UnnamedKeys: UnnamedParentFuseKeys,
|
|
139
|
+
Minimum: 2n ** 16n,
|
|
140
|
+
Maximum: 2n ** 32n,
|
|
141
|
+
} as const
|
|
142
|
+
type ParentReference = typeof ParentReference & {
|
|
143
|
+
Key: keyof ParentReference['Object']
|
|
144
|
+
UnnamedKey: ParentReference['Unnamed'][number]
|
|
105
145
|
}
|
|
106
146
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
typeof userSettableFuseEnum,
|
|
122
|
-
typeof unnamedUserSettableFuses
|
|
123
|
-
>
|
|
147
|
+
const FullParentReference = {
|
|
148
|
+
Name: 'parent',
|
|
149
|
+
Object: FullParentFuses,
|
|
150
|
+
Keys: FullParentFuseKeys,
|
|
151
|
+
Range: FuseRanges.PARENT_CONTROLLED_FUSES,
|
|
152
|
+
Unnamed: UnnamedParentFuses,
|
|
153
|
+
UnnamedKeys: UnnamedParentFuseKeys,
|
|
154
|
+
Minimum: 2n ** 16n,
|
|
155
|
+
Maximum: 2n ** 32n,
|
|
156
|
+
} as const
|
|
157
|
+
type FullParentReference = typeof FullParentReference & {
|
|
158
|
+
Key: keyof FullParentReference['Object']
|
|
159
|
+
UnnamedKey: ParentReference['Unnamed'][number]
|
|
160
|
+
}
|
|
124
161
|
|
|
125
|
-
type InputFuses<NamedFuse extends string, UnnamedFuse extends
|
|
162
|
+
type InputFuses<NamedFuse extends string, UnnamedFuse extends bigint> =
|
|
126
163
|
| {
|
|
127
164
|
named: readonly NamedFuse[]
|
|
165
|
+
unnamed?: readonly UnnamedFuse[]
|
|
166
|
+
number?: never
|
|
128
167
|
}
|
|
129
168
|
| {
|
|
169
|
+
named?: readonly NamedFuse[]
|
|
130
170
|
unnamed: readonly UnnamedFuse[]
|
|
171
|
+
number?: never
|
|
131
172
|
}
|
|
132
173
|
| {
|
|
133
|
-
named
|
|
134
|
-
unnamed
|
|
135
|
-
|
|
136
|
-
| {
|
|
137
|
-
number: number
|
|
174
|
+
named?: never
|
|
175
|
+
unnamed?: never
|
|
176
|
+
number: bigint
|
|
138
177
|
}
|
|
139
178
|
|
|
140
|
-
export type
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
179
|
+
export type EncodeChildFusesInputObject = InputFuses<
|
|
180
|
+
ChildReference['Key'],
|
|
181
|
+
ChildReference['UnnamedKey']
|
|
182
|
+
>
|
|
183
|
+
export type EncodeParentFusesInputObject = InputFuses<
|
|
184
|
+
ParentReference['Key'],
|
|
185
|
+
ParentReference['UnnamedKey']
|
|
186
|
+
>
|
|
144
187
|
|
|
145
|
-
type
|
|
188
|
+
export type EncodeFusesInputObject =
|
|
189
|
+
| {
|
|
190
|
+
child: EncodeChildFusesInputObject
|
|
191
|
+
parent?: EncodeParentFusesInputObject
|
|
192
|
+
number?: never
|
|
193
|
+
}
|
|
194
|
+
| {
|
|
195
|
+
child?: EncodeChildFusesInputObject
|
|
196
|
+
parent: EncodeParentFusesInputObject
|
|
197
|
+
number?: never
|
|
198
|
+
}
|
|
199
|
+
| {
|
|
200
|
+
child?: never
|
|
201
|
+
parent?: never
|
|
202
|
+
number: bigint
|
|
203
|
+
}
|
|
146
204
|
|
|
147
|
-
const
|
|
148
|
-
if (fuses >
|
|
205
|
+
const validateFuseNumber = (fuses: bigint) => {
|
|
206
|
+
if (fuses > 2n ** 32n || fuses < 0n)
|
|
149
207
|
throw new FusesOutOfRangeError({
|
|
150
208
|
fuses,
|
|
151
209
|
details: `Fuse number must be limited to uint32, the supplied value was too ${
|
|
152
|
-
fuses <
|
|
210
|
+
fuses < 0 ? 'low' : 'high'
|
|
153
211
|
}`,
|
|
154
212
|
})
|
|
155
|
-
else if (fuses
|
|
156
|
-
else if ((fuses & USER_SETTABLE_FUSES) !== fuses)
|
|
213
|
+
else if ((fuses & FuseRanges.USER_SETTABLE_FUSES) !== fuses)
|
|
157
214
|
throw new FusesOutOfRangeError({
|
|
158
215
|
fuses,
|
|
159
|
-
maximum: 2 ** 16,
|
|
160
216
|
details: `Fuse number must be limited to user settable fuses, the supplied value was not`,
|
|
161
217
|
})
|
|
162
218
|
}
|
|
163
219
|
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
220
|
+
const checkFuseObject = <TFuseReference extends GenericFuseEnum>({
|
|
221
|
+
reference,
|
|
222
|
+
object,
|
|
223
|
+
}: {
|
|
224
|
+
reference: TFuseReference
|
|
225
|
+
object: EncodeFusesInputObject[TFuseReference['Name']]
|
|
226
|
+
}): number => {
|
|
227
|
+
if (!object) return 0
|
|
228
|
+
|
|
229
|
+
if ('number' in object) {
|
|
230
|
+
if ('named' in object || 'unnamed' in object)
|
|
231
|
+
throw new FusesInvalidFuseObjectError({
|
|
232
|
+
fuses: object,
|
|
233
|
+
details: 'Cannot specify both a fuse number and named/unnamed fuses.',
|
|
234
|
+
})
|
|
235
|
+
validateFuseNumber(object.number)
|
|
236
|
+
|
|
237
|
+
if ((object.number & reference.Range) !== object.number)
|
|
238
|
+
throw new FusesOutOfRangeError({
|
|
239
|
+
fuses: object.number,
|
|
240
|
+
minimum: reference.Minimum,
|
|
241
|
+
maximum: reference.Maximum,
|
|
242
|
+
details: `Cannot specify a fuse value to set that is outside of the ${reference.Name}'s control.`,
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
return Number(object.number)
|
|
170
246
|
}
|
|
171
|
-
|
|
172
|
-
|
|
247
|
+
|
|
248
|
+
let fuseNumber = 0n
|
|
249
|
+
|
|
250
|
+
if ('named' in object && object.named) {
|
|
251
|
+
for (const fuse of object.named) {
|
|
252
|
+
if (!reference.Keys.includes(fuse))
|
|
253
|
+
throw new FusesInvalidNamedFuseError({ fuse })
|
|
254
|
+
fuseNumber |= reference.Object[fuse]
|
|
255
|
+
}
|
|
173
256
|
}
|
|
174
|
-
return false
|
|
175
|
-
}
|
|
176
257
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
258
|
+
if ('unnamed' in object && object.unnamed) {
|
|
259
|
+
for (const fuse of object.unnamed) {
|
|
260
|
+
if (!reference.Unnamed.includes(fuse))
|
|
261
|
+
throw new FusesInvalidUnnamedFuseError({ fuse })
|
|
262
|
+
fuseNumber |= fuse
|
|
263
|
+
}
|
|
180
264
|
}
|
|
181
265
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
266
|
+
return Number(fuseNumber)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
type EncodeFusesParameters =
|
|
270
|
+
| {
|
|
271
|
+
restriction: 'child'
|
|
272
|
+
input: EncodeChildFusesInputObject
|
|
185
273
|
}
|
|
186
|
-
|
|
187
|
-
|
|
274
|
+
| {
|
|
275
|
+
restriction: 'parent'
|
|
276
|
+
input: EncodeParentFusesInputObject
|
|
188
277
|
}
|
|
189
|
-
|
|
190
|
-
|
|
278
|
+
| {
|
|
279
|
+
restriction?: never
|
|
280
|
+
input: EncodeFusesInputObject
|
|
191
281
|
}
|
|
192
|
-
}
|
|
193
|
-
return false
|
|
194
|
-
}
|
|
195
282
|
|
|
196
|
-
export
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
fuses: CombinedFuseInput['parent'],
|
|
203
|
-
restrictTo: 'parent',
|
|
204
|
-
): number
|
|
205
|
-
export function encodeFuses<T extends FuseRestriction>(
|
|
206
|
-
fuses: CombinedFuseInput[T],
|
|
207
|
-
restrictTo?: T,
|
|
208
|
-
) {
|
|
209
|
-
let encodedFuses: number = 0
|
|
210
|
-
|
|
211
|
-
if (typeof fuses === 'number') {
|
|
212
|
-
if (restrictTo)
|
|
283
|
+
export const encodeFuses = ({
|
|
284
|
+
restriction,
|
|
285
|
+
input,
|
|
286
|
+
}: EncodeFusesParameters): number => {
|
|
287
|
+
if (restriction) {
|
|
288
|
+
if ('parent' in input || 'child' in input)
|
|
213
289
|
throw new FusesRestrictionNotAllowedError({
|
|
214
|
-
fuses,
|
|
290
|
+
fuses: input,
|
|
215
291
|
details:
|
|
216
|
-
'Fuse restriction cannot be used when
|
|
292
|
+
'Fuse restriction cannot be used when fuse category is specified',
|
|
217
293
|
})
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
let allowedNamed: readonly UserSettableFuses['fuse'][] = []
|
|
224
|
-
let allowedUnnamed: readonly UserSettableFuses['unnamedValues'][] = []
|
|
225
|
-
|
|
226
|
-
let namedArray: readonly UserSettableFuses['fuse'][] = []
|
|
227
|
-
let unnamedArray: readonly UserSettableFuses['unnamedValues'][] = []
|
|
228
|
-
|
|
229
|
-
if (restrictTo) {
|
|
230
|
-
if ('parent' in fuses || 'child' in fuses)
|
|
231
|
-
throw new FusesRestrictionNotAllowedError({
|
|
232
|
-
fuses,
|
|
233
|
-
details:
|
|
234
|
-
'Fuse restriction cannot be used when fuse category is specified',
|
|
235
|
-
})
|
|
236
|
-
allowedNamed = restrictTo === 'child' ? childFuseKeys : parentFuseKeys
|
|
237
|
-
allowedUnnamed =
|
|
238
|
-
restrictTo === 'child' ? unnamedChildFuses : unnamedParentFuses
|
|
239
|
-
|
|
240
|
-
fusesRef = { [restrictTo]: fuses } as unknown as CombinedFuseInput
|
|
241
|
-
} else {
|
|
242
|
-
allowedNamed = userSettableFuseKeys
|
|
243
|
-
allowedUnnamed = unnamedUserSettableFuses
|
|
244
|
-
}
|
|
245
|
-
if ('parent' in fusesRef) {
|
|
246
|
-
if ('named' in fusesRef.parent) namedArray = fusesRef.parent.named
|
|
247
|
-
if ('unnamed' in fusesRef.parent) unnamedArray = fusesRef.parent.unnamed
|
|
248
|
-
if ('number' in fusesRef.parent) {
|
|
249
|
-
if ('named' in fusesRef.parent || 'unnamed' in fusesRef.parent)
|
|
250
|
-
throw new FusesInvalidFuseObjectError({
|
|
251
|
-
fuses,
|
|
252
|
-
details:
|
|
253
|
-
'Cannot specify both a fuse number and named/unnamed fuses.',
|
|
254
|
-
})
|
|
255
|
-
checkNumber(fusesRef.parent.number)
|
|
256
|
-
|
|
257
|
-
if (
|
|
258
|
-
(fusesRef.parent.number & PARENT_CONTROLLED_FUSES) !==
|
|
259
|
-
fusesRef.parent.number
|
|
260
|
-
)
|
|
261
|
-
throw new FusesOutOfRangeError({
|
|
262
|
-
fuses: fusesRef.parent.number,
|
|
263
|
-
minimum: 2 ** 17,
|
|
264
|
-
details:
|
|
265
|
-
"Cannot specify a fuse value to set that is outside of the parent's control.",
|
|
266
|
-
})
|
|
267
|
-
|
|
268
|
-
encodedFuses |= fusesRef.parent.number
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
if ('child' in fusesRef) {
|
|
272
|
-
if ('named' in fusesRef.child)
|
|
273
|
-
namedArray = [...namedArray, ...fusesRef.child.named]
|
|
274
|
-
if ('unnamed' in fusesRef.child)
|
|
275
|
-
unnamedArray = [...unnamedArray, ...fusesRef.child.unnamed]
|
|
276
|
-
if ('number' in fusesRef.child) {
|
|
277
|
-
if ('named' in fusesRef.child || 'unnamed' in fusesRef.child)
|
|
278
|
-
throw new FusesInvalidFuseObjectError({
|
|
279
|
-
fuses,
|
|
280
|
-
details:
|
|
281
|
-
'Cannot specify both a fuse number and named/unnamed fuses.',
|
|
282
|
-
})
|
|
283
|
-
checkNumber(fusesRef.child.number)
|
|
284
|
-
|
|
285
|
-
if (
|
|
286
|
-
(fusesRef.child.number & CHILD_CONTROLLED_FUSES) !==
|
|
287
|
-
fusesRef.child.number
|
|
288
|
-
)
|
|
289
|
-
throw new FusesOutOfRangeError({
|
|
290
|
-
fuses: fusesRef.child.number,
|
|
291
|
-
maximum: 2 ** 16,
|
|
292
|
-
details:
|
|
293
|
-
"Cannot specify a fuse value to set that is outside of the owner's control.",
|
|
294
|
-
})
|
|
295
|
-
|
|
296
|
-
encodedFuses |= fusesRef.child.number
|
|
297
|
-
}
|
|
298
|
-
}
|
|
294
|
+
return checkFuseObject({
|
|
295
|
+
object: input,
|
|
296
|
+
reference: restriction === 'child' ? ChildReference : ParentReference,
|
|
297
|
+
})
|
|
298
|
+
}
|
|
299
299
|
|
|
300
|
-
|
|
301
|
-
|
|
300
|
+
if ('number' in input) {
|
|
301
|
+
if ('parent' in input || 'child' in input)
|
|
302
|
+
throw new FusesInvalidFuseObjectError({
|
|
303
|
+
fuses: input,
|
|
304
|
+
details: 'Cannot specify both a fuse number and named/unnamed fuses.',
|
|
305
|
+
})
|
|
302
306
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
if (!userSettableFuseKeys.includes(fuse))
|
|
306
|
-
throw new FusesInvalidNamedFuseError({ fuse })
|
|
307
|
-
throw new FusesFuseNotAllowedError({ fuse })
|
|
308
|
-
}
|
|
309
|
-
encodedFuses |= userSettableFuseEnum[fuse]
|
|
310
|
-
}
|
|
311
|
-
for (const fuse of unnamedArray) {
|
|
312
|
-
if (!allowedUnnamed.includes(fuse)) {
|
|
313
|
-
if (!unnamedUserSettableFuses.includes(fuse))
|
|
314
|
-
throw new FusesInvalidUnnamedFuseError({ fuse })
|
|
315
|
-
throw new FusesFuseNotAllowedError({ fuse })
|
|
316
|
-
}
|
|
317
|
-
encodedFuses |= fuse
|
|
318
|
-
}
|
|
307
|
+
validateFuseNumber(input.number)
|
|
308
|
+
return Number(input.number)
|
|
319
309
|
}
|
|
320
310
|
|
|
321
|
-
|
|
322
|
-
|
|
311
|
+
const childFuses =
|
|
312
|
+
'child' in input
|
|
313
|
+
? checkFuseObject({ object: input.child, reference: ChildReference })
|
|
314
|
+
: 0
|
|
315
|
+
const parentFuses =
|
|
316
|
+
'parent' in input
|
|
317
|
+
? checkFuseObject({ object: input.parent, reference: ParentReference })
|
|
318
|
+
: 0
|
|
323
319
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
arr.map((fuse) => [
|
|
327
|
-
fuse,
|
|
328
|
-
(fuses & fullFuseEnum[fuse as keyof typeof fullFuseEnum]) ===
|
|
329
|
-
fullFuseEnum[fuse as keyof typeof fullFuseEnum],
|
|
330
|
-
]),
|
|
331
|
-
)
|
|
320
|
+
return Number(childFuses | parentFuses)
|
|
321
|
+
}
|
|
332
322
|
|
|
333
|
-
|
|
323
|
+
type DecodedFuseGroup<TFuseReference extends GenericFuseEnum> = {
|
|
324
|
+
[key in TFuseReference['Keys'][number]]: boolean
|
|
325
|
+
} & {
|
|
326
|
+
unnamed: {
|
|
327
|
+
[key in TFuseReference['UnnamedKeys'][number]]: boolean
|
|
328
|
+
}
|
|
334
329
|
}
|
|
335
330
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
331
|
+
type DecodedChildFuses = DecodedFuseGroup<ChildReference> & {
|
|
332
|
+
CAN_DO_EVERYTHING: boolean
|
|
333
|
+
}
|
|
334
|
+
type DecodedParentFuses = DecodedFuseGroup<FullParentReference>
|
|
340
335
|
|
|
341
|
-
|
|
336
|
+
export type DecodedFuses = {
|
|
337
|
+
child: DecodedChildFuses
|
|
338
|
+
parent: DecodedParentFuses
|
|
342
339
|
}
|
|
343
340
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
341
|
+
const decodeFusesFromReference = <TFuseReference extends GenericFuseEnum>({
|
|
342
|
+
input,
|
|
343
|
+
reference,
|
|
344
|
+
}: {
|
|
345
|
+
input: bigint
|
|
346
|
+
reference: TFuseReference
|
|
347
|
+
}): DecodedFuseGroup<TFuseReference> => ({
|
|
348
|
+
...(Object.fromEntries(
|
|
349
|
+
reference.Keys.map((key) => [
|
|
350
|
+
key,
|
|
351
|
+
(input & reference.Object[key]) === reference.Object[key],
|
|
352
|
+
]),
|
|
353
|
+
) as Record<TFuseReference['Keys'][number], boolean>),
|
|
354
|
+
unnamed: Object.fromEntries(
|
|
355
|
+
reference.UnnamedKeys.map((key) => [
|
|
356
|
+
key,
|
|
357
|
+
(input & BigInt(key)) === BigInt(key),
|
|
358
|
+
]),
|
|
359
|
+
) as Record<TFuseReference['UnnamedKeys'][number], boolean>,
|
|
360
|
+
})
|
|
362
361
|
|
|
362
|
+
export const decodeFuses = (fuses: number): DecodedFuses => {
|
|
363
|
+
const fusesBigInt = BigInt(fuses)
|
|
363
364
|
return {
|
|
364
|
-
parent: {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
},
|
|
365
|
+
parent: decodeFusesFromReference({
|
|
366
|
+
input: fusesBigInt,
|
|
367
|
+
reference: FullParentReference,
|
|
368
|
+
}),
|
|
368
369
|
child: {
|
|
369
|
-
...
|
|
370
|
-
|
|
371
|
-
|
|
370
|
+
...decodeFusesFromReference({
|
|
371
|
+
input: fusesBigInt,
|
|
372
|
+
reference: ChildReference,
|
|
373
|
+
}),
|
|
374
|
+
CAN_DO_EVERYTHING:
|
|
375
|
+
(fusesBigInt & FuseRanges.CHILD_CONTROLLED_FUSES) === 0n,
|
|
372
376
|
},
|
|
373
377
|
}
|
|
374
378
|
}
|
|
375
379
|
|
|
376
|
-
export const
|
|
377
|
-
(fuses & PARENT_CANNOT_CONTROL) ===
|
|
378
|
-
|
|
379
|
-
export type AllCurrentFuses = ReturnType<typeof decodeFuses>
|
|
380
|
-
|
|
381
|
-
export default fullFuseEnum
|
|
380
|
+
export const checkPccBurned = (fuses: bigint) =>
|
|
381
|
+
(fuses & ParentFuses.PARENT_CANNOT_CONTROL) === 0n
|