@ensnode/ensnode-sdk 0.0.0-next-20260227185030 → 0.0.0-next-20260227190633

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/index.cjs CHANGED
@@ -237,7 +237,10 @@ __export(index_exports, {
237
237
  parseAccountId: () => parseAccountId,
238
238
  parseAssetId: () => parseAssetId,
239
239
  parseDai: () => parseDai,
240
+ parseEncodedLabelHash: () => parseEncodedLabelHash,
240
241
  parseEth: () => parseEth,
242
+ parseLabelHash: () => parseLabelHash,
243
+ parseLabelHashOrEncodedLabelHash: () => parseLabelHashOrEncodedLabelHash,
241
244
  parseNonNegativeInteger: () => parseNonNegativeInteger,
242
245
  parsePartialInterpretedName: () => parsePartialInterpretedName,
243
246
  parseReverseName: () => parseReverseName,
@@ -425,8 +428,38 @@ var beautifyName = (name) => {
425
428
  return beautifiedLabels.join(".");
426
429
  };
427
430
 
428
- // src/ens/parse-reverse-name.ts
431
+ // src/ens/parse-labelhash.ts
429
432
  var import_viem4 = require("viem");
433
+ function parseLabelHash(maybeLabelHash) {
434
+ const hexPart = maybeLabelHash.startsWith("0x") ? maybeLabelHash.slice(2) : maybeLabelHash;
435
+ if (!(0, import_viem4.isHex)(`0x${hexPart}`, { strict: true })) {
436
+ throw new Error(`Invalid labelHash: contains non-hex characters: ${maybeLabelHash}`);
437
+ }
438
+ const normalizedHexPart = hexPart.length % 2 === 1 ? `0${hexPart}` : hexPart;
439
+ if (normalizedHexPart.length !== 64) {
440
+ throw new Error(
441
+ `Invalid labelHash length: expected 32 bytes (64 hex chars), got ${normalizedHexPart.length / 2} bytes: ${maybeLabelHash}`
442
+ );
443
+ }
444
+ return `0x${normalizedHexPart.toLowerCase()}`;
445
+ }
446
+ function parseEncodedLabelHash(maybeEncodedLabelHash) {
447
+ if (!maybeEncodedLabelHash.startsWith("[") || !maybeEncodedLabelHash.endsWith("]")) {
448
+ throw new Error(
449
+ `Invalid encoded labelHash: must be enclosed in square brackets: ${maybeEncodedLabelHash}`
450
+ );
451
+ }
452
+ return parseLabelHash(maybeEncodedLabelHash.slice(1, -1));
453
+ }
454
+ function parseLabelHashOrEncodedLabelHash(maybeLabelHash) {
455
+ if (maybeLabelHash.startsWith("[") && maybeLabelHash.endsWith("]")) {
456
+ return parseEncodedLabelHash(maybeLabelHash);
457
+ }
458
+ return parseLabelHash(maybeLabelHash);
459
+ }
460
+
461
+ // src/ens/parse-reverse-name.ts
462
+ var import_viem5 = require("viem");
430
463
 
431
464
  // src/shared/address.ts
432
465
  function asLowerCaseAddress(address) {
@@ -437,7 +470,7 @@ function asLowerCaseAddress(address) {
437
470
  var REVERSE_NAME_REGEX = /^([0-9a-fA-F]+)\.([0-9a-f]{1,64}|addr|default)\.reverse$/;
438
471
  var parseAddressLabel = (addressLabel) => {
439
472
  const maybeAddress = `0x${addressLabel}`;
440
- if (!(0, import_viem4.isAddress)(maybeAddress)) {
473
+ if (!(0, import_viem5.isAddress)(maybeAddress)) {
441
474
  throw new Error(`Invalid EVM address "${maybeAddress}"`);
442
475
  }
443
476
  return asLowerCaseAddress(maybeAddress);
@@ -445,7 +478,7 @@ var parseAddressLabel = (addressLabel) => {
445
478
  var parseCoinTypeLabel = (coinTypeLabel) => {
446
479
  if (coinTypeLabel === "default") return DEFAULT_EVM_COIN_TYPE;
447
480
  if (coinTypeLabel === "addr") return ETH_COIN_TYPE;
448
- return bigintToCoinType((0, import_viem4.hexToBigInt)(`0x${coinTypeLabel}`));
481
+ return bigintToCoinType((0, import_viem5.hexToBigInt)(`0x${coinTypeLabel}`));
449
482
  };
450
483
  function parseReverseName(name) {
451
484
  const match = name.match(REVERSE_NAME_REGEX);
@@ -482,9 +515,9 @@ function reverseName(address, coinType) {
482
515
  }
483
516
 
484
517
  // src/ens/subname-helpers.ts
485
- var import_viem5 = require("viem");
486
- var makeSubdomainNode = (labelHash, node) => (0, import_viem5.keccak256)((0, import_viem5.concat)([node, labelHash]));
487
- var uint256ToHex32 = (num) => (0, import_viem5.toHex)(num, { size: 32 });
518
+ var import_viem6 = require("viem");
519
+ var makeSubdomainNode = (labelHash, node) => (0, import_viem6.keccak256)((0, import_viem6.concat)([node, labelHash]));
520
+ var uint256ToHex32 = (num) => (0, import_viem6.toHex)(num, { size: 32 });
488
521
 
489
522
  // src/ens/types.ts
490
523
  var import_datasources = require("@ensnode/datasources");
@@ -503,11 +536,11 @@ var uniq = (arr) => [...new Set(arr)];
503
536
 
504
537
  // src/shared/zod-schemas.ts
505
538
  var import_caip = require("caip");
506
- var import_viem8 = require("viem");
539
+ var import_viem9 = require("viem");
507
540
  var import_v4 = require("zod/v4");
508
541
 
509
542
  // src/shared/currencies.ts
510
- var import_viem6 = require("viem");
543
+ var import_viem7 = require("viem");
511
544
 
512
545
  // src/shared/numbers.ts
513
546
  function bigIntToNumber(n) {
@@ -642,24 +675,24 @@ function validateAmountToParse(value) {
642
675
  function parseEth(value) {
643
676
  validateAmountToParse(value);
644
677
  const currencyInfo2 = getCurrencyInfo(CurrencyIds.ETH);
645
- const amount = (0, import_viem6.parseUnits)(value, currencyInfo2.decimals);
678
+ const amount = (0, import_viem7.parseUnits)(value, currencyInfo2.decimals);
646
679
  return priceEth(amount);
647
680
  }
648
681
  function parseUsdc(value) {
649
682
  validateAmountToParse(value);
650
683
  const currencyInfo2 = getCurrencyInfo(CurrencyIds.USDC);
651
- const amount = (0, import_viem6.parseUnits)(value, currencyInfo2.decimals);
684
+ const amount = (0, import_viem7.parseUnits)(value, currencyInfo2.decimals);
652
685
  return priceUsdc(amount);
653
686
  }
654
687
  function parseDai(value) {
655
688
  validateAmountToParse(value);
656
689
  const currencyInfo2 = getCurrencyInfo(CurrencyIds.DAI);
657
- const amount = (0, import_viem6.parseUnits)(value, currencyInfo2.decimals);
690
+ const amount = (0, import_viem7.parseUnits)(value, currencyInfo2.decimals);
658
691
  return priceDai(amount);
659
692
  }
660
693
 
661
694
  // src/shared/interpretation/reinterpretation.ts
662
- var import_viem7 = require("viem");
695
+ var import_viem8 = require("viem");
663
696
  function reinterpretLabel(label) {
664
697
  if (label === "") {
665
698
  throw new Error(
@@ -668,7 +701,7 @@ function reinterpretLabel(label) {
668
701
  }
669
702
  if (isEncodedLabelHash(label)) return label;
670
703
  if (isNormalizedLabel(label)) return label;
671
- return encodeLabelHash((0, import_viem7.labelhash)(label));
704
+ return encodeLabelHash((0, import_viem8.labelhash)(label));
672
705
  }
673
706
  function reinterpretName(name) {
674
707
  if (name === "") return name;
@@ -694,7 +727,7 @@ var makeDurationSchema = (valueLabel = "Value") => import_v4.z.number({
694
727
  var makeChainIdSchema = (valueLabel = "Chain ID") => makePositiveIntegerSchema(valueLabel).transform((val) => val);
695
728
  var makeChainIdStringSchema = (valueLabel = "Chain ID String") => import_v4.z.string({ error: `${valueLabel} must be a string representing a chain ID.` }).pipe(import_v4.z.coerce.number({ error: `${valueLabel} must represent a positive integer (>0).` })).pipe(makeChainIdSchema(`The numeric value represented by ${valueLabel}`));
696
729
  var makeLowercaseAddressSchema = (valueLabel = "EVM address") => import_v4.z.string().check((ctx) => {
697
- if (!(0, import_viem8.isAddress)(ctx.value)) {
730
+ if (!(0, import_viem9.isAddress)(ctx.value)) {
698
731
  ctx.issues.push({
699
732
  code: "custom",
700
733
  message: `${valueLabel} must be a valid EVM address`,
@@ -766,7 +799,7 @@ var makeAccountIdStringSchema = (valueLabel = "Account ID String") => import_v4.
766
799
  };
767
800
  }).pipe(makeAccountIdSchema(valueLabel));
768
801
  var makeHexStringSchema = (options, valueLabel = "String representation of bytes array") => import_v4.z.string().check(function invariant_isHexEncoded(ctx) {
769
- if (!(0, import_viem8.isHex)(ctx.value)) {
802
+ if (!(0, import_viem9.isHex)(ctx.value)) {
770
803
  ctx.issues.push({
771
804
  code: "custom",
772
805
  input: ctx.value,
@@ -775,7 +808,7 @@ var makeHexStringSchema = (options, valueLabel = "String representation of bytes
775
808
  }
776
809
  }).transform((v) => v).check(function invariant_encodesRequiredBytesCount(ctx) {
777
810
  const expectedBytesCount = options.bytesCount;
778
- const actualBytesCount = (0, import_viem8.size)(ctx.value);
811
+ const actualBytesCount = (0, import_viem9.size)(ctx.value);
779
812
  if (actualBytesCount !== expectedBytesCount) {
780
813
  ctx.issues.push({
781
814
  code: "custom",
@@ -2003,17 +2036,17 @@ var serializeIndexingStatusResponse = serializeEnsApiIndexingStatusResponse;
2003
2036
  var import_v420 = require("zod/v4");
2004
2037
 
2005
2038
  // src/ensapi/api/name-tokens/zod-schemas.ts
2006
- var import_viem13 = require("viem");
2039
+ var import_viem14 = require("viem");
2007
2040
  var import_v419 = require("zod/v4");
2008
2041
 
2009
2042
  // src/tokenscope/name-token.ts
2010
- var import_viem12 = require("viem");
2043
+ var import_viem13 = require("viem");
2011
2044
  var import_datasources5 = require("@ensnode/datasources");
2012
2045
 
2013
2046
  // src/shared/account-id.ts
2014
- var import_viem9 = require("viem");
2047
+ var import_viem10 = require("viem");
2015
2048
  var accountIdEqual = (a, b) => {
2016
- return a.chainId === b.chainId && (0, import_viem9.isAddressEqual)(a.address, b.address);
2049
+ return a.chainId === b.chainId && (0, import_viem10.isAddressEqual)(a.address, b.address);
2017
2050
  };
2018
2051
 
2019
2052
  // src/shared/datasource-contract.ts
@@ -2043,12 +2076,12 @@ var makeContractMatcher = (namespace, b) => (datasourceName, contractName) => {
2043
2076
  };
2044
2077
 
2045
2078
  // src/tokenscope/assets.ts
2046
- var import_viem11 = require("viem");
2079
+ var import_viem12 = require("viem");
2047
2080
  var import_v417 = require("zod/v4");
2048
2081
 
2049
2082
  // src/tokenscope/zod-schemas.ts
2050
2083
  var import_caip3 = require("caip");
2051
- var import_viem10 = require("viem");
2084
+ var import_viem11 = require("viem");
2052
2085
  var import_v416 = require("zod/v4");
2053
2086
 
2054
2087
  // src/shared/types.ts
@@ -2093,7 +2126,7 @@ var makeAssetIdStringSchema = (valueLabel = "Asset ID String Schema") => import_
2093
2126
  }, makeAssetIdSchema(valueLabel));
2094
2127
  function invariant_nameTokenOwnershipHasNonZeroAddressOwner(ctx) {
2095
2128
  const ownership = ctx.value;
2096
- if (ctx.value.owner.address === import_viem10.zeroAddress) {
2129
+ if (ctx.value.owner.address === import_viem11.zeroAddress) {
2097
2130
  ctx.issues.push({
2098
2131
  code: "custom",
2099
2132
  input: ctx.value,
@@ -2119,7 +2152,7 @@ var makeNameTokenOwnershipUnknownSchema = (valueLabel = "Name Token Ownership Un
2119
2152
  }).check(invariant_nameTokenOwnershipHasNonZeroAddressOwner);
2120
2153
  function invariant_nameTokenOwnershipHasZeroAddressOwner(ctx) {
2121
2154
  const ownership = ctx.value;
2122
- if (ctx.value.owner.address !== import_viem10.zeroAddress) {
2155
+ if (ctx.value.owner.address !== import_viem11.zeroAddress) {
2123
2156
  ctx.issues.push({
2124
2157
  code: "custom",
2125
2158
  input: ctx.value,
@@ -2297,11 +2330,11 @@ var NFTTransferTypes = {
2297
2330
  };
2298
2331
  var getNFTTransferType = (from, to, allowMintedRemint, metadata, currentlyIndexedOwner) => {
2299
2332
  const isIndexed = currentlyIndexedOwner !== void 0;
2300
- const isIndexedAsMinted = isIndexed && !(0, import_viem11.isAddressEqual)(currentlyIndexedOwner, import_viem11.zeroAddress);
2301
- const isMint = (0, import_viem11.isAddressEqual)(from, import_viem11.zeroAddress);
2302
- const isBurn = (0, import_viem11.isAddressEqual)(to, import_viem11.zeroAddress);
2303
- const isSelfTransfer = (0, import_viem11.isAddressEqual)(from, to);
2304
- if (isIndexed && !(0, import_viem11.isAddressEqual)(currentlyIndexedOwner, from)) {
2333
+ const isIndexedAsMinted = isIndexed && !(0, import_viem12.isAddressEqual)(currentlyIndexedOwner, import_viem12.zeroAddress);
2334
+ const isMint = (0, import_viem12.isAddressEqual)(from, import_viem12.zeroAddress);
2335
+ const isBurn = (0, import_viem12.isAddressEqual)(to, import_viem12.zeroAddress);
2336
+ const isSelfTransfer = (0, import_viem12.isAddressEqual)(from, to);
2337
+ if (isIndexed && !(0, import_viem12.isAddressEqual)(currentlyIndexedOwner, from)) {
2305
2338
  if (isMint && allowMintedRemint) {
2306
2339
  } else {
2307
2340
  throw new Error(
@@ -2442,7 +2475,7 @@ function getNameTokenOwnership(namespaceId, name, owner) {
2442
2475
  owner
2443
2476
  };
2444
2477
  }
2445
- if ((0, import_viem12.isAddressEqual)(owner.address, import_viem12.zeroAddress)) {
2478
+ if ((0, import_viem13.isAddressEqual)(owner.address, import_viem13.zeroAddress)) {
2446
2479
  return {
2447
2480
  ownershipType: NameTokenOwnershipTypes.Burned,
2448
2481
  owner
@@ -2512,7 +2545,7 @@ var makeRegisteredNameTokenSchema = (valueLabel = "Registered Name Token", seria
2512
2545
  accurateAsOf: makeUnixTimestampSchema(`${valueLabel}.accurateAsOf`)
2513
2546
  }).check(function invariant_nameIsAssociatedWithDomainId(ctx) {
2514
2547
  const { name, domainId } = ctx.value;
2515
- if ((0, import_viem13.namehash)(name) !== domainId) {
2548
+ if ((0, import_viem14.namehash)(name) !== domainId) {
2516
2549
  ctx.issues.push({
2517
2550
  code: "custom",
2518
2551
  input: ctx.value,
@@ -2671,34 +2704,34 @@ var import_v423 = require("zod/v4");
2671
2704
  var import_v421 = require("zod/v4");
2672
2705
 
2673
2706
  // src/registrars/encoded-referrer.ts
2674
- var import_viem14 = require("viem");
2707
+ var import_viem15 = require("viem");
2675
2708
  var ENCODED_REFERRER_BYTE_OFFSET = 12;
2676
2709
  var ENCODED_REFERRER_BYTE_LENGTH = 32;
2677
- var EXPECTED_ENCODED_REFERRER_PADDING = (0, import_viem14.pad)("0x", {
2710
+ var EXPECTED_ENCODED_REFERRER_PADDING = (0, import_viem15.pad)("0x", {
2678
2711
  size: ENCODED_REFERRER_BYTE_OFFSET,
2679
2712
  dir: "left"
2680
2713
  });
2681
- var ZERO_ENCODED_REFERRER = (0, import_viem14.pad)("0x", {
2714
+ var ZERO_ENCODED_REFERRER = (0, import_viem15.pad)("0x", {
2682
2715
  size: ENCODED_REFERRER_BYTE_LENGTH,
2683
2716
  dir: "left"
2684
2717
  });
2685
2718
  function buildEncodedReferrer(address) {
2686
2719
  const lowercaseAddress = address.toLowerCase();
2687
- return (0, import_viem14.pad)(lowercaseAddress, { size: ENCODED_REFERRER_BYTE_LENGTH, dir: "left" });
2720
+ return (0, import_viem15.pad)(lowercaseAddress, { size: ENCODED_REFERRER_BYTE_LENGTH, dir: "left" });
2688
2721
  }
2689
2722
  function decodeEncodedReferrer(encodedReferrer) {
2690
- if ((0, import_viem14.size)(encodedReferrer) !== ENCODED_REFERRER_BYTE_LENGTH) {
2723
+ if ((0, import_viem15.size)(encodedReferrer) !== ENCODED_REFERRER_BYTE_LENGTH) {
2691
2724
  throw new Error(
2692
2725
  `Encoded referrer value must be represented by ${ENCODED_REFERRER_BYTE_LENGTH} bytes.`
2693
2726
  );
2694
2727
  }
2695
- const padding = (0, import_viem14.slice)(encodedReferrer, 0, ENCODED_REFERRER_BYTE_OFFSET);
2728
+ const padding = (0, import_viem15.slice)(encodedReferrer, 0, ENCODED_REFERRER_BYTE_OFFSET);
2696
2729
  if (padding !== EXPECTED_ENCODED_REFERRER_PADDING) {
2697
- return import_viem14.zeroAddress;
2730
+ return import_viem15.zeroAddress;
2698
2731
  }
2699
- const decodedReferrer = (0, import_viem14.slice)(encodedReferrer, ENCODED_REFERRER_BYTE_OFFSET);
2732
+ const decodedReferrer = (0, import_viem15.slice)(encodedReferrer, ENCODED_REFERRER_BYTE_OFFSET);
2700
2733
  try {
2701
- return (0, import_viem14.getAddress)(decodedReferrer);
2734
+ return (0, import_viem15.getAddress)(decodedReferrer);
2702
2735
  } catch {
2703
2736
  throw new Error(`Decoded referrer value must be a valid EVM address.`);
2704
2737
  }
@@ -3906,7 +3939,7 @@ function validateEnsIndexerPublicConfigCompatibility(configA, configB) {
3906
3939
  }
3907
3940
 
3908
3941
  // src/ensindexer/config/label-utils.ts
3909
- var import_viem15 = require("viem");
3942
+ var import_viem16 = require("viem");
3910
3943
  function labelHashToBytes(labelHash) {
3911
3944
  try {
3912
3945
  if (labelHash.length !== 66) {
@@ -3918,7 +3951,7 @@ function labelHashToBytes(labelHash) {
3918
3951
  if (!labelHash.startsWith("0x")) {
3919
3952
  throw new Error("Labelhash must be 0x-prefixed");
3920
3953
  }
3921
- const bytes = (0, import_viem15.hexToBytes)(labelHash);
3954
+ const bytes = (0, import_viem16.hexToBytes)(labelHash);
3922
3955
  if (bytes.length !== 32) {
3923
3956
  throw new Error(`Invalid labelHash length ${bytes.length} bytes (expected 32)`);
3924
3957
  }
@@ -3986,7 +4019,7 @@ function parseNonNegativeInteger(maybeNumber) {
3986
4019
  }
3987
4020
 
3988
4021
  // src/ensv2/ids-lib.ts
3989
- var import_viem16 = require("viem");
4022
+ var import_viem17 = require("viem");
3990
4023
  var makeRegistryId = (accountId) => formatAccountId(accountId);
3991
4024
  var makeENSv1DomainId = (node) => node;
3992
4025
  var makeENSv2DomainId = (registry, canonicalId) => formatAssetId({
@@ -3997,7 +4030,7 @@ var makeENSv2DomainId = (registry, canonicalId) => formatAssetId({
3997
4030
  var maskLower32Bits = (num) => num ^ num & 0xffffffffn;
3998
4031
  var getCanonicalId = (input) => {
3999
4032
  if (typeof input === "bigint") return maskLower32Bits(input);
4000
- return getCanonicalId((0, import_viem16.hexToBigInt)(input));
4033
+ return getCanonicalId((0, import_viem17.hexToBigInt)(input));
4001
4034
  };
4002
4035
  var makePermissionsId = (contract) => formatAccountId(contract);
4003
4036
  var makePermissionsResourceId = (contract, resource) => `${makePermissionsId(contract)}/${resource}`;
@@ -4560,11 +4593,11 @@ var TtlCache = class {
4560
4593
  };
4561
4594
 
4562
4595
  // src/shared/interpretation/interpret-address.ts
4563
- var import_viem17 = require("viem");
4564
- var interpretAddress = (owner) => (0, import_viem17.isAddressEqual)(import_viem17.zeroAddress, owner) ? null : owner;
4596
+ var import_viem18 = require("viem");
4597
+ var interpretAddress = (owner) => (0, import_viem18.isAddressEqual)(import_viem18.zeroAddress, owner) ? null : owner;
4565
4598
 
4566
4599
  // src/shared/interpretation/interpret-record-values.ts
4567
- var import_viem18 = require("viem");
4600
+ var import_viem19 = require("viem");
4568
4601
 
4569
4602
  // src/shared/null-bytes.ts
4570
4603
  var hasNullByte = (value) => value.indexOf("\0") !== -1;
@@ -4580,8 +4613,8 @@ function interpretAddressRecordValue(value) {
4580
4613
  if (hasNullByte(value)) return null;
4581
4614
  if (value === "") return null;
4582
4615
  if (value === "0x") return null;
4583
- if (!(0, import_viem18.isAddress)(value)) return value;
4584
- if ((0, import_viem18.isAddressEqual)(value, import_viem18.zeroAddress)) return null;
4616
+ if (!(0, import_viem19.isAddress)(value)) return value;
4617
+ if ((0, import_viem19.isAddressEqual)(value, import_viem19.zeroAddress)) return null;
4585
4618
  return asLowerCaseAddress(value);
4586
4619
  }
4587
4620
  function interpretTextRecordKey(key) {
@@ -4600,12 +4633,12 @@ var interpretTokenIdAsLabelHash = (tokenId) => uint256ToHex32(tokenId);
4600
4633
  var interpretTokenIdAsNode = (tokenId) => uint256ToHex32(tokenId);
4601
4634
 
4602
4635
  // src/shared/interpretation/interpreted-names-and-labels.ts
4603
- var import_viem20 = require("viem");
4636
+ var import_viem21 = require("viem");
4604
4637
  var import_ens10 = require("viem/ens");
4605
4638
 
4606
4639
  // src/shared/labelhash.ts
4607
- var import_viem19 = require("viem");
4608
- var labelhashLiteralLabel = (label) => (0, import_viem19.keccak256)((0, import_viem19.stringToBytes)(label));
4640
+ var import_viem20 = require("viem");
4641
+ var labelhashLiteralLabel = (label) => (0, import_viem20.keccak256)((0, import_viem20.stringToBytes)(label));
4609
4642
 
4610
4643
  // src/shared/interpretation/interpreted-names-and-labels.ts
4611
4644
  function literalLabelToInterpretedLabel(label) {
@@ -4629,7 +4662,7 @@ function encodedLabelToLabelhash(label) {
4629
4662
  if (label.indexOf("[") !== 0) return null;
4630
4663
  if (label.indexOf("]") !== 65) return null;
4631
4664
  const hash = `0x${label.slice(1, 65)}`;
4632
- if (!(0, import_viem20.isHex)(hash)) return null;
4665
+ if (!(0, import_viem21.isHex)(hash)) return null;
4633
4666
  return hash;
4634
4667
  }
4635
4668
  function isInterpetedLabel(label) {