@dfinity/nns 0.7.0 → 0.8.0-next-2022-09-22
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/candid/genesis_token.d.ts +10 -8
- package/dist/candid/governance.certified.idl.js +107 -4
- package/dist/candid/governance.d.ts +99 -44
- package/dist/candid/governance.did +49 -3
- package/dist/candid/governance.idl.js +107 -4
- package/dist/candid/ledger.d.ts +15 -15
- package/dist/candid/sns_wasm.d.ts +19 -16
- package/dist/cjs/index.cjs.js +7 -7
- package/dist/cjs/index.cjs.js.map +2 -2
- package/dist/esm/account_identifier.js +1 -1
- package/dist/esm/{chunk-SXX75EEC.js → chunk-I4ASNREM.js} +3 -3
- package/dist/esm/{chunk-SXX75EEC.js.map → chunk-I4ASNREM.js.map} +2 -2
- package/dist/esm/chunk-NA2JZFZA.js +2 -0
- package/dist/esm/chunk-NA2JZFZA.js.map +7 -0
- package/dist/esm/{chunk-EBY4MEUW.js → chunk-OQ6FZDUA.js} +5 -5
- package/dist/esm/{chunk-EBY4MEUW.js.map → chunk-OQ6FZDUA.js.map} +2 -2
- package/dist/esm/governance.canister.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/ledger.canister.js +1 -1
- package/dist/types/canisters/governance/request.converters.d.ts +1 -2
- package/dist/types/types/governance_converters.d.ts +27 -0
- package/dist/types/utils/converter.utils.d.ts +0 -5
- package/package.json +3 -3
- package/dist/esm/chunk-LWTBV6PO.js +0 -2
- package/dist/esm/chunk-LWTBV6PO.js.map +0 -7
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as W,b as Q}from"./chunk-JKX2HJUB.js";import{b as M}from"./chunk-H6Y4RZE2.js";import{b as U}from"./chunk-WMBK2I6I.js";import{a as f}from"./chunk-IL4SIX75.js";import{c as H}from"./chunk-XMMTS4WT.js";import{b as E}from"./chunk-Q3ETFEQV.js";import{createServices as Z}from"@dfinity/utils";var z=({IDL:e})=>{let t=e.Nat64,r=e.Record({start:t,length:e.Nat64}),n=e.Nat64,c=e.Vec(e.Nat8),o=e.Record({e8s:e.Nat64}),a=e.Variant({Burn:e.Record({from:c,amount:o}),Mint:e.Record({to:c,amount:o}),Transfer:e.Record({to:c,fee:o,from:c,amount:o})}),i=e.Record({timestamp_nanos:e.Nat64}),l=e.Record({memo:n,operation:e.Opt(a),created_at_time:i}),d=e.Record({transaction:l,timestamp:i,parent_hash:e.Opt(e.Vec(e.Nat8))}),m=e.Record({blocks:e.Vec(d)}),T=e.Variant({BadFirstBlockIndex:e.Record({requested_index:t,first_valid_index:t}),Other:e.Record({error_message:e.Text,error_code:e.Nat64})}),p=e.Variant({Ok:m,Err:T}),x=e.Func([r],[p],[]),w=e.Record({certificate:e.Opt(e.Vec(e.Nat8)),blocks:e.Vec(d),chain_length:e.Nat64,first_block_index:t,archived_blocks:e.Vec(e.Record({callback:x,start:t,length:e.Nat64}))}),F=e.Record({account:c}),v=e.Record({canister_id:e.Principal}),A=e.Record({archives:e.Vec(v)}),k=e.Vec(e.Nat8),N=e.Record({to:c,fee:o,memo:n,from_subaccount:e.Opt(k),created_at_time:e.Opt(i),amount:o}),B=e.Variant({TxTooOld:e.Record({allowed_window_nanos:e.Nat64}),BadFee:e.Record({expected_fee:o}),TxDuplicate:e.Record({duplicate_of:t}),TxCreatedInFuture:e.Null,InsufficientFunds:e.Record({balance:o})}),S=e.Variant({Ok:t,Err:B}),O=e.Record({}),q=e.Record({transfer_fee:o});return e.Service({_blocks:e.Func([r],[w],[]),account_balance:e.Func([F],[o],[]),archives:e.Func([],[A],[]),decimals:e.Func([],[e.Record({decimals:e.Nat32})],[]),name:e.Func([],[e.Record({name:e.Text})],[]),symbol:e.Func([],[e.Record({symbol:e.Text})],[]),transfer:e.Func([N],[S],[]),transfer_fee:e.Func([O],[q],[])})};var G=({IDL:e})=>{let t=e.Vec(e.Nat8),r=e.Record({account:t}),n=e.Record({e8s:e.Nat64}),c=e.Record({canister_id:e.Principal}),o=e.Record({archives:e.Vec(c)}),a=e.Nat64,i=e.Record({start:a,length:e.Nat64}),l=e.Nat64,d=e.Variant({Burn:e.Record({from:t,amount:n}),Mint:e.Record({to:t,amount:n}),Transfer:e.Record({to:t,fee:n,from:t,amount:n})}),m=e.Record({timestamp_nanos:e.Nat64}),T=e.Record({memo:l,operation:e.Opt(d),created_at_time:m}),p=e.Record({transaction:T,timestamp:m,parent_hash:e.Opt(e.Vec(e.Nat8))}),x=e.Record({blocks:e.Vec(p)}),w=e.Variant({BadFirstBlockIndex:e.Record({requested_index:a,first_valid_index:a}),Other:e.Record({error_message:e.Text,error_code:e.Nat64})}),F=e.Variant({Ok:x,Err:w}),v=e.Func([i],[F],["query"]),A=e.Record({certificate:e.Opt(e.Vec(e.Nat8)),blocks:e.Vec(p),chain_length:e.Nat64,first_block_index:a,archived_blocks:e.Vec(e.Record({callback:v,start:a,length:e.Nat64}))}),k=e.Vec(e.Nat8),N=e.Record({to:t,fee:n,memo:l,from_subaccount:e.Opt(k),created_at_time:e.Opt(m),amount:n}),B=e.Variant({TxTooOld:e.Record({allowed_window_nanos:e.Nat64}),BadFee:e.Record({expected_fee:n}),TxDuplicate:e.Record({duplicate_of:a}),TxCreatedInFuture:e.Null,InsufficientFunds:e.Record({balance:n})}),S=e.Variant({Ok:a,Err:B}),O=e.Record({}),q=e.Record({transfer_fee:n});return e.Service({account_balance:e.Func([r],[n],["query"]),archives:e.Func([],[o],["query"]),decimals:e.Func([],[e.Record({decimals:e.Nat32})],["query"]),name:e.Func([],[e.Record({name:e.Text})],["query"]),query_blocks:e.Func([i],[A],["query"]),symbol:e.Func([],[e.Record({symbol:e.Text})],["query"]),transfer:e.Func([N],[S],[]),transfer_fee:e.Func([O],[q],["query"])})};var s=E(H());var R=E(H());import{arrayOfNumberToUint8Array as Y}from"@dfinity/utils";var J=e=>{let t=new Uint8Array(e).buffer,r=new R.Subaccount;return r.setSubAccount(new Uint8Array(t)),r},V=e=>{let t=new R.ICPTs;return t.setE8s(e.toString(10)),t},j=e=>({e8s:e}),$=({to:e,amount:t,memo:r,fee:n,fromSubAccount:c})=>({to:e.toUint8Array(),fee:j(n??f),amount:j(t),memo:r??BigInt(0),created_at_time:[],from_subaccount:c===void 0?[]:[Y(c)]});var u=class extends Error{},C=class extends u{},y=class extends u{constructor(r){super();this.balance=r}},h=class extends u{constructor(r){super();this.allowed_window_secs=r}},b=class extends u{},g=class extends u{constructor(r){super();this.duplicateOf=r}},P=class extends u{constructor(r){super();this.expectedFee=r}},K=e=>"TxDuplicate"in e?new g(e.TxDuplicate.duplicate_of):"InsufficientFunds"in e?new y(e.InsufficientFunds.balance.e8s):"TxCreatedInFuture"in e?new b:"TxTooOld"in e?new h(Number(e.TxTooOld.allowed_window_nanos)):"BadFee"in e?new P(e.BadFee.expected_fee.e8s):new u(`Unknown error type ${JSON.stringify(e)}`),X=e=>{let{message:t}=e;if(t.includes("Reject code: 5")){if(t.match(/Sending from (.*) is not allowed/))return new C;{let r=t.match(/transaction.*duplicate.* in block (\d+)/);if(r&&r.length>1)return new g(BigInt(r[1]))}{let r=t.match(/debit account.*, current balance: (\d*(\.\d*)?)/);if(r&&r.length>1){let n=U(r[1]);if(typeof n=="bigint")return new y(n)}}if(t.includes("is in future"))return new b;{let r=t.match(/older than (\d+)/);if(r&&r.length>1)return new h(Number.parseInt(r[1]))}}throw e};var _=class{constructor(t,r,n,c,o,a,i=!1){this.agent=t;this.canisterId=r;this.service=n;this.certifiedService=c;this.updateFetcher=o;this.queryFetcher=a;this.hardwareWallet=i}static create(t={}){let r=t.canisterId??M,{service:n,certifiedService:c,agent:o}=Z({options:{...t,canisterId:r},idlFactory:G,certifiedIdlFactory:z});return new _(o,r,n,c,t.updateCallOverride??W,t.queryCallOverride??Q,t.hardwareWallet)}accountBalance=async({accountIdentifier:t,certified:r=!0})=>this.hardwareWallet?this.accountBalanceHardwareWallet({accountIdentifier:t,certified:r}):(await(r?this.certifiedService:this.service).account_balance({account:t.toUint8Array()})).e8s;transactionFee=async()=>{let{transfer_fee:{e8s:t}}=await this.service.transfer_fee({});return t};transfer=async t=>{if(this.hardwareWallet)return this.transferHardwareWallet(t);t.fee===void 0&&(t.fee=this.hardwareWallet?f:await this.transactionFee());let r=$(t),n=await this.certifiedService.transfer(r);if("Err"in n)throw K(n.Err);return n.Ok};accountBalanceHardwareWallet=async({accountIdentifier:t,certified:r=!0})=>{let n=r?this.updateFetcher:this.queryFetcher,c=new s.AccountBalanceRequest;c.setAccount(t.toProto());let o=await n({agent:this.agent,canisterId:this.canisterId,methodName:"account_balance_pb",arg:c.serializeBinary()});return BigInt(s.ICPTs.deserializeBinary(new Uint8Array(o)).getE8s())};transferHardwareWallet=async({to:t,amount:r,memo:n,fee:c,fromSubAccount:o})=>{let a=new s.SendRequest;a.setTo(t.toProto());let i=new s.Payment;i.setReceiverGets(V(r)),a.setPayment(i),a.setMaxFee(V(c??f));let l=new s.Memo;l.setMemo((n??BigInt(0)).toString()),a.setMemo(l),o!==void 0&&a.setFromSubaccount(J(o));try{let d=await this.updateFetcher({agent:this.agent,canisterId:this.canisterId,methodName:"send_pb",arg:a.serializeBinary()});return BigInt(s.BlockHeight.deserializeBinary(d).getHeight())}catch(d){throw d instanceof Error?X(d):d}}};export{u as a,C as b,y as c,h as d,b as e,g as f,P as g,K as h,X as i,_ as j};
|
|
2
|
+
//# sourceMappingURL=chunk-NA2JZFZA.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ledger.canister.ts", "../../candid/ledger.certified.idl.js", "../../candid/ledger.idl.js", "../../src/canisters/ledger/ledger.request.converts.ts", "../../src/errors/ledger.errors.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ActorSubclass, Agent } from \"@dfinity/agent\";\nimport type { Principal } from \"@dfinity/principal\";\nimport { createServices } from \"@dfinity/utils\";\nimport type { _SERVICE as LedgerService } from \"../candid/ledger\";\nimport { idlFactory as certifiedIdlFactory } from \"../candid/ledger.certified.idl\";\nimport { idlFactory } from \"../candid/ledger.idl\";\nimport {\n AccountBalanceRequest,\n BlockHeight as PbBlockHeight,\n ICPTs,\n Memo,\n Payment,\n SendRequest,\n} from \"../proto/ledger_pb\";\nimport type { AccountIdentifier } from \"./account_identifier\";\nimport {\n subAccountNumbersToSubaccount,\n toICPTs,\n toTransferRawRequest,\n} from \"./canisters/ledger/ledger.request.converts\";\nimport { MAINNET_LEDGER_CANISTER_ID } from \"./constants/canister_ids\";\nimport { TRANSACTION_FEE } from \"./constants/constants\";\nimport {\n mapTransferError,\n mapTransferProtoError,\n} from \"./errors/ledger.errors\";\nimport type { BlockHeight } from \"./types/common\";\nimport type {\n LedgerCanisterCall,\n LedgerCanisterOptions,\n} from \"./types/ledger.options\";\nimport type { TransferRequest } from \"./types/ledger_converters\";\nimport { queryCall, updateCall } from \"./utils/proto.utils\";\n\nexport class LedgerCanister {\n private constructor(\n private readonly agent: Agent,\n private readonly canisterId: Principal,\n private readonly service: ActorSubclass<LedgerService>,\n private readonly certifiedService: ActorSubclass<LedgerService>,\n private readonly updateFetcher: LedgerCanisterCall,\n private readonly queryFetcher: LedgerCanisterCall,\n private readonly hardwareWallet: boolean = false\n ) {}\n\n public static create(options: LedgerCanisterOptions = {}) {\n const canisterId: Principal =\n options.canisterId ?? MAINNET_LEDGER_CANISTER_ID;\n\n const { service, certifiedService, agent } = createServices<LedgerService>({\n options: {\n ...options,\n canisterId,\n },\n idlFactory,\n certifiedIdlFactory,\n });\n\n return new LedgerCanister(\n agent,\n canisterId,\n service,\n certifiedService,\n options.updateCallOverride ?? updateCall,\n options.queryCallOverride ?? queryCall,\n options.hardwareWallet\n );\n }\n\n /**\n * Returns the balance of the specified account identifier.\n *\n * If `certified` is true, the request is fetched as an update call, otherwise\n * it is fetched using a query call.\n *\n * @throws {@link Error}\n */\n public accountBalance = async ({\n accountIdentifier,\n certified = true,\n }: {\n accountIdentifier: AccountIdentifier;\n certified?: boolean;\n }): Promise<bigint> => {\n if (this.hardwareWallet) {\n return this.accountBalanceHardwareWallet({\n accountIdentifier,\n certified,\n });\n }\n const service = certified ? this.certifiedService : this.service;\n const tokens = await service.account_balance({\n account: accountIdentifier.toUint8Array(),\n });\n return tokens.e8s;\n };\n\n /**\n * Returns the transaction fee of the ledger canister\n * @returns {BigInt}\n */\n public transactionFee = async () => {\n const {\n transfer_fee: { e8s },\n } = await this.service.transfer_fee({});\n return e8s;\n };\n\n /**\n * Transfer ICP from the caller to the destination `accountIdentifier`.\n * Returns the index of the block containing the tx if it was successful.\n *\n * @throws {@link TransferError}\n */\n public transfer = async (request: TransferRequest): Promise<BlockHeight> => {\n if (this.hardwareWallet) {\n return this.transferHardwareWallet(request);\n }\n // When candid is implemented, the previous lines will go away.\n // But the transaction fee method is not supported by Ledger App yet.\n if (request.fee === undefined) {\n request.fee = this.hardwareWallet\n ? TRANSACTION_FEE\n : await this.transactionFee();\n }\n const rawRequest = toTransferRawRequest(request);\n const response = await this.certifiedService.transfer(rawRequest);\n if (\"Err\" in response) {\n throw mapTransferError(response.Err);\n }\n return response.Ok;\n };\n\n private accountBalanceHardwareWallet = async ({\n accountIdentifier,\n certified = true,\n }: {\n accountIdentifier: AccountIdentifier;\n certified?: boolean;\n }): Promise<bigint> => {\n const callMethod = certified ? this.updateFetcher : this.queryFetcher;\n\n const request = new AccountBalanceRequest();\n request.setAccount(accountIdentifier.toProto());\n\n const responseBytes = await callMethod({\n agent: this.agent,\n canisterId: this.canisterId,\n methodName: \"account_balance_pb\",\n arg: request.serializeBinary(),\n });\n\n return BigInt(\n ICPTs.deserializeBinary(new Uint8Array(responseBytes)).getE8s()\n );\n };\n\n private transferHardwareWallet = async ({\n to,\n amount,\n memo,\n fee,\n fromSubAccount,\n }: TransferRequest): Promise<BlockHeight> => {\n const request = new SendRequest();\n request.setTo(to.toProto());\n\n const payment = new Payment();\n payment.setReceiverGets(toICPTs(amount));\n request.setPayment(payment);\n\n request.setMaxFee(toICPTs(fee ?? TRANSACTION_FEE));\n\n // Always explicitly set the memo for compatibility with ledger wallet - hardware wallet\n const requestMemo: Memo = new Memo();\n requestMemo.setMemo((memo ?? BigInt(0)).toString());\n request.setMemo(requestMemo);\n\n if (fromSubAccount !== undefined) {\n request.setFromSubaccount(subAccountNumbersToSubaccount(fromSubAccount));\n }\n\n try {\n const responseBytes = await this.updateFetcher({\n agent: this.agent,\n canisterId: this.canisterId,\n methodName: \"send_pb\",\n arg: request.serializeBinary(),\n });\n\n // Successful tx. Return the block height.\n return BigInt(PbBlockHeight.deserializeBinary(responseBytes).getHeight());\n } catch (err) {\n if (err instanceof Error) {\n throw mapTransferProtoError(err);\n }\n\n throw err;\n }\n };\n}\n", "/* Do not edit. Compiled with ./scripts/compile-idl-js from packages/nns/candid/ledger.did */\nexport const idlFactory = ({ IDL }) => {\n const BlockIndex = IDL.Nat64;\n const GetBlocksArgs = IDL.Record({\n 'start' : BlockIndex,\n 'length' : IDL.Nat64,\n });\n const Memo = IDL.Nat64;\n const AccountIdentifier = IDL.Vec(IDL.Nat8);\n const Tokens = IDL.Record({ 'e8s' : IDL.Nat64 });\n const Operation = IDL.Variant({\n 'Burn' : IDL.Record({ 'from' : AccountIdentifier, 'amount' : Tokens }),\n 'Mint' : IDL.Record({ 'to' : AccountIdentifier, 'amount' : Tokens }),\n 'Transfer' : IDL.Record({\n 'to' : AccountIdentifier,\n 'fee' : Tokens,\n 'from' : AccountIdentifier,\n 'amount' : Tokens,\n }),\n });\n const TimeStamp = IDL.Record({ 'timestamp_nanos' : IDL.Nat64 });\n const Transaction = IDL.Record({\n 'memo' : Memo,\n 'operation' : IDL.Opt(Operation),\n 'created_at_time' : TimeStamp,\n });\n const Block = IDL.Record({\n 'transaction' : Transaction,\n 'timestamp' : TimeStamp,\n 'parent_hash' : IDL.Opt(IDL.Vec(IDL.Nat8)),\n });\n const BlockRange = IDL.Record({ 'blocks' : IDL.Vec(Block) });\n const QueryArchiveError = IDL.Variant({\n 'BadFirstBlockIndex' : IDL.Record({\n 'requested_index' : BlockIndex,\n 'first_valid_index' : BlockIndex,\n }),\n 'Other' : IDL.Record({\n 'error_message' : IDL.Text,\n 'error_code' : IDL.Nat64,\n }),\n });\n const QueryArchiveResult = IDL.Variant({\n 'Ok' : BlockRange,\n 'Err' : QueryArchiveError,\n });\n const QueryArchiveFn = IDL.Func([GetBlocksArgs], [QueryArchiveResult], []);\n const QueryBlocksResponse = IDL.Record({\n 'certificate' : IDL.Opt(IDL.Vec(IDL.Nat8)),\n 'blocks' : IDL.Vec(Block),\n 'chain_length' : IDL.Nat64,\n 'first_block_index' : BlockIndex,\n 'archived_blocks' : IDL.Vec(\n IDL.Record({\n 'callback' : QueryArchiveFn,\n 'start' : BlockIndex,\n 'length' : IDL.Nat64,\n })\n ),\n });\n const AccountBalanceArgs = IDL.Record({ 'account' : AccountIdentifier });\n const Archive = IDL.Record({ 'canister_id' : IDL.Principal });\n const Archives = IDL.Record({ 'archives' : IDL.Vec(Archive) });\n const SubAccount = IDL.Vec(IDL.Nat8);\n const TransferArgs = IDL.Record({\n 'to' : AccountIdentifier,\n 'fee' : Tokens,\n 'memo' : Memo,\n 'from_subaccount' : IDL.Opt(SubAccount),\n 'created_at_time' : IDL.Opt(TimeStamp),\n 'amount' : Tokens,\n });\n const TransferError = IDL.Variant({\n 'TxTooOld' : IDL.Record({ 'allowed_window_nanos' : IDL.Nat64 }),\n 'BadFee' : IDL.Record({ 'expected_fee' : Tokens }),\n 'TxDuplicate' : IDL.Record({ 'duplicate_of' : BlockIndex }),\n 'TxCreatedInFuture' : IDL.Null,\n 'InsufficientFunds' : IDL.Record({ 'balance' : Tokens }),\n });\n const TransferResult = IDL.Variant({\n 'Ok' : BlockIndex,\n 'Err' : TransferError,\n });\n const TransferFeeArg = IDL.Record({});\n const TransferFee = IDL.Record({ 'transfer_fee' : Tokens });\n return IDL.Service({\n '_blocks' : IDL.Func([GetBlocksArgs], [QueryBlocksResponse], []),\n 'account_balance' : IDL.Func([AccountBalanceArgs], [Tokens], []),\n 'archives' : IDL.Func([], [Archives], []),\n 'decimals' : IDL.Func([], [IDL.Record({ 'decimals' : IDL.Nat32 })], []),\n 'name' : IDL.Func([], [IDL.Record({ 'name' : IDL.Text })], []),\n 'symbol' : IDL.Func([], [IDL.Record({ 'symbol' : IDL.Text })], []),\n 'transfer' : IDL.Func([TransferArgs], [TransferResult], []),\n 'transfer_fee' : IDL.Func([TransferFeeArg], [TransferFee], []),\n });\n};\nexport const init = ({ IDL }) => { return []; };\n", "/* Do not edit. Compiled with ./scripts/compile-idl-js from packages/nns/candid/ledger.did */\nexport const idlFactory = ({ IDL }) => {\n const AccountIdentifier = IDL.Vec(IDL.Nat8);\n const AccountBalanceArgs = IDL.Record({ 'account' : AccountIdentifier });\n const Tokens = IDL.Record({ 'e8s' : IDL.Nat64 });\n const Archive = IDL.Record({ 'canister_id' : IDL.Principal });\n const Archives = IDL.Record({ 'archives' : IDL.Vec(Archive) });\n const BlockIndex = IDL.Nat64;\n const GetBlocksArgs = IDL.Record({\n 'start' : BlockIndex,\n 'length' : IDL.Nat64,\n });\n const Memo = IDL.Nat64;\n const Operation = IDL.Variant({\n 'Burn' : IDL.Record({ 'from' : AccountIdentifier, 'amount' : Tokens }),\n 'Mint' : IDL.Record({ 'to' : AccountIdentifier, 'amount' : Tokens }),\n 'Transfer' : IDL.Record({\n 'to' : AccountIdentifier,\n 'fee' : Tokens,\n 'from' : AccountIdentifier,\n 'amount' : Tokens,\n }),\n });\n const TimeStamp = IDL.Record({ 'timestamp_nanos' : IDL.Nat64 });\n const Transaction = IDL.Record({\n 'memo' : Memo,\n 'operation' : IDL.Opt(Operation),\n 'created_at_time' : TimeStamp,\n });\n const Block = IDL.Record({\n 'transaction' : Transaction,\n 'timestamp' : TimeStamp,\n 'parent_hash' : IDL.Opt(IDL.Vec(IDL.Nat8)),\n });\n const BlockRange = IDL.Record({ 'blocks' : IDL.Vec(Block) });\n const QueryArchiveError = IDL.Variant({\n 'BadFirstBlockIndex' : IDL.Record({\n 'requested_index' : BlockIndex,\n 'first_valid_index' : BlockIndex,\n }),\n 'Other' : IDL.Record({\n 'error_message' : IDL.Text,\n 'error_code' : IDL.Nat64,\n }),\n });\n const QueryArchiveResult = IDL.Variant({\n 'Ok' : BlockRange,\n 'Err' : QueryArchiveError,\n });\n const QueryArchiveFn = IDL.Func(\n [GetBlocksArgs],\n [QueryArchiveResult],\n ['query'],\n );\n const QueryBlocksResponse = IDL.Record({\n 'certificate' : IDL.Opt(IDL.Vec(IDL.Nat8)),\n 'blocks' : IDL.Vec(Block),\n 'chain_length' : IDL.Nat64,\n 'first_block_index' : BlockIndex,\n 'archived_blocks' : IDL.Vec(\n IDL.Record({\n 'callback' : QueryArchiveFn,\n 'start' : BlockIndex,\n 'length' : IDL.Nat64,\n })\n ),\n });\n const SubAccount = IDL.Vec(IDL.Nat8);\n const TransferArgs = IDL.Record({\n 'to' : AccountIdentifier,\n 'fee' : Tokens,\n 'memo' : Memo,\n 'from_subaccount' : IDL.Opt(SubAccount),\n 'created_at_time' : IDL.Opt(TimeStamp),\n 'amount' : Tokens,\n });\n const TransferError = IDL.Variant({\n 'TxTooOld' : IDL.Record({ 'allowed_window_nanos' : IDL.Nat64 }),\n 'BadFee' : IDL.Record({ 'expected_fee' : Tokens }),\n 'TxDuplicate' : IDL.Record({ 'duplicate_of' : BlockIndex }),\n 'TxCreatedInFuture' : IDL.Null,\n 'InsufficientFunds' : IDL.Record({ 'balance' : Tokens }),\n });\n const TransferResult = IDL.Variant({\n 'Ok' : BlockIndex,\n 'Err' : TransferError,\n });\n const TransferFeeArg = IDL.Record({});\n const TransferFee = IDL.Record({ 'transfer_fee' : Tokens });\n return IDL.Service({\n 'account_balance' : IDL.Func([AccountBalanceArgs], [Tokens], ['query']),\n 'archives' : IDL.Func([], [Archives], ['query']),\n 'decimals' : IDL.Func(\n [],\n [IDL.Record({ 'decimals' : IDL.Nat32 })],\n ['query'],\n ),\n 'name' : IDL.Func([], [IDL.Record({ 'name' : IDL.Text })], ['query']),\n 'query_blocks' : IDL.Func(\n [GetBlocksArgs],\n [QueryBlocksResponse],\n ['query'],\n ),\n 'symbol' : IDL.Func([], [IDL.Record({ 'symbol' : IDL.Text })], ['query']),\n 'transfer' : IDL.Func([TransferArgs], [TransferResult], []),\n 'transfer_fee' : IDL.Func([TransferFeeArg], [TransferFee], ['query']),\n });\n};\nexport const init = ({ IDL }) => { return []; };\n", "import { arrayOfNumberToUint8Array } from \"@dfinity/utils\";\nimport type {\n Tokens,\n TransferArgs as TransferRawRequest,\n} from \"../../../candid/ledger\";\nimport { ICPTs, Subaccount } from \"../../../proto/ledger_pb\";\nimport { TRANSACTION_FEE } from \"../../constants/constants\";\nimport type { TransferRequest } from \"../../types/ledger_converters\";\n\nexport const subAccountNumbersToSubaccount = (\n subAccountNumbers: number[]\n): Subaccount => {\n const bytes = new Uint8Array(subAccountNumbers).buffer;\n const subaccount: Subaccount = new Subaccount();\n subaccount.setSubAccount(new Uint8Array(bytes));\n return subaccount;\n};\n\nexport const toICPTs = (amount: bigint): ICPTs => {\n const result = new ICPTs();\n result.setE8s(amount.toString(10));\n return result;\n};\n\nconst e8sToTokens = (e8s: bigint): Tokens => ({ e8s });\n\nexport const toTransferRawRequest = ({\n to,\n amount,\n memo,\n fee,\n fromSubAccount,\n}: TransferRequest): TransferRawRequest => ({\n to: to.toUint8Array(),\n fee: e8sToTokens(fee ?? TRANSACTION_FEE),\n amount: e8sToTokens(amount),\n // Always explicitly set the memo for compatibility with ledger wallet - hardware wallet\n memo: memo ?? BigInt(0),\n created_at_time: [],\n from_subaccount:\n fromSubAccount === undefined\n ? []\n : [arrayOfNumberToUint8Array(fromSubAccount)],\n});\n", "import type { TransferError as RawTransferError } from \"../../candid/ledger\";\nimport { convertStringToE8s } from \"../token\";\nimport type { BlockHeight } from \"../types/common\";\n\nexport class TransferError extends Error {}\n\nexport class InvalidSenderError extends TransferError {}\n\nexport class InsufficientFundsError extends TransferError {\n constructor(public readonly balance: bigint) {\n super();\n }\n}\n\nexport class TxTooOldError extends TransferError {\n constructor(public readonly allowed_window_secs: number) {\n super();\n }\n}\n\nexport class TxCreatedInFutureError extends TransferError {}\n\nexport class TxDuplicateError extends TransferError {\n constructor(public readonly duplicateOf: BlockHeight) {\n super();\n }\n}\n\nexport class BadFeeError extends TransferError {\n constructor(public readonly expectedFee: bigint) {\n super();\n }\n}\n\nexport const mapTransferError = (\n rawTransferError: RawTransferError\n): TransferError => {\n if (\"TxDuplicate\" in rawTransferError) {\n return new TxDuplicateError(rawTransferError.TxDuplicate.duplicate_of);\n }\n if (\"InsufficientFunds\" in rawTransferError) {\n return new InsufficientFundsError(\n rawTransferError.InsufficientFunds.balance.e8s\n );\n }\n if (\"TxCreatedInFuture\" in rawTransferError) {\n return new TxCreatedInFutureError();\n }\n if (\"TxTooOld\" in rawTransferError) {\n return new TxTooOldError(\n Number(rawTransferError.TxTooOld.allowed_window_nanos)\n );\n }\n if (\"BadFee\" in rawTransferError) {\n return new BadFeeError(rawTransferError.BadFee.expected_fee.e8s);\n }\n // Edge case\n return new TransferError(\n `Unknown error type ${JSON.stringify(rawTransferError)}`\n );\n};\n\nexport const mapTransferProtoError = (responseBytes: Error): TransferError => {\n const { message } = responseBytes;\n\n if (message.includes(\"Reject code: 5\")) {\n // Match against the different error types.\n // This string matching is fragile. It's a stop-gap solution until\n // we migrate to the candid interface.\n\n if (message.match(/Sending from (.*) is not allowed/)) {\n return new InvalidSenderError();\n }\n\n {\n const m = message.match(/transaction.*duplicate.* in block (\\d+)/);\n if (m && m.length > 1) {\n return new TxDuplicateError(BigInt(m[1]));\n }\n }\n\n {\n const m = message.match(\n /debit account.*, current balance: (\\d*(\\.\\d*)?)/\n );\n if (m && m.length > 1) {\n const balance = convertStringToE8s(m[1]);\n if (typeof balance === \"bigint\") {\n return new InsufficientFundsError(balance);\n }\n }\n }\n\n if (message.includes(\"is in future\")) {\n return new TxCreatedInFutureError();\n }\n\n {\n const m = message.match(/older than (\\d+)/);\n if (m && m.length > 1) {\n return new TxTooOldError(Number.parseInt(m[1]));\n }\n }\n }\n\n // Unknown error. Throw as-is.\n throw responseBytes;\n};\n"],
|
|
5
|
+
"mappings": "uPAEA,gDCDO,GAAM,GAAa,CAAC,CAAE,SAAU,CACrC,GAAM,GAAa,EAAI,MACjB,EAAgB,EAAI,OAAO,CAC/B,MAAU,EACV,OAAW,EAAI,KACjB,CAAC,EACK,EAAO,EAAI,MACX,EAAoB,EAAI,IAAI,EAAI,IAAI,EACpC,EAAS,EAAI,OAAO,CAAE,IAAQ,EAAI,KAAM,CAAC,EACzC,EAAY,EAAI,QAAQ,CAC5B,KAAS,EAAI,OAAO,CAAE,KAAS,EAAmB,OAAW,CAAO,CAAC,EACrE,KAAS,EAAI,OAAO,CAAE,GAAO,EAAmB,OAAW,CAAO,CAAC,EACnE,SAAa,EAAI,OAAO,CACtB,GAAO,EACP,IAAQ,EACR,KAAS,EACT,OAAW,CACb,CAAC,CACH,CAAC,EACK,EAAY,EAAI,OAAO,CAAE,gBAAoB,EAAI,KAAM,CAAC,EACxD,EAAc,EAAI,OAAO,CAC7B,KAAS,EACT,UAAc,EAAI,IAAI,CAAS,EAC/B,gBAAoB,CACtB,CAAC,EACK,EAAQ,EAAI,OAAO,CACvB,YAAgB,EAChB,UAAc,EACd,YAAgB,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,CAAC,CAC3C,CAAC,EACK,EAAa,EAAI,OAAO,CAAE,OAAW,EAAI,IAAI,CAAK,CAAE,CAAC,EACrD,EAAoB,EAAI,QAAQ,CACpC,mBAAuB,EAAI,OAAO,CAChC,gBAAoB,EACpB,kBAAsB,CACxB,CAAC,EACD,MAAU,EAAI,OAAO,CACnB,cAAkB,EAAI,KACtB,WAAe,EAAI,KACrB,CAAC,CACH,CAAC,EACK,EAAqB,EAAI,QAAQ,CACrC,GAAO,EACP,IAAQ,CACV,CAAC,EACK,EAAiB,EAAI,KAAK,CAAC,CAAa,EAAG,CAAC,CAAkB,EAAG,CAAC,CAAC,EACnE,EAAsB,EAAI,OAAO,CACrC,YAAgB,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,CAAC,EACzC,OAAW,EAAI,IAAI,CAAK,EACxB,aAAiB,EAAI,MACrB,kBAAsB,EACtB,gBAAoB,EAAI,IACtB,EAAI,OAAO,CACT,SAAa,EACb,MAAU,EACV,OAAW,EAAI,KACjB,CAAC,CACH,CACF,CAAC,EACK,EAAqB,EAAI,OAAO,CAAE,QAAY,CAAkB,CAAC,EACjE,EAAU,EAAI,OAAO,CAAE,YAAgB,EAAI,SAAU,CAAC,EACtD,EAAW,EAAI,OAAO,CAAE,SAAa,EAAI,IAAI,CAAO,CAAE,CAAC,EACvD,EAAa,EAAI,IAAI,EAAI,IAAI,EAC7B,EAAe,EAAI,OAAO,CAC9B,GAAO,EACP,IAAQ,EACR,KAAS,EACT,gBAAoB,EAAI,IAAI,CAAU,EACtC,gBAAoB,EAAI,IAAI,CAAS,EACrC,OAAW,CACb,CAAC,EACK,EAAgB,EAAI,QAAQ,CAChC,SAAa,EAAI,OAAO,CAAE,qBAAyB,EAAI,KAAM,CAAC,EAC9D,OAAW,EAAI,OAAO,CAAE,aAAiB,CAAO,CAAC,EACjD,YAAgB,EAAI,OAAO,CAAE,aAAiB,CAAW,CAAC,EAC1D,kBAAsB,EAAI,KAC1B,kBAAsB,EAAI,OAAO,CAAE,QAAY,CAAO,CAAC,CACzD,CAAC,EACK,EAAiB,EAAI,QAAQ,CACjC,GAAO,EACP,IAAQ,CACV,CAAC,EACK,EAAiB,EAAI,OAAO,CAAC,CAAC,EAC9B,EAAc,EAAI,OAAO,CAAE,aAAiB,CAAO,CAAC,EAC1D,MAAO,GAAI,QAAQ,CACjB,QAAY,EAAI,KAAK,CAAC,CAAa,EAAG,CAAC,CAAmB,EAAG,CAAC,CAAC,EAC/D,gBAAoB,EAAI,KAAK,CAAC,CAAkB,EAAG,CAAC,CAAM,EAAG,CAAC,CAAC,EAC/D,SAAa,EAAI,KAAK,CAAC,EAAG,CAAC,CAAQ,EAAG,CAAC,CAAC,EACxC,SAAa,EAAI,KAAK,CAAC,EAAG,CAAC,EAAI,OAAO,CAAE,SAAa,EAAI,KAAM,CAAC,CAAC,EAAG,CAAC,CAAC,EACtE,KAAS,EAAI,KAAK,CAAC,EAAG,CAAC,EAAI,OAAO,CAAE,KAAS,EAAI,IAAK,CAAC,CAAC,EAAG,CAAC,CAAC,EAC7D,OAAW,EAAI,KAAK,CAAC,EAAG,CAAC,EAAI,OAAO,CAAE,OAAW,EAAI,IAAK,CAAC,CAAC,EAAG,CAAC,CAAC,EACjE,SAAa,EAAI,KAAK,CAAC,CAAY,EAAG,CAAC,CAAc,EAAG,CAAC,CAAC,EAC1D,aAAiB,EAAI,KAAK,CAAC,CAAc,EAAG,CAAC,CAAW,EAAG,CAAC,CAAC,CAC/D,CAAC,CACH,EC9FO,GAAM,GAAa,CAAC,CAAE,SAAU,CACrC,GAAM,GAAoB,EAAI,IAAI,EAAI,IAAI,EACpC,EAAqB,EAAI,OAAO,CAAE,QAAY,CAAkB,CAAC,EACjE,EAAS,EAAI,OAAO,CAAE,IAAQ,EAAI,KAAM,CAAC,EACzC,EAAU,EAAI,OAAO,CAAE,YAAgB,EAAI,SAAU,CAAC,EACtD,EAAW,EAAI,OAAO,CAAE,SAAa,EAAI,IAAI,CAAO,CAAE,CAAC,EACvD,EAAa,EAAI,MACjB,EAAgB,EAAI,OAAO,CAC/B,MAAU,EACV,OAAW,EAAI,KACjB,CAAC,EACK,EAAO,EAAI,MACX,EAAY,EAAI,QAAQ,CAC5B,KAAS,EAAI,OAAO,CAAE,KAAS,EAAmB,OAAW,CAAO,CAAC,EACrE,KAAS,EAAI,OAAO,CAAE,GAAO,EAAmB,OAAW,CAAO,CAAC,EACnE,SAAa,EAAI,OAAO,CACtB,GAAO,EACP,IAAQ,EACR,KAAS,EACT,OAAW,CACb,CAAC,CACH,CAAC,EACK,EAAY,EAAI,OAAO,CAAE,gBAAoB,EAAI,KAAM,CAAC,EACxD,EAAc,EAAI,OAAO,CAC7B,KAAS,EACT,UAAc,EAAI,IAAI,CAAS,EAC/B,gBAAoB,CACtB,CAAC,EACK,EAAQ,EAAI,OAAO,CACvB,YAAgB,EAChB,UAAc,EACd,YAAgB,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,CAAC,CAC3C,CAAC,EACK,EAAa,EAAI,OAAO,CAAE,OAAW,EAAI,IAAI,CAAK,CAAE,CAAC,EACrD,EAAoB,EAAI,QAAQ,CACpC,mBAAuB,EAAI,OAAO,CAChC,gBAAoB,EACpB,kBAAsB,CACxB,CAAC,EACD,MAAU,EAAI,OAAO,CACnB,cAAkB,EAAI,KACtB,WAAe,EAAI,KACrB,CAAC,CACH,CAAC,EACK,EAAqB,EAAI,QAAQ,CACrC,GAAO,EACP,IAAQ,CACV,CAAC,EACK,EAAiB,EAAI,KACvB,CAAC,CAAa,EACd,CAAC,CAAkB,EACnB,CAAC,OAAO,CACV,EACI,EAAsB,EAAI,OAAO,CACrC,YAAgB,EAAI,IAAI,EAAI,IAAI,EAAI,IAAI,CAAC,EACzC,OAAW,EAAI,IAAI,CAAK,EACxB,aAAiB,EAAI,MACrB,kBAAsB,EACtB,gBAAoB,EAAI,IACtB,EAAI,OAAO,CACT,SAAa,EACb,MAAU,EACV,OAAW,EAAI,KACjB,CAAC,CACH,CACF,CAAC,EACK,EAAa,EAAI,IAAI,EAAI,IAAI,EAC7B,EAAe,EAAI,OAAO,CAC9B,GAAO,EACP,IAAQ,EACR,KAAS,EACT,gBAAoB,EAAI,IAAI,CAAU,EACtC,gBAAoB,EAAI,IAAI,CAAS,EACrC,OAAW,CACb,CAAC,EACK,EAAgB,EAAI,QAAQ,CAChC,SAAa,EAAI,OAAO,CAAE,qBAAyB,EAAI,KAAM,CAAC,EAC9D,OAAW,EAAI,OAAO,CAAE,aAAiB,CAAO,CAAC,EACjD,YAAgB,EAAI,OAAO,CAAE,aAAiB,CAAW,CAAC,EAC1D,kBAAsB,EAAI,KAC1B,kBAAsB,EAAI,OAAO,CAAE,QAAY,CAAO,CAAC,CACzD,CAAC,EACK,EAAiB,EAAI,QAAQ,CACjC,GAAO,EACP,IAAQ,CACV,CAAC,EACK,EAAiB,EAAI,OAAO,CAAC,CAAC,EAC9B,EAAc,EAAI,OAAO,CAAE,aAAiB,CAAO,CAAC,EAC1D,MAAO,GAAI,QAAQ,CACjB,gBAAoB,EAAI,KAAK,CAAC,CAAkB,EAAG,CAAC,CAAM,EAAG,CAAC,OAAO,CAAC,EACtE,SAAa,EAAI,KAAK,CAAC,EAAG,CAAC,CAAQ,EAAG,CAAC,OAAO,CAAC,EAC/C,SAAa,EAAI,KACb,CAAC,EACD,CAAC,EAAI,OAAO,CAAE,SAAa,EAAI,KAAM,CAAC,CAAC,EACvC,CAAC,OAAO,CACV,EACF,KAAS,EAAI,KAAK,CAAC,EAAG,CAAC,EAAI,OAAO,CAAE,KAAS,EAAI,IAAK,CAAC,CAAC,EAAG,CAAC,OAAO,CAAC,EACpE,aAAiB,EAAI,KACjB,CAAC,CAAa,EACd,CAAC,CAAmB,EACpB,CAAC,OAAO,CACV,EACF,OAAW,EAAI,KAAK,CAAC,EAAG,CAAC,EAAI,OAAO,CAAE,OAAW,EAAI,IAAK,CAAC,CAAC,EAAG,CAAC,OAAO,CAAC,EACxE,SAAa,EAAI,KAAK,CAAC,CAAY,EAAG,CAAC,CAAc,EAAG,CAAC,CAAC,EAC1D,aAAiB,EAAI,KAAK,CAAC,CAAc,EAAG,CAAC,CAAW,EAAG,CAAC,OAAO,CAAC,CACtE,CAAC,CACH,EFrGA,MAOO,OGRP,MAAkC,OALlC,2DASO,GAAM,GAAgC,AAC3C,GACe,CACf,GAAM,GAAQ,GAAI,YAAW,CAAiB,EAAE,OAC1C,EAAyB,GAAI,cACnC,SAAW,cAAc,GAAI,YAAW,CAAK,CAAC,EACvC,CACT,EAEa,EAAU,AAAC,GAA0B,CAChD,GAAM,GAAS,GAAI,SACnB,SAAO,OAAO,EAAO,SAAS,EAAE,CAAC,EAC1B,CACT,EAEM,EAAc,AAAC,GAAyB,EAAE,KAAI,GAEvC,EAAuB,CAAC,CACnC,KACA,SACA,OACA,MACA,oBAC0C,EAC1C,GAAI,EAAG,aAAa,EACpB,IAAK,EAAY,GAAO,CAAe,EACvC,OAAQ,EAAY,CAAM,EAE1B,KAAM,GAAQ,OAAO,CAAC,EACtB,gBAAiB,CAAC,EAClB,gBACE,IAAmB,OACf,CAAC,EACD,CAAC,EAA0B,CAAc,CAAC,CAClD,GCvCO,GAAM,GAAN,aAA4B,MAAM,CAAC,EAE7B,EAAN,aAAiC,EAAc,CAAC,EAE1C,EAAN,aAAqC,EAAc,CACxD,YAA4B,EAAiB,CAC3C,MAAM,EADoB,cAE5B,CACF,EAEa,EAAN,aAA4B,EAAc,CAC/C,YAA4B,EAA6B,CACvD,MAAM,EADoB,0BAE5B,CACF,EAEa,EAAN,aAAqC,EAAc,CAAC,EAE9C,EAAN,aAA+B,EAAc,CAClD,YAA4B,EAA0B,CACpD,MAAM,EADoB,kBAE5B,CACF,EAEa,EAAN,aAA0B,EAAc,CAC7C,YAA4B,EAAqB,CAC/C,MAAM,EADoB,kBAE5B,CACF,EAEa,EAAmB,AAC9B,GAEI,eAAiB,GACZ,GAAI,GAAiB,EAAiB,YAAY,YAAY,EAEnE,qBAAuB,GAClB,GAAI,GACT,EAAiB,kBAAkB,QAAQ,GAC7C,EAEE,qBAAuB,GAClB,GAAI,GAET,YAAc,GACT,GAAI,GACT,OAAO,EAAiB,SAAS,oBAAoB,CACvD,EAEE,UAAY,GACP,GAAI,GAAY,EAAiB,OAAO,aAAa,GAAG,EAG1D,GAAI,GACT,sBAAsB,KAAK,UAAU,CAAgB,GACvD,EAGW,EAAwB,AAAC,GAAwC,CAC5E,GAAM,CAAE,WAAY,EAEpB,GAAI,EAAQ,SAAS,gBAAgB,EAAG,CAKtC,GAAI,EAAQ,MAAM,kCAAkC,EAClD,MAAO,IAAI,GAGb,CACE,GAAM,GAAI,EAAQ,MAAM,yCAAyC,EACjE,GAAI,GAAK,EAAE,OAAS,EAClB,MAAO,IAAI,GAAiB,OAAO,EAAE,EAAE,CAAC,CAE5C,CAEA,CACE,GAAM,GAAI,EAAQ,MAChB,iDACF,EACA,GAAI,GAAK,EAAE,OAAS,EAAG,CACrB,GAAM,GAAU,EAAmB,EAAE,EAAE,EACvC,GAAI,MAAO,IAAY,SACrB,MAAO,IAAI,GAAuB,CAAO,CAE7C,CACF,CAEA,GAAI,EAAQ,SAAS,cAAc,EACjC,MAAO,IAAI,GAGb,CACE,GAAM,GAAI,EAAQ,MAAM,kBAAkB,EAC1C,GAAI,GAAK,EAAE,OAAS,EAClB,MAAO,IAAI,GAAc,OAAO,SAAS,EAAE,EAAE,CAAC,CAElD,CACF,CAGA,KAAM,EACR,EJzEO,GAAM,GAAN,KAAqB,CAC1B,AAAQ,YACW,EACA,EACA,EACA,EACA,EACA,EACA,EAA0B,GAC3C,CAPiB,aACA,kBACA,eACA,wBACA,qBACA,oBACA,qBAChB,CAEH,MAAc,QAAO,EAAiC,CAAC,EAAG,CACxD,GAAM,GACJ,EAAQ,YAAc,EAElB,CAAE,UAAS,mBAAkB,SAAU,EAA8B,CACzE,QAAS,CACP,GAAG,EACH,YACF,EACA,aACA,qBACF,CAAC,EAED,MAAO,IAAI,GACT,EACA,EACA,EACA,EACA,EAAQ,oBAAsB,EAC9B,EAAQ,mBAAqB,EAC7B,EAAQ,cACV,CACF,CAUA,AAAO,eAAiB,MAAO,CAC7B,oBACA,YAAY,MAKR,KAAK,eACA,KAAK,6BAA6B,CACvC,oBACA,WACF,CAAC,EAMI,AAHQ,MAAM,AADL,GAAY,KAAK,iBAAmB,KAAK,SAC5B,gBAAgB,CAC3C,QAAS,EAAkB,aAAa,CAC1C,CAAC,GACa,IAOhB,AAAO,eAAiB,SAAY,CAClC,GAAM,CACJ,aAAc,CAAE,QACd,KAAM,MAAK,QAAQ,aAAa,CAAC,CAAC,EACtC,MAAO,EACT,EAQA,AAAO,SAAW,KAAO,IAAmD,CAC1E,GAAI,KAAK,eACP,MAAO,MAAK,uBAAuB,CAAO,EAI5C,AAAI,EAAQ,MAAQ,QAClB,GAAQ,IAAM,KAAK,eACf,EACA,KAAM,MAAK,eAAe,GAEhC,GAAM,GAAa,EAAqB,CAAO,EACzC,EAAW,KAAM,MAAK,iBAAiB,SAAS,CAAU,EAChE,GAAI,OAAS,GACX,KAAM,GAAiB,EAAS,GAAG,EAErC,MAAO,GAAS,EAClB,EAEA,AAAQ,6BAA+B,MAAO,CAC5C,oBACA,YAAY,MAIS,CACrB,GAAM,GAAa,EAAY,KAAK,cAAgB,KAAK,aAEnD,EAAU,GAAI,yBACpB,EAAQ,WAAW,EAAkB,QAAQ,CAAC,EAE9C,GAAM,GAAgB,KAAM,GAAW,CACrC,MAAO,KAAK,MACZ,WAAY,KAAK,WACjB,WAAY,qBACZ,IAAK,EAAQ,gBAAgB,CAC/B,CAAC,EAED,MAAO,QACL,QAAM,kBAAkB,GAAI,YAAW,CAAa,CAAC,EAAE,OAAO,CAChE,CACF,EAEA,AAAQ,uBAAyB,MAAO,CACtC,KACA,SACA,OACA,MACA,oBAC2C,CAC3C,GAAM,GAAU,GAAI,eACpB,EAAQ,MAAM,EAAG,QAAQ,CAAC,EAE1B,GAAM,GAAU,GAAI,WACpB,EAAQ,gBAAgB,EAAQ,CAAM,CAAC,EACvC,EAAQ,WAAW,CAAO,EAE1B,EAAQ,UAAU,EAAQ,GAAO,CAAe,CAAC,EAGjD,GAAM,GAAoB,GAAI,QAC9B,EAAY,QAAS,IAAQ,OAAO,CAAC,GAAG,SAAS,CAAC,EAClD,EAAQ,QAAQ,CAAW,EAEvB,IAAmB,QACrB,EAAQ,kBAAkB,EAA8B,CAAc,CAAC,EAGzE,GAAI,CACF,GAAM,GAAgB,KAAM,MAAK,cAAc,CAC7C,MAAO,KAAK,MACZ,WAAY,KAAK,WACjB,WAAY,UACZ,IAAK,EAAQ,gBAAgB,CAC/B,CAAC,EAGD,MAAO,QAAO,cAAc,kBAAkB,CAAa,EAAE,UAAU,CAAC,CAC1E,OAAS,EAAP,CACA,KAAI,aAAe,OACX,EAAsB,CAAG,EAG3B,CACR,CACF,CACF",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|