@ensdomains/ensjs 3.6.0 → 4.0.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.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = 'v3.6.0';
4
+ exports.version = 'v4.0.0';
5
5
  //# sourceMappingURL=version.js.map
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSubgraphClient = exports.responseMiddleware = exports.requestMiddleware = void 0;
4
4
  const graphql_request_1 = require("graphql-request");
5
5
  const index_js_1 = require("graphql/language/index.js");
6
- const traverse_1 = require("traverse");
7
6
  const normalise_js_1 = require("../../utils/normalise.js");
8
7
  const generateSelection = (selection) => ({
9
8
  kind: 'Field',
@@ -51,27 +50,37 @@ const requestMiddleware = (request) => {
51
50
  };
52
51
  exports.requestMiddleware = requestMiddleware;
53
52
  const responseMiddleware = (response) => {
54
- (0, traverse_1.default)(response).forEach(function (responseItem) {
55
- if (responseItem instanceof Object &&
56
- 'name' in responseItem &&
57
- responseItem.name &&
58
- typeof responseItem.name === 'string') {
59
- if (responseItem.name && responseItem.name.includes('[')) {
60
- return;
61
- }
62
- let hashedName = '[Invalid ENS Name]';
63
- try {
64
- hashedName = (0, normalise_js_1.namehash)(responseItem.name);
65
- }
66
- catch (e) {
67
- this.update({ ...responseItem, name: hashedName, invalidName: true });
68
- return;
69
- }
70
- if ('id' in responseItem && responseItem.id !== hashedName) {
71
- this.update({ ...responseItem, name: hashedName, invalidName: true });
53
+ const traverse = (obj) => {
54
+ if (obj && typeof obj === 'object') {
55
+ for (const key in obj) {
56
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
57
+ const value = obj[key];
58
+ if (value && typeof value === 'object') {
59
+ traverse(value);
60
+ }
61
+ if (value instanceof Object &&
62
+ 'name' in value &&
63
+ value.name &&
64
+ typeof value.name === 'string') {
65
+ if (value.name.includes('[')) {
66
+ continue;
67
+ }
68
+ let hashedName = '[Invalid ENS Name]';
69
+ try {
70
+ hashedName = (0, normalise_js_1.namehash)(value.name);
71
+ }
72
+ catch (e) {
73
+ obj[key] = { ...value, name: hashedName, invalidName: true };
74
+ }
75
+ if ('id' in value && value.id !== hashedName) {
76
+ obj[key] = { ...value, name: hashedName, invalidName: true };
77
+ }
78
+ }
79
+ }
72
80
  }
73
81
  }
74
- });
82
+ };
83
+ traverse(response);
75
84
  };
76
85
  exports.responseMiddleware = responseMiddleware;
77
86
  const createSubgraphClient = ({ client }) => new graphql_request_1.GraphQLClient(client.chain.subgraphs.ens.url, {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/functions/subgraph/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/functions/subgraph/client.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ const fuses_js_1 = require("../../utils/fuses.js");
11
11
  const getNameType_js_1 = require("../../utils/getNameType.js");
12
12
  const makeLabelNodeAndParent_js_1 = require("../../utils/makeLabelNodeAndParent.js");
13
13
  const wrapper_js_1 = require("../../utils/wrapper.js");
14
+ const getWrapperData_js_1 = require("../public/getWrapperData.js");
15
+ const base_js_1 = require("../../errors/base.js");
14
16
  const makeFunctionData = (wallet, { name, contract, owner, resolverAddress = (0, getChainContractAddress_js_1.getChainContractAddress)({
15
17
  client: wallet,
16
18
  contract: 'ensPublicResolver',
@@ -44,7 +46,9 @@ const makeFunctionData = (wallet, { name, contract, owner, resolverAddress = (0,
44
46
  case 'nameWrapper': {
45
47
  (0, wrapper_js_1.wrappedLabelLengthCheck)(label);
46
48
  const generatedFuses = fuses ? (0, fuses_js_1.encodeFuses)({ input: fuses }) : 0;
47
- const generatedExpiry = expiry ? (0, wrapper_js_1.expiryToBigInt)(expiry) : wrapper_js_1.MAX_EXPIRY;
49
+ const generatedExpiry = expiry
50
+ ? (0, wrapper_js_1.expiryToBigInt)(expiry)
51
+ : (0, wrapper_js_1.makeDefaultExpiry)(generatedFuses);
48
52
  return {
49
53
  to: (0, getChainContractAddress_js_1.getChainContractAddress)({
50
54
  client: wallet,
@@ -73,7 +77,59 @@ const makeFunctionData = (wallet, { name, contract, owner, resolverAddress = (0,
73
77
  }
74
78
  };
75
79
  exports.makeFunctionData = makeFunctionData;
80
+ class CreateSubnamePermissionDeniedError extends base_js_1.BaseError {
81
+ constructor({ parentName }) {
82
+ super(`Create subname error: ${parentName} as burned CANNOT_CREATE_SUBDOMAIN fuse`);
83
+ Object.defineProperty(this, "parentName", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: void 0
88
+ });
89
+ Object.defineProperty(this, "name", {
90
+ enumerable: true,
91
+ configurable: true,
92
+ writable: true,
93
+ value: 'CreateSubnamePermissionDeniedError'
94
+ });
95
+ this.parentName = parentName;
96
+ }
97
+ }
98
+ class CreateSubnameParentNotLockedError extends base_js_1.BaseError {
99
+ constructor({ parentName }) {
100
+ super(`Create subname error: Cannot burn PARENT_CANNOT_CONTROL when ${parentName} has not burned CANNOT_UNWRAP fuse`);
101
+ Object.defineProperty(this, "parentName", {
102
+ enumerable: true,
103
+ configurable: true,
104
+ writable: true,
105
+ value: void 0
106
+ });
107
+ Object.defineProperty(this, "name", {
108
+ enumerable: true,
109
+ configurable: true,
110
+ writable: true,
111
+ value: 'CreateSubnameParentNotLockedError'
112
+ });
113
+ this.parentName = parentName;
114
+ }
115
+ }
116
+ const checkCanCreateSubname = async (wallet, { name, fuses, contract, }) => {
117
+ if (contract !== 'nameWrapper')
118
+ return;
119
+ const parentName = name.split('.').slice(1).join('.');
120
+ if (parentName === 'eth')
121
+ return;
122
+ const parentWrapperData = await (0, getWrapperData_js_1.default)(wallet, { name: parentName });
123
+ if (parentWrapperData?.fuses?.child?.CANNOT_CREATE_SUBDOMAIN)
124
+ throw new CreateSubnamePermissionDeniedError({ parentName });
125
+ const generatedFuses = fuses ? (0, fuses_js_1.encodeFuses)({ input: fuses }) : 0;
126
+ const isBurningPCC = fuses && BigInt(generatedFuses) & fuses_js_1.ParentFuses.PARENT_CANNOT_CONTROL;
127
+ const isParentCannotUnwrapBurned = parentWrapperData?.fuses?.child?.CANNOT_UNWRAP;
128
+ if (isBurningPCC && !isParentCannotUnwrapBurned)
129
+ throw new CreateSubnameParentNotLockedError({ parentName });
130
+ };
76
131
  async function createSubname(wallet, { name, contract, owner, resolverAddress, expiry, fuses, ...txArgs }) {
132
+ await checkCanCreateSubname(wallet, { name, fuses, contract });
77
133
  const data = (0, exports.makeFunctionData)(wallet, {
78
134
  name,
79
135
  contract,
@@ -1 +1 @@
1
- {"version":3,"file":"createSubname.js","sourceRoot":"","sources":["../../../../src/functions/wallet/createSubname.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSubname.js","sourceRoot":"","sources":["../../../../src/functions/wallet/createSubname.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.wrappedLabelLengthCheck = exports.expiryToBigInt = exports.MAX_EXPIRY = void 0;
3
+ exports.makeDefaultExpiry = exports.wrappedLabelLengthCheck = exports.expiryToBigInt = exports.MAX_EXPIRY = void 0;
4
4
  const viem_1 = require("viem");
5
5
  const utils_js_1 = require("../errors/utils.js");
6
+ const fuses_js_1 = require("./fuses.js");
6
7
  exports.MAX_EXPIRY = 2n ** 64n - 1n;
7
8
  const expiryToBigInt = (expiry, defaultValue = 0n) => {
8
9
  if (!expiry)
@@ -22,4 +23,10 @@ const wrappedLabelLengthCheck = (label) => {
22
23
  throw new utils_js_1.WrappedLabelTooLargeError({ label, byteLength: bytes.byteLength });
23
24
  };
24
25
  exports.wrappedLabelLengthCheck = wrappedLabelLengthCheck;
26
+ const makeDefaultExpiry = (fuses) => {
27
+ if (fuses && BigInt(fuses) & fuses_js_1.ParentFuses.PARENT_CANNOT_CONTROL)
28
+ return exports.MAX_EXPIRY;
29
+ return 0n;
30
+ };
31
+ exports.makeDefaultExpiry = makeDefaultExpiry;
25
32
  //# sourceMappingURL=wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/utils/wrapper.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AACpC,iDAA8D;AAGjD,QAAA,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,CAAA;AAEjC,MAAM,cAAc,GAAG,CAAC,MAAgB,EAAE,YAAY,GAAG,EAAE,EAAU,EAAE;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAA;IAChC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,MAAM,YAAY,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC9E,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;AACxE,CAAC,CAAA;AAPY,QAAA,cAAc,kBAO1B;AAEM,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,IAAA,oBAAa,EAAC,KAAK,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG;QACxB,MAAM,IAAI,oCAAyB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC,CAAA;AAJY,QAAA,uBAAuB,2BAInC"}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/utils/wrapper.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AACpC,iDAA8D;AAE9D,yCAAwC;AAE3B,QAAA,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,CAAA;AAEjC,MAAM,cAAc,GAAG,CAAC,MAAgB,EAAE,YAAY,GAAG,EAAE,EAAU,EAAE;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAA;IAChC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,MAAM,YAAY,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC9E,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;AACxE,CAAC,CAAA;AAPY,QAAA,cAAc,kBAO1B;AAEM,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,IAAA,oBAAa,EAAC,KAAK,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG;QACxB,MAAM,IAAI,oCAAyB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC,CAAA;AAJY,QAAA,uBAAuB,2BAInC;AAEM,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC1D,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,sBAAW,CAAC,qBAAqB;QAC5D,OAAO,kBAAU,CAAA;IACnB,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAJY,QAAA,iBAAiB,qBAI7B"}
@@ -1,2 +1,2 @@
1
- export const version = 'v3.6.0';
1
+ export const version = 'v4.0.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -1,6 +1,5 @@
1
1
  import { GraphQLClient } from 'graphql-request';
2
2
  import { parse, print, visit } from 'graphql/language/index.js';
3
- import traverse from 'traverse';
4
3
  import { namehash } from '../../utils/normalise.js';
5
4
  const generateSelection = (selection) => ({
6
5
  kind: 'Field',
@@ -49,28 +48,39 @@ export const requestMiddleware = (request) => {
49
48
  };
50
49
  };
51
50
  export const responseMiddleware = (response) => {
52
- traverse(response).forEach(function (responseItem) {
53
- if (responseItem instanceof Object &&
54
- 'name' in responseItem &&
55
- responseItem.name &&
56
- typeof responseItem.name === 'string') {
57
- // Name already in hashed form
58
- if (responseItem.name && responseItem.name.includes('[')) {
59
- return;
60
- }
61
- let hashedName = '[Invalid ENS Name]';
62
- try {
63
- hashedName = namehash(responseItem.name);
64
- }
65
- catch (e) {
66
- this.update({ ...responseItem, name: hashedName, invalidName: true });
67
- return;
68
- }
69
- if ('id' in responseItem && responseItem.id !== hashedName) {
70
- this.update({ ...responseItem, name: hashedName, invalidName: true });
51
+ const traverse = (obj) => {
52
+ if (obj && typeof obj === 'object') {
53
+ for (const key in obj) {
54
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
55
+ const value = obj[key];
56
+ if (value && typeof value === 'object') {
57
+ traverse(value);
58
+ }
59
+ if (value instanceof Object &&
60
+ 'name' in value &&
61
+ value.name &&
62
+ typeof value.name === 'string') {
63
+ // Name already in hashed form
64
+ if (value.name.includes('[')) {
65
+ // eslint-disable-next-line no-continue
66
+ continue;
67
+ }
68
+ let hashedName = '[Invalid ENS Name]';
69
+ try {
70
+ hashedName = namehash(value.name);
71
+ }
72
+ catch (e) {
73
+ obj[key] = { ...value, name: hashedName, invalidName: true };
74
+ }
75
+ if ('id' in value && value.id !== hashedName) {
76
+ obj[key] = { ...value, name: hashedName, invalidName: true };
77
+ }
78
+ }
79
+ }
71
80
  }
72
81
  }
73
- });
82
+ };
83
+ traverse(response);
74
84
  };
75
85
  export const createSubgraphClient = ({ client }) => new GraphQLClient(client.chain.subgraphs.ens.url, {
76
86
  requestMiddleware,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/functions/subgraph/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/functions/subgraph/client.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,12 @@ import { getChainContractAddress } from '../../contracts/getChainContractAddress
4
4
  import { nameWrapperSetSubnodeRecordSnippet } from '../../contracts/nameWrapper.js';
5
5
  import { registrySetSubnodeRecordSnippet } from '../../contracts/registry.js';
6
6
  import { InvalidContractTypeError, UnsupportedNameTypeError, } from '../../errors/general.js';
7
- import { encodeFuses } from '../../utils/fuses.js';
7
+ import { encodeFuses, ParentFuses, } from '../../utils/fuses.js';
8
8
  import { getNameType } from '../../utils/getNameType.js';
9
9
  import { makeLabelNodeAndParent } from '../../utils/makeLabelNodeAndParent.js';
10
- import { MAX_EXPIRY, expiryToBigInt, wrappedLabelLengthCheck, } from '../../utils/wrapper.js';
10
+ import { expiryToBigInt, wrappedLabelLengthCheck, makeDefaultExpiry, } from '../../utils/wrapper.js';
11
+ import getWrapperData from '../public/getWrapperData.js';
12
+ import { BaseError } from '../../errors/base.js';
11
13
  export const makeFunctionData = (wallet, { name, contract, owner, resolverAddress = getChainContractAddress({
12
14
  client: wallet,
13
15
  contract: 'ensPublicResolver',
@@ -41,7 +43,9 @@ export const makeFunctionData = (wallet, { name, contract, owner, resolverAddres
41
43
  case 'nameWrapper': {
42
44
  wrappedLabelLengthCheck(label);
43
45
  const generatedFuses = fuses ? encodeFuses({ input: fuses }) : 0;
44
- const generatedExpiry = expiry ? expiryToBigInt(expiry) : MAX_EXPIRY;
46
+ const generatedExpiry = expiry
47
+ ? expiryToBigInt(expiry)
48
+ : makeDefaultExpiry(generatedFuses);
45
49
  return {
46
50
  to: getChainContractAddress({
47
51
  client: wallet,
@@ -69,6 +73,57 @@ export const makeFunctionData = (wallet, { name, contract, owner, resolverAddres
69
73
  });
70
74
  }
71
75
  };
76
+ class CreateSubnamePermissionDeniedError extends BaseError {
77
+ constructor({ parentName }) {
78
+ super(`Create subname error: ${parentName} as burned CANNOT_CREATE_SUBDOMAIN fuse`);
79
+ Object.defineProperty(this, "parentName", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: void 0
84
+ });
85
+ Object.defineProperty(this, "name", {
86
+ enumerable: true,
87
+ configurable: true,
88
+ writable: true,
89
+ value: 'CreateSubnamePermissionDeniedError'
90
+ });
91
+ this.parentName = parentName;
92
+ }
93
+ }
94
+ class CreateSubnameParentNotLockedError extends BaseError {
95
+ constructor({ parentName }) {
96
+ super(`Create subname error: Cannot burn PARENT_CANNOT_CONTROL when ${parentName} has not burned CANNOT_UNWRAP fuse`);
97
+ Object.defineProperty(this, "parentName", {
98
+ enumerable: true,
99
+ configurable: true,
100
+ writable: true,
101
+ value: void 0
102
+ });
103
+ Object.defineProperty(this, "name", {
104
+ enumerable: true,
105
+ configurable: true,
106
+ writable: true,
107
+ value: 'CreateSubnameParentNotLockedError'
108
+ });
109
+ this.parentName = parentName;
110
+ }
111
+ }
112
+ const checkCanCreateSubname = async (wallet, { name, fuses, contract, }) => {
113
+ if (contract !== 'nameWrapper')
114
+ return;
115
+ const parentName = name.split('.').slice(1).join('.');
116
+ if (parentName === 'eth')
117
+ return;
118
+ const parentWrapperData = await getWrapperData(wallet, { name: parentName });
119
+ if (parentWrapperData?.fuses?.child?.CANNOT_CREATE_SUBDOMAIN)
120
+ throw new CreateSubnamePermissionDeniedError({ parentName });
121
+ const generatedFuses = fuses ? encodeFuses({ input: fuses }) : 0;
122
+ const isBurningPCC = fuses && BigInt(generatedFuses) & ParentFuses.PARENT_CANNOT_CONTROL;
123
+ const isParentCannotUnwrapBurned = parentWrapperData?.fuses?.child?.CANNOT_UNWRAP;
124
+ if (isBurningPCC && !isParentCannotUnwrapBurned)
125
+ throw new CreateSubnameParentNotLockedError({ parentName });
126
+ };
72
127
  /**
73
128
  * Creates a subname
74
129
  * @param wallet - {@link ClientWithAccount}
@@ -93,6 +148,7 @@ export const makeFunctionData = (wallet, { name, contract, owner, resolverAddres
93
148
  * // 0x...
94
149
  */
95
150
  async function createSubname(wallet, { name, contract, owner, resolverAddress, expiry, fuses, ...txArgs }) {
151
+ await checkCanCreateSubname(wallet, { name, fuses, contract });
96
152
  const data = makeFunctionData(wallet, {
97
153
  name,
98
154
  contract,
@@ -1 +1 @@
1
- {"version":3,"file":"createSubname.js","sourceRoot":"","sources":["../../../../src/functions/wallet/createSubname.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createSubname.js","sourceRoot":"","sources":["../../../../src/functions/wallet/createSubname.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { stringToBytes } from 'viem';
2
2
  import { WrappedLabelTooLargeError } from '../errors/utils.js';
3
+ import { ParentFuses } from './fuses.js';
3
4
  export const MAX_EXPIRY = 2n ** 64n - 1n;
4
5
  export const expiryToBigInt = (expiry, defaultValue = 0n) => {
5
6
  if (!expiry)
@@ -17,4 +18,9 @@ export const wrappedLabelLengthCheck = (label) => {
17
18
  if (bytes.byteLength > 255)
18
19
  throw new WrappedLabelTooLargeError({ label, byteLength: bytes.byteLength });
19
20
  };
21
+ export const makeDefaultExpiry = (fuses) => {
22
+ if (fuses && BigInt(fuses) & ParentFuses.PARENT_CANNOT_CONTROL)
23
+ return MAX_EXPIRY;
24
+ return 0n;
25
+ };
20
26
  //# sourceMappingURL=wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/utils/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAG9D,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,CAAA;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgB,EAAE,YAAY,GAAG,EAAE,EAAU,EAAE;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAA;IAChC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,MAAM,YAAY,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC9E,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;AACxE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG;QACxB,MAAM,IAAI,yBAAyB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC,CAAA"}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/utils/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,CAAA;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgB,EAAE,YAAY,GAAG,EAAE,EAAU,EAAE;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,YAAY,CAAA;IAChC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;QAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,MAAM,YAAY,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;IAC9E,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;AACxE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG;QACxB,MAAM,IAAI,yBAAyB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC1D,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,qBAAqB;QAC5D,OAAO,UAAU,CAAA;IACnB,OAAO,EAAE,CAAA;AACX,CAAC,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const version = "v3.6.0";
1
+ export declare const version = "v4.0.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/functions/subgraph/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAmC9D,eAAO,MAAM,iBAAiB,EAAE,iBAgB/B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,kBAyBhC,CAAA;AAED,eAAO,MAAM,oBAAoB;YAA0B,aAAa;mBAIpE,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/functions/subgraph/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAmC9D,eAAO,MAAM,iBAAiB,EAAE,iBAgB/B,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,kBAwChC,CAAA;AAED,eAAO,MAAM,oBAAoB;YAA0B,aAAa;mBAIpE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"createSubname.d.ts","sourceRoot":"","sources":["../../../../src/functions/wallet/createSubname.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,IAAI,EAET,KAAK,SAAS,EACf,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAQhF,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAe,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAS/E,KAAK,+BAA+B,GAAG;IACrC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,oCAAoC;IACpC,QAAQ,EAAE,UAAU,GAAG,aAAa,CAAA;IACpC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAED,KAAK,mCAAmC,GAAG;IACzC,QAAQ,EAAE,UAAU,CAAA;IACpB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,KAAK,sCAAsC,GAAG;IAC5C,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,+BAA+B,GACvE,CAAC,mCAAmC,GAAG,sCAAsC,CAAC,CAAA;AAEhF,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAAA;AAElE,MAAM,MAAM,uBAAuB,CACjC,MAAM,SAAS,YAAY,EAC3B,QAAQ,SAAS,OAAO,GAAG,SAAS,EACpC,cAAc,SAAS,YAAY,GAAG,SAAS,IAC7C,QAAQ,CACV,2BAA2B,GACzB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAC/D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAE1C,eAAO,MAAM,gBAAgB,0LAexB,2BAA2B,KAC7B,2BA2DF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iBAAe,aAAa,CAC1B,MAAM,SAAS,YAAY,EAC3B,QAAQ,SAAS,OAAO,GAAG,SAAS,EACpC,cAAc,SAAS,YAAY,GAAG,SAAS,GAAG,YAAY,EAE9D,MAAM,EAAE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtD,EACE,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,eAAe,EACf,MAAM,EACN,KAAK,EACL,GAAG,MAAM,EACV,EAAE,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,GAC3D,OAAO,CAAC,uBAAuB,CAAC,CAclC;kBA7Bc,aAAa;;;AAiC5B,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"createSubname.d.ts","sourceRoot":"","sources":["../../../../src/functions/wallet/createSubname.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,IAAI,EAET,KAAK,SAAS,EACf,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EAElB,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAA;AAW7B,KAAK,+BAA+B,GAAG;IACrC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,oCAAoC;IACpC,QAAQ,EAAE,UAAU,GAAG,aAAa,CAAA;IACpC,8BAA8B;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAED,KAAK,mCAAmC,GAAG;IACzC,QAAQ,EAAE,UAAU,CAAA;IACpB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,KAAK,sCAAsC,GAAG;IAC5C,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,+BAA+B,GACvE,CAAC,mCAAmC,GAAG,sCAAsC,CAAC,CAAA;AAEhF,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAAA;AAElE,MAAM,MAAM,uBAAuB,CACjC,MAAM,SAAS,YAAY,EAC3B,QAAQ,SAAS,OAAO,GAAG,SAAS,EACpC,cAAc,SAAS,YAAY,GAAG,SAAS,IAC7C,QAAQ,CACV,2BAA2B,GACzB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAC/D,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAE1C,eAAO,MAAM,gBAAgB,0LAexB,2BAA2B,KAC7B,2BA6DF,CAAA;AAsDD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iBAAe,aAAa,CAC1B,MAAM,SAAS,YAAY,EAC3B,QAAQ,SAAS,OAAO,GAAG,SAAS,EACpC,cAAc,SAAS,YAAY,GAAG,SAAS,GAAG,YAAY,EAE9D,MAAM,EAAE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EACtD,EACE,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,eAAe,EACf,MAAM,EACN,KAAK,EACL,GAAG,MAAM,EACV,EAAE,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,GAC3D,OAAO,CAAC,uBAAuB,CAAC,CAiBlC;kBAhCc,aAAa;;;AAoC5B,eAAe,aAAa,CAAA"}
@@ -2,4 +2,5 @@ import type { AnyDate } from '../types.js';
2
2
  export declare const MAX_EXPIRY: bigint;
3
3
  export declare const expiryToBigInt: (expiry?: AnyDate, defaultValue?: bigint) => bigint;
4
4
  export declare const wrappedLabelLengthCheck: (label: string) => void;
5
+ export declare const makeDefaultExpiry: (fuses?: number) => bigint;
5
6
  //# sourceMappingURL=wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/utils/wrapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,UAAU,QAAiB,CAAA;AAExC,eAAO,MAAM,cAAc,YAAa,OAAO,4BAAsB,MAOpE,CAAA;AAED,eAAO,MAAM,uBAAuB,UAAW,MAAM,SAIpD,CAAA"}
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/utils/wrapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,eAAO,MAAM,UAAU,QAAiB,CAAA;AAExC,eAAO,MAAM,cAAc,YAAa,OAAO,4BAAsB,MAOpE,CAAA;AAED,eAAO,MAAM,uBAAuB,UAAW,MAAM,SAIpD,CAAA;AAED,eAAO,MAAM,iBAAiB,WAAY,MAAM,KAAG,MAIlD,CAAA"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@ensdomains/ensjs",
3
3
  "description": "ENS javascript library for contract interaction",
4
4
  "dependencies": {
5
- "@adraffy/ens-normalize": "1.9.0",
5
+ "@adraffy/ens-normalize": "1.10.1",
6
6
  "@ensdomains/address-encoder": "1.1.1",
7
7
  "@ensdomains/content-hash": "3.1.0-rc.1",
8
8
  "@ensdomains/dnsprovejs": "^0.5.1",
@@ -10,13 +10,12 @@
10
10
  "dns-packet": "^5.3.1",
11
11
  "graphql": "^16.3.0",
12
12
  "graphql-request": "6.1.0",
13
- "pako": "^2.1.0",
14
- "traverse": "^0.6.8"
13
+ "pako": "^2.1.0"
15
14
  },
16
15
  "peerDependencies": {
17
16
  "viem": "^2.9.2"
18
17
  },
19
- "version": "3.6.0",
18
+ "version": "4.0.0",
20
19
  "files": [
21
20
  "dist/",
22
21
  "src/",
@@ -1 +1 @@
1
- export const version = 'v3.6.0'
1
+ export const version = 'v4.0.0'
@@ -2,7 +2,6 @@ import type { Kind, SelectionNode, SelectionSetNode } from 'graphql'
2
2
  import type { RequestMiddleware, ResponseMiddleware } from 'graphql-request'
3
3
  import { GraphQLClient } from 'graphql-request'
4
4
  import { parse, print, visit } from 'graphql/language/index.js'
5
- import traverse from 'traverse'
6
5
  import type { ClientWithEns } from '../../contracts/consts.js'
7
6
  import { namehash } from '../../utils/normalise.js'
8
7
 
@@ -57,30 +56,45 @@ export const requestMiddleware: RequestMiddleware = (request) => {
57
56
  }
58
57
 
59
58
  export const responseMiddleware: ResponseMiddleware = (response) => {
60
- traverse(response).forEach(function (responseItem: unknown) {
61
- if (
62
- responseItem instanceof Object &&
63
- 'name' in responseItem &&
64
- responseItem.name &&
65
- typeof responseItem.name === 'string'
66
- ) {
67
- // Name already in hashed form
68
- if (responseItem.name && responseItem.name.includes('[')) {
69
- return
70
- }
59
+ const traverse = (obj: Record<string, any>) => {
60
+ if (obj && typeof obj === 'object') {
61
+ for (const key in obj) {
62
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
63
+ const value = obj[key]
71
64
 
72
- let hashedName = '[Invalid ENS Name]'
73
- try {
74
- hashedName = namehash(responseItem.name)
75
- } catch (e) {
76
- this.update({ ...responseItem, name: hashedName, invalidName: true })
77
- return
78
- }
79
- if ('id' in responseItem && responseItem.id !== hashedName) {
80
- this.update({ ...responseItem, name: hashedName, invalidName: true })
65
+ if (value && typeof value === 'object') {
66
+ traverse(value)
67
+ }
68
+
69
+ if (
70
+ value instanceof Object &&
71
+ 'name' in value &&
72
+ value.name &&
73
+ typeof value.name === 'string'
74
+ ) {
75
+ // Name already in hashed form
76
+ if (value.name.includes('[')) {
77
+ // eslint-disable-next-line no-continue
78
+ continue
79
+ }
80
+
81
+ let hashedName = '[Invalid ENS Name]'
82
+ try {
83
+ hashedName = namehash(value.name)
84
+ } catch (e) {
85
+ obj[key] = { ...value, name: hashedName, invalidName: true }
86
+ }
87
+
88
+ if ('id' in value && value.id !== hashedName) {
89
+ obj[key] = { ...value, name: hashedName, invalidName: true }
90
+ }
91
+ }
92
+ }
81
93
  }
82
94
  }
83
- })
95
+ }
96
+
97
+ traverse(response)
84
98
  }
85
99
 
86
100
  export const createSubgraphClient = ({ client }: { client: ClientWithEns }) =>
@@ -7,7 +7,11 @@ import {
7
7
  type Transport,
8
8
  } from 'viem'
9
9
  import { sendTransaction } from 'viem/actions'
10
- import type { ChainWithEns, ClientWithAccount } from '../../contracts/consts.js'
10
+ import type {
11
+ ChainWithEns,
12
+ ClientWithAccount,
13
+ ClientWithEns,
14
+ } from '../../contracts/consts.js'
11
15
  import { getChainContractAddress } from '../../contracts/getChainContractAddress.js'
12
16
  import { nameWrapperSetSubnodeRecordSnippet } from '../../contracts/nameWrapper.js'
13
17
  import { registrySetSubnodeRecordSnippet } from '../../contracts/registry.js'
@@ -21,14 +25,20 @@ import type {
21
25
  SimpleTransactionRequest,
22
26
  WriteTransactionParameters,
23
27
  } from '../../types.js'
24
- import { encodeFuses, type EncodeFusesInputObject } from '../../utils/fuses.js'
28
+ import {
29
+ encodeFuses,
30
+ ParentFuses,
31
+ type EncodeFusesInputObject,
32
+ } from '../../utils/fuses.js'
25
33
  import { getNameType } from '../../utils/getNameType.js'
26
34
  import { makeLabelNodeAndParent } from '../../utils/makeLabelNodeAndParent.js'
27
35
  import {
28
- MAX_EXPIRY,
29
36
  expiryToBigInt,
30
37
  wrappedLabelLengthCheck,
38
+ makeDefaultExpiry,
31
39
  } from '../../utils/wrapper.js'
40
+ import getWrapperData from '../public/getWrapperData.js'
41
+ import { BaseError } from '../../errors/base.js'
32
42
 
33
43
  type BaseCreateSubnameDataParameters = {
34
44
  /** Subname to create */
@@ -121,7 +131,9 @@ export const makeFunctionData = <
121
131
  case 'nameWrapper': {
122
132
  wrappedLabelLengthCheck(label)
123
133
  const generatedFuses = fuses ? encodeFuses({ input: fuses }) : 0
124
- const generatedExpiry = expiry ? expiryToBigInt(expiry) : MAX_EXPIRY
134
+ const generatedExpiry = expiry
135
+ ? expiryToBigInt(expiry)
136
+ : makeDefaultExpiry(generatedFuses)
125
137
  return {
126
138
  to: getChainContractAddress({
127
139
  client: wallet,
@@ -150,6 +162,58 @@ export const makeFunctionData = <
150
162
  }
151
163
  }
152
164
 
165
+ class CreateSubnamePermissionDeniedError extends BaseError {
166
+ parentName: string
167
+
168
+ override name = 'CreateSubnamePermissionDeniedError'
169
+
170
+ constructor({ parentName }: { parentName: string }) {
171
+ super(
172
+ `Create subname error: ${parentName} as burned CANNOT_CREATE_SUBDOMAIN fuse`,
173
+ )
174
+ this.parentName = parentName
175
+ }
176
+ }
177
+
178
+ class CreateSubnameParentNotLockedError extends BaseError {
179
+ parentName: string
180
+
181
+ override name = 'CreateSubnameParentNotLockedError'
182
+
183
+ constructor({ parentName }: { parentName: string }) {
184
+ super(
185
+ `Create subname error: Cannot burn PARENT_CANNOT_CONTROL when ${parentName} has not burned CANNOT_UNWRAP fuse`,
186
+ )
187
+ this.parentName = parentName
188
+ }
189
+ }
190
+
191
+ const checkCanCreateSubname = async (
192
+ wallet: ClientWithEns,
193
+ {
194
+ name,
195
+ fuses,
196
+ contract,
197
+ }: Pick<BaseCreateSubnameDataParameters, 'name' | 'contract' | 'fuses'>,
198
+ ): Promise<void> => {
199
+ if (contract !== 'nameWrapper') return
200
+
201
+ const parentName = name.split('.').slice(1).join('.')
202
+ if (parentName === 'eth') return
203
+
204
+ const parentWrapperData = await getWrapperData(wallet, { name: parentName })
205
+ if (parentWrapperData?.fuses?.child?.CANNOT_CREATE_SUBDOMAIN)
206
+ throw new CreateSubnamePermissionDeniedError({ parentName })
207
+
208
+ const generatedFuses = fuses ? encodeFuses({ input: fuses }) : 0
209
+ const isBurningPCC =
210
+ fuses && BigInt(generatedFuses) & ParentFuses.PARENT_CANNOT_CONTROL
211
+ const isParentCannotUnwrapBurned =
212
+ parentWrapperData?.fuses?.child?.CANNOT_UNWRAP
213
+ if (isBurningPCC && !isParentCannotUnwrapBurned)
214
+ throw new CreateSubnameParentNotLockedError({ parentName })
215
+ }
216
+
153
217
  /**
154
218
  * Creates a subname
155
219
  * @param wallet - {@link ClientWithAccount}
@@ -189,6 +253,8 @@ async function createSubname<
189
253
  ...txArgs
190
254
  }: CreateSubnameParameters<TChain, TAccount, TChainOverride>,
191
255
  ): Promise<CreateSubnameReturnType> {
256
+ await checkCanCreateSubname(wallet, { name, fuses, contract })
257
+
192
258
  const data = makeFunctionData(wallet, {
193
259
  name,
194
260
  contract,
@@ -201,6 +267,7 @@ async function createSubname<
201
267
  ...data,
202
268
  ...txArgs,
203
269
  } as SendTransactionParameters<TChain, TAccount, TChainOverride>
270
+
204
271
  return sendTransaction(wallet, writeArgs)
205
272
  }
206
273
 
@@ -1,6 +1,7 @@
1
1
  import { stringToBytes } from 'viem'
2
2
  import { WrappedLabelTooLargeError } from '../errors/utils.js'
3
3
  import type { AnyDate } from '../types.js'
4
+ import { ParentFuses } from './fuses.js'
4
5
 
5
6
  export const MAX_EXPIRY = 2n ** 64n - 1n
6
7
 
@@ -18,3 +19,9 @@ export const wrappedLabelLengthCheck = (label: string) => {
18
19
  if (bytes.byteLength > 255)
19
20
  throw new WrappedLabelTooLargeError({ label, byteLength: bytes.byteLength })
20
21
  }
22
+
23
+ export const makeDefaultExpiry = (fuses?: number): bigint => {
24
+ if (fuses && BigInt(fuses) & ParentFuses.PARENT_CANNOT_CONTROL)
25
+ return MAX_EXPIRY
26
+ return 0n
27
+ }