{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/validation.ts","../src/constants.ts","../src/resolver.ts","../src/cachedApi.ts","../src/util.ts","../src/transactions.ts","../src/name.ts","../src/address.ts"],"sourcesContent":["import { AddressValidationError } from \"./errors.js\";\nimport { isValidAddress, normalizeName } from \"./validation.js\";\nimport { Name } from \"./name.js\";\nimport { Address } from \"./address.js\";\nimport CachedApi from \"./cachedApi.js\";\nimport algosdk from \"algosdk\";\n\nexport { Resolver } from \"./resolver.js\";\nexport { Transactions } from \"./transactions.js\";\nexport * from \"./errors.js\";\n\nexport class ANS extends CachedApi {\n  protected network = \"mainnet\";\n\n  constructor(\n    client: algosdk.Algodv2,\n    indexer: algosdk.Indexer,\n    network?: string,\n    appId?: number\n  ) {\n    super(client, indexer, network, appId);\n    if (network === \"testnet\") {\n      this.network = \"testnet\";\n    }\n  }\n\n  name(name: string): Name {\n    name = normalizeName(name);\n    return new Name({\n      rpc: this.rpc,\n      indexer: this.indexer,\n      name,\n      network: this.network,\n      app: this.APP\n    });\n  }\n\n  address(address: string): Address {\n    if (!isValidAddress(address)) {\n      throw new AddressValidationError();\n    }\n    return new Address({\n      rpc: this.rpc,\n      indexer: this.indexer,\n      address,\n      network: this.network,\n      app: this.APP\n    });\n  }\n}\n","export class AddressValidationError extends Error {\n  name: string;\n  type: string;\n  constructor() {\n    super(`This is not a valid Algorand address`);\n    this.name = \"InvalidAddressError\";\n    this.type = \"InvalidAddressError\";\n  }\n}\n\nexport class InvalidNameError extends Error {\n  name: string;\n  type: string;\n  constructor() {\n    super(\n      `The name must be between 3 and 64 characters and must only contain a-z and 0-9 characters`\n    );\n    this.name = \"InvalidNameError\";\n    this.type = \"InvalidNameError\";\n  }\n}\n\nexport class NameNotRegisteredError extends Error {\n  name: string;\n  type: string;\n  constructor(name: string) {\n    super(`Name ${name}.algo is not registered`);\n    this.name = \"NameNotRegisteredError\";\n    this.type = \"NameNotRegisteredError\";\n  }\n}\n\nexport class IncorrectOwnerError extends Error {\n  name: string;\n  type: string;\n  constructor(name: string, address: string) {\n    super(`Name ${name}.algo is not owned by ${address}`);\n    this.name = \"IncorrectOwnerError\";\n    this.type = \"IncorrectOwnerError\";\n  }\n}\n\nexport class PropertyNotSetError extends Error {\n  name: string;\n  type: string;\n  constructor(property: string) {\n    super(`Property ${property} is not set`);\n    this.name = \"PropertyNotSetError\";\n    this.type = \"PropertyNotSetError\";\n  }\n}\n","import algosdk from \"algosdk\";\nimport { ALLOWED_TLDS, ASCII_CODES } from \"./constants.js\";\nimport { InvalidNameError } from \"./errors.js\";\n\nexport function isValidAddress(address: string): boolean {\n  return algosdk.isValidAddress(address);\n}\n\nexport function normalizeName(name: string): string {\n  const tld: string = name.split(\".\").pop() as string;\n  if (!ALLOWED_TLDS.includes(tld)) {\n    throw new Error(\"TLD not supported\");\n  }\n  name = name.split(\".\")[0].toLowerCase();\n  const lengthOfName = name.length;\n  if (lengthOfName > 64) {\n    throw new InvalidNameError();\n  }\n  for (let i = 0; i < lengthOfName; i++) {\n    if (\n      !(\n        name.charCodeAt(i) >= ASCII_CODES.ASCII_0 &&\n        name.charCodeAt(i) <= ASCII_CODES.ASCII_9\n      )\n    ) {\n      if (\n        !(\n          name.charCodeAt(i) >= ASCII_CODES.ASCII_A &&\n          name.charCodeAt(i) <= ASCII_CODES.ASCII_Z\n        )\n      )\n        throw new InvalidNameError();\n    }\n  }\n  return name;\n}\n","export const APP_ID = 628095415;\nexport const TESTNET_APP_ID = 75101786;\n\nexport const REGISTRATION_PRICE = {\n  CHAR_3_AMOUNT: 150000000,\n  CHAR_4_AMOUNT: 50000000,\n  CHAR_5_AMOUNT: 5000000,\n};\n\nexport const TRANSFER_FEE = 2000000;\n\nexport const IPFS_LINK = \"https://ipfs.infura.io/ipfs/\";\n\nexport const ASCII_CODES = {\n  ASCII_A: 97,\n  ASCII_Z: 122,\n  ASCII_0: 48,\n  ASCII_9: 57,\n};\n\nexport const ALLOWED_SOCIALS = [\n  \"github\",\n  \"twitter\",\n  \"telegram\",\n  \"youtube\",\n  \"reddit\",\n  \"discord\",\n];\n\nexport const TESTNET_ESCROW =\n  \"ACFFHRILZQ6W2UDNYYTHV55YS6MZWJR4PEDVBFAL575FFK4AT4UBCO3SXE\";\nexport const MAINNET_ESCROW =\n  \"SYGCDTWGBXKV4ZL5YAWSYAVOUC25U2XDB6SMQHLRCTYVF566TQZ3EOABH4\";\n\nexport const ALLOWED_TLDS = [\"algo\"];\n","import algosdk, { Transaction } from \"algosdk\";\nimport { ALLOWED_SOCIALS } from \"./constants.js\";\nimport {\n  AddressValidationError,\n  NameNotRegisteredError,\n  PropertyNotSetError,\n} from \"./errors.js\";\nimport CachedApi from \"./cachedApi.js\";\nimport { Domain, NameResponse, Record } from \"./interfaces.js\";\nimport { b64toString } from \"./util.js\";\nimport { Name } from \"./name.js\";\n\ndeclare const Buffer: any;\n\nexport class Resolver extends CachedApi {\n  private name?: Name;\n  // @ts-ignore\n  private resolvedData?: Record<string, any>;\n\n  constructor(\n    client: algosdk.Algodv2,\n    indexer: algosdk.Indexer,\n    name?: Name,\n    network?: string,\n    app?: number\n  ) {\n    super(client, indexer, network, app);\n    this.name = name;\n  }\n\n  private checkName(name?: string): string {\n    if (!name) {\n      // @ts-ignore\n      name = this?.name.name;\n    }\n    if (!name) {\n      throw new Error(\"A name must be provided\");\n    }\n    return name;\n  }\n\n  async resolveName(name?: string): Promise<NameResponse> {\n    name = this.checkName(name);\n    let found = false;\n    const error: NameResponse = {\n      found: false,\n      socials: [],\n      metadata: [],\n      address: \"Not Registered\",\n      value: \"Not Registered\",\n    };\n\n    try {\n      if (!this.resolvedData || name !== this.name?.name) {\n        this.resolvedData = await this.indexer\n          .lookupAccountByID((await this.getTeal(name as string)).address())\n          .do();\n      }\n\n      let accountInfo = this.resolvedData;\n\n      accountInfo = accountInfo.account[\"apps-local-state\"];\n      const length = accountInfo.length;\n      let address, value: any;\n\n      let socials: Record[] = [],\n        metadata: Record[] = [];\n\n      for (let i = 0; i < length; i++) {\n        const app = accountInfo[i];\n        if (app.id === this.APP) {\n          const kv = app[\"key-value\"];\n          const decodedKvPairs = this.decodeKvPairs(kv);\n          socials = this.filterKvPairs(decodedKvPairs, \"socials\");\n          metadata = this.filterKvPairs(decodedKvPairs, \"metadata\");\n          found = true;\n          address = metadata.filter((kv: Record) => kv.key === \"owner\")[0]\n            .value;\n          value = metadata.filter(\n            (kv: Record) => kv.key === \"account\" || kv.key === \"value\"\n          );\n          if (value.length > 0) {\n            value = value[0].value;\n          } else {\n            value = address;\n          }\n        }\n      }\n\n      if (found) {\n        return {\n          found,\n          address,\n          socials,\n          metadata,\n          value,\n        };\n      }\n\n      return error;\n    } catch (err) {\n      return error;\n    }\n  }\n\n  async getNamesOwnedByAddress(\n    address: string,\n    socials = false,\n    metadata = false,\n    limit = 10\n  ): Promise<Domain[]> {\n    if (!(await algosdk.isValidAddress(address))) {\n      throw new AddressValidationError();\n    }\n\n    let nextToken = \"\";\n    let txnLength = 1;\n    let txns = [];\n\n    while (txnLength > 0) {\n      try {\n        const info = await this.indexer\n          .searchForTransactions()\n          .address(address)\n          .addressRole(\"sender\")\n          .afterTime(\"2022-02-24\")\n          .txType(\"appl\")\n          .applicationID(this.APP)\n          .nextToken(nextToken)\n          .do();\n\n        txnLength = info.transactions.length;\n\n        if (txnLength > 0) {\n          nextToken = info[\"next-token\"];\n          txns.push(info.transactions);\n        }\n      } catch (err) {\n        return [];\n      }\n    }\n\n    let accountTxns: algosdk.Transaction[] = [];\n    for (let i = 0; i < txns.length; i++) {\n      accountTxns = accountTxns.concat(txns[i]);\n    }\n\n    txns = accountTxns;\n    const names: string[] = await this.filterDomainRegistrationTxns(txns);\n\n    if (names.length > 0) {\n      const details = [];\n\n      for (let i = 0; i < names.length; i++) {\n        if (details.length && details.length >= limit) {\n          break;\n        }\n        const info: NameResponse = await this.resolveName(names[i]);\n        if (!info.found) {\n          i--;\n          continue;\n        }\n        if (info.found && info.address === address) {\n          const domain: Domain = {\n            address: \"\",\n            found: true,\n            name: \"\",\n          };\n          domain.name = names[i] + \".algo\";\n          domain.address = info.address;\n          if (socials) {\n            domain.socials = info.socials;\n          }\n          if (metadata) {\n            domain.metadata = info.metadata;\n          }\n          details.push(domain);\n        }\n      }\n      return details;\n    }\n\n    return [];\n  }\n\n  filterKvPairs(kvPairs: Record[], type: string): Record[] {\n    const socials: Record[] = [],\n      metadata: Record[] = [];\n\n    for (const i in kvPairs) {\n      const { key, value } = kvPairs[i];\n\n      const kvObj = {\n        key,\n        value,\n      };\n\n      if (ALLOWED_SOCIALS.includes(key)) {\n        socials.push(kvObj);\n        continue;\n      }\n      metadata.push(kvObj);\n    }\n    if (type === \"socials\") {\n      return socials;\n    }\n    if (type === \"metadata\") {\n      return metadata;\n    }\n\n    return [];\n  }\n\n  decodeKvPairs(kvPairs: Record[]): Record[] {\n    return kvPairs.map((kvPair) => {\n      const decodedKvPair: Record = {\n        key: \"\",\n        value: \"\",\n      };\n\n      let { key } = kvPair;\n      const { value } = kvPair;\n\n      key = Buffer.from(key, \"base64\").toString();\n      decodedKvPair.key = key;\n\n      if (\n        key === \"owner\" ||\n        key === \"transfer_to\" ||\n        key === \"account\" ||\n        key === \"value\"\n      ) {\n        decodedKvPair.value = algosdk.encodeAddress(\n          // @ts-ignore\n          new Uint8Array(Buffer.from(value.bytes, \"base64\"))\n        );\n        return decodedKvPair;\n      }\n\n      // @ts-ignore\n      if (value.type === 1) {\n        // @ts-ignore\n        decodedKvPair.value = Buffer.from(value.bytes, \"base64\").toString();\n      }\n\n      // @ts-ignore\n      if (value.type === 2) {\n        // @ts-ignore\n        decodedKvPair.value = value.uint;\n      }\n\n      return decodedKvPair;\n    });\n  }\n\n  async filterDomainRegistrationTxns(txns: Transaction[]): Promise<string[]> {\n    const names: string[] = [];\n    try {\n      for (let i = 0; i < txns.length; i++) {\n        const txn: Transaction = txns[i];\n        if (txn[\"tx-type\" as keyof Transaction] === \"appl\") {\n          // @ts-ignore\n          if (txn[\"application-transaction\"][\"application-id\"] === this.APP) {\n            // @ts-ignore\n            const appArgs = txn[\"application-transaction\"][\"application-args\"];\n\n            if (\n              Buffer.from(appArgs[0], \"base64\").toString() === \"register_name\"\n            ) {\n              const decodedName = b64toString(appArgs[1]);\n              if (!names.includes(decodedName)) {\n                names.push(decodedName);\n              }\n            } else if (b64toString(appArgs[0]) === \"accept_transfer\") {\n              // @ts-ignore\n              const lsigAccount = txn[\"application-transaction\"][\"accounts\"][0];\n              let accountInfo = await this.indexer\n                .lookupAccountByID(lsigAccount)\n                .do();\n              accountInfo = accountInfo.account[\"apps-local-state\"];\n\n              const length = accountInfo.length;\n\n              for (let i = 0; i < length; i++) {\n                if (accountInfo[i].id === this.APP) {\n                  const kvPairs = accountInfo[i][\"key-value\"];\n                  const domainInfo = this.decodeKvPairs(kvPairs).filter(\n                    (domain: Record) => domain.key === \"name\"\n                  );\n                  if (!names.includes(domainInfo[0].value)) {\n                    names.push(domainInfo[0].value);\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    } catch (err) {\n      return [];\n    }\n\n    return names;\n  }\n\n  async getDefaultDomain(address: string): Promise<string | Error> {\n    let nextToken = \"\";\n    let txnLength = 1;\n    let txns = [];\n\n    while (txnLength > 0) {\n      try {\n        const info = await this.indexer\n          .searchForTransactions()\n          .address(address)\n          .addressRole(\"sender\")\n          .afterTime(\"2022-02-24\")\n          .txType(\"appl\")\n          .applicationID(this.APP)\n          .nextToken(nextToken)\n          .do();\n\n        txnLength = info.transactions.length;\n\n        if (txnLength > 0) {\n          nextToken = info[\"next-token\"];\n          txns.push(info.transactions);\n        }\n      } catch (err) {\n        throw Error(\"No transactions found\");\n      }\n    }\n\n    let accountTxns: algosdk.Transaction[] = [];\n    for (let i = 0; i < txns.length; i++) {\n      accountTxns = accountTxns.concat(txns[i]);\n    }\n\n    txns = accountTxns;\n    const appArgs = txns.map(\n      (txn: any) => txn[\"application-transaction\"][\"application-args\"][0]\n    );\n    const appAccounts = txns.map(\n      (txn: any) => txn[\"application-transaction\"][\"accounts\"]\n    );\n    for (const i in appArgs) {\n      if (\n        Buffer.from(appArgs[i], \"base64\").toString() === \"set_default_account\"\n      ) {\n        const account = appAccounts[i];\n        let accountInfo = await this.indexer.lookupAccountByID(account).do();\n        accountInfo = accountInfo[\"account\"][\"apps-local-state\"];\n        for (const i in accountInfo) {\n          if (accountInfo[i].id === this.APP) {\n            const domain = this.decodeKvPairs(\n              accountInfo[i][\"key-value\"]\n            ).filter((kv: any) => kv.key === \"name\");\n            if (domain.length > 0) {\n              return domain[0].value + \".algo\";\n            } else {\n              throw Error(\"Default domain not set\");\n            }\n          }\n        }\n      }\n    }\n    const domains = await this.getNamesOwnedByAddress(address, false, false, 1);\n    if (domains.length > 0) {\n      return domains[0].name;\n    }\n    throw Error(\"No domains owned by this address\");\n  }\n\n  async owner(): Promise<string> {\n    const domainInformation: NameResponse = await this.resolveName();\n    if (domainInformation.found) {\n      // @ts-ignore\n      return domainInformation.address;\n    }\n\n    // @ts-ignore\n    throw new NameNotRegisteredError(this.name.name);\n  }\n\n  async value(): Promise<string> {\n    const domainInformation: NameResponse = await this.resolveName();\n    if (domainInformation.found) {\n      // @ts-ignore\n      return domainInformation.value;\n    }\n\n    // @ts-ignore\n    throw new NameNotRegisteredError(this.name.name);\n  }\n\n  async text(key: string): Promise<string> {\n    const domainInformation: NameResponse = await this.resolveName();\n    if (domainInformation.found) {\n      const socialRecords: Record[] | undefined =\n        domainInformation.socials?.filter(\n          (social: Record) => social.key === key\n        );\n      if (socialRecords && socialRecords.length > 0) {\n        return socialRecords[0].value;\n      }\n      const metadataRecords = domainInformation.metadata?.filter(\n        (metadata: Record) => metadata.key === key\n      );\n      if (metadataRecords && metadataRecords.length > 0) {\n        return metadataRecords[0].value;\n      }\n\n      throw new PropertyNotSetError(key);\n    }\n\n    // @ts-ignore\n    throw new NameNotRegisteredError(this.name.name);\n  }\n\n  async expiry(): Promise<Date> {\n    const domainInformation: NameResponse = await this.resolveName();\n    if (domainInformation.found) {\n      //Convert milliseconds to seconds by multiplying with 1000\n      return new Date(\n        parseInt(\n          domainInformation?.metadata!.filter(\n            (data: Record) => data.key === \"expiry\"\n          )[0].value\n        ) * 1000\n      );\n    }\n\n    // @ts-ignore\n    throw new NameNotRegisteredError(this.name.name);\n  }\n\n  async content(): Promise<string> {\n    const domainInformation = await this.resolveName();\n    if (domainInformation.found) {\n      const contentRecords: Record[] = domainInformation?.metadata!.filter(\n        (kv: Record) => kv.key === \"content\"\n      );\n      if (contentRecords.length > 0) {\n        return contentRecords[0].value;\n      }\n      return \"Content field is not set\";\n    }\n\n    // @ts-ignore\n    throw new NameNotRegisteredError(this._name);\n  }\n}\n","import algosdk, { LogicSigAccount } from \"algosdk\";\nimport { generateTeal } from \"./util.js\";\nimport {\n  MAINNET_ESCROW,\n  APP_ID,\n  TESTNET_ESCROW,\n  TESTNET_APP_ID,\n} from \"./constants.js\";\n\nexport default class CachedApi {\n  private cache: { [name: string]: algosdk.LogicSigAccount } = {};\n\n  protected rpc: algosdk.Algodv2;\n  protected indexer: algosdk.Indexer;\n  protected ESCROW: string = MAINNET_ESCROW;\n  protected APP: number = APP_ID;\n\n  constructor(\n    client: algosdk.Algodv2,\n    indexer: algosdk.Indexer,\n    network?: string,\n    appId?: number\n  ) {\n    this.rpc = client;\n    this.indexer = indexer;\n    if (network === \"testnet\") {\n      this.ESCROW = algosdk.getApplicationAddress(appId ?? TESTNET_APP_ID) ?? TESTNET_ESCROW;\n      this.APP = appId ?? TESTNET_APP_ID;\n    }\n  }\n\n  protected async getTeal(name: string): Promise<LogicSigAccount> {\n    if (name in this.cache) {\n      return this.cache[name];\n    }\n\n    let program = await this.rpc\n      .compile(generateTeal(name as string, this.ESCROW, this.APP))\n      .do();\n    program = new Uint8Array(Buffer.from(program.result, \"base64\"));\n\n    this.cache[name] = new algosdk.LogicSigAccount(program);\n    return this.cache[name];\n  }\n}\n","export function generateTeal(name: string, escrow?: string, app?: number) {\n  return `#pragma version 4\n    byte \"${name}\"\n    len\n    int 3\n    ==\n    bnz main_l22\n    byte \"${name}\"\n    len\n    int 4\n    ==\n    bnz main_l13\n    byte \"${name}\"\n    len\n    int 5\n    >=\n    bnz main_l4\n    err\n    main_l4:\n    gtxn 0 Amount\n    int 5000000\n    >=\n    assert\n    byte \"${name}\"\n    len\n    int 64\n    <=\n    assert\n    int 0\n    store 0\n    main_l5:\n    load 0\n    byte \"${name}\"\n    len\n    <\n    bnz main_l12\n    global GroupSize\n    int 2\n    ==\n    global GroupSize\n    int 4\n    ==\n    ||\n    assert\n    gtxn 0 Sender\n    gtxn 1 Sender\n    ==\n    assert\n    gtxn 0 Receiver\n    addr ${escrow}\n    ==\n    assert\n    global GroupSize\n    int 2\n    ==\n    bnz main_l11\n    global GroupSize\n    int 4\n    ==\n    bnz main_l10\n    int 0\n    return\n    main_l9:\n    int 1\n    assert\n    int 1\n    b main_l31\n    main_l10:\n    gtxn 1 Receiver\n    gtxn 2 Sender\n    ==\n    gtxn 2 ApplicationID\n    int ${app}\n    ==\n    &&\n    gtxn 2 OnCompletion\n    int OptIn\n    ==\n    &&\n    gtxn 3 ApplicationID\n    int ${app}\n    ==\n    &&\n    gtxn 3 Sender\n    gtxn 0 Sender\n    ==\n    &&\n    gtxna 3 ApplicationArgs 0\n    byte \"register_name\"\n    ==\n    &&\n    gtxna 3 ApplicationArgs 1\n    byte \"${name}\"\n    ==\n    &&\n    assert\n    b main_l9\n    main_l11:\n    gtxn 1 ApplicationID\n    int ${app}\n    ==\n    gtxna 1 ApplicationArgs 0\n    byte \"register_name\"\n    ==\n    &&\n    gtxna 1 ApplicationArgs 1\n    byte \"${name}\"\n    ==\n    &&\n    assert\n    b main_l9\n    main_l12:\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 97\n    >=\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 122\n    <=\n    &&\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 48\n    >=\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 57\n    <=\n    &&\n    ||\n    assert\n    load 0\n    int 1\n    +\n    store 0\n    b main_l5\n    main_l13:\n    gtxn 0 Amount\n    int 50000000\n    >=\n    assert\n    byte \"${name}\"\n    len\n    int 64\n    <=\n    assert\n    int 0\n    store 0\n    main_l14:\n    load 0\n    byte \"${name}\"\n    len\n    <\n    bnz main_l21\n    global GroupSize\n    int 2\n    ==\n    global GroupSize\n    int 4\n    ==\n    ||\n    assert\n    gtxn 0 Sender\n    gtxn 1 Sender\n    ==\n    assert\n    gtxn 0 Receiver\n    addr ${escrow}\n    ==\n    assert\n    global GroupSize\n    int 2\n    ==\n    bnz main_l20\n    global GroupSize\n    int 4\n    ==\n    bnz main_l19\n    int 0\n    return\n    main_l18:\n    int 1\n    assert\n    int 1\n    b main_l31\n    main_l19:\n    gtxn 1 Receiver\n    gtxn 2 Sender\n    ==\n    gtxn 2 ApplicationID\n    int ${app}\n    ==\n    &&\n    gtxn 2 OnCompletion\n    int OptIn\n    ==\n    &&\n    gtxn 3 ApplicationID\n    int ${app}\n    ==\n    &&\n    gtxn 3 Sender\n    gtxn 0 Sender\n    ==\n    &&\n    gtxna 3 ApplicationArgs 0\n    byte \"register_name\"\n    ==\n    &&\n    gtxna 3 ApplicationArgs 1\n    byte \"${name}\"\n    ==\n    &&\n    assert\n    b main_l18\n    main_l20:\n    gtxn 1 ApplicationID\n    int ${app}\n    ==\n    gtxna 1 ApplicationArgs 0\n    byte \"register_name\"\n    ==\n    &&\n    gtxna 1 ApplicationArgs 1\n    byte \"${name}\"\n    ==\n    &&\n    assert\n    b main_l18\n    main_l21:\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 97\n    >=\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 122\n    <=\n    &&\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 48\n    >=\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 57\n    <=\n    &&\n    ||\n    assert\n    load 0\n    int 1\n    +\n    store 0\n    b main_l14\n    main_l22:\n    gtxn 0 Amount\n    int 150000000\n    >=\n    assert\n    byte \"${name}\"\n    len\n    int 64\n    <=\n    assert\n    int 0\n    store 0\n    main_l23:\n    load 0\n    byte \"${name}\"\n    len\n    <\n    bnz main_l30\n    global GroupSize\n    int 2\n    ==\n    global GroupSize\n    int 4\n    ==\n    ||\n    assert\n    gtxn 0 Sender\n    gtxn 1 Sender\n    ==\n    assert\n    gtxn 0 Receiver\n    addr ${escrow}\n    ==\n    assert\n    global GroupSize\n    int 2\n    ==\n    bnz main_l29\n    global GroupSize\n    int 4\n    ==\n    bnz main_l28\n    int 0\n    return\n    main_l27:\n    int 1\n    assert\n    int 1\n    b main_l31\n    main_l28:\n    gtxn 1 Receiver\n    gtxn 2 Sender\n    ==\n    gtxn 2 ApplicationID\n    int ${app}\n    ==\n    &&\n    gtxn 2 OnCompletion\n    int OptIn\n    ==\n    &&\n    gtxn 3 ApplicationID\n    int ${app}\n    ==\n    &&\n    gtxn 3 Sender\n    gtxn 0 Sender\n    ==\n    &&\n    gtxna 3 ApplicationArgs 0\n    byte \"register_name\"\n    ==\n    &&\n    gtxna 3 ApplicationArgs 1\n    byte \"${name}\"\n    ==\n    &&\n    assert\n    b main_l27\n    main_l29:\n    gtxn 1 ApplicationID\n    int ${app}\n    ==\n    gtxna 1 ApplicationArgs 0\n    byte \"register_name\"\n    ==\n    &&\n    gtxna 1 ApplicationArgs 1\n    byte \"${name}\"\n    ==\n    &&\n    assert\n    b main_l27\n    main_l30:\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 97\n    >=\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 122\n    <=\n    &&\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 48\n    >=\n    byte \"${name}\"\n    load 0\n    getbyte\n    int 57\n    <=\n    &&\n    ||\n    assert\n    load 0\n    int 1\n    +\n    store 0\n    b main_l23\n    main_l31:\n    return`;\n}\n\nexport function b64toString(data: string): string {\n  return Buffer.from(data, \"base64\").toString();\n}\n\nexport function toIntArray(data: string): Uint8Array {\n  return new Uint8Array(Buffer.from(data));\n}\n","import algosdk, { Transaction } from \"algosdk\";\nimport { REGISTRATION_PRICE, TRANSFER_FEE } from \"./constants.js\";\nimport CachedApi from \"./cachedApi.js\";\nimport { toIntArray } from \"./util.js\";\nimport { RegistrationTxns } from \"./interfaces.js\";\nimport { Record } from \"./interfaces.js\";\nimport { Name } from \"./name.js\";\n\nexport class Transactions extends CachedApi {\n  private name: string;\n\n  constructor(\n    client: algosdk.Algodv2,\n    indexer: algosdk.Indexer,\n    name: Name | string,\n    network?: string,\n    app?: number\n  ) {\n    super(client, indexer, network, app);\n    if (name instanceof Name) {\n      this.name = name.name;\n    } else {\n      this.name = name;\n    }\n  }\n\n  calculatePrice(period: number): number {\n    const amounts: { [len: number]: number } = {\n      3: REGISTRATION_PRICE.CHAR_3_AMOUNT,\n      4: REGISTRATION_PRICE.CHAR_4_AMOUNT,\n      5: REGISTRATION_PRICE.CHAR_5_AMOUNT,\n    };\n    const len = this.name.length >= 5 ? 5 : this.name.length;\n\n    return amounts[len] * period;\n  }\n\n  async prepareNameRegistrationTransactions(\n    address: string,\n    period: number\n  ): Promise<RegistrationTxns> {\n    const algodClient = this.rpc;\n    /* 1st Txn - Payment to Smart Contract */\n    let amount = 0;\n    const lsig = await this.getTeal(this.name);\n    const params = await algodClient.getTransactionParams().do();\n\n    params.fee = 1000;\n    params.flatFee = true;\n\n    let receiver = algosdk.getApplicationAddress(this.APP);\n    let sender = address;\n\n    if (period === undefined) {\n      period = 1;\n    }\n\n    amount = this.calculatePrice(period);\n\n    const closeToRemaninder = undefined;\n    const note = undefined;\n\n    const txn1 = algosdk.makePaymentTxnWithSuggestedParams(\n      sender,\n      receiver,\n      amount,\n      closeToRemaninder,\n      note,\n      params\n    );\n\n    const groupTxns = [];\n    groupTxns.push(txn1);\n\n    /* 2nd Txn - Funding Lsig */\n\n    sender = address;\n    receiver = lsig.address();\n    amount = 915000;\n\n    const txn2 = algosdk.makePaymentTxnWithSuggestedParams(\n      sender,\n      receiver,\n      amount,\n      closeToRemaninder,\n      note,\n      params\n    );\n\n    groupTxns.push(txn2);\n\n    /* 3rd Txn - Optin to App from Lsig */\n\n    const txn3 = await algosdk.makeApplicationOptInTxnFromObject({\n      from: lsig.address(),\n      suggestedParams: params,\n      appIndex: this.APP,\n    });\n\n    groupTxns.push(txn3);\n\n    /* 4th Txn - Account registers name */\n\n    const method = \"register_name\";\n\n    const appArgs = [];\n\n    appArgs.push(toIntArray(method));\n    appArgs.push(toIntArray(this.name));\n    appArgs.push(algosdk.encodeUint64(period));\n    const txn4 = await algosdk.makeApplicationNoOpTxn(\n      address,\n      params,\n      this.APP,\n      appArgs,\n      [lsig.address()]\n    );\n    groupTxns.push(txn4);\n\n    algosdk.assignGroupID(groupTxns);\n\n    const signedOptinTxn = algosdk.signLogicSigTransaction(groupTxns[2], lsig);\n\n    return {\n      optinTxn: signedOptinTxn,\n      txns: groupTxns,\n      unsignedOptinTxn: groupTxns[2],\n    };\n  }\n\n  async prepareUpdateNamePropertyTransactions(\n    address: string,\n    editedHandles: Record\n  ): Promise<Transaction[]> {\n    const lsig = await this.getTeal(this.name);\n    const params = await this.rpc.getTransactionParams().do();\n    params.fee = 1000;\n    params.flatFee = true;\n\n    const method = \"update_name\";\n\n    const groupTxns = [];\n\n    for (const key in editedHandles) {\n      const appArgs = [];\n      const network = key;\n      const handle: string = editedHandles[key as keyof Record];\n\n      appArgs.push(toIntArray(method));\n      appArgs.push(toIntArray(network as string));\n      appArgs.push(toIntArray(handle as string));\n\n      const txn = await algosdk.makeApplicationNoOpTxn(\n        address,\n        params,\n        this.APP,\n        appArgs,\n        [lsig.address()]\n      );\n      groupTxns.push(txn);\n    }\n\n    if (Object.keys(editedHandles).length > 1) {\n      algosdk.assignGroupID(groupTxns);\n    }\n\n    return groupTxns;\n  }\n\n  async prepareNameRenewalTxns(\n    sender: string,\n    years: number\n  ): Promise<Transaction[]> {\n    const params = await this.rpc.getTransactionParams().do();\n    const receiver = algosdk.getApplicationAddress(this.APP);\n    const closeToRemaninder = undefined;\n    const note = undefined;\n    const paymentTxn = algosdk.makePaymentTxnWithSuggestedParams(\n      sender,\n      receiver,\n      this.calculatePrice(years),\n      closeToRemaninder,\n      note,\n      params\n    );\n\n    const lsig = await this.getTeal(this.name);\n\n    const appArgs = [];\n    appArgs.push(toIntArray(\"renew_name\"));\n    appArgs.push(algosdk.encodeUint64(years));\n\n    const applicationTxn = algosdk.makeApplicationNoOpTxn(\n      sender,\n      params,\n      this.APP,\n      appArgs,\n      [lsig.address()]\n    );\n\n    algosdk.assignGroupID([paymentTxn, applicationTxn]);\n\n    return [paymentTxn, applicationTxn];\n  }\n\n  async prepareUpdateValueTxn(address: string, value: string) {\n    const params = await this.rpc.getTransactionParams().do();\n\n    const lsig = await this.getTeal(this.name);\n\n    const appArgs = [];\n    appArgs.push(toIntArray(\"set_default_account\"));\n\n    return algosdk.makeApplicationNoOpTxn(address, params, this.APP, appArgs, [\n      lsig.address(),\n      value,\n    ]);\n  }\n\n  async prepareSetDefaultDomainTxn(address: string) {\n    const params = await this.rpc.getTransactionParams().do();\n\n    const lsig = await this.getTeal(this.name);\n\n    const appArgs = [];\n    appArgs.push(toIntArray(\"set_default_account\"));\n\n    return algosdk.makeApplicationNoOpTxn(address, params, this.APP, appArgs, [\n      lsig.address(),\n    ]);\n  }\n\n  async prepareInitiateNameTransferTransaction(\n    sender: string,\n    newOwner: string,\n    price: number\n  ): Promise<Transaction> {\n    price = algosdk.algosToMicroalgos(price);\n    const params = await this.rpc.getTransactionParams().do();\n\n    const lsig = await this.getTeal(this.name);\n\n    const appArgs = [];\n    appArgs.push(toIntArray(\"initiate_transfer\"));\n    appArgs.push(algosdk.encodeUint64(price));\n\n    return algosdk.makeApplicationNoOpTxn(sender, params, this.APP, appArgs, [\n      lsig.address(),\n      newOwner,\n    ]);\n  }\n\n  async prepareAcceptNameTransferTransactions(\n    sender: string,\n    receiver: string,\n    amt: number\n  ): Promise<Transaction[]> {\n    amt = algosdk.algosToMicroalgos(amt);\n    const params = await this.rpc.getTransactionParams().do();\n\n    const closeToRemaninder = undefined;\n    const note = undefined;\n    const paymentToOwnerTxn = algosdk.makePaymentTxnWithSuggestedParams(\n      sender,\n      receiver,\n      amt,\n      closeToRemaninder,\n      note,\n      params\n    );\n\n    receiver = algosdk.getApplicationAddress(this.APP);\n\n    const paymentToSmartContractTxn = algosdk.makePaymentTxnWithSuggestedParams(\n      sender,\n      receiver,\n      TRANSFER_FEE,\n      closeToRemaninder,\n      note,\n      params\n    );\n    const lsig = await this.getTeal(this.name);\n\n    const appArgs = [];\n    appArgs.push(toIntArray(\"accept_transfer\"));\n\n    const applicationTxn = algosdk.makeApplicationNoOpTxn(\n      sender,\n      params,\n      this.APP,\n      appArgs,\n      [lsig.address()]\n    );\n\n    algosdk.assignGroupID([\n      paymentToOwnerTxn,\n      paymentToSmartContractTxn,\n      applicationTxn,\n    ]);\n\n    return [paymentToOwnerTxn, paymentToSmartContractTxn, applicationTxn];\n  }\n}\n","import { Resolver } from \"./resolver.js\";\nimport { Transactions } from \"./transactions.js\";\nimport {\n  AddressValidationError,\n  IncorrectOwnerError,\n  InvalidNameError,\n  NameNotRegisteredError,\n} from \"./errors.js\";\nimport {\n  NameResponse,\n  NameConstructor,\n  RegistrationTxns,\n} from \"./interfaces.js\";\nimport { isValidAddress } from \"./validation.js\";\nimport { Transaction } from \"algosdk\";\nimport { Record } from \"./interfaces.js\";\n\nexport class Name {\n  private resolver: Resolver;\n  private transactions: Transactions;\n  private _name: string;\n\n  constructor(options: NameConstructor) {\n    const { name, rpc, indexer, network, app } = options;\n    this._name = name;\n    this.resolver = new Resolver(rpc, indexer, this, network, app);\n    this.transactions = new Transactions(rpc, indexer, this, network, app);\n  }\n\n  get name(): string {\n    return this._name;\n  }\n\n  async isRegistered(): Promise<boolean> {\n    const status: NameResponse = await this.resolver.resolveName();\n    return status.found;\n  }\n\n  async getOwner(): Promise<string> {\n    return await this.resolver.owner();\n  }\n\n  async getValue(): Promise<string> {\n    return await this.resolver.value();\n  }\n\n  async getContent(): Promise<string> {\n    return await this.resolver.content();\n  }\n\n  async getText(key: string): Promise<string> {\n    return await this.resolver.text(key);\n  }\n\n  async getAllInformation(): Promise<NameResponse> {\n    return await this.resolver.resolveName();\n  }\n\n  async getExpiry(): Promise<Date> {\n    return await this.resolver.expiry();\n  }\n\n  async isValidTransaction(\n    sender: string,\n    receiver?: string,\n    method?: string\n  ): Promise<\n    | boolean\n    | IncorrectOwnerError\n    | InvalidNameError\n    | AddressValidationError\n    | NameNotRegisteredError\n  > {\n    if (!(await this.isRegistered())) {\n      throw new NameNotRegisteredError(this._name);\n    }\n    if (!isValidAddress(sender)) {\n      throw new AddressValidationError();\n    }\n    if (receiver) {\n      if (!isValidAddress(receiver)) throw new AddressValidationError();\n    }\n    const owner: string | NameNotRegisteredError = await this.getOwner();\n\n    if (!(await isValidAddress(sender))) {\n      throw new AddressValidationError();\n    }\n    if (!receiver && !method) {\n      if (owner !== sender) {\n        throw new IncorrectOwnerError(this._name, sender);\n      }\n    } else if (sender && receiver) {\n      if (method === \"initiate_transfer\") {\n        if (owner !== sender) {\n          throw new IncorrectOwnerError(this._name, sender);\n        }\n      } else if (method === \"accept_transfer\") {\n        if (owner !== receiver) {\n          throw new IncorrectOwnerError(this._name, receiver);\n        }\n      }\n    }\n    return true;\n  }\n\n  async register(address: string, period: number): Promise<RegistrationTxns> {\n    if (await this.isRegistered()) {\n      throw new Error(\"Name already registered\");\n    }\n    if (!isValidAddress(address)) {\n      throw new AddressValidationError();\n    }\n\n    return await this.transactions.prepareNameRegistrationTransactions(\n      address,\n      period\n    );\n  }\n\n  async update(address: string, editedHandles: Record): Promise<Transaction[]> {\n    await this.isValidTransaction(address);\n    return await this.transactions.prepareUpdateNamePropertyTransactions(\n      address,\n      editedHandles\n    );\n  }\n\n  async renew(address: string, years: number): Promise<Transaction[]> {\n    await this.isValidTransaction(address);\n    return await this.transactions.prepareNameRenewalTxns(address, years);\n  }\n\n  async setValue(address: string, value: string): Promise<Transaction> {\n    await this.isValidTransaction(address);\n    return await this.transactions.prepareUpdateValueTxn(address, value);\n  }\n\n  async setDefaultDomain(address: string): Promise<Transaction> {\n    await this.isValidTransaction(address);\n    return await this.transactions.prepareSetDefaultDomainTxn(address);\n  }\n\n  async initTransfer(\n    owner: string,\n    newOwner: string,\n    price: number\n  ): Promise<Transaction> {\n    await this.isValidTransaction(owner, newOwner, \"initiate_transfer\");\n    return await this.transactions.prepareInitiateNameTransferTransaction(\n      owner,\n      newOwner,\n      price\n    );\n  }\n\n  async acceptTransfer(\n    newOwner: string,\n    owner: string,\n    price: number\n  ): Promise<Transaction[]> {\n    await this.isValidTransaction(newOwner, owner, \"accept_transfer\");\n    return await this.transactions.prepareAcceptNameTransferTransactions(\n      newOwner,\n      owner,\n      price\n    );\n  }\n}\n","import { Resolver } from \"./resolver.js\";\nimport { AddressConstructor, Domain, DomainOptions } from \"./interfaces.js\";\n\nexport class Address {\n  private address: string;\n  private resolver: Resolver;\n\n  constructor(options: AddressConstructor) {\n    const { address, rpc, indexer, network, app } = options;\n    this.address = address;\n    this.resolver = new Resolver(rpc, indexer, undefined, network, app);\n  }\n\n  async getNames(options?: DomainOptions): Promise<Domain[]> {\n    return await this.resolver.getNamesOwnedByAddress(\n      this.address,\n      options?.socials,\n      options?.metadata,\n      options?.limit\n    );\n  }\n\n  async getDefaultDomain(): Promise<string | Error> {\n    return await this.resolver.getDefaultDomain(this.address);\n  }\n}\n"],"mappings":"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","names":[]}