diff --git a/.circleci/config.yml b/.circleci/config.yml index d6db9c0..3cc5d64 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -69,14 +69,7 @@ jobs: jq -r '.dependencies."@etherspot/prime-sdk" |= "file:../etherspot-prime-sdk"' temp.json > package.json rm temp.json npm i - touch ~/logs.txt - npm run test-mainnet |& tee ~/logs.txt - chmod 755 ~/logs.txt - cat ~/logs.txt - echo "export LOGS='$(cat ~/logs.txt)'" >> $BASH_ENV - echo $BASH_ENV - rm ~/logs.txt - source "$BASH_ENV" + npm run test-mainnet - run: name: Move test report command: | diff --git a/.github-pages/files/CNAME b/.github-pages/files/CNAME new file mode 100644 index 0000000..faa7fb0 --- /dev/null +++ b/.github-pages/files/CNAME @@ -0,0 +1 @@ +sdk.etherspot.io \ No newline at end of file diff --git a/.github-pages/theme/assets/css/main.css b/.github-pages/theme/assets/css/main.css new file mode 100644 index 0000000..c6ce4cd --- /dev/null +++ b/.github-pages/theme/assets/css/main.css @@ -0,0 +1,2684 @@ +/*! normalize.css v1.1.3 | MIT License | git.io/normalize */ +/* ========================================================================== + * * HTML5 display definitions + * * ========================================================================== */ +/** + * * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. */ +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { + display: block; +} + +/** + * * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */ +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +/** + * * Prevent modern browsers from displaying `audio` without controls. + * * Remove excess height in iOS 5 devices. */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. + * * Known issue: no IE 6 support. */ +[hidden] { + display: none; +} + +/* ========================================================================== + * * Base + * * ========================================================================== */ +/** + * * 1. Correct text resizing oddly in IE 6/7 when body `font-size` is set using + * * `em` units. + * * 2. Prevent iOS text size adjust after orientation change, without disabling + * * user zoom. */ +html { + font-size: 100%; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + font-family: sans-serif; +} + +/** + * * Address `font-family` inconsistency between `textarea` and other form + * * elements. */ +button, input, select, textarea { + font-family: sans-serif; +} + +/** + * * Address margins handled incorrectly in IE 6/7. */ +body { + margin: 0; +} + +/* ========================================================================== + * * Links + * * ========================================================================== */ +/** + * * Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { + outline: thin dotted; +} +a:active, a:hover { + outline: 0; +} + +/** + * * Improve readability when focused and also mouse hovered in all browsers. */ +/* ========================================================================== + * * Typography + * * ========================================================================== */ +/** + * * Address font sizes and margins set differently in IE 6/7. + * * Address font sizes within `section` and `article` in Firefox 4+, Safari 5, + * * and Chrome. */ +h1 { + font-size: 2em; + margin: 0.67em 0; + color: #fff +} + +h2 { + font-size: 1.5em; + margin: 0.83em 0; +} + +h3 { + font-size: 1.17em; + margin: 1em 0; +} + +h4, .tsd-index-panel h3 { + font-size: 1em; + margin: 1.33em 0; +} + +h5 { + font-size: 0.83em; + margin: 1.67em 0; +} + +h6 { + font-size: 0.67em; + margin: 2.33em 0; +} + +/** + * * Address styling not present in IE 7/8/9, Safari 5, and Chrome. */ +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * * Address style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. */ +b, strong { + font-weight: bold; +} + +blockquote { + margin: 1em 40px; +} + +/** + * * Address styling not present in Safari 5 and Chrome. */ +dfn { + font-style: italic; +} + +/** + * * Address differences between Firefox and other browsers. + * * Known issue: no IE 6/7 normalization. */ +hr { + box-sizing: content-box; + height: 0; +} + +/** + * * Address styling not present in IE 6/7/8/9. */ +mark { + background: #ff0; + color: #000; +} + +/** + * * Address margins set differently in IE 6/7. */ +p, pre { + margin: 1em 0; +} + +/** + * * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. */ +code, kbd, pre, samp { + font-family: monospace, serif; + _font-family: "courier new", monospace; + font-size: 1em; +} + +/** + * * Improve readability of pre-formatted text in all browsers. */ +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * * Address CSS quotes not supported in IE 6/7. */ +q { + quotes: none; +} +q:before, q:after { + content: ""; + content: none; +} + +/** + * * Address `quotes` property not supported in Safari 4. */ +/** + * * Address inconsistent and variable font size in all browsers. */ +small { + font-size: 80%; +} + +/** + * * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + * * Lists + * * ========================================================================== */ +/** + * * Address margins set differently in IE 6/7. */ +dl, menu, ol, ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +/** + * * Address paddings set differently in IE 6/7. */ +menu, ol, ul { + padding: 0 0 0 40px; +} + +/** + * * Correct list images handled incorrectly in IE 7. */ +nav ul, nav ol { + list-style: none; + list-style-image: none; +} + +/* ========================================================================== + * * Embedded content + * * ========================================================================== */ +/** + * * 1. Remove border when inside `a` element in IE 6/7/8/9 and Firefox 3. + * * 2. Improve image quality when scaled in IE 7. */ +img { + border: 0; + /* 1 */ + -ms-interpolation-mode: bicubic; +} + +/* 2 */ +/** + * * Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + * * Figures + * * ========================================================================== */ +/** + * * Address margin not present in IE 6/7/8/9, Safari 5, and Opera 11. */ +figure, form { + margin: 0; +} + +/* ========================================================================== + * * Forms + * * ========================================================================== */ +/** + * * Correct margin displayed oddly in IE 6/7. */ +/** + * * Define consistent border, margin, and padding. */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * * 1. Correct color not being inherited in IE 6/7/8/9. + * * 2. Correct text not wrapping in Firefox 3. + * * 3. Correct alignment displayed oddly in IE 6/7. */ +legend { + border: 0; + /* 1 */ + padding: 0; + white-space: normal; + /* 2 */ + *margin-left: -7px; +} + +/* 3 */ +/** + * * 1. Correct font size not being inherited in all browsers. + * * 2. Address margins set differently in IE 6/7, Firefox 3+, Safari 5, + * * and Chrome. + * * 3. Improve appearance and consistency in all browsers. */ +button, input, select, textarea { + font-size: 100%; + /* 1 */ + margin: 0; + /* 2 */ + vertical-align: baseline; + /* 3 */ + *vertical-align: middle; +} + +/* 3 */ +/** + * * Address Firefox 3+ setting `line-height` on `input` using `!important` in + * * the UA stylesheet. */ +button, input { + line-height: normal; +} + +/** + * * Address inconsistent `text-transform` inheritance for `button` and `select`. + * * All other form control elements do not inherit `text-transform` values. + * * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. + * * Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { + text-transform: none; +} + +/** + * * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * * and `video` controls. + * * 2. Correct inability to style clickable `input` types in iOS. + * * 3. Improve usability and consistency of cursor style between image-type + * * `input` and others. + * * 4. Remove inner spacing in IE 7 without affecting normal text inputs. + * * Known issue: inner spacing remains in IE 6. */ +button, html input[type=button] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ + *overflow: visible; +} + +/* 4 */ +input[type=reset], input[type=submit] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ + *overflow: visible; +} + +/* 4 */ +/** + * * Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { + cursor: default; +} + +/** + * * 1. Address box sizing set to content-box in IE 8/9. + * * 2. Remove excess padding in IE 8/9. + * * 3. Remove excess padding in IE 7. + * * Known issue: excess padding remains in IE 6. */ +input { + /* 3 */ +} +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ + *height: 13px; + /* 3 */ + *width: 13px; +} +input[type=search] { + -webkit-appearance: textfield; + /* 1 */ + /* 2 */ + box-sizing: content-box; +} +input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * * (include `-moz` to future-proof). */ +/** + * * Remove inner padding and search cancel button in Safari 5 and Chrome + * * on OS X. */ +/** + * * Remove inner padding and border in Firefox 3+. */ +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * * 1. Remove default vertical scrollbar in IE 6/7/8/9. + * * 2. Improve readability and alignment in all browsers. */ +textarea { + overflow: auto; + /* 1 */ + vertical-align: top; +} + +/* 2 */ +/* ========================================================================== + * * Tables + * * ========================================================================== */ +/** + * * Remove most spacing between table cells. */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* * + * *Visual Studio-like style based on original C# coloring by Jason Diamond */ +.hljs { + display: inline-block; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, .hljs-annotation, .hljs-template_comment, .diff .hljs-header, .hljs-chunk, .apache .hljs-cbracket { + color: #008000; +} + +.hljs-keyword, .hljs-id, .hljs-built_in, .css .smalltalk .hljs-class, .hljs-winutils, .bash .hljs-variable, .tex .hljs-command, .hljs-request, .hljs-status, .nginx .hljs-title { + color: #00f; +} + +.xml .hljs-tag { + color: #00f; +} +.xml .hljs-tag .hljs-value { + color: #00f; +} + +.hljs-string, .hljs-title, .hljs-parent, .hljs-tag .hljs-value, .hljs-rules .hljs-value { + color: #a31515; +} + +.ruby .hljs-symbol { + color: #a31515; +} +.ruby .hljs-symbol .hljs-string { + color: #a31515; +} + +.hljs-template_tag, .django .hljs-variable, .hljs-addition, .hljs-flow, .hljs-stream, .apache .hljs-tag, .hljs-date, .tex .hljs-formula, .coffeescript .hljs-attribute { + color: #a31515; +} + +.ruby .hljs-string, .hljs-decorator, .hljs-filter .hljs-argument, .hljs-localvars, .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-envvar, .hljs-shebang, .hljs-preprocessor, .hljs-pragma, .userType, .apache .hljs-sqbracket, .nginx .hljs-built_in, .tex .hljs-special, .hljs-prompt { + color: #2b91af; +} + +.hljs-phpdoc, .hljs-javadoc, .hljs-xmlDocTag { + color: #808080; +} + +.vhdl .hljs-typename { + font-weight: bold; +} +.vhdl .hljs-string { + color: #666666; +} +.vhdl .hljs-literal { + color: #a31515; +} +.vhdl .hljs-attribute { + color: #00b0e8; +} + +.xml .hljs-attribute { + color: #f00; +} + +ul.tsd-descriptions > li > :first-child, .tsd-panel > :first-child, .col > :first-child, .col-11 > :first-child, .col-10 > :first-child, .col-9 > :first-child, .col-8 > :first-child, .col-7 > :first-child, .col-6 > :first-child, .col-5 > :first-child, .col-4 > :first-child, .col-3 > :first-child, .col-2 > :first-child, .col-1 > :first-child, +ul.tsd-descriptions > li > :first-child > :first-child, +.tsd-panel > :first-child > :first-child, +.col > :first-child > :first-child, +.col-11 > :first-child > :first-child, +.col-10 > :first-child > :first-child, +.col-9 > :first-child > :first-child, +.col-8 > :first-child > :first-child, +.col-7 > :first-child > :first-child, +.col-6 > :first-child > :first-child, +.col-5 > :first-child > :first-child, +.col-4 > :first-child > :first-child, +.col-3 > :first-child > :first-child, +.col-2 > :first-child > :first-child, +.col-1 > :first-child > :first-child, +ul.tsd-descriptions > li > :first-child > :first-child > :first-child, +.tsd-panel > :first-child > :first-child > :first-child, +.col > :first-child > :first-child > :first-child, +.col-11 > :first-child > :first-child > :first-child, +.col-10 > :first-child > :first-child > :first-child, +.col-9 > :first-child > :first-child > :first-child, +.col-8 > :first-child > :first-child > :first-child, +.col-7 > :first-child > :first-child > :first-child, +.col-6 > :first-child > :first-child > :first-child, +.col-5 > :first-child > :first-child > :first-child, +.col-4 > :first-child > :first-child > :first-child, +.col-3 > :first-child > :first-child > :first-child, +.col-2 > :first-child > :first-child > :first-child, +.col-1 > :first-child > :first-child > :first-child { + margin-top: 0; +} +ul.tsd-descriptions > li > :last-child, .tsd-panel > :last-child, .col > :last-child, .col-11 > :last-child, .col-10 > :last-child, .col-9 > :last-child, .col-8 > :last-child, .col-7 > :last-child, .col-6 > :last-child, .col-5 > :last-child, .col-4 > :last-child, .col-3 > :last-child, .col-2 > :last-child, .col-1 > :last-child, +ul.tsd-descriptions > li > :last-child > :last-child, +.tsd-panel > :last-child > :last-child, +.col > :last-child > :last-child, +.col-11 > :last-child > :last-child, +.col-10 > :last-child > :last-child, +.col-9 > :last-child > :last-child, +.col-8 > :last-child > :last-child, +.col-7 > :last-child > :last-child, +.col-6 > :last-child > :last-child, +.col-5 > :last-child > :last-child, +.col-4 > :last-child > :last-child, +.col-3 > :last-child > :last-child, +.col-2 > :last-child > :last-child, +.col-1 > :last-child > :last-child, +ul.tsd-descriptions > li > :last-child > :last-child > :last-child, +.tsd-panel > :last-child > :last-child > :last-child, +.col > :last-child > :last-child > :last-child, +.col-11 > :last-child > :last-child > :last-child, +.col-10 > :last-child > :last-child > :last-child, +.col-9 > :last-child > :last-child > :last-child, +.col-8 > :last-child > :last-child > :last-child, +.col-7 > :last-child > :last-child > :last-child, +.col-6 > :last-child > :last-child > :last-child, +.col-5 > :last-child > :last-child > :last-child, +.col-4 > :last-child > :last-child > :last-child, +.col-3 > :last-child > :last-child > :last-child, +.col-2 > :last-child > :last-child > :last-child, +.col-1 > :last-child > :last-child > :last-child { + margin-bottom: 0; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 40px; +} +@media (max-width: 640px) { + .container { + padding: 0 20px; + } +} + +.container-main { + padding-bottom: 200px; +} + +.row { + display: -ms-flexbox; + display: flex; + position: relative; + margin: 0 -10px; +} +.row:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +.col, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1 { + box-sizing: border-box; + float: left; + padding: 0 10px; +} + +.col-1 { + width: 8.3333333333%; +} + +.offset-1 { + margin-left: 8.3333333333%; +} + +.col-2 { + width: 16.6666666667%; +} + +.offset-2 { + margin-left: 16.6666666667%; +} + +.col-3 { + width: 25%; +} + +.offset-3 { + margin-left: 25%; +} + +.col-4 { + width: 33.3333333333%; +} + +.offset-4 { + margin-left: 33.3333333333%; +} + +.col-5 { + width: 41.6666666667%; +} + +.offset-5 { + margin-left: 41.6666666667%; +} + +.col-6 { + width: 50%; +} + +.offset-6 { + margin-left: 50%; +} + +.col-7 { + width: 58.3333333333%; +} + +.offset-7 { + margin-left: 58.3333333333%; +} + +.col-8 { + width: 66.6666666667%; +} + +.offset-8 { + margin-left: 66.6666666667%; +} + +.col-9 { + width: 75%; +} + +.offset-9 { + margin-left: 75%; +} + +.col-10 { + width: 83.3333333333%; +} + +.offset-10 { + margin-left: 83.3333333333%; +} + +.col-11 { + width: 91.6666666667%; +} + +.offset-11 { + margin-left: 91.6666666667%; +} + +.tsd-kind-icon { + display: block; + position: relative; + padding-left: 20px; + text-indent: -20px; +} +.tsd-kind-icon:before { + content: ""; + display: inline-block; + vertical-align: middle; + width: 17px; + height: 17px; + margin: 0 3px 2px 0; + background-image: url(../images/icons.png); +} +@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { + .tsd-kind-icon:before { + background-image: url(../images/icons@2x.png); + background-size: 238px 204px; + } +} + +.tsd-signature.tsd-kind-icon:before { + background-position: 0 -153px; +} + +.tsd-kind-object-literal > .tsd-kind-icon:before { + background-position: 0px -17px; +} +.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -17px; +} +.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -17px; +} + +.tsd-kind-class > .tsd-kind-icon:before { + background-position: 0px -34px; +} +.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -34px; +} +.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -34px; +} + +.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: 0px -51px; +} +.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -51px; +} +.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -51px; +} + +.tsd-kind-interface > .tsd-kind-icon:before { + background-position: 0px -68px; +} +.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -68px; +} +.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -68px; +} + +.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: 0px -85px; +} +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -85px; +} +.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -85px; +} + +.tsd-kind-namespace > .tsd-kind-icon:before { + background-position: 0px -102px; +} +.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -102px; +} +.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -102px; +} + +.tsd-kind-module > .tsd-kind-icon:before { + background-position: 0px -102px; +} +.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -102px; +} +.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -102px; +} + +.tsd-kind-enum > .tsd-kind-icon:before { + background-position: 0px -119px; +} +.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -119px; +} +.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -119px; +} + +.tsd-kind-enum-member > .tsd-kind-icon:before { + background-position: 0px -136px; +} +.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -136px; +} +.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -136px; +} + +.tsd-kind-signature > .tsd-kind-icon:before { + background-position: 0px -153px; +} +.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -153px; +} +.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -153px; +} + +.tsd-kind-type-alias > .tsd-kind-icon:before { + background-position: 0px -170px; +} +.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -170px; +} +.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -170px; +} + +.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: 0px -187px; +} +.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -17px -187px; +} +.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -34px -187px; +} + +.tsd-kind-variable > .tsd-kind-icon:before { + background-position: -136px -0px; +} +.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -0px; +} +.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -0px; +} +.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -0px; +} +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -0px; +} +.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -0px; +} +.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -0px; +} + +.tsd-kind-property > .tsd-kind-icon:before { + background-position: -136px -0px; +} +.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -0px; +} +.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -0px; +} +.tsd-kind-property.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -0px; +} +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -0px; +} +.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -0px; +} +.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -0px; +} +.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -0px; +} + +.tsd-kind-get-signature > .tsd-kind-icon:before { + background-position: -136px -17px; +} +.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -17px; +} +.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -17px; +} +.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -17px; +} + +.tsd-kind-set-signature > .tsd-kind-icon:before { + background-position: -136px -34px; +} +.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -34px; +} +.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -34px; +} +.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -34px; +} + +.tsd-kind-accessor > .tsd-kind-icon:before { + background-position: -136px -51px; +} +.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -51px; +} +.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -51px; +} +.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -51px; +} + +.tsd-kind-function > .tsd-kind-icon:before { + background-position: -136px -68px; +} +.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -68px; +} +.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -68px; +} +.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -68px; +} +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -68px; +} +.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -68px; +} +.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -68px; +} + +.tsd-kind-method > .tsd-kind-icon:before { + background-position: -136px -68px; +} +.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -68px; +} +.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -68px; +} +.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -68px; +} +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -68px; +} +.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -68px; +} +.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -68px; +} + +.tsd-kind-call-signature > .tsd-kind-icon:before { + background-position: -136px -68px; +} +.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -68px; +} +.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -68px; +} +.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -68px; +} + +.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: -136px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -85px; +} +.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -85px; +} + +.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { + background-position: -136px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -85px; +} +.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -85px; +} + +.tsd-kind-constructor > .tsd-kind-icon:before { + background-position: -136px -102px; +} +.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -102px; +} +.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -102px; +} +.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -102px; +} + +.tsd-kind-constructor-signature > .tsd-kind-icon:before { + background-position: -136px -102px; +} +.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -102px; +} +.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -102px; +} +.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -102px; +} + +.tsd-kind-index-signature > .tsd-kind-icon:before { + background-position: -136px -119px; +} +.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -119px; +} +.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -119px; +} +.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -119px; +} + +.tsd-kind-event > .tsd-kind-icon:before { + background-position: -136px -136px; +} +.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -136px; +} +.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -136px; +} +.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -136px; +} +.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -136px; +} +.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -136px; +} +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -136px; +} +.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -136px; +} +.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -136px; +} +.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -136px; +} + +.tsd-is-static > .tsd-kind-icon:before { + background-position: -136px -153px; +} +.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -153px; +} +.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -153px; +} +.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -153px; +} +.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -153px; +} +.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -153px; +} +.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -153px; +} +.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -153px; +} +.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -153px; +} +.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -153px; +} + +.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { + background-position: -136px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -170px; +} +.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -170px; +} + +.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { + background-position: -136px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -170px; +} +.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -170px; +} + +.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { + background-position: -136px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -170px; +} +.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -170px; +} + +.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { + background-position: -136px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { + background-position: -153px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { + background-position: -51px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -68px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { + background-position: -85px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -102px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { + background-position: -170px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { + background-position: -187px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { + background-position: -119px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { + background-position: -204px -187px; +} +.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited > .tsd-kind-icon:before { + background-position: -221px -187px; +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } +} +@keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } +} +@keyframes shift-to-left { + from { + transform: translate(0, 0); + } + to { + transform: translate(-25%, 0); + } +} +@keyframes unshift-to-left { + from { + transform: translate(-25%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } +} +body { + background: #130C1D; + font-family: "Segoe UI", sans-serif; + font-size: 16px; + color: #130C1D; +} + +a { + color: #4da6ff; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} + +code, pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 14px; + background-color: rgba(0, 0, 0, 0.04); +} + +pre { + padding: 10px; +} +pre code { + padding: 0; + font-size: 100%; + background-color: transparent; +} + +.tsd-typography { + line-height: 1.333em; + color: black; +} +.tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-typography h4, .tsd-typography .tsd-index-panel h3, .tsd-index-panel .tsd-typography h3, .tsd-typography h5, .tsd-typography h6 { + font-size: 1em; + margin: 0; +} +.tsd-typography h5, .tsd-typography h6 { + font-weight: normal; +} +.tsd-typography p, .tsd-typography ul, .tsd-typography ol { + margin: 1em 0; +} + +@media (min-width: 901px) and (max-width: 1024px) { + html.default .col-content { + width: 72%; + } + html.default .col-menu { + width: 28%; + } + html.default .tsd-navigation { + padding-left: 10px; + } +} +@media (max-width: 900px) { + html.default .col-content { + float: none; + width: 100%; + } + html.default .col-menu { + position: fixed !important; + overflow: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + width: 100%; + padding: 20px 20px 0 0; + max-width: 450px; + visibility: hidden; + background-color: #130C1D; + transform: translate(100%, 0); + } + html.default .col-menu > *:last-child { + padding-bottom: 20px; + } + html.default .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + html.default.to-has-menu .overlay { + animation: fade-in 0.4s; + } + html.default.to-has-menu header, +html.default.to-has-menu footer, +html.default.to-has-menu .col-content { + animation: shift-to-left 0.4s; + } + html.default.to-has-menu .col-menu { + animation: pop-in-from-right 0.4s; + } + html.default.from-has-menu .overlay { + animation: fade-out 0.4s; + } + html.default.from-has-menu header, +html.default.from-has-menu footer, +html.default.from-has-menu .col-content { + animation: unshift-to-left 0.4s; + } + html.default.from-has-menu .col-menu { + animation: pop-out-to-right 0.4s; + } + html.default.has-menu body { + overflow: hidden; + } + html.default.has-menu .overlay { + visibility: visible; + } + html.default.has-menu header, +html.default.has-menu footer, +html.default.has-menu .col-content { + transform: translate(-25%, 0); + } + html.default.has-menu .col-menu { + visibility: visible; + transform: translate(0, 0); + } +} + +.tsd-page-title { + padding: 70px 0 20px 0; + margin: 0 0 40px 0; + background: #130C1D; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.35); +} +.tsd-page-title h1 { + margin: 0; +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: #808080; +} +.tsd-breadcrumb a { + color: #808080; + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +html.minimal .container { + margin: 0; +} +html.minimal .container-main { + padding-top: 50px; + padding-bottom: 0; +} +html.minimal .content-wrap { + padding-left: 300px; +} +html.minimal .tsd-navigation { + position: fixed !important; + overflow: auto; + -webkit-overflow-scrolling: touch; + box-sizing: border-box; + z-index: 1; + left: 0; + top: 40px; + bottom: 0; + width: 300px; + padding: 20px; + margin: 0; +} +html.minimal .tsd-member .tsd-member { + margin-left: 0; +} +html.minimal .tsd-page-toolbar { + position: fixed; + z-index: 2; +} +html.minimal #tsd-filter .tsd-filter-group { + right: 0; + transform: none; +} +html.minimal footer { + background-color: transparent; +} +html.minimal footer .container { + padding: 0; +} +html.minimal .tsd-generator { + padding: 0; +} +@media (max-width: 900px) { + html.minimal .tsd-navigation { + display: none; + } + html.minimal .content-wrap { + padding-left: 0; + } +} + +dl.tsd-comment-tags { + overflow: hidden; +} +dl.tsd-comment-tags dt { + float: left; + padding: 1px 5px; + margin: 0 10px 0 0; + border-radius: 4px; + border: 1px solid #808080; + color: #808080; + font-size: 0.8em; + font-weight: normal; +} +dl.tsd-comment-tags dd { + margin: 0 0 10px 0; +} +dl.tsd-comment-tags dd:before, dl.tsd-comment-tags dd:after { + display: table; + content: " "; +} +dl.tsd-comment-tags dd pre, dl.tsd-comment-tags dd:after { + clear: both; +} +dl.tsd-comment-tags p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + color: black; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.toggle-protected .tsd-is-private { + display: none; +} + +.toggle-public .tsd-is-private, +.toggle-public .tsd-is-protected, +.toggle-public .tsd-is-private-protected { + display: none; +} + +.toggle-inherited .tsd-is-inherited { + display: none; +} + +.toggle-only-exported .tsd-is-not-exported { + display: none; +} + +.toggle-externals .tsd-is-external { + display: none; +} + +#tsd-filter { + position: relative; + display: inline-block; + height: 40px; + vertical-align: bottom; +} +.no-filter #tsd-filter { + display: none; +} +#tsd-filter .tsd-filter-group { + display: inline-block; + height: 40px; + vertical-align: bottom; + white-space: nowrap; +} +#tsd-filter input { + display: none; +} +@media (max-width: 900px) { + #tsd-filter .tsd-filter-group { + display: block; + position: absolute; + top: 40px; + right: 20px; + height: auto; + background-color: #130C1D; + visibility: hidden; + transform: translate(50%, 0); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + .has-options #tsd-filter .tsd-filter-group { + visibility: visible; + } + .to-has-options #tsd-filter .tsd-filter-group { + animation: fade-in 0.2s; + } + .from-has-options #tsd-filter .tsd-filter-group { + animation: fade-out 0.2s; + } + #tsd-filter label, +#tsd-filter .tsd-select { + display: block; + padding-right: 20px; + } +} + +footer { + border-top: 1px solid #eee; + background-color: #130C1D; + color: white; +} +footer.with-border-bottom { + border-bottom: 1px solid #eee; +} +footer .tsd-legend-group { + font-size: 0; +} +footer .tsd-legend { + display: inline-block; + width: 25%; + padding: 0; + font-size: 16px; + list-style: none; + line-height: 1.333em; + vertical-align: top; +} +@media (max-width: 900px) { + footer .tsd-legend { + width: 50%; + } +} + +.tsd-hierarchy { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-index-panel .tsd-index-content { + margin-bottom: -30px !important; +} +.tsd-index-panel .tsd-index-section { + margin-bottom: 30px !important; +} +.tsd-index-panel h3 { + margin: 0 -20px 10px -20px; + padding: 0 20px 10px 20px; + border-bottom: 1px solid #eee; +} +.tsd-index-panel ul.tsd-index-list { + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; + -moz-column-gap: 20px; + -ms-column-gap: 20px; + -o-column-gap: 20px; + column-gap: 20px; + padding: 0; + list-style: none; + line-height: 1.333em; +} +@media (max-width: 900px) { + .tsd-index-panel ul.tsd-index-list { + -moz-column-count: 1; + -ms-column-count: 1; + -o-column-count: 1; + column-count: 1; + } +} +@media (min-width: 901px) and (max-width: 1024px) { + .tsd-index-panel ul.tsd-index-list { + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; + } +} +.tsd-index-panel ul.tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; +} +.tsd-index-panel a, +.tsd-index-panel .tsd-parent-kind-module a { + color: #9600ff; +} +.tsd-index-panel .tsd-parent-kind-interface a { + color: #7da01f; +} +.tsd-index-panel .tsd-parent-kind-enum a { + color: #cc9900; +} +.tsd-index-panel .tsd-parent-kind-class a { + color: #4da6ff; +} +.tsd-index-panel .tsd-kind-module a { + color: #9600ff; +} +.tsd-index-panel .tsd-kind-interface a { + color: #7da01f; +} +.tsd-index-panel .tsd-kind-enum a { + color: #cc9900; +} +.tsd-index-panel .tsd-kind-class a { + color: #4da6ff; +} +.tsd-index-panel .tsd-is-private a { + color: #808080; +} + +.tsd-flag { + display: inline-block; + padding: 1px 5px; + border-radius: 4px; + color: #130C1D; + background-color: #808080; + text-indent: 0; + font-size: 14px; + font-weight: normal; +} + +.tsd-anchor { + position: absolute; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} + +.tsd-navigation { + margin: 0 0 0 40px; +} +.tsd-navigation a { + display: block; + padding-top: 2px; + padding-bottom: 2px; + border-left: 2px solid transparent; + color: #fff; + text-decoration: none; + transition: border-left-color 0.1s; +} +.tsd-navigation a:hover { + text-decoration: underline; +} +.tsd-navigation ul { + margin: 0; + padding: 0; + list-style: none; +} +.tsd-navigation li { + padding: 0; +} + +.tsd-navigation.primary { + padding-bottom: 40px; +} +.tsd-navigation.primary a { + display: block; + padding-top: 6px; + padding-bottom: 6px; +} +.tsd-navigation.primary ul li a { + padding-left: 5px; +} +.tsd-navigation.primary ul li li a { + padding-left: 25px; +} +.tsd-navigation.primary ul li li li a { + padding-left: 45px; +} +.tsd-navigation.primary ul li li li li a { + padding-left: 65px; +} +.tsd-navigation.primary ul li li li li li a { + padding-left: 85px; +} +.tsd-navigation.primary ul li li li li li li a { + padding-left: 105px; +} +.tsd-navigation.primary > ul { + border-bottom: 1px solid #eee; +} +.tsd-navigation.primary li { + border-top: 1px solid #eee; +} +.tsd-navigation.primary li.current > a { + font-weight: bold; +} +.tsd-navigation.primary li.label span { + display: block; + padding: 20px 0 6px 5px; + color: #808080; +} +.tsd-navigation.primary li.globals + li > span, .tsd-navigation.primary li.globals + li > a { + padding-top: 20px; +} + +.tsd-navigation.secondary { + max-height: calc(100vh - 1rem - 40px); + overflow: auto; + position: -webkit-sticky; + position: sticky; + top: calc(.5rem + 40px); + transition: 0.3s; +} +.tsd-navigation.secondary.tsd-navigation--toolbar-hide { + max-height: calc(100vh - 1rem); + top: 0.5rem; +} +.tsd-navigation.secondary ul { + transition: opacity 0.2s; +} +.tsd-navigation.secondary ul li a { + padding-left: 25px; +} +.tsd-navigation.secondary ul li li a { + padding-left: 45px; +} +.tsd-navigation.secondary ul li li li a { + padding-left: 65px; +} +.tsd-navigation.secondary ul li li li li a { + padding-left: 85px; +} +.tsd-navigation.secondary ul li li li li li a { + padding-left: 105px; +} +.tsd-navigation.secondary ul li li li li li li a { + padding-left: 125px; +} +.tsd-navigation.secondary ul.current a { + border-left-color: #eee; +} +.tsd-navigation.secondary li.focus > a, +.tsd-navigation.secondary ul.current li.focus > a { + border-left-color: #000; +} +.tsd-navigation.secondary li.current { + margin-top: 20px; + margin-bottom: 20px; + border-left-color: #eee; +} +.tsd-navigation.secondary li.current > a { + font-weight: bold; +} + +@media (min-width: 901px) { + .menu-sticky-wrap { + position: static; + } +} + +.tsd-panel { + margin: 20px 0; + padding: 20px; + background-color: #fff; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, .tsd-panel > h2, .tsd-panel > h3 { + margin: 1.5em -20px 10px -20px; + padding: 0 20px 10px 20px; + border-bottom: 1px solid #eee; +} +.tsd-panel > h1.tsd-before-signature, .tsd-panel > h2.tsd-before-signature, .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: 0; +} +.tsd-panel table { + display: block; + width: 100%; + overflow: auto; + margin-top: 10px; + word-break: normal; + word-break: keep-all; +} +.tsd-panel table th { + font-weight: bold; +} +.tsd-panel table th, .tsd-panel table td { + padding: 6px 13px; + border: 1px solid #ddd; +} +.tsd-panel table tr { + background-color: #130C1D; + border-top: 1px solid #ccc; +} +.tsd-panel table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +.tsd-panel-group { + margin: 60px 0; +} +.tsd-panel-group > h1, .tsd-panel-group > h2, .tsd-panel-group > h3 { + padding-left: 20px; + padding-right: 20px; +} + +#tsd-search { + transition: background-color 0.2s; + color: fff; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 40px; + height: 40px; +} +#tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: #130C1D; +} +#tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; +} +#tsd-search .field input, +#tsd-search .title { + transition: opacity 0.2s; +} +#tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +#tsd-search .results li { + padding: 0 10px; + background-color: #130C1D; +} +#tsd-search .results li:nth-child(even) { + background-color: #130C1D; +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current, +#tsd-search .results li:hover { + background-color: #eee; +} +#tsd-search .results a { + display: block; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: #808080; + font-weight: normal; +} +#tsd-search.has-focus { + background-color: #eee; +} +#tsd-search.has-focus .field input { + top: 0; + opacity: 1; +} +#tsd-search.has-focus .title { + z-index: 0; + opacity: 0; +} +#tsd-search.has-focus .results { + visibility: visible; +} +#tsd-search.loading .results li.state.loading { + display: block; +} +#tsd-search.failure .results li.state.failure { + display: block; +} + +.tsd-signature { + margin: 0 0 1em 0; + padding: 10px; + border: 1px solid #eee; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} +.tsd-signature.tsd-kind-icon { + padding-left: 30px; +} +.tsd-signature.tsd-kind-icon:before { + top: 10px; + left: 10px; +} +.tsd-panel > .tsd-signature { + margin-left: -20px; + margin-right: -20px; + border-width: 1px 0; +} +.tsd-panel > .tsd-signature.tsd-kind-icon { + padding-left: 40px; +} +.tsd-panel > .tsd-signature.tsd-kind-icon:before { + left: 20px; +} + +.tsd-signature-symbol { + color: #808080; + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + border: 1px solid #eee; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-width: 1px 0 0 0; + transition: background-color 0.1s; +} +.tsd-signatures .tsd-signature:first-child { + border-top-width: 0; +} +.tsd-signatures .tsd-signature.current { + background-color: #eee; +} +.tsd-signatures.active > .tsd-signature { + cursor: pointer; +} +.tsd-panel > .tsd-signatures { + margin-left: -20px; + margin-right: -20px; + border-width: 1px 0; +} +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { + padding-left: 40px; +} +.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { + left: 20px; +} +.tsd-panel > a.anchor + .tsd-signatures { + border-top-width: 0; + margin-top: -20px; +} + +ul.tsd-descriptions { + position: relative; + overflow: hidden; + padding: 0; + list-style: none; +} +ul.tsd-descriptions.active > .tsd-description { + display: none; +} +ul.tsd-descriptions.active > .tsd-description.current { + display: block; +} +ul.tsd-descriptions.active > .tsd-description.fade-in { + animation: fade-in-delayed 0.3s; +} +ul.tsd-descriptions.active > .tsd-description.fade-out { + animation: fade-out-delayed 0.3s; + position: absolute; + display: block; + top: 0; + left: 0; + right: 0; + opacity: 0; + visibility: hidden; +} +ul.tsd-descriptions h4, ul.tsd-descriptions .tsd-index-panel h3, .tsd-index-panel ul.tsd-descriptions h3 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} + +ul.tsd-parameters, +ul.tsd-type-parameters { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameters > li.tsd-parameter-signature, +ul.tsd-type-parameters > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameters h5, +ul.tsd-type-parameters h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +ul.tsd-parameters .tsd-comment, +ul.tsd-type-parameters .tsd-comment { + margin-top: -0.5em; +} + +.tsd-sources { + font-size: 14px; + color: #808080; + margin: 0 0 1em 0; +} +.tsd-sources a { + color: #808080; + text-decoration: underline; +} +.tsd-sources ul, .tsd-sources p { + margin: 0 !important; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: fixed; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 40px; + color: #333; + background: #130C1D; + border-bottom: 1px solid #eee; + transition: transform 0.3s linear; +} +.tsd-page-toolbar a { + color: #333; + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .table-wrap { + display: table; + width: 100%; + height: 40px; +} +.tsd-page-toolbar .table-cell { + display: table-cell; + position: relative; + white-space: nowrap; + line-height: 40px; +} +.tsd-page-toolbar .table-cell:first-child { + width: 100%; +} + +.tsd-page-toolbar--hide { + transform: translateY(-100%); +} + +.tsd-select .tsd-select-list li:before, .tsd-select .tsd-select-label:before, .tsd-widget:before { + content: ""; + display: inline-block; + width: 40px; + height: 40px; + margin: 0 -8px 0 0; + background-image: url(../images/widgets.png); + background-repeat: no-repeat; + text-indent: -1024px; + vertical-align: bottom; +} +@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { + .tsd-select .tsd-select-list li:before, .tsd-select .tsd-select-label:before, .tsd-widget:before { + background-image: url(../images/widgets@2x.png); + background-size: 320px 40px; + } +} + +.tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.6; + height: 40px; + transition: opacity 0.1s, background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.8; +} +.tsd-widget.active { + opacity: 1; + background-color: #130C1D; +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} +.tsd-widget.search:before { + background-position: 0 0; +} +.tsd-widget.menu:before { + background-position: -40px 0; +} +.tsd-widget.options:before { + background-position: -80px 0; +} +.tsd-widget.options, .tsd-widget.menu { + display: none; +} +@media (max-width: 900px) { + .tsd-widget.options, .tsd-widget.menu { + display: inline-block; + } +} +input[type=checkbox] + .tsd-widget:before { + background-position: -120px 0; +} +input[type=checkbox]:checked + .tsd-widget:before { + background-position: -160px 0; +} + +.tsd-select { + position: relative; + display: inline-block; + height: 40px; + transition: opacity 0.1s, background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-select .tsd-select-label { + opacity: 0.6; + transition: opacity 0.2s; +} +.tsd-select .tsd-select-label:before { + background-position: -240px 0; +} +.tsd-select.active .tsd-select-label { + opacity: 0.8; +} +.tsd-select.active .tsd-select-list { + visibility: visible; + opacity: 1; + transition-delay: 0s; +} +.tsd-select .tsd-select-list { + position: absolute; + visibility: hidden; + top: 40px; + left: 0; + margin: 0; + padding: 0; + opacity: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + transition: visibility 0s 0.2s, opacity 0.2s; +} +.tsd-select .tsd-select-list li { + padding: 0 20px 0 0; + background-color: #130C1D; +} +.tsd-select .tsd-select-list li:before { + background-position: 40px 0; +} +.tsd-select .tsd-select-list li:nth-child(even) { + background-color: #130C1D; +} +.tsd-select .tsd-select-list li:hover { + background-color: #130C1D; +} +.tsd-select .tsd-select-list li.selected:before { + background-position: -200px 0; +} +@media (max-width: 900px) { + .tsd-select .tsd-select-list { + top: 0; + left: auto; + right: 100%; + margin-right: -5px; + } + .tsd-select .tsd-select-label:before { + background-position: -280px 0; + } +} + +img { + max-width: 100%; +} \ No newline at end of file diff --git a/.github-pages/theme/assets/images/icons.png b/.github-pages/theme/assets/images/icons.png new file mode 100644 index 0000000..3836d5f Binary files /dev/null and b/.github-pages/theme/assets/images/icons.png differ diff --git a/.github-pages/theme/assets/images/icons@2x.png b/.github-pages/theme/assets/images/icons@2x.png new file mode 100644 index 0000000..5a209e2 Binary files /dev/null and b/.github-pages/theme/assets/images/icons@2x.png differ diff --git a/.github-pages/theme/assets/images/widgets.png b/.github-pages/theme/assets/images/widgets.png new file mode 100644 index 0000000..c738053 Binary files /dev/null and b/.github-pages/theme/assets/images/widgets.png differ diff --git a/.github-pages/theme/assets/images/widgets@2x.png b/.github-pages/theme/assets/images/widgets@2x.png new file mode 100644 index 0000000..4bbbd57 Binary files /dev/null and b/.github-pages/theme/assets/images/widgets@2x.png differ diff --git a/.github-pages/theme/assets/js/main.js b/.github-pages/theme/assets/js/main.js new file mode 100644 index 0000000..fe9fac3 --- /dev/null +++ b/.github-pages/theme/assets/js/main.js @@ -0,0 +1 @@ +!function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.7",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return null==e?"":e.toString()},e.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),i=0;i=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){for(var t,r;47<(r=(t=this.next()).charCodeAt(0))&&r<58;);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos=this.scrollTop||0===this.scrollTop,isShown!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.secondaryNav.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop},Viewport}(typedoc.EventTarget);typedoc.Viewport=Viewport,typedoc.registerService(Viewport,"viewport")}(typedoc||(typedoc={})),function(typedoc){function Component(options){this.el=options.el}typedoc.Component=Component}(typedoc||(typedoc={})),function(typedoc){typedoc.pointerDown="mousedown",typedoc.pointerMove="mousemove",typedoc.pointerUp="mouseup",typedoc.pointerDownPosition={x:0,y:0},typedoc.preventNextClick=!1,typedoc.isPointerDown=!1,typedoc.isPointerTouch=!1,typedoc.hasPointerMoved=!1,typedoc.isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),document.documentElement.classList.add(typedoc.isMobile?"is-mobile":"not-mobile"),typedoc.isMobile&&"ontouchstart"in document.documentElement&&(typedoc.isPointerTouch=!0,typedoc.pointerDown="touchstart",typedoc.pointerMove="touchmove",typedoc.pointerUp="touchend"),document.addEventListener(typedoc.pointerDown,function(e){typedoc.isPointerDown=!0,typedoc.hasPointerMoved=!1;var t="touchstart"==typedoc.pointerDown?e.targetTouches[0]:e;typedoc.pointerDownPosition.y=t.pageY||0,typedoc.pointerDownPosition.x=t.pageX||0}),document.addEventListener(typedoc.pointerMove,function(e){if(typedoc.isPointerDown&&!typedoc.hasPointerMoved){var t="touchstart"==typedoc.pointerDown?e.targetTouches[0]:e,x=typedoc.pointerDownPosition.x-(t.pageX||0),y=typedoc.pointerDownPosition.y-(t.pageY||0);typedoc.hasPointerMoved=10scrollTop;)index-=1;for(;index"+match+""}),parent=row.parent||"";(parent=parent.replace(new RegExp(this.query,"i"),function(match){return""+match+""}))&&(name=''+parent+"."+name);var item=document.createElement("li");item.classList.value=row.classes,item.innerHTML='\n '+name+"'\n ",this.results.appendChild(item)}}},Search.prototype.setLoadingState=function(value){this.loadingState!=value&&(this.el.classList.remove(SearchLoadingState[this.loadingState].toLowerCase()),this.loadingState=value,this.el.classList.add(SearchLoadingState[this.loadingState].toLowerCase()),this.updateResults())},Search.prototype.setHasFocus=function(value){this.hasFocus!=value&&(this.hasFocus=value,this.el.classList.toggle("has-focus"),value?(this.setQuery(""),this.field.value=""):this.field.value=this.query)},Search.prototype.setQuery=function(value){this.query=value.trim(),this.updateResults()},Search.prototype.setCurrentResult=function(dir){var current=this.results.querySelector(".current");if(current){var rel=1==dir?current.nextElementSibling:current.previousElementSibling;rel&&(current.classList.remove("current"),rel.classList.add("current"))}else(current=this.results.querySelector(1==dir?"li:first-child":"li:last-child"))&¤t.classList.add("current")},Search.prototype.gotoCurrentResult=function(){var current=this.results.querySelector(".current");if(current||(current=this.results.querySelector("li:first-child")),current){var link=current.querySelector("a");link&&(window.location.href=link.href),this.field.blur()}},Search.prototype.bindEvents=function(){var _this=this;this.results.addEventListener("mousedown",function(){_this.resultClicked=!0}),this.results.addEventListener("mouseup",function(){_this.resultClicked=!1,_this.setHasFocus(!1)}),this.field.addEventListener("focusin",function(){_this.setHasFocus(!0),_this.loadIndex()}),this.field.addEventListener("focusout",function(){_this.resultClicked?_this.resultClicked=!1:setTimeout(function(){return _this.setHasFocus(!1)},100)}),this.field.addEventListener("input",function(){_this.setQuery(_this.field.value)}),this.field.addEventListener("keydown",function(e){13==e.keyCode||27==e.keyCode||38==e.keyCode||40==e.keyCode?(_this.preventPress=!0,e.preventDefault(),13==e.keyCode?_this.gotoCurrentResult():27==e.keyCode?_this.field.blur():38==e.keyCode?_this.setCurrentResult(-1):40==e.keyCode&&_this.setCurrentResult(1)):_this.preventPress=!1}),this.field.addEventListener("keypress",function(e){_this.preventPress&&e.preventDefault()}),document.body.addEventListener("keydown",function(e){e.altKey||e.ctrlKey||e.metaKey||!_this.hasFocus&&47this.groups.length-1&&(index=this.groups.length-1),this.index!=index){var to=this.groups[index];if(-1 + + + + + {{#ifCond model.name '==' project.name}}{{project.name}}{{else}}{{model.name}} | {{project.name}}{{/ifCond}} + + + + + + + +{{> header}} + +
+
+
+ {{{contents}}} +
+ +
+
+ +{{> footer}} + +
+ + + +{{> analytics}} + + + diff --git a/.github-pages/theme/partials/analytics.hbs b/.github-pages/theme/partials/analytics.hbs new file mode 100644 index 0000000..2c4ec9b --- /dev/null +++ b/.github-pages/theme/partials/analytics.hbs @@ -0,0 +1,11 @@ +{{#if settings.gaID}} + +{{/if}} \ No newline at end of file diff --git a/.github-pages/theme/partials/breadcrumb.hbs b/.github-pages/theme/partials/breadcrumb.hbs new file mode 100644 index 0000000..7d48d1a --- /dev/null +++ b/.github-pages/theme/partials/breadcrumb.hbs @@ -0,0 +1,16 @@ +{{#if parent}} + {{#with parent}}{{> breadcrumb}}{{/with}} +
  • + {{#if url}} + {{name}} + {{else}} + {{name}} + {{/if}} +
  • +{{else}} + {{#if url}} +
  • + Home +
  • + {{/if}} +{{/if}} diff --git a/.github-pages/theme/partials/comment.hbs b/.github-pages/theme/partials/comment.hbs new file mode 100644 index 0000000..1fbd2d7 --- /dev/null +++ b/.github-pages/theme/partials/comment.hbs @@ -0,0 +1,22 @@ +{{#with comment}} + {{#if hasVisibleComponent}} +
    + {{#if shortText}} +
    + {{#markdown}}{{{shortText}}}{{/markdown}} +
    + {{/if}} + {{#if text}} + {{#markdown}}{{{text}}}{{/markdown}} + {{/if}} + {{#if tags}} +
    + {{#each tags}} +
    {{tagName}}
    +
    {{#markdown}}{{{text}}}{{/markdown}}
    + {{/each}} +
    + {{/if}} +
    + {{/if}} +{{/with}} \ No newline at end of file diff --git a/.github-pages/theme/partials/footer.hbs b/.github-pages/theme/partials/footer.hbs new file mode 100644 index 0000000..e5913db --- /dev/null +++ b/.github-pages/theme/partials/footer.hbs @@ -0,0 +1,21 @@ + + +
    +

    Legend

    +
    + {{#each legend}} +
      + {{#each .}} +
    • {{name}}
    • + {{/each}} +
    + {{/each}} +
    +
    + + +{{#unless settings.hideGenerator}} +
    +

    Generated using TypeDoc

    +
    +{{/unless}} \ No newline at end of file diff --git a/.github-pages/theme/partials/header.hbs b/.github-pages/theme/partials/header.hbs new file mode 100644 index 0000000..f07455c --- /dev/null +++ b/.github-pages/theme/partials/header.hbs @@ -0,0 +1,38 @@ +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
      + {{#with model}}{{> breadcrumb}}{{/with}} +
    +

    {{#compact}} + {{model.kindString}}  + {{model.name}} + {{#if model.typeParameters}} + < + {{#each model.typeParameters}} + {{#if @index}}, {{/if}} + {{name}} + {{/each}} + > + {{/if}} + {{/compact}}

    +
    +
    +
    diff --git a/.github-pages/theme/partials/hierarchy.hbs b/.github-pages/theme/partials/hierarchy.hbs new file mode 100644 index 0000000..c8166bb --- /dev/null +++ b/.github-pages/theme/partials/hierarchy.hbs @@ -0,0 +1,17 @@ +
      + {{#each types}} +
    • + {{#if ../isTarget}} + {{this}} + {{else}} + {{#compact}}{{> type}}{{/compact}} + {{/if}} + + {{#if @last}} + {{#with ../next}} + {{> hierarchy}} + {{/with}} + {{/if}} +
    • + {{/each}} +
    diff --git a/.github-pages/theme/partials/index.hbs b/.github-pages/theme/partials/index.hbs new file mode 100644 index 0000000..05d199d --- /dev/null +++ b/.github-pages/theme/partials/index.hbs @@ -0,0 +1,30 @@ +{{#if groups}} +
    +

    Index

    +
    +
    + {{#each groups}} +
    + {{#if categories}} + {{#each categories}} +

    {{#if title}}{{title}} {{/if}}{{../title}}

    + + {{/each}} + {{else}} +

    {{title}}

    + + {{/if}} +
    + {{/each}} +
    +
    +
    +{{/if}} \ No newline at end of file diff --git a/.github-pages/theme/partials/member.declaration.hbs b/.github-pages/theme/partials/member.declaration.hbs new file mode 100644 index 0000000..4dcaa96 --- /dev/null +++ b/.github-pages/theme/partials/member.declaration.hbs @@ -0,0 +1,36 @@ +
    {{#compact}} + {{{wbr name}}} + {{#if typeParameters}} + < + {{#each typeParameters}} + {{#if @index}}, {{/if}} + {{name}} + {{/each}} + > + {{/if}} + {{#if isOptional}}?{{/if}}: {{#with type}}{{>type}}{{/with}} + {{#if defaultValue}} + +  =  + {{defaultValue}} + + {{/if}} +{{/compact}}
    + +{{> member.sources}} + +{{> comment}} + +{{#if typeParameters}} +

    Type parameters

    + {{> typeParameters}} +{{/if}} + +{{#if type.declaration}} +
    +

    Type declaration

    + {{#with type.declaration}} + {{> parameter}} + {{/with}} +
    +{{/if}} diff --git a/.github-pages/theme/partials/member.getterSetter.hbs b/.github-pages/theme/partials/member.getterSetter.hbs new file mode 100644 index 0000000..902ea4c --- /dev/null +++ b/.github-pages/theme/partials/member.getterSetter.hbs @@ -0,0 +1,37 @@ +
      + {{#if getSignature}} + {{#with getSignature}} +
    • {{#compact}} + get  + {{../name}} + {{> member.signature.title hideName=true }} + {{/compact}}
    • + {{/with}} + {{/if}} + {{#if setSignature}} + {{#with setSignature}} +
    • {{#compact}} + set  + {{../name}} + {{> member.signature.title hideName=true }} + {{/compact}}
    • + {{/with}} + {{/if}} +
    + +
      + {{#if getSignature}} + {{#with getSignature}} +
    • + {{> member.signature.body }} +
    • + {{/with}} + {{/if}} + {{#if setSignature}} + {{#with setSignature}} +
    • + {{> member.signature.body }} +
    • + {{/with}} + {{/if}} +
    diff --git a/.github-pages/theme/partials/member.hbs b/.github-pages/theme/partials/member.hbs new file mode 100644 index 0000000..0cf5cac --- /dev/null +++ b/.github-pages/theme/partials/member.hbs @@ -0,0 +1,24 @@ +
    + + {{#if name}} +

    {{#each flags}}{{this}} {{/each}}{{{wbr name}}}

    + {{/if}} + + {{#if signatures}} + {{> member.signatures}} + {{else}}{{#if hasGetterOrSetter}} + {{> member.getterSetter}} + {{else}}{{#if isReference}} + {{> member.reference}} + {{else}} + {{> member.declaration}} + {{/if}}{{/if}}{{/if}} + + {{#each groups}} + {{#each children}} + {{#unless hasOwnDocument}} + {{> member}} + {{/unless}} + {{/each}} + {{/each}} +
    diff --git a/.github-pages/theme/partials/member.reference.hbs b/.github-pages/theme/partials/member.reference.hbs new file mode 100644 index 0000000..13aa3cc --- /dev/null +++ b/.github-pages/theme/partials/member.reference.hbs @@ -0,0 +1,11 @@ +{{#with tryGetTargetReflectionDeep}} + {{#ifCond ../name '===' name}} + Re-exports {{name}} + {{else if flags.isExported}} + Renames and re-exports {{name}} + {{else}} + Renames and exports {{name}} + {{/ifCond}} +{{else}} + Re-exports {{name}} +{{/with}} diff --git a/.github-pages/theme/partials/member.signature.body.hbs b/.github-pages/theme/partials/member.signature.body.hbs new file mode 100644 index 0000000..f415785 --- /dev/null +++ b/.github-pages/theme/partials/member.signature.body.hbs @@ -0,0 +1,56 @@ +{{#unless hideSources}} + {{> member.sources}} +{{/unless}} + +{{> comment}} + +{{#if typeParameters}} +

    Type parameters

    + {{> typeParameters}} +{{/if}} + +{{#if parameters}} +

    Parameters

    +
      + {{#each parameters}} +
    • +
      {{#compact}} + {{#each flags}} + {{this}}  + {{/each}} + {{#if flags.isRest}}...{{/if}} + {{name}}:  + {{#with type}}{{>type}}{{/with}} + {{#if defaultValue}} + +  =  + {{defaultValue}} + + {{/if}} + {{/compact}}
      + + {{> comment}} + + {{#if type.declaration}} + {{#with type.declaration}} + {{> parameter}} + {{/with}} + {{/if}} +
    • + {{/each}} +
    +{{/if}} + +{{#if type}} +

    Returns {{#compact}}{{#with type}}{{>type}}{{/with}}{{/compact}}

    + + {{#if comment.returns}} + {{#markdown}}{{{comment.returns}}}{{/markdown}} + {{/if}} + + {{#if type.declaration}} + {{#with type.declaration}} + {{> parameter}} + {{/with}} + {{/if}} +{{/if}} diff --git a/.github-pages/theme/partials/member.signature.title.hbs b/.github-pages/theme/partials/member.signature.title.hbs new file mode 100644 index 0000000..035c4ca --- /dev/null +++ b/.github-pages/theme/partials/member.signature.title.hbs @@ -0,0 +1,32 @@ +{{#unless hideName}}{{{wbr name}}}{{/unless}} +{{#if typeParameters}} + < + {{#each typeParameters}} + {{#if @index}}, {{/if}} + {{name}} + {{/each}} + > +{{/if}} +( +{{#each parameters}} + {{#if @index}}, {{/if}} + {{#if flags.isRest}}...{{/if}} + {{name}} + + {{#if flags.isOptional}}?{{/if}} + {{#if defaultValue}}?{{/if}} + :  + + {{#with type}}{{>type}}{{/with}} +{{/each}} +) +{{#if type}} + {{#if arrowStyle}} + => + {{else}} + : + {{/if}} + {{#with type}} + {{>type}} + {{/with}} +{{/if}} diff --git a/.github-pages/theme/partials/member.signatures.hbs b/.github-pages/theme/partials/member.signatures.hbs new file mode 100644 index 0000000..b549f98 --- /dev/null +++ b/.github-pages/theme/partials/member.signatures.hbs @@ -0,0 +1,13 @@ +
      + {{#each signatures}} +
    • {{#compact}}{{> member.signature.title }}{{/compact}}
    • + {{/each}} +
    + +
      + {{#each signatures}} +
    • + {{> member.signature.body }} +
    • + {{/each}} +
    diff --git a/.github-pages/theme/partials/member.sources.hbs b/.github-pages/theme/partials/member.sources.hbs new file mode 100644 index 0000000..367a3ae --- /dev/null +++ b/.github-pages/theme/partials/member.sources.hbs @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/.github-pages/theme/partials/members.group.hbs b/.github-pages/theme/partials/members.group.hbs new file mode 100644 index 0000000..18b82d6 --- /dev/null +++ b/.github-pages/theme/partials/members.group.hbs @@ -0,0 +1,21 @@ +{{#if categories}} + {{#each categories}} +
    +

    {{#if title}}{{title}} {{/if}}{{../title}}

    + {{#each children}} + {{#unless hasOwnDocument}} + {{> member}} + {{/unless}} + {{/each}} +
    + {{/each}} +{{else}} +
    +

    {{title}}

    + {{#each children}} + {{#unless hasOwnDocument}} + {{> member}} + {{/unless}} + {{/each}} +
    +{{/if}} \ No newline at end of file diff --git a/.github-pages/theme/partials/members.hbs b/.github-pages/theme/partials/members.hbs new file mode 100644 index 0000000..5b41523 --- /dev/null +++ b/.github-pages/theme/partials/members.hbs @@ -0,0 +1,20 @@ +{{#if categories}} + {{#each categories}} + {{#unless allChildrenHaveOwnDocument}} +
    +

    {{title}}

    + {{#each children}} + {{#unless hasOwnDocument}} + {{> member}} + {{/unless}} + {{/each}} +
    + {{/unless}} + {{/each}} +{{else}} + {{#each groups}} + {{#unless allChildrenHaveOwnDocument}} + {{> members.group}} + {{/unless}} + {{/each}} +{{/if}} \ No newline at end of file diff --git a/.github-pages/theme/partials/navigation.hbs b/.github-pages/theme/partials/navigation.hbs new file mode 100644 index 0000000..b1f91e4 --- /dev/null +++ b/.github-pages/theme/partials/navigation.hbs @@ -0,0 +1,26 @@ +{{#if isVisible}} + {{#if isLabel}} +
  • + {{{wbr title}}} +
  • + {{else}} + {{#if isGlobals}} +
  • + {{{wbr title}}} +
  • + {{else}} +
  • + {{{wbr title}}} + {{#if isInPath}} + {{#if children}} +
      + {{#each children}} + {{> navigation}} + {{/each}} +
    + {{/if}} + {{/if}} +
  • + {{/if}} + {{/if}} +{{/if}} diff --git a/.github-pages/theme/partials/parameter.hbs b/.github-pages/theme/partials/parameter.hbs new file mode 100644 index 0000000..b4e9ac6 --- /dev/null +++ b/.github-pages/theme/partials/parameter.hbs @@ -0,0 +1,83 @@ +
      + {{#if signatures}} +
    • +
        + {{#each signatures}} +
      • {{#compact}} + {{> member.signature.title hideName=true }} + {{/compact}}
      • + {{/each}} +
      + +
        + {{#each signatures}} +
      • {{> member.signature.body hideSources=true }}
      • + {{/each}} +
      +
    • + {{/if}} + {{#if indexSignature}} +
    • +
      {{#compact}} + [ + {{#each indexSignature.parameters}} + {{#if flags.isRest}}...{{/if}}{{name}}: {{#with type}}{{>type}}{{/with}} + {{/each}} + ]:  + {{#with indexSignature.type}}{{>type}}{{/with}} + {{/compact}}
      + + {{#with indexSignature}} + {{> comment}} + {{/with}} + + {{#if indexSignature.type.declaration}} + {{#with indexSignature.type.declaration}} + {{> parameter}} + {{/with}} + {{/if}} +
    • + {{/if}} + {{#each children}} +
    • + {{#if signatures}} +
      {{#compact}} + {{#if flags.isRest}}...{{/if}} + {{{wbr name}}} + + {{#if isOptional}}?{{/if}} + :  + + function + {{/compact}}
      + + {{> member.signatures}} + {{else}} +
      {{#compact}} + {{#each flags}} + {{this}}  + {{/each}} + {{#if flags.isRest}}...{{/if}} + {{{wbr name}}} + + {{#if flags.isOptional}}?{{/if}} + :  + + {{#with type}}{{>type}}{{/with}} + {{/compact}}
      + + {{> comment}} + + {{#if children}} + {{> parameter}} + {{/if}} + + {{#if type.declaration}} + {{#with type.declaration}} + {{> parameter}} + {{/with}} + {{/if}} + {{/if}} +
    • + {{/each}} +
    diff --git a/.github-pages/theme/partials/toc.hbs b/.github-pages/theme/partials/toc.hbs new file mode 100644 index 0000000..56b1d74 --- /dev/null +++ b/.github-pages/theme/partials/toc.hbs @@ -0,0 +1,10 @@ +
  • + {{{wbr title}}} + {{#if children}} +
      + {{#each children}} + {{> toc}} + {{/each}} +
    + {{/if}} +
  • diff --git a/.github-pages/theme/partials/toc.root.hbs b/.github-pages/theme/partials/toc.root.hbs new file mode 100644 index 0000000..cba0d66 --- /dev/null +++ b/.github-pages/theme/partials/toc.root.hbs @@ -0,0 +1,18 @@ +{{#if isInPath}} + +
      +{{/if}} +
    • + {{{wbr title}}} + {{#if children}} +
        + {{#each children}} + {{> toc}} + {{/each}} +
      + {{/if}} +
    • +{{#if isInPath}} +
    +
      +{{/if}} diff --git a/.github-pages/theme/partials/type.hbs b/.github-pages/theme/partials/type.hbs new file mode 100644 index 0000000..f226d52 --- /dev/null +++ b/.github-pages/theme/partials/type.hbs @@ -0,0 +1,211 @@ +{{! Each type gets its own inline helper to determine how it is rendered. }} +{{! The name of the helper is the value of the 'type' property on the type.}} + +{{! +The type helper accepts an optional needsParens parameter that is checked +if an inner type may result in invalid output without them. For example: +1 | 2[] !== (1 | 2)[] +() => 1 | 2 !== (() => 1) | 2 +}} + +{{#*inline 'array'}} + {{#with elementType}} + {{> type needsParens=true}} + [] + {{/with}} +{{/inline}} + +{{#*inline 'conditional'}} + {{#if needsParens}} + ( + {{/if}} + {{#with checkType}} + {{> type needsParens=true}} + {{/with}} + extends + {{#with extendsType}} + {{> type}} + {{/with}} + ? + {{#with trueType}} + {{> type}} + {{/with}} + : + {{#with falseType}} + {{> type}} + {{/with}} + {{#if needsParens}} + ) + {{/if}} +{{/inline}} + +{{#*inline 'indexedAccess'}} + {{#with objectType}} + {{> type}} + {{/with}} + [ + {{#with indexType}} + {{> type}} + {{/with}} + ] +{{/inline}} + +{{#*inline 'inferred'}} + infer {{name}} +{{/inline}} + +{{#*inline 'intersection'}} + {{#if needsParens}} + ( + {{/if}} + {{#each types}} + {{#unless @first}} + & + {{/unless}} + {{> type}} + {{/each}} + {{#if needsParens}} + ) + {{/if}} +{{/inline}} + +{{#*inline 'intrinsic'}} + {{name}} +{{/inline}} + +{{#*inline 'predicate'}} + {{#if asserts}} + asserts + {{/if}} + {{name}} + {{#if targetType}} + is + {{#with targetType}} + {{>type}} + {{/with}} + {{/if}} +{{/inline}} + +{{#*inline 'query'}} + typeof + {{#with queryType}} + {{> type}} + {{/with}} +{{/inline}} + +{{#*inline 'reference'}} + {{#if reflection}} + + {{reflection.name}} + + {{else}} + {{name}} + {{/if}} + {{#if typeArguments}} + < + {{#each typeArguments}} + {{#unless @first}} + , + {{/unless}} + {{> type}} + {{/each}} + > + {{/if}} +{{/inline}} + +{{#*inline 'reflection'}} + {{#if declaration.children}} {{! object literal }} + { + {{#each declaration.children}} + {{#unless @first}} + ; + {{/unless}} + {{name}} + {{#if flags.isOptional }} + ?: + {{else}} + : + {{/if}} + {{#with type}} + {{> type}} + {{else}} + any + {{/with}} + {{/each}} + } + {{else if declaration.signatures}} + {{#if (lookup declaration.signatures 1) }} {{! more than one signature}} + { + {{#each declaration.signatures}} + {{> member.signature.title hideName=true}} + {{#unless @last}} + ; + {{/unless}} + {{/each}} + } + {{else}} + {{#if needsParens}} + ( + {{/if}} + {{#with (lookup declaration.signatures '0') }} + {{> member.signature.title hideName=true arrowStyle=true}} + {{/with}} + {{#if needsParens}} + ) + {{/if}} + {{/if}} + {{else}} + {} + {{/if}} +{{/inline}} + +{{#*inline 'stringLiteral'}} + "{{value}}" +{{/inline}} + +{{#*inline 'tuple'}} + [ + {{#each elements}} + {{#unless @first}} + , + {{/unless}} + {{> type}} + {{/each}} + ] +{{/inline}} + +{{#*inline 'typeOperator'}} + {{operator}} + {{#with target}} + {{> type}} + {{/with}} +{{/inline}} + +{{#*inline 'typeParameter'}} + {{name}} +{{/inline}} + +{{#*inline 'union'}} + {{#if needsParens}} + ( + {{/if}} + {{#each types}} + {{#unless @first}} + | + {{/unless}} + {{> type needsParens=true}} + {{/each}} + {{#if needsParens}} + ) + {{/if}} +{{/inline}} + +{{#*inline 'unknown'}} + {{name}} +{{/inline}} + +{{#if this}} + {{> (lookup . 'type') }} +{{else}} + void +{{/if}} diff --git a/.github-pages/theme/partials/typeAndParent.hbs b/.github-pages/theme/partials/typeAndParent.hbs new file mode 100644 index 0000000..02b25f5 --- /dev/null +++ b/.github-pages/theme/partials/typeAndParent.hbs @@ -0,0 +1,42 @@ +{{#compact}} + {{#if this}} + {{#if elementType}} + {{#with elementType}} + {{> typeAndParent}} + {{/with}} + [] + {{else}} + {{#if reflection}} + {{#ifSignature reflection}} + {{#if reflection.parent.parent.url}} + {{reflection.parent.parent.name}} + {{else}} + {{reflection.parent.parent.name}} + {{/if}} + . + {{#if reflection.parent.url}} + {{reflection.parent.name}} + {{else}} + {{reflection.parent.name}} + {{/if}} + {{else}} + {{#if reflection.parent.url}} + {{reflection.parent.name}} + {{else}} + {{reflection.parent.name}} + {{/if}} + . + {{#if reflection.url}} + {{reflection.name}} + {{else}} + {{reflection.name}} + {{/if}} + {{/ifSignature}} + {{else}} + {{this}} + {{/if}} + {{/if}} + {{else}} + void + {{/if}} +{{/compact}} \ No newline at end of file diff --git a/.github-pages/theme/partials/typeParameters.hbs b/.github-pages/theme/partials/typeParameters.hbs new file mode 100644 index 0000000..a0adf80 --- /dev/null +++ b/.github-pages/theme/partials/typeParameters.hbs @@ -0,0 +1,14 @@ +
        + {{#each typeParameters}} +
      • +

        {{#compact}} + {{name}} + {{#if type}} + + {{#with type}}{{> type}}{{/with}} + {{/if}} + {{/compact}}

        + {{> comment}} +
      • + {{/each}} +
      diff --git a/.github-pages/theme/templates/index.hbs b/.github-pages/theme/templates/index.hbs new file mode 100644 index 0000000..cf79d3d --- /dev/null +++ b/.github-pages/theme/templates/index.hbs @@ -0,0 +1,3 @@ +
      + {{#markdown}}{{{model.readme}}}{{/markdown}} +
      \ No newline at end of file diff --git a/.github-pages/theme/templates/reflection.hbs b/.github-pages/theme/templates/reflection.hbs new file mode 100644 index 0000000..78aa066 --- /dev/null +++ b/.github-pages/theme/templates/reflection.hbs @@ -0,0 +1,79 @@ +{{#with model}} + {{#if hasComment}} +
      + {{> comment}} +
      + {{/if}} +{{/with}} + +{{#if model.typeParameters}} +
      +

      Type parameters

      + {{#with model}}{{> typeParameters}}{{/with}} +
      +{{/if}} + +{{#if model.typeHierarchy}} +
      +

      Hierarchy

      + {{#with model.typeHierarchy}}{{> hierarchy}}{{/with}} +
      +{{/if}} + +{{#if model.implementedTypes}} +
      +

      Implements

      +
        + {{#each model.implementedTypes}} +
      • {{#compact}}{{> type}}{{/compact}}
      • + {{/each}} +
      +
      +{{/if}} + +{{#if model.implementedBy}} +
      +

      Implemented by

      +
        + {{#each model.implementedBy}} +
      • {{#compact}}{{> type}}{{/compact}}
      • + {{/each}} +
      +
      +{{/if}} + +{{#if model.signatures}} +
      +

      Callable

      + {{#with model}}{{> member.signatures}}{{/with}} +
      +{{/if}} + +{{#if model.indexSignature}} +
      +

      Indexable

      +
      {{#compact}} + [ + {{#each model.indexSignature.parameters}} + {{name}}: {{#with type}}{{>type}}{{/with}} + {{/each}} + ]:  + {{#with model.indexSignature.type}}{{>type}}{{/with}} + {{/compact}}
      + + {{#with model.indexSignature}} + {{> comment}} + {{/with}} + + {{#if model.indexSignature.type.declaration}} + {{#with model.indexSignature.type.declaration}} + {{> parameter}} + {{/with}} + {{/if}} +
      +{{/if}} + +{{#with model}} + {{> index}} + {{> members}} +{{/with}} diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 0000000..75f56ca --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,51 @@ +name: Deploy docs +on: + push: + branches: + - master + paths: + - '**.js' + - '**.json' + - '**.ts' + - '**.md' + - '**.yml' +jobs: + start: + runs-on: ubuntu-latest + steps: + - name: Setup ssh agent + env: + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + run: | + mkdir -p ~/.ssh + ssh-keyscan github.com >> ~/.ssh/known_hosts + ssh-agent -a $SSH_AUTH_SOCK > /dev/null + ssh-add - <<< "${{ secrets.SSH_MACHINE_KEY_DOCS }}" + + - name: Setup git + run: | + git config --global user.email "infrastructure@pillarproject.io" + git config --global user.name "EtherspotBOT" + + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup node.js + uses: actions/setup-node@v4 + with: + node-version: 18.x + + - name: Install dependencies + run: npm install + + - name: Build docs + run: npm run docs:build + + - name: Install gh-pages cli + run: npm install gh-pages -g + + - name: Deploy docs + env: + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + run: | + npm run docs:deploy diff --git a/CHANGELOG.md b/CHANGELOG.md index 4025221..9e582f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,14 @@ # Changelog +## [1.3.11] - 2023-11-08 +### Breaking Changes +- Removed api_key from estimate function on the sdk and added the same on the queryString, please refer examples/13-paymaster.ts for more info + +### Bug Fixes +- Updated paymaster url to accept arka apiKey and chainId as queryString +- Added optional parameters such as entryPointAddress and Factory walletAddress for custom chain interaction +- Bug fixes for handling errors on connecting with custom chain interaction + + ## [1.3.10] - 2023-10-31 ### New - Added getExchangeSupportedAssets to gets exchange supported tokens diff --git a/examples/01-get-address.ts b/examples/01-get-address.ts index ecdd75d..6e09f90 100644 --- a/examples/01-get-address.ts +++ b/examples/01-get-address.ts @@ -6,7 +6,7 @@ dotenv.config(); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: '' }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key' }) // get EtherspotWallet address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/examples/02-transfer-funds.ts b/examples/02-transfer-funds.ts index b41c96c..8e6b9ab 100644 --- a/examples/02-transfer-funds.ts +++ b/examples/02-transfer-funds.ts @@ -7,11 +7,11 @@ import { sleep } from '../src/sdk/common'; dotenv.config(); const recipient = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address -const value = '0.01'; // transfer value +const value = '0.08'; // transfer value async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: '' }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key' }) console.log('address: ', primeSdk.state.walletAddress) diff --git a/examples/03-transfer-erc20.ts b/examples/03-transfer-erc20.ts index dcd61d4..c3aa0d8 100644 --- a/examples/03-transfer-erc20.ts +++ b/examples/03-transfer-erc20.ts @@ -14,7 +14,7 @@ const tokenAddress = '0x326C977E6efc84E512bB9C30f76E30c160eD06FB'; async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: '' }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key' }) console.log('address: ', primeSdk.state.walletAddress) diff --git a/examples/04-transfer-nft.ts b/examples/04-transfer-nft.ts index cfd2111..68448ca 100644 --- a/examples/04-transfer-nft.ts +++ b/examples/04-transfer-nft.ts @@ -13,7 +13,7 @@ const tokenId = 4; async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: '' }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key' }) console.log('address: ', primeSdk.state.walletAddress) diff --git a/examples/05-get-account-balances.ts b/examples/05-get-account-balances.ts index 5702750..f52fa80 100644 --- a/examples/05-get-account-balances.ts +++ b/examples/05-get-account-balances.ts @@ -7,7 +7,7 @@ async function main() { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const balances = await primeSdk.getAccountBalances({ diff --git a/examples/06-transaction.ts b/examples/06-transaction.ts index 65ac39f..168e649 100644 --- a/examples/06-transaction.ts +++ b/examples/06-transaction.ts @@ -7,7 +7,7 @@ async function main(): Promise { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const hash = '0xe6667a1185a6fd93cf082b96f78763514759041940e305da80224609bd1c6781'; const transaction = await primeSdk.getTransaction({ hash }); diff --git a/examples/08-nft-list.ts b/examples/08-nft-list.ts index 0d80b31..1083439 100644 --- a/examples/08-nft-list.ts +++ b/examples/08-nft-list.ts @@ -7,7 +7,7 @@ async function main(): Promise { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const chainId = 137; const account = ''; // account address diff --git a/examples/09-exchange.ts b/examples/09-exchange.ts index 3548cf0..765e258 100644 --- a/examples/09-exchange.ts +++ b/examples/09-exchange.ts @@ -7,7 +7,7 @@ dotenv.config(); async function main(): Promise { const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const exchangeSupportedAssets = await primeSdk.getExchangeSupportedAssets({ page: 1, limit: 100 }); diff --git a/examples/10-advance-routes-lifi.ts b/examples/10-advance-routes-lifi.ts index dc337a4..1651a71 100644 --- a/examples/10-advance-routes-lifi.ts +++ b/examples/10-advance-routes-lifi.ts @@ -7,7 +7,7 @@ async function main(): Promise { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const fromChainId = 56; diff --git a/examples/11-cross-chain-quotes.ts b/examples/11-cross-chain-quotes.ts index 27a5b9d..0ab4a3c 100644 --- a/examples/11-cross-chain-quotes.ts +++ b/examples/11-cross-chain-quotes.ts @@ -8,7 +8,7 @@ async function main(): Promise { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const XdaiUSDC = '0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83'; // Xdai - USDC diff --git a/examples/12-add-guardians.ts b/examples/12-add-guardians.ts index 227d56c..1e1b8ee 100644 --- a/examples/12-add-guardians.ts +++ b/examples/12-add-guardians.ts @@ -10,7 +10,7 @@ async function main() { // initializating sdk... const primeSdk = new PrimeSdk( { privateKey: process.env.WALLET_PRIVATE_KEY }, - { chainId: Number(process.env.CHAIN_ID), projectKey: '' }, + { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key' }, ); console.log('address: ', primeSdk.state.walletAddress); @@ -19,7 +19,7 @@ async function main() { const address: string = await primeSdk.getCounterFactualAddress(); // update the addresses in this array with the guardian addresses you want to set - let guardianAddresses: string[] = [ + const guardianAddresses: string[] = [ '0xa8430797A27A652C03C46D5939a8e7698491BEd6', '0xaf2D76acc5B0e496f924B08491444076219F2f35', '0xBF1c0A9F3239f5e7D35cE562Af06c92FB7fdF0DF', diff --git a/examples/13-paymaster.ts b/examples/13-paymaster.ts index 43aef6b..2052c91 100644 --- a/examples/13-paymaster.ts +++ b/examples/13-paymaster.ts @@ -8,11 +8,12 @@ dotenv.config(); const recipient = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address const value = '0.01'; // transfer value +const api_key = 'arka_public_key'; // Only testnets are available, if you need further assistance in setting up a paymaster service for your dapp, please reach out to us on discord or https://etherspot.fyi/arka/intro async function main() { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { - chainId: Number(process.env.CHAIN_ID), projectKey: '', + chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key', }) console.log('address: ', primeSdk.state.walletAddress) @@ -34,7 +35,7 @@ async function main() { console.log('balances: ', balance); // estimate transactions added to the batch and get the fee data for the UserOp - const op = await primeSdk.estimate({ url: 'https://arka.etherspot.io/', api_key: '', context: { mode: 'sponsor' } }); + const op = await primeSdk.estimate({ url: `https://arka.etherspot.io?apiKey=${api_key}&chainId=${Number(process.env.CHAIN_ID)}`, context: { mode: 'sponsor' } }); console.log(`Estimate UserOp: ${await printOp(op)}`); // sign the UserOp and sending to the bundler... diff --git a/examples/14-zeroDev-address.ts b/examples/14-zeroDev-address.ts index 09ddd4e..dd72b2c 100644 --- a/examples/14-zeroDev-address.ts +++ b/examples/14-zeroDev-address.ts @@ -6,7 +6,7 @@ dotenv.config(); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: '', factoryWallet: Factory.ZERO_DEV }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key', factoryWallet: Factory.ZERO_DEV }) // get ZeroDev address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/examples/15-simpleAccount-address.ts b/examples/15-simpleAccount-address.ts index 6685135..0bca747 100644 --- a/examples/15-simpleAccount-address.ts +++ b/examples/15-simpleAccount-address.ts @@ -6,7 +6,7 @@ dotenv.config(); async function main() { // initializating sdk... - const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: '', factoryWallet: Factory.SIMPLE_ACCOUNT }) + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key', factoryWallet: Factory.SIMPLE_ACCOUNT }) // get SimpleAccount address... const address: string = await primeSdk.getCounterFactualAddress(); diff --git a/examples/16-paymaster-arka.ts b/examples/16-paymaster-arka.ts index 04eb64e..5768735 100644 --- a/examples/16-paymaster-arka.ts +++ b/examples/16-paymaster-arka.ts @@ -10,13 +10,14 @@ dotenv.config(); const recipient = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address const value = '0.0001'; // transfer value -const arka_api_key = ''; -const arka_url = ''; +const arka_api_key = 'arka_public_key'; +const arka_url = 'https://arka.etherspot.io'; // Only testnets are available, if you need further assistance in setting up a paymaster service for your dapp, please reach out to us on discord or https://etherspot.fyi/arka/intro +const queryString = `?apiKey=${arka_api_key}&chainId=${Number(process.env.CHAIN_ID)}`; async function main() { // initializing sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { - chainId: Number(process.env.CHAIN_ID), projectKey: '', + chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key', }) console.log('address: ', primeSdk.state.walletAddress) @@ -37,13 +38,13 @@ async function main() { * The fetching of pimlico erc20 paymaster address is only required for the first time for each specified gas token since we need to approve the tokens to spend * from the paymaster address on behalf of you. */ - const returnedValue = await fetch(`${arka_url}/pimlicoAddress`, { + const returnedValue = await fetch(`${arka_url}/pimlicoAddress${queryString}`, { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ "params": [entryPointAddress, { token: "USDC" }, Number(process.env.CHAIN_ID), arka_api_key] }) + body: JSON.stringify({ "params": [entryPointAddress, { token: "USDC" }] }) }) .then((res) => { return res.json() @@ -86,7 +87,7 @@ async function main() { console.log('balances: ', balance); // estimate transactions added to the batch and get the fee data for the UserOp - const op = await primeSdk.estimate({ url: arka_url, api_key: arka_api_key, context: { token: "USDC", mode: 'erc20' } }); + const op = await primeSdk.estimate({ url: `${arka_url}${queryString}`, context: { token: "USDC", mode: 'erc20' } }); console.log(`Estimate UserOp: ${await printOp(op)}`); // sign the UserOp and sending to the bundler... diff --git a/examples/17-token-list.ts b/examples/17-token-list.ts index b0b0ccd..f160d74 100644 --- a/examples/17-token-list.ts +++ b/examples/17-token-list.ts @@ -7,7 +7,7 @@ async function main(): Promise { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const tokenLists = await primeSdk.getTokenLists(); diff --git a/examples/18-exchange-rates.ts b/examples/18-exchange-rates.ts index b312e7e..bf25a93 100644 --- a/examples/18-exchange-rates.ts +++ b/examples/18-exchange-rates.ts @@ -7,7 +7,7 @@ async function main(): Promise { // initializating sdk... const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { chainId: Number(process.env.CHAIN_ID), - projectKey: '', // project key + projectKey: 'public-prime-testnet-key', // project key }); const ETH_AAVE_ADDR = '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9'; diff --git a/examples/19-paymaster-validUntil-validAfter.ts b/examples/19-paymaster-validUntil-validAfter.ts new file mode 100644 index 0000000..d0de48c --- /dev/null +++ b/examples/19-paymaster-validUntil-validAfter.ts @@ -0,0 +1,69 @@ +import { ethers } from 'ethers'; +import { PrimeSdk } from '../src'; +import { printOp } from '../src/sdk/common/OperationUtils'; +import * as dotenv from 'dotenv'; +import { sleep } from '../src/sdk/common'; + +dotenv.config(); + +const recipient = '0x80a1874E1046B1cc5deFdf4D3153838B72fF94Ac'; // recipient wallet address +const value = '0.0001'; // transfer value + +const arka_api_key = 'arka_public_key'; // Only testnets are available, if you need further assistance in setting up a paymaster service for your dapp, please reach out to us on discord or https://etherspot.fyi/arka/intro +const arka_url = 'https://arka.etherspot.io'; +const queryString = `?apiKey=${arka_api_key}&chainId=${Number(process.env.CHAIN_ID)}`; + +async function main() { + // initializing sdk... + const primeSdk = new PrimeSdk({ privateKey: process.env.WALLET_PRIVATE_KEY }, { + chainId: Number(process.env.CHAIN_ID), projectKey: 'public-prime-testnet-key', + }) + + console.log('address: ', primeSdk.state.walletAddress) + + // get address of EtherspotWallet... + const address: string = await primeSdk.getCounterFactualAddress(); + console.log('\x1b[33m%s\x1b[0m', `EtherspotWallet address: ${address}`); + + // get balance of the account address + let balance = await primeSdk.getNativeBalance(); + console.log('balances: ', balance); + + // clear the transaction batch + await primeSdk.clearUserOpsFromBatch(); + + // add transactions to the batch + const transactionBatch = await primeSdk.addUserOpsToBatch({ to: recipient, value: ethers.utils.parseEther(value) }); + console.log('transactions: ', transactionBatch); + + // get balance of the account address + balance = await primeSdk.getNativeBalance(); + + console.log('balances: ', balance); + + /* estimate transactions added to the batch and get the fee data for the UserOp + validUntil and validAfter are optional defaults to 10 mins of expiry from send call and should be passed in terms of milliseconds + For example purpose, the valid is fixed as expiring in 100 mins once the paymaster data is generated + validUntil and validAfter is relevant only with sponsor transactions and not for token paymasters + */ + const op = await primeSdk.estimate({ url: `${arka_url}${queryString}`, context: { mode: 'sponsor', validAfter: new Date().valueOf(), validUntil: new Date().valueOf() + 6000000 } }); + console.log(`Estimate UserOp: ${await printOp(op)}`); + + // sign the UserOp and sending to the bundler... + const uoHash = await primeSdk.send(op); + console.log(`UserOpHash: ${uoHash}`); + + // get transaction hash... + console.log('Waiting for transaction...'); + let userOpsReceipt = null; + const timeout = Date.now() + 60000; // 1 minute timeout + while ((userOpsReceipt == null) && (Date.now() < timeout)) { + await sleep(2); + userOpsReceipt = await primeSdk.getUserOpReceipt(uoHash); + } + console.log('\x1b[33m%s\x1b[0m', `Transaction Receipt: `, userOpsReceipt); +} + +main() + .catch(console.error) + .finally(() => process.exit()); diff --git a/package-lock.json b/package-lock.json index a237f52..27c0165 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,9 @@ "cross-fetch": "3.1.5", "ethers": "5.7.0", "graphql-ws": "5.14.2", - "prettier": "2.8.8" + "prettier": "2.8.8", + "reflect-metadata": "0.1.13", + "rxjs": "6.6.7" }, "devDependencies": { "@types/node": "18.11.9", @@ -33,9 +35,8 @@ "eslint-config-prettier": "6.11.0", "eslint-plugin-import": "2.20.2", "npm": "9.6.4", - "reflect-metadata": "0.1.13", - "rxjs": "6.6.7", "ts-node": "10.9.1", + "typedoc": "^0.17.8", "typescript": "4.9.5" } }, @@ -2987,6 +2988,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3191,6 +3206,27 @@ "graphql": ">=0.11 <=16" } }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3281,6 +3317,15 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -3514,6 +3559,15 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -3796,6 +3850,15 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyvaluestorage-interface": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", @@ -3881,12 +3944,30 @@ "node": ">=10" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/marked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.0.0.tgz", + "integrity": "sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==", + "dev": true, + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, "node_modules/mcl-wasm": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-1.0.6.tgz", @@ -3970,6 +4051,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -7399,11 +7486,22 @@ "node": ">= 12.13.0" } }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", @@ -7506,7 +7604,6 @@ "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "dependencies": { "tslib": "^1.9.0" }, @@ -7625,6 +7722,23 @@ "node": ">=0.10.0" } }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -7676,6 +7790,15 @@ "atomic-sleep": "^1.0.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -8189,6 +8312,45 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedoc": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.17.8.tgz", + "integrity": "sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==", + "dev": true, + "dependencies": { + "fs-extra": "^8.1.0", + "handlebars": "^4.7.6", + "highlight.js": "^10.0.0", + "lodash": "^4.17.15", + "lunr": "^2.3.8", + "marked": "1.0.0", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shelljs": "^0.8.4", + "typedoc-default-themes": "^0.10.2" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "typescript": ">=3.8.3" + } + }, + "node_modules/typedoc-default-themes": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz", + "integrity": "sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg==", + "dev": true, + "dependencies": { + "lunr": "^2.3.8" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -8202,6 +8364,19 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/uint8arrays": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", @@ -8225,6 +8400,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8339,6 +8523,12 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index fe1d7d7..0767d67 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,10 @@ "13-paymaster": "./node_modules/.bin/ts-node ./examples/13-paymaster", "14-zeroDev-address": "./node_modules/.bin/ts-node ./examples/14-zeroDev-address", "15-simpleAccount-address": "./node_modules/.bin/ts-node ./examples/15-simpleAccount-address", + "16-paymaster-arka": "./node_modules/.bin/ts-node ./examples/16-paymaster-arka", "17-token-list": "./node_modules/.bin/ts-node ./examples/17-token-list", "18-exchange-rates": "./node_modules/.bin/ts-node ./examples/18-exchange-rates", + "19-paymaster-validUntil-validAfter": "./node_modules/.bin/ts-node ./examples/19-paymaster-validUntil-validAfter", "format": "prettier --write \"{src,test,examples}/**/*.ts\"", "lint": "eslint \"{src,test}/**/*.ts\"", "lint-fix": "npm run lint -- --fix", @@ -45,7 +47,11 @@ "compile": "tsc -p ./tsconfig.build.json", "compile-watch": "npm run compile -- --watch", "init": "ts-node examples/scripts/init.ts", - "command": "ts-node examples/scripts/commands/index.ts" + "command": "ts-node examples/scripts/commands/index.ts", + "predocs:build": "rimraf ./docs", + "docs:build": "typedoc ./src", + "postdocs:build": "cp -r ./.github-pages/files/* ./docs && date > ./docs/.nojekyll", + "docs:deploy": "gh-pages -d ./docs -b master -r git@github.com:etherspot/sdk.etherspot.io.git" }, "repository": { "type": "git", @@ -67,7 +73,9 @@ "cross-fetch": "3.1.5", "ethers": "5.7.0", "graphql-ws": "5.14.2", - "prettier": "2.8.8" + "prettier": "2.8.8", + "reflect-metadata": "0.1.13", + "rxjs": "6.6.7" }, "devDependencies": { "@types/node": "18.11.9", @@ -79,9 +87,8 @@ "eslint-config-prettier": "6.11.0", "eslint-plugin-import": "2.20.2", "npm": "9.6.4", - "reflect-metadata": "0.1.13", - "rxjs": "6.6.7", "ts-node": "10.9.1", + "typedoc": "^0.17.8", "typescript": "4.9.5" } } diff --git a/src/node-polyfill.ts b/src/node-polyfill.ts index cb55826..72e4002 100644 --- a/src/node-polyfill.ts +++ b/src/node-polyfill.ts @@ -13,4 +13,7 @@ try { throw new Error('WebSocket not found. Please install `ws` for node.js'); } -(global as any).WebSocket = WebSocketConstructor; +// browsers don't have the `global` and WebSocket is available in window.WebSocket +if (global) { + (global as any).WebSocket = WebSocketConstructor; +} diff --git a/src/sdk/base/SimpleAccountWalletAPI.ts b/src/sdk/base/SimpleAccountWalletAPI.ts index c0cf0df..482c54d 100644 --- a/src/sdk/base/SimpleAccountWalletAPI.ts +++ b/src/sdk/base/SimpleAccountWalletAPI.ts @@ -75,7 +75,7 @@ export class SimpleAccountAPI extends BaseAccountAPI { } catch (error: any) { const addr = error?.errorArgs?.sender; if (!addr) throw error; - if (addr === ethers.constants.AddressZero) throw new Error('Unsupported chain_id'); + if (addr === ethers.constants.AddressZero) throw new Error('Unsupported chain_id/walletFactoryAddress'); this.accountContract = new ethers.Contract(addr, SimpleAccountAbi, this.provider); this.accountAddress = addr; } diff --git a/src/sdk/base/VerifyingPaymasterAPI.ts b/src/sdk/base/VerifyingPaymasterAPI.ts index 02ee97a..936b095 100644 --- a/src/sdk/base/VerifyingPaymasterAPI.ts +++ b/src/sdk/base/VerifyingPaymasterAPI.ts @@ -25,13 +25,11 @@ export class VerifyingPaymasterAPI extends PaymasterAPI { private context: any; private api_key: string; private chainId: number; - constructor(paymasterUrl: string, entryPoint: string, context: any, api_key: string, chainId: number) { + constructor(paymasterUrl: string, entryPoint: string, context: any) { super(); this.paymasterUrl = paymasterUrl; this.entryPoint = entryPoint; this.context = context; - this.api_key = api_key; - this.chainId = chainId; } async getPaymasterAndData(userOp: Partial): Promise { @@ -64,7 +62,7 @@ export class VerifyingPaymasterAPI extends PaymasterAPI { 'Accept': 'application/json', 'Content-Type': 'application/json', }, - body: JSON.stringify({ params: [await toJSON(op), this.entryPoint, this.context, this.chainId, this.api_key], jsonrpc: '2', id: 2 }), + body: JSON.stringify({ params: [await toJSON(op), this.entryPoint, this.context], jsonrpc: '2', id: 2 }), }) .then(async (res) => { const response = await await res.json(); @@ -81,5 +79,5 @@ export class VerifyingPaymasterAPI extends PaymasterAPI { } } -export const getVerifyingPaymaster = (paymasterUrl: string, entryPoint: string, context: any, api_key: string, chainId: number) => - new VerifyingPaymasterAPI(paymasterUrl, entryPoint, context, api_key, chainId); +export const getVerifyingPaymaster = (paymasterUrl: string, entryPoint: string, context: any) => + new VerifyingPaymasterAPI(paymasterUrl, entryPoint, context); diff --git a/src/sdk/errorHandler/constants.ts b/src/sdk/errorHandler/constants.ts index be63c14..c8c590e 100644 --- a/src/sdk/errorHandler/constants.ts +++ b/src/sdk/errorHandler/constants.ts @@ -2,11 +2,33 @@ export const errorMsg = { '-32521': 'Check for balance in your Smart wallet', // execution reverted '-32500': `Please make sure you have enough funds for wallet creation.`, // transaction rejected by entryPoint's simulateValidation, during wallet creation or validation '-32501': `Check paymaster data`, // transaction rejected by paymaster's validatePaymasterUserOp - '-32502': 'Try with another bundler', //transaction rejected because of opcode validation + '-32502': 'If using skandha bundler or the default one, please report this issue on https://github.com/etherspot/skandha/issues or ticket on https://discord.etherspot.io', //transaction rejected because of opcode validation '-32503': 'validUntil and validAfter cannot be past timestamps', // UserOperation out of time-range - '-32504': 'Try changing the bundler which accepts this paymaster', // transaction rejected because paymaster (or signature aggregator) is throttled/banned + '-32504': 'This paymaster is not whitelisted on current bundler, contact bundler team to whitelist', // transaction rejected because paymaster (or signature aggregator) is throttled/banned '-32505': 'Paymaster not staked or unstake-delay is too low. Try with another paymaster', // transaction rejected because paymaster (or signature aggregator) stake or unstake-delay is too low - '-32506': null, // transaction rejected because wallet specified unsupported signature aggregator - '-32507': null, // transaction rejected because of wallet signature check failed (or paymaster signature, if the paymaster uses its data as signature) + '-32506': 'Please create an issue https://github.com/etherspot/etherspot-prime-sdk/issues or ticket on https://discord.etherspot.io', // transaction rejected because wallet specified unsupported signature aggregator + '-32507': 'Please create an issue https://github.com/etherspot/etherspot-prime-sdk/issues or ticket on https://discord.etherspot.io', // transaction rejected because of wallet signature check failed (or paymaster signature, if the paymaster uses its data as signature) '1': 'Make sure the sdk fn called has valid parameters', // sdk Validation errors +} + +export const entryPointErrorMsg = { + 'AA10 sender already constructed': 'The sender was already created, so the initCode does not need to be run. This error may occur if you attempt to create an account multiple times', + 'AA13 initCode failed or OOG': 'The initCode failed to create the account or ran out of gas. "OOG" is an abbreviation for Out-Of-Gas. Check the amount of gas consumed, and then verify the initCode or the factory contract is correct', + 'AA14 initCode must return sender': 'The initCode does not return the sender address. Check the initCode or the factory contract', + 'AA15 initCode must create sender': 'The initCode in the user operation does not create an account. Check the initCode or the factory contract', + 'AA20 account not deployed': 'The sender of the user operation is not deployed and there is no initCode specified. If this is the first transaction by this account make sure an initCode is included. Otherwise, check that the correct sender address is specified and is an ERC-4337 account', + "AA21 didn't pay prefund": `The sender did not have enough to prefund the EntryPoint for the user operation. If you are using a paymaster, the paymasterAndData field is likely not set. If you aren't using a paymaster, the address of the sender does not have enough gas token. After the user operation is executed, the remainder of the prefund is credited back to the sender`, + 'AA22 expired or not due': 'The signature is not valid because it is outside of the specified time range', + 'AA23 reverted (or OOG)': `The sender does not have sufficient native tokens to cover the User Operation's gas costs. If you intended to use a Paymaster for sponsorship, ensure that the paymasterAndData field of the user operation is correctly set to enable proper handling of gas fees`, + 'AA24 signature error': `Check the signature field of the user operation. It may be in an incompatible format`, + 'AA25 invalid account nonce': 'The nonce is invalid. The user operation may be re-using an old nonce, or formatted the nonce incorrectly', + 'AA30 paymaster not deployed': 'The paymaster address specified by paymasterAndData contains no code. Check that the first characters of the paymasterAndData field are the paymaster address you intend to use', + 'AA31 paymaster deposit too low': `The paymaster is out of funds. More gas tokens must be deposited into the EntryPoint for the paymaster. This is usually done by calling the paymaster contract's deposit function. If you are using a paymaster service, contact them immediately`, + 'AA32 paymaster expired or not due': `The paymaster's signature is not valid because it is outside of the specified time range`, + 'AA33 reverted (or OOG)': `The paymaster validation was rejected or ran out of gas. "OOG" is an abbreviation for Out-Of-Gas. First check the paymaster's signature in paymasterAndData. If the signature is correct, the verificationGasLimit may be too low`, + 'AA34 signature error': `The paymaster's signature is invalid. Check the format of the signature in paymasterAndData`, + 'AA40 over verificationGasLimit': `The verification gas limit was exceeded. Check the verificationGasLimit in your user operation`, + 'AA41 too little verificationGas': `Verifying the user operation took too much gas and did not complete. You may need to increase verificationGasLimit`, + 'AA50 postOp reverted': `After the user operation was completed, the execution of additional logic by the EntryPoint reverted`, + 'AA51 prefund below actualGasCost': `The actual cost of the user operation is higher than the total amount of gas approved. The prefund is the amount that the EntryPoint is allowed to execute the user operation. After the user operation is executed, the remainder of the prefund is credited back to the sender`, } \ No newline at end of file diff --git a/src/sdk/errorHandler/errorHandler.service.ts b/src/sdk/errorHandler/errorHandler.service.ts index cc06d64..8340ace 100644 --- a/src/sdk/errorHandler/errorHandler.service.ts +++ b/src/sdk/errorHandler/errorHandler.service.ts @@ -1,4 +1,4 @@ -import { errorMsg } from "./constants"; +import { entryPointErrorMsg, errorMsg } from "./constants"; export class ErrorHandler extends Error { public possibleSolution: string = null; @@ -8,8 +8,11 @@ export class ErrorHandler extends Error { this.code = code; if (code) { this.possibleSolution = errorMsg[code.toString()]; - if (error.includes('AA33 reverted')) { - this.possibleSolution += ' If using a token, make sure that approval transaction is done for the requested operation and have enough tokens to spend for this transaction.' + // if (error.includes('AA33 reverted')) { + // this.possibleSolution += ' If using a token, make sure that approval transaction is done for the requested operation and have enough tokens to spend for this transaction.' + // } + if (entryPointErrorMsg[error]) { + this.possibleSolution = entryPointErrorMsg[error]; } } } diff --git a/src/sdk/interfaces.ts b/src/sdk/interfaces.ts index 970abfa..ed78c6e 100644 --- a/src/sdk/interfaces.ts +++ b/src/sdk/interfaces.ts @@ -3,7 +3,6 @@ import { SessionStorage } from './session'; export interface PaymasterApi { url: string; - api_key: string; context?: any; } @@ -23,4 +22,6 @@ export interface SdkOptions { graphqlEndpoint?: string; projectKey: string; factoryWallet?: Factory; + walletFactoryAddress?: string; + entryPointAddress?: string; } diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index 665303e..76f5640 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -50,11 +50,14 @@ export class PrimeSdk { } = optionsLike; this.chainId = chainId; + const networkConfig = getNetworkConfig(chainId); if (!optionsLike.bundlerRpcUrl) { - const networkConfig = getNetworkConfig(chainId); + if (!networkConfig) throw new Exception('No bundler Rpc provided'); optionsLike.bundlerRpcUrl = networkConfig.bundler; - if (optionsLike.bundlerRpcUrl == '') throw new Exception('No bundler Rpc provided'); + } + + if (networkConfig) { optionsLike.graphqlEndpoint = networkConfig.graphqlEndpoint; } @@ -66,23 +69,34 @@ export class PrimeSdk { provider = new providers.JsonRpcProvider(rpcProviderUrl); } else provider = new providers.JsonRpcProvider(optionsLike.bundlerRpcUrl); - if (Networks[chainId].contracts.walletFactory[this.factoryUsed] == '') throw new Exception('The selected factory is not deployed in the selected chain_id') + let entryPointAddress = '', walletFactoryAddress = ''; + if (Networks[chainId]) { + entryPointAddress = Networks[chainId].contracts.entryPoint; + if (Networks[chainId].contracts.walletFactory[this.factoryUsed] == '') throw new Exception('The selected factory is not deployed in the selected chain_id') + walletFactoryAddress = Networks[chainId].contracts.walletFactory[this.factoryUsed]; + } + + if (optionsLike.entryPointAddress) entryPointAddress = optionsLike.entryPointAddress; + if (optionsLike.walletFactoryAddress) walletFactoryAddress = optionsLike.walletFactoryAddress; + + if (entryPointAddress == '') throw new Exception('entryPointAddress not set on the given chain_id') + if (walletFactoryAddress == '') throw new Exception('walletFactoryAddress not set on the given chain_id') if (this.factoryUsed === Factory.ZERO_DEV) { this.etherspotWallet = new ZeroDevWalletAPI({ provider, walletProvider: walletConnectProvider ?? walletProvider, optionsLike, - entryPointAddress: Networks[chainId].contracts.entryPoint, - factoryAddress: Networks[chainId].contracts.walletFactory[this.factoryUsed], + entryPointAddress, + factoryAddress: walletFactoryAddress, }) } else if (this.factoryUsed === Factory.SIMPLE_ACCOUNT) { this.etherspotWallet = new SimpleAccountAPI({ provider, walletProvider: walletConnectProvider ?? walletProvider, optionsLike, - entryPointAddress: Networks[chainId].contracts.entryPoint, - factoryAddress: Networks[chainId].contracts.walletFactory[this.factoryUsed], + entryPointAddress, + factoryAddress: walletFactoryAddress, }) } else { @@ -90,11 +104,11 @@ export class PrimeSdk { provider, walletProvider: walletConnectProvider ?? walletProvider, optionsLike, - entryPointAddress: Networks[chainId].contracts.entryPoint, - factoryAddress: Networks[chainId].contracts.walletFactory[this.factoryUsed], + entryPointAddress, + factoryAddress: walletFactoryAddress, }) } - this.bundler = new HttpRpcClient(optionsLike.bundlerRpcUrl, Networks[chainId].contracts.entryPoint, Networks[chainId].chainId); + this.bundler = new HttpRpcClient(optionsLike.bundlerRpcUrl, entryPointAddress, chainId); } @@ -161,7 +175,7 @@ export class PrimeSdk { } if (paymasterDetails?.url) { - const paymasterAPI = new VerifyingPaymasterAPI(paymasterDetails.url, Networks[this.chainId].contracts.entryPoint, paymasterDetails.context ?? {}, paymasterDetails.api_key, this.chainId) + const paymasterAPI = new VerifyingPaymasterAPI(paymasterDetails.url, this.etherspotWallet.entryPointAddress, paymasterDetails.context ?? {}) this.etherspotWallet.setPaymasterApi(paymasterAPI) } else this.etherspotWallet.setPaymasterApi(null); diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..47b90e0 --- /dev/null +++ b/typedoc.json @@ -0,0 +1,20 @@ +{ + "inputFiles": [ + "./src/index.ts" + ], + "readme": "./README.md", + "out": "./docs", + "mode": "file", + "exclude": [ + "**/__mocks__/*.*", + "**/testing/*.*", + "**/*+(index|.spec|.e2e).ts" + ], + "theme": "./.github-pages/theme", + "name": "Etherspot Prime reference docs", + "hideGenerator": true, + "disableSources": true, + "excludePrivate": true, + "excludeProtected": true, + "stripInternal": true + } \ No newline at end of file