From 05da33d27d50f5e93653432a618d0f469deb2e7c Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:24:38 -0700 Subject: [PATCH 01/12] Modifies configs for preparation --- .eslintrc.json | 1 + package.json | 2 +- src/config.ts | 17 ---------- src/serverConfig.ts | 2 +- tsconfig.json | 3 +- yarn.lock | 79 +++++++++++++++++++++++++++++++-------------- 6 files changed, 58 insertions(+), 46 deletions(-) delete mode 100644 src/config.ts diff --git a/.eslintrc.json b/.eslintrc.json index 57479ba..98b6f97 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -13,6 +13,7 @@ "rules": { "@typescript-eslint/explicit-function-return-type": "warn", "@typescript-eslint/strict-boolean-expressions": "warn", + "@typescript-eslint/no-non-null-assertion": "off", "simple-import-sort/sort": "error" } } diff --git a/package.json b/package.json index 7059d34..b32b5a5 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "cleaners": "^0.3.12", "compression": "^1.7.4", "cors": "^2.8.5", - "edge-server-tools": "^0.2.11", + "edge-server-tools": "^0.2.13", "express": "^4.17.1", "firebase-admin": "^8.12.1", "morgan": "^1.10.0", diff --git a/src/config.ts b/src/config.ts deleted file mode 100644 index aa5a5ce..0000000 --- a/src/config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { makeConfig } from 'cleaner-config' -import { asNumber, asObject, asOptional, asString } from 'cleaners' - -const { COUCH_HOSTNAME = 'localhost', COUCH_PASSWORD = 'password' } = - process.env - -export const asServerConfig = asObject({ - couchUri: asOptional( - asString, - `http://username:${COUCH_PASSWORD}@${COUCH_HOSTNAME}:5984` - ), - // for running the local server - httpPort: asOptional(asNumber, 8008), - httpHost: asOptional(asString, '127.0.0.1') -}) - -export const config = makeConfig(asServerConfig, 'pushServerConfig.json') diff --git a/src/serverConfig.ts b/src/serverConfig.ts index 23d5ebd..14aae8b 100644 --- a/src/serverConfig.ts +++ b/src/serverConfig.ts @@ -5,7 +5,7 @@ import { asNumber, asObject, asOptional, asString } from 'cleaners' * Configures the server process as a whole, * such as where to listen and how to talk to the database. */ -const asServerConfig = asObject({ +export const asServerConfig = asObject({ // HTTP server options: listenHost: asOptional(asString, '127.0.0.1'), listenPort: asOptional(asNumber, 8008), diff --git a/tsconfig.json b/tsconfig.json index a10b6ac..fa71ccc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,8 +7,7 @@ "moduleResolution": "node", "resolveJsonModule": true, "noImplicitAny": false, - "noEmit": true, "strict": true } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 45382d8..3f7154b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -600,11 +600,6 @@ any-promise@^1.0.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -695,7 +690,7 @@ axios-cookiejar-support@^1.0.1: is-redirect "^1.0.0" pify "^5.0.0" -axios@^0.21.2: +axios@^0.21.1, axios@^0.21.2: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== @@ -826,7 +821,7 @@ cleaner-config@^0.1.8: minimist "^1.2.5" sucrase "^3.17.1" -cleaners@^0.3.12, cleaners@^0.3.8: +cleaners@^0.3.11, cleaners@^0.3.12, cleaners@^0.3.8: version "0.3.12" resolved "https://registry.yarnpkg.com/cleaners/-/cleaners-0.3.12.tgz#0e99ef2460a59ed87550a60bdfc441b1696ff9cb" integrity sha512-bK7IvvYyhfy30S3VKmWi/YVWp0MUH1pEYfdtbjCpQiIzy8gmP9GCXv6AVZENDHbpcRHqMnZONs3ieyJMh3zvVw== @@ -991,6 +986,14 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cron-parser@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== + dependencies: + is-nan "^1.3.0" + moment-timezone "^0.5.31" + cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1197,10 +1200,10 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: dependencies: safe-buffer "^5.0.1" -edge-server-tools@^0.2.11: - version "0.2.11" - resolved "https://registry.yarnpkg.com/edge-server-tools/-/edge-server-tools-0.2.11.tgz#802310ba12d09dc45d359338026dd68861e28ba6" - integrity sha512-dLvyD0TSZM30VsXkAV8nH3Xq7hA3NOUFnhYehCsVLe4BBt0WHjgwyB460xglxrWHx7HzYBKcED4o98rFiQ0ihg== +edge-server-tools@^0.2.13: + version "0.2.13" + resolved "https://registry.yarnpkg.com/edge-server-tools/-/edge-server-tools-0.2.13.tgz#d7686488e5a4915203c0220949758efa110b681a" + integrity sha512-FXLdAWVT/XGEM3PehENVVyXuC0vdS5e4KdchW3fpZFp4Wb8eAr3xmud7VhT4pyXIXsywS+nWiW5MhGQXpl6kdw== dependencies: cleaners "^0.3.11" nano "^9.0.4" @@ -2260,6 +2263,14 @@ is-map@^2.0.1: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== +is-nan@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -2691,6 +2702,11 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +long-timeout@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/long-timeout/-/long-timeout-0.1.1.tgz#9721d788b47e0bcb5a24c2e2bee1a0da55dab514" + integrity sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w== + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -2864,6 +2880,17 @@ nano@10.0.0: qs "^6.10.3" tough-cookie "^4.0.0" +nano@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/nano/-/nano-9.0.5.tgz#2b767819f612907a3ac09b21f2929d4097407262" + integrity sha512-fEAhwAdXh4hDDnC8cYJtW6D8ivOmpvFAqT90+zEuQREpRkzA/mJPcI4EKv15JUdajaqiLTXNoKK6PaRF+/06DQ== + dependencies: + "@types/tough-cookie" "^4.0.0" + axios "^0.21.1" + axios-cookiejar-support "^1.0.1" + qs "^6.9.4" + tough-cookie "^4.0.0" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2906,6 +2933,15 @@ node-forge@^0.9.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.1.tgz#775368e6846558ab6676858a4d8c6e8d16c677b5" integrity sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ== +node-schedule@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/node-schedule/-/node-schedule-1.3.3.tgz#f8e01c5fb9597f09ecf9c4c25d6938e5e7a06f48" + integrity sha512-uF9Ubn6luOPrcAYKfsXWimcJ1tPFtQ8I85wb4T3NgJQrXazEzojcFZVk46ZlLHby3eEJChgkV/0T689IsXh2Gw== + dependencies: + cron-parser "^2.18.0" + long-timeout "0.1.1" + sorted-array-functions "^1.3.0" + normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -3332,7 +3368,7 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -qs@^6.10.3: +qs@^6.10.3, qs@^6.9.4: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== @@ -3673,6 +3709,11 @@ socks@~2.3.2: ip "1.1.5" smart-buffer "^4.1.0" +sorted-array-functions@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" + integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== + source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -3861,7 +3902,7 @@ stubs@^3.0.0: resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= -sucrase@^3.17.1: +sucrase@^3.17.1, sucrase@^3.21.0: version "3.23.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.23.0.tgz#2a7fa80a04f055fb2e95d2aead03fec1dba52838" integrity sha512-xgC1xboStzGhCnRywlBf/DLmkC+SkdAKqrNCDsxGrzM0phR5oUxoFKiQNrsc2D8wDdAm03iLbSZqjHDddo3IzQ== @@ -3989,18 +4030,6 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -ts-node@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" From b2c21860162476d5d6ee4434d64b7362e4eda6b2 Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:28:34 -0700 Subject: [PATCH 02/12] Reorg api files --- src/api/index.ts | 14 -------------- src/index.ts | 33 +++++++++++++++++++++++++++++++++ src/{api => }/server.ts | 8 ++++---- 3 files changed, 37 insertions(+), 18 deletions(-) delete mode 100644 src/api/index.ts create mode 100644 src/index.ts rename src/{api => }/server.ts (89%) diff --git a/src/api/index.ts b/src/api/index.ts deleted file mode 100644 index 6fb9cfc..0000000 --- a/src/api/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { makeExpressRoute } from 'serverlet/express' - -import { config } from '../config' -import { pushNotificationRouterV2 } from './router' -import { createServer } from './server' -// Create server -const server = createServer(makeExpressRoute(pushNotificationRouterV2), config) - -// Start Server -server.listen(server.get('httpPort'), server.get('httpHost'), () => { - console.log( - `Express server listening on port ${JSON.stringify(server.get('httpPort'))}` - ) -}) diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..fdfbf5f --- /dev/null +++ b/src/index.ts @@ -0,0 +1,33 @@ +import nano from 'nano' +import { makeExpressRoute } from 'serverlet/express' + +import { pushNotificationRouterV2 } from './api/router' +import { setupDatabases } from './couchSetup' +import { createServer } from './server' +import { serverConfig } from './serverConfig' + +async function main(): Promise { + // Set up databases: + const connection = nano(serverConfig.couchUri) + await setupDatabases(connection) + + // Create server + const server = createServer( + makeExpressRoute(pushNotificationRouterV2), + serverConfig + ) + + // Start Server + server.listen(server.get('httpPort'), server.get('httpHost'), () => { + console.log( + `Express server listening on port ${JSON.stringify( + server.get('httpPort') + )}` + ) + }) +} + +main().catch(error => { + console.error(error) + process.exit(1) +}) diff --git a/src/api/server.ts b/src/server.ts similarity index 89% rename from src/api/server.ts rename to src/server.ts index 8b48ca3..e52e7fc 100644 --- a/src/api/server.ts +++ b/src/server.ts @@ -1,10 +1,10 @@ import bodyParser from 'body-parser' import compression from 'compression' import cors from 'cors' -import express, { type RequestHandler } from 'express' +import express from 'express' import morgan from 'morgan' -import { asServerConfig } from '../config' +import { asServerConfig } from './serverConfig' const BodyParseError = { message: 'error parsing body data', @@ -33,8 +33,8 @@ export const createServer = ( app.use(compressionHandler) // Create throttled slack poster // Set local app params - app.set('httpPort', config.httpPort) - app.set('httpHost', config.httpHost) + app.set('httpPort', config.listenPort) + app.set('httpHost', config.listenHost) // Morgan Logging app.use(morgan(MorganTemplate)) // configure app to use bodyParser() and return 400 error if body is not json From 200a8c3c575b38d8fb2291b29fbe504bd08de23f Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:30:35 -0700 Subject: [PATCH 03/12] Define task related types and reorg types folder --- src/types/{ => http}/request-types.ts | 2 +- src/types/{ => http}/response-types.ts | 0 src/types/task/Action.ts | 54 ++++++++++++ src/types/task/ActionData.ts | 69 ++++++++++++++++ src/types/task/ActionEffect.ts | 110 +++++++++++++++++++++++++ src/types/task/Task.ts | 33 ++++++++ 6 files changed, 267 insertions(+), 1 deletion(-) rename src/types/{ => http}/request-types.ts (86%) rename src/types/{ => http}/response-types.ts (100%) create mode 100644 src/types/task/Action.ts create mode 100644 src/types/task/ActionData.ts create mode 100644 src/types/task/ActionEffect.ts create mode 100644 src/types/task/Task.ts diff --git a/src/types/request-types.ts b/src/types/http/request-types.ts similarity index 86% rename from src/types/request-types.ts rename to src/types/http/request-types.ts index c44a33b..0889b88 100644 --- a/src/types/request-types.ts +++ b/src/types/http/request-types.ts @@ -1,6 +1,6 @@ import { ExpressRequest } from 'serverlet/express' -import { ApiKey } from '../models' +import { ApiKey } from '../../models' export interface ExtendedRequest extends ExpressRequest { readonly body: any diff --git a/src/types/response-types.ts b/src/types/http/response-types.ts similarity index 100% rename from src/types/response-types.ts rename to src/types/http/response-types.ts diff --git a/src/types/task/Action.ts b/src/types/task/Action.ts new file mode 100644 index 0000000..8d0241a --- /dev/null +++ b/src/types/task/Action.ts @@ -0,0 +1,54 @@ +// ------------------------------------------------------------------- +// Type definitions +// ------------------------------------------------------------------- + +import { asBoolean, asObject, asOptional, asValue, Cleaner } from 'cleaners' + +import { ActionData, asActionData } from './ActionData' + +/** + * Describes types of action to be done by some service. Some properties + * are optional because certain types of actions do not require the + * optional properties. + */ +export interface Action { + /** + * The type of the action. + * - 'push': An action for pushing a notification to a device. + * - 'broadcast-tx': An action for broadcasting transactions to a + * network provider such as Blockbook. + * - 'client': // TODO: Add description + */ + type: 'push' | 'broadcast-tx' | 'client' + + /** + * If true, the task will be reused, otherwise, the task will be + * deleted after the action is completed. + */ + repeat?: boolean + + /** + * Mutex implementation to prevent race conditions. + */ + inProgress?: boolean + + /** + * Additional payload for consumption. For 'push' action type, data + * must contain apiKey, body, message, and tokenIds to send + * notifications. + * @see {@link ApiKey} + * @see {@link NotificationManager.init} + * @see {@link NotificationManager.send} + */ + data: ActionData +} + +// ------------------------------------------------------------------- +// Cleaners definitions +// ------------------------------------------------------------------- +export const asAction: Cleaner = asObject({ + type: asValue('push', 'broadcast-tx', 'client'), + repeat: asOptional(asBoolean), + inProgress: asOptional(asBoolean), + data: asActionData +}) diff --git a/src/types/task/ActionData.ts b/src/types/task/ActionData.ts new file mode 100644 index 0000000..ea5d4d4 --- /dev/null +++ b/src/types/task/ActionData.ts @@ -0,0 +1,69 @@ +// ------------------------------------------------------------------- +// Type definitions +// ------------------------------------------------------------------- + +import { + asArray, + asEither, + asObject, + asOptional, + asString, + Cleaner +} from 'cleaners' + +import { ApiKey } from '../../models' + +export interface GeneralActionData { + additionalData?: Object +} + +export interface PushActionData extends GeneralActionData { + apiKey: ApiKey | string + title: string + body: string + tokenIds: string[] +} + +export interface BroadcastTxActionData extends GeneralActionData { + SOMETHING: string +} + +export interface ClientActionData extends GeneralActionData { + SOMETHING: string +} + +export type ActionData = + | PushActionData + | BroadcastTxActionData + | ClientActionData + +// ------------------------------------------------------------------- +// Cleaners definitions +// ------------------------------------------------------------------- + +export const asGeneralActionData: Cleaner = asObject({ + additionalData: asOptional(asObject) +}) + +export const asPushActionData: Cleaner = asObject({ + apiKey: asString, + title: asString, + body: asString, + tokenIds: asArray(asString) +}) + +export const asBroadcastTxActionData: Cleaner = asObject( + { + SOMETHING: asString + } +) + +export const asClientActionData: Cleaner = asObject({ + SOMETHING: asString +}) + +export const asActionData: Cleaner = asEither( + asPushActionData, + asBroadcastTxActionData, + asClientActionData +) diff --git a/src/types/task/ActionEffect.ts b/src/types/task/ActionEffect.ts new file mode 100644 index 0000000..e94fc2a --- /dev/null +++ b/src/types/task/ActionEffect.ts @@ -0,0 +1,110 @@ +import { + asArray, + asBoolean, + asEither, + asNumber, + asObject, + asOptional, + asString, + asValue, + Cleaner +} from 'cleaners' + +// ------------------------------------------------------------------- +// Type definitions +// ------------------------------------------------------------------- + +export interface GeneralActionEffect { + completed: boolean +} +export interface SeqActionEffect extends GeneralActionEffect { + type: 'seq' + opIndex: number + childEffect: ActionEffect +} + +export interface ParActionEffect extends GeneralActionEffect { + type: 'par' + childEffects: ActionEffect[] +} + +export interface BalanceActionEffect extends GeneralActionEffect { + type: 'balance' + address: string + aboveAmount?: string + belowAmount?: string + walletId: string + tokenId?: string +} + +export interface TxConfsActionEffect extends GeneralActionEffect { + type: 'tx-confs' + txId: string + walletId: string + confirmations: number +} + +export interface PriceActionEffect extends GeneralActionEffect { + type: 'price' + currencyPair: string + aboveRate?: string + belowRate?: string +} +// TODO: @samholmes to add comments +export type ActionEffect = + | SeqActionEffect + | ParActionEffect + | BalanceActionEffect + | TxConfsActionEffect + | PriceActionEffect + +// ------------------------------------------------------------------- +// Cleaners definitions +// ------------------------------------------------------------------- + +export const asSeqActionEffect: Cleaner = asObject({ + type: asValue('seq'), + opIndex: asNumber, + completed: asBoolean, + childEffect: raw => asActionEffect(raw) +}) + +export const asParActionEffect: Cleaner = asObject({ + type: asValue('par'), + completed: asBoolean, + childEffects: asArray(raw => asActionEffect(raw)) +}) + +export const asBalanceActionEffect: Cleaner = asObject({ + type: asValue('balance'), + address: asString, + completed: asBoolean, + aboveAmount: asOptional(asString), + belowAmount: asOptional(asString), + walletId: asString, + tokenId: asOptional(asString) +}) + +export const asTxConfsActionEffect: Cleaner = asObject({ + type: asValue('tx-confs'), + txId: asString, + completed: asBoolean, + walletId: asString, + confirmations: asNumber +}) + +export const asPriceActionEffect: Cleaner = asObject({ + type: asValue('price'), + currencyPair: asString, + completed: asBoolean, + aboveRate: asOptional(asString), + belowRate: asOptional(asString) +}) + +export const asActionEffect: Cleaner = asEither( + asSeqActionEffect, + asParActionEffect, + asBalanceActionEffect, + asTxConfsActionEffect, + asPriceActionEffect +) diff --git a/src/types/task/Task.ts b/src/types/task/Task.ts new file mode 100644 index 0000000..7f843a5 --- /dev/null +++ b/src/types/task/Task.ts @@ -0,0 +1,33 @@ +import { asArray, asObject, asString, Cleaner } from 'cleaners' + +import { Action, asAction } from './Action' +import { ActionEffect, asActionEffect } from './ActionEffect' + +// ------------------------------------------------------------------- +// Type definitions +// ------------------------------------------------------------------- + +/** + * Describes a task that can be stored in the `db_tasks` database. + * + * `taskId` and `userId` are required to construct the `_id` of the + * couchDB document. The `_id` is used to partition the documents by + * user for performance and security reasons. + */ +export interface Task { + taskId: string + userId: string + actionEffects: ActionEffect[] + action: Action +} + +// ------------------------------------------------------------------- +// Cleaners definitions +// ------------------------------------------------------------------- + +export const asTask: Cleaner = asObject({ + taskId: asString, + userId: asString, + actionEffects: asArray(asActionEffect), + action: asAction +}) From a1c86d6c0476a94c1e8f7501c7a9a67ca99481ad Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:31:31 -0700 Subject: [PATCH 04/12] Define and setup views --- src/couchSetup.ts | 37 +++++++------- src/database/views/couch-tasks.ts | 81 +++++++++++++++++++++++++++++++ src/utils/dbUtils.ts | 13 +++++ 3 files changed, 111 insertions(+), 20 deletions(-) create mode 100644 src/database/views/couch-tasks.ts diff --git a/src/couchSetup.ts b/src/couchSetup.ts index 0e38581..dd3b802 100644 --- a/src/couchSetup.ts +++ b/src/couchSetup.ts @@ -8,6 +8,7 @@ import { } from 'edge-server-tools' import { ServerScope } from 'nano' +import { tasksListening, tasksPublishing } from './database/views/couch-tasks' import { serverConfig } from './serverConfig' // --------------------------------------------------------------------------- @@ -48,21 +49,18 @@ export const settingsSetup: DatabaseSetup = { const apiKeysSetup: DatabaseSetup = { name: 'db_api_keys' } -const thresholdsSetup: DatabaseSetup = { name: 'db_currency_thresholds' } - -const devicesSetup: DatabaseSetup = { name: 'db_devices' } - -const usersSetup: DatabaseSetup = { - name: 'db_user_settings' - // documents: { - // '_design/filter': makeJsDesign('by-currency', ?), - // '_design/map': makeJsDesign('currency-codes', ?) - // } -} - -const defaultsSetup: DatabaseSetup = { - name: 'defaults' - // syncedDocuments: ['thresholds'] +const tasksSetup: DatabaseSetup = { + name: 'db_tasks', + // Turn on partition by userId for performance and security reasons. + // https://docs.couchdb.org/en/3.2.2/partitioned-dbs/index.html + options: { + partitioned: true + }, + // Set up the views + documents: { + '_design/tasks_listening': tasksListening, + '_design/tasks_publishing': tasksPublishing + } } // --------------------------------------------------------------------------- @@ -79,13 +77,12 @@ export async function setupDatabases( replicatorSetup: syncedReplicators, disableWatching } - + // @ts-expect-error await setupDatabase(connection, settingsSetup, options) await Promise.all([ + // @ts-expect-error setupDatabase(connection, apiKeysSetup, options), - setupDatabase(connection, thresholdsSetup, options), - setupDatabase(connection, devicesSetup, options), - setupDatabase(connection, usersSetup, options), - setupDatabase(connection, defaultsSetup, options) + // @ts-expect-error + setupDatabase(connection, tasksSetup, options) ]) } diff --git a/src/database/views/couch-tasks.ts b/src/database/views/couch-tasks.ts new file mode 100644 index 0000000..9cbc62c --- /dev/null +++ b/src/database/views/couch-tasks.ts @@ -0,0 +1,81 @@ +/** + * Configures couchDB views that are used to model message queues. + * Associated helper functions are also provided. + * + * Publishers listen to these views to perform actions on update. One + * way of doing this is to use the {@link viewToStream} function from + * `edge-server-tools`. + * + * A key advantage of using views is that documents are programmatically + * indexed and serverd to views based on certain conditions, thereby + * elimitating the need to build seqarate listeners that subscribe to db + * documents and perform actions on update. + * + * Views can be named as a string, just like a normal database. They can + * be called by using `db.view(name, params)` method. The response will + * be of type `nano.DocumentViewResponse` where `T` is the shape of the + * documents defined elsewhere. This type has a `rows` property that is + * consistent with many other getter methods in nano. + */ + +// Certain import lines have lintings disabled because they are +// referenced only by documentation comments. +import { + JsDesignDocument, + makeJsDesign, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + viewToStream +} from 'edge-server-tools' + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { ActionEffect } from '../../types/task/ActionEffect' +import { Task } from '../../types/task/Task' +import { dbTasks, logger, packChange, TaskDoc } from '../../utils/dbUtils' + +/** + * A view that indexes to all tasks that contain at least one incomplete + * {@link ActionEffect}. + * + * @remarks + * This view is not intended to be subscribed by any publishers. Think + * of this as a staging area for ongoing tasks. + */ +export const tasksListening: JsDesignDocument = makeJsDesign( + 'tasks_listening', + () => ({ + filter: function (taskDoc: TaskDoc) { + return taskDoc.doc.actionEffects.some(e => e.completed === false) + } + }) +) + +/** + * A view that indexes to all tasks with all {@link ActionEffect} + * completed. + */ +export const tasksPublishing: JsDesignDocument = makeJsDesign( + 'tasks_publishing', + () => ({ + filter: function (taskDoc: TaskDoc) { + return taskDoc.doc.actionEffects.every(Boolean) + } + }) +) + +/** + * Updates the a task document in the `db_tasks` database. The function + * receives a {@link Task} object and updates the relavent document based on + * the content of this task. + * @param {Task} updatedTask - The task that has its `action.inProgress` + * flag updated. + */ +export const updateInProgress = async ( + updatedTask: Task, + id: string +): Promise => { + try { + await dbTasks.insert(packChange(updatedTask, id)) + } catch (e) { + logger(`Failed to make ${updatedTask.taskId}'s action as inprogress: `, e) + } +} diff --git a/src/utils/dbUtils.ts b/src/utils/dbUtils.ts index f995c5e..582f618 100644 --- a/src/utils/dbUtils.ts +++ b/src/utils/dbUtils.ts @@ -106,6 +106,19 @@ export const logger = (...args: any): void => { console.log(result) } +/** + * Convert a {@link Task} object into a {@link TaskDoc} object that + * implements {@link CouchDoc}. + * @param doc - A {@link Task} object. + * @returns {TaskDoc} - A {@link TaskDoc} object wrapping `doc`. + */ +export const packChange = (doc: T, id: string): CouchDoc => { + return { + id: id, + doc: doc + } +} + // ------------------------------------------------------------------------------ // Private Helpers // ------------------------------------------------------------------------------ From 3885bd8291b0394c8267ea0f191ae2e27538bad0 Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:38:51 -0700 Subject: [PATCH 05/12] Conform old codes to newly defined types --- src/api/router.ts | 40 ++++++++++++++---------- src/utils/dbUtils.ts | 73 ++++++++++++++++++-------------------------- 2 files changed, 53 insertions(+), 60 deletions(-) diff --git a/src/api/router.ts b/src/api/router.ts index 701c311..73dac4d 100644 --- a/src/api/router.ts +++ b/src/api/router.ts @@ -1,4 +1,4 @@ -import { asArray, asObject, asString, asUnknown } from 'cleaners' +import { asArray, asObject, asString } from 'cleaners' import { type HttpRequest, type HttpResponse, @@ -10,10 +10,13 @@ import { jsonResponse, statusCodes, statusResponse -} from '../types/response-types' +} from '../types/http/response-types' +import { asAction } from '../types/task/Action' +import { asActionEffect } from '../types/task/ActionEffect' import { - DbDoc, + asTaskDoc, logger, + TaskDoc, wrappedDeleteFromDb, wrappedGetFromDb, wrappedSaveToDb @@ -51,31 +54,34 @@ const getTaskRoute = async (request: HttpRequest): Promise => { } // Construct a body and returns it as an HttpResponse. -// The body should have triggers, action, and taskId. +// The body should have actionEffects, action, userId, _id and taskId. const createTaskRoute = async (request: HttpRequest): Promise => { try { const asBody = asObject({ taskId: asString, - triggers: asArray(asUnknown), - action: asUnknown + actionEffects: asArray(asActionEffect), + action: asAction }) const queryObject = getQueryParamObject( - ['taskId', 'triggers', 'action'], + ['taskId', 'actionEffects', 'action'], request.path ) - const triggersAsString = queryObject.triggers - const triggersAsArray = convertStringToArray(triggersAsString) - queryObject.triggers = triggersAsArray ?? [] - const { taskId, triggers, action } = asBody(queryObject) + const actionEffectsAsString = queryObject.actionEffects + const actionEffectsAsArray = convertStringToArray(actionEffectsAsString) + queryObject.actionEffects = actionEffectsAsArray ?? [] + const { taskId, actionEffects, action } = asBody(queryObject) + const cleanedAction = asAction(action) - const doc: DbDoc = { - taskId, + const doc: TaskDoc = asTaskDoc({ + taskId: taskId, userId: request.headers.userId, - triggers, - action, + actionEffects: actionEffects.map(actionEffect => + asActionEffect(actionEffect) + ), + cleanedAction, _id: `${request.headers.userId}:${taskId}` // To help with partitioning - } + }) await wrappedSaveToDb([doc]) return statusResponse(statusCodes.SUCCESS, 'Successfully created the task') @@ -85,6 +91,8 @@ const createTaskRoute = async (request: HttpRequest): Promise => { } } +// Remove tasks from the database. If the taskIds array is empty, it +// will delete all tasks under the userId. const deleteTaskRoute = async (request: HttpRequest): Promise => { try { const asQuery = asObject({ diff --git a/src/utils/dbUtils.ts b/src/utils/dbUtils.ts index 582f618..a5235b1 100644 --- a/src/utils/dbUtils.ts +++ b/src/utils/dbUtils.ts @@ -1,55 +1,37 @@ -import { asArray, asMaybe, asObject, asString, asUnknown } from 'cleaners' +import { Cleaner } from 'cleaners' +import { asCouchDoc, CouchDoc } from 'edge-server-tools' import nano from 'nano' -import { config } from './../config' - -export interface DbDoc - extends nano.IdentifiedDocument, - nano.MaybeRevisionedDocument { - taskId: string - userId: string - triggers: any[] - action: any -} - -export const asDbDoc = (raw: any): DbDoc => { - return { - ...asObject({ - taskId: asString, - userId: asString, - triggers: asArray(asUnknown), - action: asUnknown, - _id: asString - })(raw), - ...asObject(asMaybe(asString))(raw) - } -} - -const { couchUri } = config +import { asTask, Task } from '../types/task/Task' +import { serverConfig } from './../serverConfig' +const { couchUri } = serverConfig const nanoDb = nano(couchUri) -const dbTasks: nano.DocumentScope = nanoDb.db.use('db_tasks') // ------------------------------------------------------------------------------ -// Public API +// Public APIs for the 'db_tasks' database // ------------------------------------------------------------------------------ +export type TaskDoc = CouchDoc +export const asTaskDoc: Cleaner> = asCouchDoc(asTask) +export const dbTasks: nano.DocumentScope = nanoDb.db.use('db_tasks') -export const wrappedSaveToDb = (docs: DbDoc[]): void => saveToDb(dbTasks, docs) +export const wrappedSaveToDb = (docs: TaskDoc[]): void => + saveToDb(dbTasks, docs) export const wrappedGetFromDb = async ( keys: string[], userId: string -): Promise => getFromDb(dbTasks, keys, userId) +): Promise => getFromDb(dbTasks, keys, userId, asTaskDoc) export const wrappedDeleteFromDb = async ( keys: string[], userId: string ): Promise => deleteFromDb(dbTasks, keys, userId) // ------------------------------------------------------------------------------ -// Public Helpers +// Public Helpers - Agnostic of the database // ------------------------------------------------------------------------------ -export const saveToDb = ( - db: nano.DocumentScope, - docs: DbDoc[] +export const saveToDb = ( + db: nano.DocumentScope>, + docs: Array> ): void => { if (docs.length === 0) return db.bulk({ docs }) @@ -59,16 +41,18 @@ export const saveToDb = ( .catch(logger) } -export const deleteFromDb = async ( - db: nano.DocumentScope, +export const deleteFromDb = async ( + db: nano.DocumentScope>, keys: string[], userId: string ): Promise => { - const docs = await getFromDb(db, keys, userId) + // TODO: NOT SURE HOW TO HANDLE THE TYPE ERROR. SOMEONE HELP. + // @ts-ignore + const docs = await getFromDb(db, keys, userId, asTaskDoc) const docsToDelete: any[] = [] docs.forEach(element => { - docsToDelete.push({ _id: element._id, _deleted: true, _rev: element._rev }) + docsToDelete.push({ _id: element.id, _deleted: true, _rev: element.rev }) }) db.bulk({ docs: docsToDelete }) @@ -78,21 +62,22 @@ export const deleteFromDb = async ( .catch(logger) } -export const getFromDb = async ( - db: nano.DocumentScope, +export const getFromDb = async ( + db: nano.DocumentScope>, keys: string[], - userId: string -): Promise => { + userId: string, + cleaner: Cleaner> +): Promise>> => { // Grab existing db data for requested dates const response = await db.partitionedList(userId).catch(logger) - if (response == null) return [] + if (response == null || !(response instanceof Object)) return [] return response.rows .filter(element => !('error' in element) && element.doc != null) .filter( element => keys.length === 0 || keys.includes(element.id.split(':')[1]) ) .map(({ doc }) => doc) - .map(asDbDoc) + .map(cleaner) } export const logger = (...args: any): void => { From 743bc68b7cdf23ccfcbc2f4a27df2b6f5c684806 Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:47:02 -0700 Subject: [PATCH 06/12] Fix type and lint errors in old files --- src/models/CurrencyThreshold.ts | 2 ++ src/models/User.ts | 6 ++---- src/models/User/views.ts | 1 - src/models/base.ts | 9 ++------- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/models/CurrencyThreshold.ts b/src/models/CurrencyThreshold.ts index 3a3300d..16340e5 100644 --- a/src/models/CurrencyThreshold.ts +++ b/src/models/CurrencyThreshold.ts @@ -60,12 +60,14 @@ export class CurrencyThreshold extends Base implements ICurrencyThreshold { price: number ): Promise { const threshold = this.thresholds[hours] ?? { + custom: undefined, lastUpdated: 0, price: 0 } threshold.lastUpdated = timestamp threshold.price = price this.thresholds[hours] = threshold + return (await this.save()) as CurrencyThreshold } } diff --git a/src/models/User.ts b/src/models/User.ts index 6b9c387..363ebc7 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -40,14 +40,12 @@ export class User extends Base implements ReturnType { public devices: ReturnType public notifications: ReturnType - // @ts-expect-error constructor(...args) { super(...args) - // @ts-expect-error - if (!this.devices) this.devices = {} + if (this.devices == null) this.devices = {} // @ts-expect-error - if (!this.notifications) { + if (this.notifications == null) { this.notifications = { enabled: true, currencyCodes: {} diff --git a/src/models/User/views.ts b/src/models/User/views.ts index 9a8e2ed..c663c0f 100644 --- a/src/models/User/views.ts +++ b/src/models/User/views.ts @@ -2,7 +2,6 @@ declare function emit(...args: any[]): void export const views = { filter: { - // @ts-expect-error byCurrency(doc) { var notifs = doc.notifications if (notifs && notifs.enabled && notifs.currencyCodes) { diff --git a/src/models/base.ts b/src/models/base.ts index f5ec01e..4b5aeb7 100644 --- a/src/models/base.ts +++ b/src/models/base.ts @@ -26,21 +26,19 @@ export class Base implements ReturnType { return new Proxy(this, { set(target: Base, key: PropertyKey, value: any): any { - // @ts-expect-error return key in target ? (target[key] = value) : target.set(key, value) }, get(target: Base, key: PropertyKey): any { - // @ts-expect-error return key in target ? target[key] : target.get(key) } }) } - public validate() { + public validate(): void { ;(this.constructor as typeof Base).asType(this.dataValues) } - public processAPIResponse(response: Nano.DocumentInsertResponse) { + public processAPIResponse(response: Nano.DocumentInsertResponse): void { if (response.ok === true) { this._id = response.id this._rev = response.rev @@ -106,7 +104,6 @@ export class Base implements ReturnType { } public get(key: PropertyKey): any { - // @ts-expect-error return this.dataValues[key] } @@ -115,12 +112,10 @@ export class Base implements ReturnType { for (const prop in key) { // eslint-disable-next-line no-prototype-builtins if (key.hasOwnProperty(prop)) { - // @ts-expect-error this.dataValues[prop] = key[prop] } } } else { - // @ts-expect-error this.dataValues[key] = value } From 97e8c80f6bf29ab0ab82fe51eacc6a5a0a2d701c Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Fri, 15 Jul 2022 14:47:33 -0700 Subject: [PATCH 07/12] Implement Push Publisher --- src/NotificationManager.ts | 64 ++++++++++++++ src/publishers/push.ts | 166 +++++++++++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+) create mode 100644 src/NotificationManager.ts create mode 100644 src/publishers/push.ts diff --git a/src/NotificationManager.ts b/src/NotificationManager.ts new file mode 100644 index 0000000..39e8c88 --- /dev/null +++ b/src/NotificationManager.ts @@ -0,0 +1,64 @@ +import io from '@pm2/io' +import admin from 'firebase-admin' + +import { ApiKey } from './models' + +import BatchResponse = admin.messaging.BatchResponse + +const successCounter = io.counter({ + id: 'notifications:success:total', + name: 'Total Successful Notifications' +}) +const failureCounter = io.counter({ + id: 'notifications:failure:total', + name: 'Total Failed Notifications' +}) + +export const createNotificationManager = async ( + apiKey: ApiKey | string +): Promise => { + if (typeof apiKey === 'string') apiKey = await ApiKey.fetch(apiKey) + + const name = `app:${apiKey.appId}` + let app: admin.app.App + try { + app = admin.app(name) + } catch (err) { + app = admin.initializeApp( + { + credential: admin.credential.cert(apiKey.adminsdk) + }, + name + ) + } + return app +} + +export const sendNotification = async ( + app: admin.app.App, + title: string, + body: string, + tokens: string[], + data = {} +): Promise => { + const message: admin.messaging.MulticastMessage = { + notification: { + title, + body + }, + data, + tokens + } + + try { + const response = await app.messaging().sendMulticast(message) + + successCounter.inc(response.successCount) + failureCounter.inc(response.failureCount) + + return response + } catch (err) { + console.error(JSON.stringify(err, null, 2)) + throw err + } +} diff --git a/src/publishers/push.ts b/src/publishers/push.ts new file mode 100644 index 0000000..249a25b --- /dev/null +++ b/src/publishers/push.ts @@ -0,0 +1,166 @@ +/** + * A push publisher subscribes to a view that contains all tasks whose + * arrays of {@link ActionEffect}s are all marked as completed. The + * publisher's job is to push notifications to devices based on the + * completed tasks. + */ + +import { viewToStream } from 'edge-server-tools' + +import { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + tasksPublishing, + updateInProgress +} from '../database/views/couch-tasks' +import { + createNotificationManager, + sendNotification +} from '../NotificationManager' +import { asPushActionData } from '../types/task/ActionData' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { ActionEffect } from '../types/task/ActionEffect' +import { Task } from '../types/task/Task' +import { + asTaskDoc, + dbTasks, + logger, + TaskDoc, + wrappedDeleteFromDb +} from '../utils/dbUtils' + +/** Used in the retry mechnism for the publisher */ +const RETRY_LIMIT = 5 + +/** + * Begins listening to the 'tasks_publishing' view defined in + * {@link tasksPublishing}. For every new task document received, the + * publisher checks if the action is in progress. If it is, skip the + * processing. If it is not, the publisher will pick up the task by + * executing the push notification action. + * + * If the action is marked as repeatable, the publisher will then mark + * all {@link ActionEffect}s as completed so that 'task_listening' + * view can pick the task up again for processing. + * + * @returns {Promise} 0 if the connection is closed. + */ +export const runPushPublisher = async (): Promise => { + for await (const doc of viewToStream(async params => + dbTasks.view('tasks_publishing', 'tasks_publishing', params) + )) { + const clean: TaskDoc = asTaskDoc(doc) + const currentTask = clean.doc + if (!canExecute(currentTask)) continue + + // Set the action of the task as in progress + // If this process fails, we stop processing the current task + await signalActionStarted(currentTask) + if (currentTask.action.inProgress === false) continue + + // Send notification to the devices + await handlePushNotification(currentTask) + + // Perform chores after the notification has been sent + await handleActionAfterPushingNotification(currentTask) + + // Set the action of the task as not in progress + await finishCurrentTaskAction(currentTask) + } + return 0 +} + +// ----------------------------------------------------------------------------- +// Helper functions +// ----------------------------------------------------------------------------- + +/** + * Determines if the current task from the view is eliglbe for pushing + * notfications to devices. + * @returns Whether the task is eligible for pushing notifications. + */ +const canExecute = (task: Task): boolean => { + return ( + task.action.inProgress == null && + task.action.repeat == null && + task.action.inProgress === false + ) +} + +/** + * By setting the action as in progress, and update that change in the + * database, other publishers will not pick up the task. + * + * If the update fails, we stop processing the current task by setting + * its inProgress flag to false. The {@link execute} function will + * skip this task. + */ +const signalActionStarted = async (task: Task): Promise => { + task.action.inProgress = true + await updateInProgress(task, `${task.userId}:${task.taskId}`).catch(_ => { + task.action.inProgress = false + }) +} + +/** + * Prepares and sends a push notification to the devices identified by tokenIds. + */ +const handlePushNotification = async (task: Task): Promise => { + const { apiKey, title, body, tokenIds } = asPushActionData(task.action.data) + const notificationManager = await createNotificationManager(apiKey) + await sendNotification( + notificationManager, + title, + body, + tokenIds, + task.action.data.additionalData ?? {} + ) +} + +/** + * Some actions are repeatable. If the action is repeatable, we mark all + * {@link ActionEffect}s as completed so that 'task_listening' view + * can pick the task up again for processing. + * + * Otherwise, we delete the task from the database. + */ +const handleActionAfterPushingNotification = async ( + task: Task +): Promise => { + if (task.action.repeat === true) { + // Reset all action effects as incomplete + task.actionEffects.forEach(actionEffect => { + actionEffect.completed = false + }) + } else { + await wrappedDeleteFromDb([task.taskId], task.userId) + } +} + +/** + * Setting the action as not in progress, and update that change in the + * database. A retry mechinism is used to minimize the chance for + * leaving a task whose inProgress flag is always true, which prevents + * it from being ever picked up by publishers. + */ +const finishCurrentTaskAction = async (task: Task): Promise => { + // If not a repeatable action, that means the task has been deleted + // from the db. Do nothing. + if (task.action.repeat === false) return + + var currentRetry = 0 + + // Use a while loop to implement a retry mechanism + while (true) { + try { + task.action.inProgress = false + await updateInProgress(task, `${task.userId}:${task.taskId}`) + break + } catch (e) { + if (currentRetry++ > RETRY_LIMIT) { + logger(`Failed to update inProgress flag after ${RETRY_LIMIT} retries`) + break + } + logger(e) + } + } +} From b8614c02817610488b9b011738c98bdddd0d1aef Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Mon, 18 Jul 2022 10:44:33 -0700 Subject: [PATCH 08/12] fixup! Implement Push Publisher --- src/publishers/push.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/publishers/push.ts b/src/publishers/push.ts index 249a25b..fec6e50 100644 --- a/src/publishers/push.ts +++ b/src/publishers/push.ts @@ -46,7 +46,9 @@ const RETRY_LIMIT = 5 */ export const runPushPublisher = async (): Promise => { for await (const doc of viewToStream(async params => - dbTasks.view('tasks_publishing', 'tasks_publishing', params) + Promise.resolve( + dbTasks.view('tasks_publishing', 'tasks_publishing', params) + ) )) { const clean: TaskDoc = asTaskDoc(doc) const currentTask = clean.doc @@ -81,6 +83,7 @@ export const runPushPublisher = async (): Promise => { const canExecute = (task: Task): boolean => { return ( task.action.inProgress == null && + task.action.type === 'push' && task.action.repeat == null && task.action.inProgress === false ) From 7eccaf24feff53a4af0b7aa7d87f90e058474c11 Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Mon, 18 Jul 2022 13:27:15 -0700 Subject: [PATCH 09/12] fixup! Implement Push Publisher --- src/publishers/push.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/publishers/push.ts b/src/publishers/push.ts index fec6e50..585f8dd 100644 --- a/src/publishers/push.ts +++ b/src/publishers/push.ts @@ -82,9 +82,9 @@ export const runPushPublisher = async (): Promise => { */ const canExecute = (task: Task): boolean => { return ( - task.action.inProgress == null && + task.action.inProgress != null && task.action.type === 'push' && - task.action.repeat == null && + task.action.repeat != null && task.action.inProgress === false ) } From e8ddf953cfac59aff1297714ff743ea4ff420592 Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Mon, 18 Jul 2022 16:19:24 -0700 Subject: [PATCH 10/12] Add and config typedoc --- .eslintignore | 1 + package.json | 5 +++-- typedoc.json | 4 ++++ yarn.lock | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 typedoc.json diff --git a/.eslintignore b/.eslintignore index 84c048a..12da7d1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1 +1,2 @@ /build/ +/docs/ \ No newline at end of file diff --git a/package.json b/package.json index b32b5a5..fb5f56f 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "main": "build/index.js", "scripts": { "build": "sucrase -q -t typescript,imports -d ./lib ./src", - "clean": "rimraf lib", + "clean": "rimraf lib", "compile": "tsc", "fix": "npm run lint -- --fix", "lint": "eslint --ext .js,.ts .", @@ -36,7 +36,8 @@ "morgan": "^1.10.0", "nano": "10.0.0", "node-schedule": "^1.3.2", - "serverlet": "^0.1.1" + "serverlet": "^0.1.1", + "typedoc": "^0.23.8" }, "devDependencies": { "@types/cors": "^2.8.7", diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..b4a044b --- /dev/null +++ b/typedoc.json @@ -0,0 +1,4 @@ +{ + "entryPoints": ["src/api/", "src/database/views/", "src/types/**/*.ts", "src/utils/**/*.ts", "src/publishers/**"], + "out": "docs/references" +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 3f7154b..e2f70f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -750,6 +750,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -2485,6 +2492,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonc-parser@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d" + integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg== + jsonwebtoken@8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz#c6397cd2e5fd583d65c007a83dc7bb78e6982b83" @@ -2726,6 +2738,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -2733,6 +2750,11 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +marked@^4.0.16: + version "4.0.18" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569" + integrity sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -2812,6 +2834,13 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -3638,6 +3667,15 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +shiki@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" + integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== + dependencies: + jsonc-parser "^3.0.0" + vscode-oniguruma "^1.6.1" + vscode-textmate "5.2.0" + shimmer@^1.1.0, shimmer@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" @@ -4116,6 +4154,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typedoc@^0.23.8: + version "0.23.8" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.8.tgz#6837fb2732f73e7aa61b46a4fbe77a301473998d" + integrity sha512-NLRTY/7XSrhiowR3xnH/nlfTnHk+dkzhHWAMT8guoZ6RHCQZIu3pJREMCqzdkWVCC5+dr9We7TtNeprR3Qy6Ag== + dependencies: + lunr "^2.3.9" + marked "^4.0.16" + minimatch "^5.1.0" + shiki "^0.10.1" + typescript@^4.7.3: version "4.7.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" @@ -4193,6 +4241,16 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vscode-oniguruma@^1.6.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607" + integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA== + +vscode-textmate@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" + integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== + walkdir@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39" From 3f8669a9d687747e7593d1dbda4b332d76a18a1b Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Mon, 18 Jul 2022 16:20:41 -0700 Subject: [PATCH 11/12] Generate reference docs --- docs/references/.nojekyll | 1 + docs/references/assets/highlight.css | 36 + docs/references/assets/main.js | 54 + docs/references/assets/search.js | 1 + docs/references/assets/style.css | 1224 +++++++++++++++++ docs/references/assets/widgets.png | Bin 0 -> 480 bytes docs/references/assets/widgets@2x.png | Bin 0 -> 855 bytes .../publishers_push.runPushPublisher.html | 70 + ...ypes_http_response_types.jsonResponse.html | 75 + ...es_http_response_types.statusResponse.html | 70 + .../functions/types_task_Action.asAction.html | 67 + .../types_task_ActionData.asActionData.html | 75 + ...sk_ActionData.asBroadcastTxActionData.html | 75 + ...es_task_ActionData.asClientActionData.html | 75 + ...s_task_ActionData.asGeneralActionData.html | 75 + ...ypes_task_ActionData.asPushActionData.html | 75 + ...ypes_task_ActionEffect.asActionEffect.html | 78 ++ ...sk_ActionEffect.asBalanceActionEffect.html | 78 ++ ...s_task_ActionEffect.asParActionEffect.html | 78 ++ ...task_ActionEffect.asPriceActionEffect.html | 78 ++ ...s_task_ActionEffect.asSeqActionEffect.html | 78 ++ ...sk_ActionEffect.asTxConfsActionEffect.html | 78 ++ .../functions/types_task_Task.asTask.html | 67 + ...tils_HTTPHelpers.convertStringToArray.html | 71 + ...utils_HTTPHelpers.getQueryParamObject.html | 83 ++ .../functions/utils_dbUtils.asTaskDoc.html | 76 + .../functions/utils_dbUtils.deleteFromDb.html | 83 ++ .../functions/utils_dbUtils.getFromDb.html | 85 ++ .../functions/utils_dbUtils.logger.html | 74 + .../functions/utils_dbUtils.packChange.html | 90 ++ .../functions/utils_dbUtils.saveToDb.html | 81 ++ .../utils_dbUtils.wrappedDeleteFromDb.html | 76 + .../utils_dbUtils.wrappedGetFromDb.html | 76 + .../utils_dbUtils.wrappedSaveToDb.html | 74 + docs/references/index.html | 78 ++ .../types_http_request_types.ApiRequest.html | 133 ++ ...es_http_request_types.ExtendedRequest.html | 120 ++ .../interfaces/types_task_Action.Action.html | 125 ++ ...task_ActionData.BroadcastTxActionData.html | 86 ++ ...ypes_task_ActionData.ClientActionData.html | 86 ++ ...pes_task_ActionData.GeneralActionData.html | 80 ++ .../types_task_ActionData.PushActionData.html | 107 ++ ...task_ActionEffect.BalanceActionEffect.html | 121 ++ ...task_ActionEffect.GeneralActionEffect.html | 82 ++ ...pes_task_ActionEffect.ParActionEffect.html | 93 ++ ...s_task_ActionEffect.PriceActionEffect.html | 107 ++ ...pes_task_ActionEffect.SeqActionEffect.html | 100 ++ ...task_ActionEffect.TxConfsActionEffect.html | 107 ++ .../interfaces/types_task_Task.Task.html | 103 ++ docs/references/modules.html | 60 + docs/references/modules/publishers_push.html | 62 + .../modules/types_http_request_types.html | 64 + .../modules/types_http_response_types.html | 69 + .../references/modules/types_task_Action.html | 67 + .../modules/types_task_ActionData.html | 86 ++ .../modules/types_task_ActionEffect.html | 92 ++ docs/references/modules/types_task_Task.html | 67 + .../references/modules/utils_HTTPHelpers.html | 64 + docs/references/modules/utils_dbUtils.html | 88 ++ .../types_task_ActionData.ActionData.html | 64 + .../types_task_ActionEffect.ActionEffect.html | 67 + .../types/utils_dbUtils.TaskDoc.html | 65 + ...types_http_response_types.statusCodes.html | 81 ++ .../variables/utils_dbUtils.dbTasks.html | 65 + 64 files changed, 5966 insertions(+) create mode 100644 docs/references/.nojekyll create mode 100644 docs/references/assets/highlight.css create mode 100644 docs/references/assets/main.js create mode 100644 docs/references/assets/search.js create mode 100644 docs/references/assets/style.css create mode 100644 docs/references/assets/widgets.png create mode 100644 docs/references/assets/widgets@2x.png create mode 100644 docs/references/functions/publishers_push.runPushPublisher.html create mode 100644 docs/references/functions/types_http_response_types.jsonResponse.html create mode 100644 docs/references/functions/types_http_response_types.statusResponse.html create mode 100644 docs/references/functions/types_task_Action.asAction.html create mode 100644 docs/references/functions/types_task_ActionData.asActionData.html create mode 100644 docs/references/functions/types_task_ActionData.asBroadcastTxActionData.html create mode 100644 docs/references/functions/types_task_ActionData.asClientActionData.html create mode 100644 docs/references/functions/types_task_ActionData.asGeneralActionData.html create mode 100644 docs/references/functions/types_task_ActionData.asPushActionData.html create mode 100644 docs/references/functions/types_task_ActionEffect.asActionEffect.html create mode 100644 docs/references/functions/types_task_ActionEffect.asBalanceActionEffect.html create mode 100644 docs/references/functions/types_task_ActionEffect.asParActionEffect.html create mode 100644 docs/references/functions/types_task_ActionEffect.asPriceActionEffect.html create mode 100644 docs/references/functions/types_task_ActionEffect.asSeqActionEffect.html create mode 100644 docs/references/functions/types_task_ActionEffect.asTxConfsActionEffect.html create mode 100644 docs/references/functions/types_task_Task.asTask.html create mode 100644 docs/references/functions/utils_HTTPHelpers.convertStringToArray.html create mode 100644 docs/references/functions/utils_HTTPHelpers.getQueryParamObject.html create mode 100644 docs/references/functions/utils_dbUtils.asTaskDoc.html create mode 100644 docs/references/functions/utils_dbUtils.deleteFromDb.html create mode 100644 docs/references/functions/utils_dbUtils.getFromDb.html create mode 100644 docs/references/functions/utils_dbUtils.logger.html create mode 100644 docs/references/functions/utils_dbUtils.packChange.html create mode 100644 docs/references/functions/utils_dbUtils.saveToDb.html create mode 100644 docs/references/functions/utils_dbUtils.wrappedDeleteFromDb.html create mode 100644 docs/references/functions/utils_dbUtils.wrappedGetFromDb.html create mode 100644 docs/references/functions/utils_dbUtils.wrappedSaveToDb.html create mode 100644 docs/references/index.html create mode 100644 docs/references/interfaces/types_http_request_types.ApiRequest.html create mode 100644 docs/references/interfaces/types_http_request_types.ExtendedRequest.html create mode 100644 docs/references/interfaces/types_task_Action.Action.html create mode 100644 docs/references/interfaces/types_task_ActionData.BroadcastTxActionData.html create mode 100644 docs/references/interfaces/types_task_ActionData.ClientActionData.html create mode 100644 docs/references/interfaces/types_task_ActionData.GeneralActionData.html create mode 100644 docs/references/interfaces/types_task_ActionData.PushActionData.html create mode 100644 docs/references/interfaces/types_task_ActionEffect.BalanceActionEffect.html create mode 100644 docs/references/interfaces/types_task_ActionEffect.GeneralActionEffect.html create mode 100644 docs/references/interfaces/types_task_ActionEffect.ParActionEffect.html create mode 100644 docs/references/interfaces/types_task_ActionEffect.PriceActionEffect.html create mode 100644 docs/references/interfaces/types_task_ActionEffect.SeqActionEffect.html create mode 100644 docs/references/interfaces/types_task_ActionEffect.TxConfsActionEffect.html create mode 100644 docs/references/interfaces/types_task_Task.Task.html create mode 100644 docs/references/modules.html create mode 100644 docs/references/modules/publishers_push.html create mode 100644 docs/references/modules/types_http_request_types.html create mode 100644 docs/references/modules/types_http_response_types.html create mode 100644 docs/references/modules/types_task_Action.html create mode 100644 docs/references/modules/types_task_ActionData.html create mode 100644 docs/references/modules/types_task_ActionEffect.html create mode 100644 docs/references/modules/types_task_Task.html create mode 100644 docs/references/modules/utils_HTTPHelpers.html create mode 100644 docs/references/modules/utils_dbUtils.html create mode 100644 docs/references/types/types_task_ActionData.ActionData.html create mode 100644 docs/references/types/types_task_ActionEffect.ActionEffect.html create mode 100644 docs/references/types/utils_dbUtils.TaskDoc.html create mode 100644 docs/references/variables/types_http_response_types.statusCodes.html create mode 100644 docs/references/variables/utils_dbUtils.dbTasks.html diff --git a/docs/references/.nojekyll b/docs/references/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/docs/references/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/references/assets/highlight.css b/docs/references/assets/highlight.css new file mode 100644 index 0000000..005cd66 --- /dev/null +++ b/docs/references/assets/highlight.css @@ -0,0 +1,36 @@ +:root { + --light-hl-0: #000000; + --dark-hl-0: #D4D4D4; + --light-hl-1: #008000; + --dark-hl-1: #6A9955; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +pre, code { background: var(--code-background); } diff --git a/docs/references/assets/main.js b/docs/references/assets/main.js new file mode 100644 index 0000000..c815b33 --- /dev/null +++ b/docs/references/assets/main.js @@ -0,0 +1,54 @@ +"use strict"; +(()=>{var Qe=Object.create;var ae=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var _e=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Me=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ce(e))!Re.call(t,i)&&i!==n&&ae(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Qe(Oe(t)):{},Me(e||!t||!t.__esModule?ae(n,"default",{value:t,enumerable:!0}):n,t));var de=_e((ce,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var h=t.utils.clone(n)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(r.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(n+=r[l+1]*i[h+1],l+=2,h+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),m=s.str.charAt(1),v;m in s.node.edges?v=s.node.edges[m]:(v=new t.TokenSet,s.node.edges[m]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ce=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});var le=[];function j(t,e){le.push({selector:e,constructor:t})}var Y=class{constructor(){this.createComponents(document.body)}createComponents(e){le.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r}),r.dataset.hasInstance=String(!0))})})}};var k=class{constructor(e){this.el=e.el}};var J=class{constructor(){this.listeners={}}addEventListener(e,n){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(n)}removeEventListener(e,n){if(!(e in this.listeners))return;let r=this.listeners[e];for(let i=0,s=r.length;i{let n=Date.now();return(...r)=>{n+e-Date.now()<0&&(t(...r),n=Date.now())}};var re=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.navigation=document.querySelector(".col-menu"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.searchInput=document.querySelector("#tsd-search input"),this.searchInput&&this.searchInput.addEventListener("focus",()=>{this.hideShowToolbar()}),this.onResize(),this.onScroll()}triggerResize(){let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let n=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(n)}onScroll(){this.scrollTop=window.scrollY||0;let n=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(n),this.hideShowToolbar()}hideShowToolbar(){let n=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0||!!this.searchInput&&this.searchInput===document.activeElement,n!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),this.navigation?.classList.toggle("col-menu--hide")),this.lastY=this.scrollTop}},R=re;R.instance=new re;var X=class extends k{constructor(n){super(n);this.anchors=[];this.index=-1;R.instance.addEventListener("resize",()=>this.onResize()),R.instance.addEventListener("scroll",r=>this.onScroll(r)),this.createAnchors()}createAnchors(){let n=window.location.href;n.indexOf("#")!=-1&&(n=n.substring(0,n.indexOf("#"))),this.el.querySelectorAll("a").forEach(r=>{let i=r.href;if(i.indexOf("#")==-1||i.substring(0,n.length)!=n)return;let s=i.substring(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=r.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let n;for(let i=0,s=this.anchors.length;ii.position-s.position);let r=new CustomEvent("scroll",{detail:{scrollTop:R.instance.scrollTop}});this.onScroll(r)}onScroll(n){let r=n.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>r;)o-=1;for(;o-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var ue=(t,e=100)=>{let n;return(...r)=>{clearTimeout(n),n=setTimeout(()=>t(r),e)}};var me=De(de());function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let n=document.querySelector("#tsd-search input"),r=document.querySelector("#tsd-search .results");if(!n||!r)throw new Error("The input field or the result list wrapper was not found");let i=!1;r.addEventListener("mousedown",()=>i=!0),r.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),n.addEventListener("focus",()=>t.classList.add("has-focus")),n.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Fe(t,r,n,s)}function Fe(t,e,n,r){n.addEventListener("input",ue(()=>{Ae(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?fe(e,-1):s.key==="ArrowDown"?fe(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function He(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=me.Index.load(window.searchData.index))}function Ae(t,e,n,r){if(He(r,t),!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s=i?r.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o${pe(u.parent,i)}.${l}`);let h=document.createElement("li");h.classList.value=u.classes??"";let m=document.createElement("a");m.href=r.base+u.url,m.innerHTML=l,h.append(m),e.appendChild(h)}}function fe(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function pe(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ie(t.substring(s,o)),`${ie(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ie(t.substring(s))),i.join("")}var Ne={"&":"&","<":"<",">":">","'":"'",'"':"""};function ie(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var F="mousedown",ye="mousemove",B="mouseup",Z={x:0,y:0},ge=!1,se=!1,je=!1,H=!1,xe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(xe?"is-mobile":"not-mobile");xe&&"ontouchstart"in document.documentElement&&(je=!0,F="touchstart",ye="touchmove",B="touchend");document.addEventListener(F,t=>{se=!0,H=!1;let e=F=="touchstart"?t.targetTouches[0]:t;Z.y=e.pageY||0,Z.x=e.pageX||0});document.addEventListener(ye,t=>{if(!!se&&!H){let e=F=="touchstart"?t.targetTouches[0]:t,n=Z.x-(e.pageX||0),r=Z.y-(e.pageY||0);H=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{se=!1});document.addEventListener("click",t=>{ge&&(t.preventDefault(),t.stopImmediatePropagation(),ge=!1)});var K=class extends k{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){H||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!H&&this.active&&n.target.closest(".col-menu")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var oe;try{oe=localStorage}catch{oe={getItem(){return null},setItem(){}}}var Q=oe;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var ee=class extends k{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var te=class extends k{constructor(n){super(n);this.calculateHeights(),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.textContent.replace(/\s+/g,"-").toLowerCase()}`,this.setLocalStorage(this.fromLocalStorage(),!0),this.summary.addEventListener("click",r=>this.toggleVisibility(r)),this.icon.style.transform=this.getIconRotation()}getIconRotation(n=this.el.open){return`rotate(${n?0:-90}deg)`}calculateHeights(){let n=this.el.open,{position:r,left:i}=this.el.style;this.el.style.position="fixed",this.el.style.left="-9999px",this.el.open=!0,this.expandedHeight=this.el.offsetHeight+"px",this.el.open=!1,this.collapsedHeight=this.el.offsetHeight+"px",this.el.open=n,this.el.style.height=n?this.expandedHeight:this.collapsedHeight,this.el.style.position=r,this.el.style.left=i}toggleVisibility(n){n.preventDefault(),this.el.style.overflow="hidden",this.el.open?this.collapse():this.expand()}expand(n=!0){this.el.open=!0,this.animate(this.collapsedHeight,this.expandedHeight,{opening:!0,duration:n?300:0})}collapse(n=!0){this.animate(this.expandedHeight,this.collapsedHeight,{opening:!1,duration:n?300:0})}animate(n,r,{opening:i,duration:s=300}){if(this.animation)return;let o={duration:s,easing:"ease"};this.animation=this.el.animate({height:[n,r]},o),this.icon.animate({transform:[this.icon.style.transform||this.getIconRotation(!i),this.getIconRotation(i)]},o).addEventListener("finish",()=>{this.icon.style.transform=this.getIconRotation(i)}),this.animation.addEventListener("finish",()=>this.animationEnd(i))}animationEnd(n){this.el.open=n,this.animation=void 0,this.el.style.height="auto",this.el.style.overflow="visible",this.setLocalStorage(n)}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.open}setLocalStorage(n,r=!1){this.fromLocalStorage()===n&&!r||(Q.setItem(this.key,n.toString()),this.el.open=n,this.handleValueChange(r))}handleValueChange(n=!1){this.fromLocalStorage()===this.el.open&&!n||(this.fromLocalStorage()?this.expand(!1):this.collapse(!1))}};function be(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,Ee(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),Ee(t.value)})}function Ee(t){document.documentElement.dataset.theme=t}ve();j(X,".menu-highlight");j(K,"a[data-toggle]");j(te,".tsd-index-accordion");j(ee,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("theme");Se&&be(Se);var Be=new Y;Object.defineProperty(window,"app",{value:Be});})(); +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ diff --git a/docs/references/assets/search.js b/docs/references/assets/search.js new file mode 100644 index 0000000..b88a5d7 --- /dev/null +++ b/docs/references/assets/search.js @@ -0,0 +1 @@ +window.searchData = JSON.parse("{\"kinds\":{\"2\":\"Module\",\"32\":\"Variable\",\"64\":\"Function\",\"256\":\"Interface\",\"1024\":\"Property\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\"},\"rows\":[{\"kind\":2,\"name\":\"types/http/request-types\",\"url\":\"modules/types_http_request_types.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":256,\"name\":\"ExtendedRequest\",\"url\":\"interfaces/types_http_request_types.ExtendedRequest.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/http/request-types\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/types_http_request_types.ExtendedRequest.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/http/request-types.ExtendedRequest\"},{\"kind\":256,\"name\":\"ApiRequest\",\"url\":\"interfaces/types_http_request_types.ApiRequest.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/http/request-types\"},{\"kind\":1024,\"name\":\"apiKey\",\"url\":\"interfaces/types_http_request_types.ApiRequest.html#apiKey\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/http/request-types.ApiRequest\"},{\"kind\":1024,\"name\":\"payload\",\"url\":\"interfaces/types_http_request_types.ApiRequest.html#payload\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/http/request-types.ApiRequest\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/types_http_request_types.ApiRequest.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/http/request-types.ApiRequest\"},{\"kind\":2,\"name\":\"types/http/response-types\",\"url\":\"modules/types_http_response_types.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":64,\"name\":\"jsonResponse\",\"url\":\"functions/types_http_response_types.jsonResponse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/http/response-types\"},{\"kind\":64,\"name\":\"statusResponse\",\"url\":\"functions/types_http_response_types.statusResponse.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/http/response-types\"},{\"kind\":32,\"name\":\"statusCodes\",\"url\":\"variables/types_http_response_types.statusCodes.html\",\"classes\":\"tsd-kind-variable tsd-parent-kind-module\",\"parent\":\"types/http/response-types\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-variable\",\"parent\":\"types/http/response-types.statusCodes\"},{\"kind\":1024,\"name\":\"SUCCESS\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.SUCCESS\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type\"},{\"kind\":1024,\"name\":\"httpStatus\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-3.httpStatus-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type.__type\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-3.message-2\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type.__type\"},{\"kind\":1024,\"name\":\"INTERNAL_SERVER_ERROR\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.INTERNAL_SERVER_ERROR\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type\"},{\"kind\":1024,\"name\":\"httpStatus\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-1.httpStatus\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type.__type\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-1.message\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type.__type\"},{\"kind\":1024,\"name\":\"PAGE_NOT_FOUND\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.PAGE_NOT_FOUND\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type\"},{\"kind\":1024,\"name\":\"httpStatus\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-2.httpStatus-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type.__type\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"variables/types_http_response_types.statusCodes.html#__type.__type-2.message-1\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"types/http/response-types.statusCodes.__type.__type\"},{\"kind\":2,\"name\":\"types/task/Action\",\"url\":\"modules/types_task_Action.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":256,\"name\":\"Action\",\"url\":\"interfaces/types_task_Action.Action.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/Action\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/types_task_Action.Action.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Action.Action\"},{\"kind\":1024,\"name\":\"repeat\",\"url\":\"interfaces/types_task_Action.Action.html#repeat\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Action.Action\"},{\"kind\":1024,\"name\":\"inProgress\",\"url\":\"interfaces/types_task_Action.Action.html#inProgress\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Action.Action\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"interfaces/types_task_Action.Action.html#data\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Action.Action\"},{\"kind\":64,\"name\":\"asAction\",\"url\":\"functions/types_task_Action.asAction.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/Action\"},{\"kind\":2,\"name\":\"types/task/ActionData\",\"url\":\"modules/types_task_ActionData.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":256,\"name\":\"GeneralActionData\",\"url\":\"interfaces/types_task_ActionData.GeneralActionData.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":1024,\"name\":\"additionalData\",\"url\":\"interfaces/types_task_ActionData.GeneralActionData.html#additionalData\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.GeneralActionData\"},{\"kind\":256,\"name\":\"PushActionData\",\"url\":\"interfaces/types_task_ActionData.PushActionData.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":1024,\"name\":\"apiKey\",\"url\":\"interfaces/types_task_ActionData.PushActionData.html#apiKey\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.PushActionData\"},{\"kind\":1024,\"name\":\"title\",\"url\":\"interfaces/types_task_ActionData.PushActionData.html#title\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.PushActionData\"},{\"kind\":1024,\"name\":\"body\",\"url\":\"interfaces/types_task_ActionData.PushActionData.html#body\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.PushActionData\"},{\"kind\":1024,\"name\":\"tokenIds\",\"url\":\"interfaces/types_task_ActionData.PushActionData.html#tokenIds\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.PushActionData\"},{\"kind\":1024,\"name\":\"additionalData\",\"url\":\"interfaces/types_task_ActionData.PushActionData.html#additionalData\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionData.PushActionData\"},{\"kind\":256,\"name\":\"BroadcastTxActionData\",\"url\":\"interfaces/types_task_ActionData.BroadcastTxActionData.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":1024,\"name\":\"SOMETHING\",\"url\":\"interfaces/types_task_ActionData.BroadcastTxActionData.html#SOMETHING\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.BroadcastTxActionData\"},{\"kind\":1024,\"name\":\"additionalData\",\"url\":\"interfaces/types_task_ActionData.BroadcastTxActionData.html#additionalData\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionData.BroadcastTxActionData\"},{\"kind\":256,\"name\":\"ClientActionData\",\"url\":\"interfaces/types_task_ActionData.ClientActionData.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":1024,\"name\":\"SOMETHING\",\"url\":\"interfaces/types_task_ActionData.ClientActionData.html#SOMETHING\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionData.ClientActionData\"},{\"kind\":1024,\"name\":\"additionalData\",\"url\":\"interfaces/types_task_ActionData.ClientActionData.html#additionalData\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionData.ClientActionData\"},{\"kind\":4194304,\"name\":\"ActionData\",\"url\":\"types/types_task_ActionData.ActionData.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":64,\"name\":\"asGeneralActionData\",\"url\":\"functions/types_task_ActionData.asGeneralActionData.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":64,\"name\":\"asPushActionData\",\"url\":\"functions/types_task_ActionData.asPushActionData.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":64,\"name\":\"asBroadcastTxActionData\",\"url\":\"functions/types_task_ActionData.asBroadcastTxActionData.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":64,\"name\":\"asClientActionData\",\"url\":\"functions/types_task_ActionData.asClientActionData.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":64,\"name\":\"asActionData\",\"url\":\"functions/types_task_ActionData.asActionData.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionData\"},{\"kind\":2,\"name\":\"types/task/ActionEffect\",\"url\":\"modules/types_task_ActionEffect.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":256,\"name\":\"GeneralActionEffect\",\"url\":\"interfaces/types_task_ActionEffect.GeneralActionEffect.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":1024,\"name\":\"completed\",\"url\":\"interfaces/types_task_ActionEffect.GeneralActionEffect.html#completed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.GeneralActionEffect\"},{\"kind\":256,\"name\":\"SeqActionEffect\",\"url\":\"interfaces/types_task_ActionEffect.SeqActionEffect.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/types_task_ActionEffect.SeqActionEffect.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.SeqActionEffect\"},{\"kind\":1024,\"name\":\"opIndex\",\"url\":\"interfaces/types_task_ActionEffect.SeqActionEffect.html#opIndex\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.SeqActionEffect\"},{\"kind\":1024,\"name\":\"childEffect\",\"url\":\"interfaces/types_task_ActionEffect.SeqActionEffect.html#childEffect\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.SeqActionEffect\"},{\"kind\":1024,\"name\":\"completed\",\"url\":\"interfaces/types_task_ActionEffect.SeqActionEffect.html#completed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionEffect.SeqActionEffect\"},{\"kind\":256,\"name\":\"ParActionEffect\",\"url\":\"interfaces/types_task_ActionEffect.ParActionEffect.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/types_task_ActionEffect.ParActionEffect.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.ParActionEffect\"},{\"kind\":1024,\"name\":\"childEffects\",\"url\":\"interfaces/types_task_ActionEffect.ParActionEffect.html#childEffects\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.ParActionEffect\"},{\"kind\":1024,\"name\":\"completed\",\"url\":\"interfaces/types_task_ActionEffect.ParActionEffect.html#completed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionEffect.ParActionEffect\"},{\"kind\":256,\"name\":\"BalanceActionEffect\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":1024,\"name\":\"address\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#address\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":1024,\"name\":\"aboveAmount\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#aboveAmount\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":1024,\"name\":\"belowAmount\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#belowAmount\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":1024,\"name\":\"walletId\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#walletId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":1024,\"name\":\"tokenId\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#tokenId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":1024,\"name\":\"completed\",\"url\":\"interfaces/types_task_ActionEffect.BalanceActionEffect.html#completed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionEffect.BalanceActionEffect\"},{\"kind\":256,\"name\":\"TxConfsActionEffect\",\"url\":\"interfaces/types_task_ActionEffect.TxConfsActionEffect.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/types_task_ActionEffect.TxConfsActionEffect.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.TxConfsActionEffect\"},{\"kind\":1024,\"name\":\"txId\",\"url\":\"interfaces/types_task_ActionEffect.TxConfsActionEffect.html#txId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.TxConfsActionEffect\"},{\"kind\":1024,\"name\":\"walletId\",\"url\":\"interfaces/types_task_ActionEffect.TxConfsActionEffect.html#walletId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.TxConfsActionEffect\"},{\"kind\":1024,\"name\":\"confirmations\",\"url\":\"interfaces/types_task_ActionEffect.TxConfsActionEffect.html#confirmations\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.TxConfsActionEffect\"},{\"kind\":1024,\"name\":\"completed\",\"url\":\"interfaces/types_task_ActionEffect.TxConfsActionEffect.html#completed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionEffect.TxConfsActionEffect\"},{\"kind\":256,\"name\":\"PriceActionEffect\",\"url\":\"interfaces/types_task_ActionEffect.PriceActionEffect.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/types_task_ActionEffect.PriceActionEffect.html#type\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.PriceActionEffect\"},{\"kind\":1024,\"name\":\"currencyPair\",\"url\":\"interfaces/types_task_ActionEffect.PriceActionEffect.html#currencyPair\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.PriceActionEffect\"},{\"kind\":1024,\"name\":\"aboveRate\",\"url\":\"interfaces/types_task_ActionEffect.PriceActionEffect.html#aboveRate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.PriceActionEffect\"},{\"kind\":1024,\"name\":\"belowRate\",\"url\":\"interfaces/types_task_ActionEffect.PriceActionEffect.html#belowRate\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/ActionEffect.PriceActionEffect\"},{\"kind\":1024,\"name\":\"completed\",\"url\":\"interfaces/types_task_ActionEffect.PriceActionEffect.html#completed\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface tsd-is-inherited\",\"parent\":\"types/task/ActionEffect.PriceActionEffect\"},{\"kind\":4194304,\"name\":\"ActionEffect\",\"url\":\"types/types_task_ActionEffect.ActionEffect.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":64,\"name\":\"asSeqActionEffect\",\"url\":\"functions/types_task_ActionEffect.asSeqActionEffect.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":64,\"name\":\"asParActionEffect\",\"url\":\"functions/types_task_ActionEffect.asParActionEffect.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":64,\"name\":\"asBalanceActionEffect\",\"url\":\"functions/types_task_ActionEffect.asBalanceActionEffect.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":64,\"name\":\"asTxConfsActionEffect\",\"url\":\"functions/types_task_ActionEffect.asTxConfsActionEffect.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":64,\"name\":\"asPriceActionEffect\",\"url\":\"functions/types_task_ActionEffect.asPriceActionEffect.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":64,\"name\":\"asActionEffect\",\"url\":\"functions/types_task_ActionEffect.asActionEffect.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/ActionEffect\"},{\"kind\":2,\"name\":\"types/task/Task\",\"url\":\"modules/types_task_Task.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":256,\"name\":\"Task\",\"url\":\"interfaces/types_task_Task.Task.html\",\"classes\":\"tsd-kind-interface tsd-parent-kind-module\",\"parent\":\"types/task/Task\"},{\"kind\":1024,\"name\":\"taskId\",\"url\":\"interfaces/types_task_Task.Task.html#taskId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Task.Task\"},{\"kind\":1024,\"name\":\"userId\",\"url\":\"interfaces/types_task_Task.Task.html#userId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Task.Task\"},{\"kind\":1024,\"name\":\"actionEffects\",\"url\":\"interfaces/types_task_Task.Task.html#actionEffects\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Task.Task\"},{\"kind\":1024,\"name\":\"action\",\"url\":\"interfaces/types_task_Task.Task.html#action\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"types/task/Task.Task\"},{\"kind\":64,\"name\":\"asTask\",\"url\":\"functions/types_task_Task.asTask.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"types/task/Task\"},{\"kind\":2,\"name\":\"utils/HTTPHelpers\",\"url\":\"modules/utils_HTTPHelpers.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":64,\"name\":\"getQueryParamObject\",\"url\":\"functions/utils_HTTPHelpers.getQueryParamObject.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/HTTPHelpers\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/utils_HTTPHelpers.getQueryParamObject.html#getQueryParamObject.__type\",\"classes\":\"tsd-kind-type-literal\",\"parent\":\"utils/HTTPHelpers.getQueryParamObject.getQueryParamObject\"},{\"kind\":64,\"name\":\"convertStringToArray\",\"url\":\"functions/utils_HTTPHelpers.convertStringToArray.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/HTTPHelpers\"},{\"kind\":2,\"name\":\"utils/dbUtils\",\"url\":\"modules/utils_dbUtils.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":4194304,\"name\":\"TaskDoc\",\"url\":\"types/utils_dbUtils.TaskDoc.html\",\"classes\":\"tsd-kind-type-alias tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"asTaskDoc\",\"url\":\"functions/utils_dbUtils.asTaskDoc.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":32,\"name\":\"dbTasks\",\"url\":\"variables/utils_dbUtils.dbTasks.html\",\"classes\":\"tsd-kind-variable tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"wrappedSaveToDb\",\"url\":\"functions/utils_dbUtils.wrappedSaveToDb.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"wrappedGetFromDb\",\"url\":\"functions/utils_dbUtils.wrappedGetFromDb.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"wrappedDeleteFromDb\",\"url\":\"functions/utils_dbUtils.wrappedDeleteFromDb.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"saveToDb\",\"url\":\"functions/utils_dbUtils.saveToDb.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"deleteFromDb\",\"url\":\"functions/utils_dbUtils.deleteFromDb.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"getFromDb\",\"url\":\"functions/utils_dbUtils.getFromDb.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"logger\",\"url\":\"functions/utils_dbUtils.logger.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":64,\"name\":\"packChange\",\"url\":\"functions/utils_dbUtils.packChange.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"utils/dbUtils\"},{\"kind\":2,\"name\":\"publishers/push\",\"url\":\"modules/publishers_push.html\",\"classes\":\"tsd-kind-module\"},{\"kind\":64,\"name\":\"runPushPublisher\",\"url\":\"functions/publishers_push.runPushPublisher.html\",\"classes\":\"tsd-kind-function tsd-parent-kind-module\",\"parent\":\"publishers/push\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,31.226,1,27.565]],[\"comment/0\",[]],[\"name/1\",[2,43.871]],[\"comment/1\",[]],[\"name/2\",[3,35.339]],[\"comment/2\",[]],[\"name/3\",[4,43.871]],[\"comment/3\",[]],[\"name/4\",[5,38.727]],[\"comment/4\",[]],[\"name/5\",[6,43.871]],[\"comment/5\",[]],[\"name/6\",[3,35.339]],[\"comment/6\",[]],[\"name/7\",[1,27.565,7,31.226]],[\"comment/7\",[]],[\"name/8\",[8,43.871]],[\"comment/8\",[]],[\"name/9\",[9,43.871]],[\"comment/9\",[]],[\"name/10\",[10,43.871]],[\"comment/10\",[]],[\"name/11\",[11,30.788]],[\"comment/11\",[]],[\"name/12\",[12,43.871]],[\"comment/12\",[]],[\"name/13\",[11,30.788]],[\"comment/13\",[]],[\"name/14\",[13,35.339]],[\"comment/14\",[]],[\"name/15\",[14,35.339]],[\"comment/15\",[]],[\"name/16\",[15,43.871]],[\"comment/16\",[]],[\"name/17\",[11,30.788]],[\"comment/17\",[]],[\"name/18\",[13,35.339]],[\"comment/18\",[]],[\"name/19\",[14,35.339]],[\"comment/19\",[]],[\"name/20\",[16,43.871]],[\"comment/20\",[]],[\"name/21\",[11,30.788]],[\"comment/21\",[]],[\"name/22\",[13,35.339]],[\"comment/22\",[]],[\"name/23\",[14,35.339]],[\"comment/23\",[]],[\"name/24\",[17,43.871]],[\"comment/24\",[]],[\"name/25\",[18,38.727]],[\"comment/25\",[]],[\"name/26\",[19,29.106]],[\"comment/26\",[]],[\"name/27\",[20,43.871]],[\"comment/27\",[]],[\"name/28\",[21,43.871]],[\"comment/28\",[]],[\"name/29\",[22,43.871]],[\"comment/29\",[]],[\"name/30\",[23,43.871]],[\"comment/30\",[]],[\"name/31\",[24,43.871]],[\"comment/31\",[]],[\"name/32\",[25,43.871]],[\"comment/32\",[]],[\"name/33\",[26,32.808]],[\"comment/33\",[]],[\"name/34\",[27,43.871]],[\"comment/34\",[]],[\"name/35\",[5,38.727]],[\"comment/35\",[]],[\"name/36\",[28,43.871]],[\"comment/36\",[]],[\"name/37\",[3,35.339]],[\"comment/37\",[]],[\"name/38\",[29,43.871]],[\"comment/38\",[]],[\"name/39\",[26,32.808]],[\"comment/39\",[]],[\"name/40\",[30,43.871]],[\"comment/40\",[]],[\"name/41\",[31,38.727]],[\"comment/41\",[]],[\"name/42\",[26,32.808]],[\"comment/42\",[]],[\"name/43\",[32,43.871]],[\"comment/43\",[]],[\"name/44\",[31,38.727]],[\"comment/44\",[]],[\"name/45\",[26,32.808]],[\"comment/45\",[]],[\"name/46\",[33,43.871]],[\"comment/46\",[]],[\"name/47\",[34,43.871]],[\"comment/47\",[]],[\"name/48\",[35,43.871]],[\"comment/48\",[]],[\"name/49\",[36,43.871]],[\"comment/49\",[]],[\"name/50\",[37,43.871]],[\"comment/50\",[]],[\"name/51\",[38,43.871]],[\"comment/51\",[]],[\"name/52\",[39,43.871]],[\"comment/52\",[]],[\"name/53\",[40,43.871]],[\"comment/53\",[]],[\"name/54\",[41,29.106]],[\"comment/54\",[]],[\"name/55\",[42,43.871]],[\"comment/55\",[]],[\"name/56\",[19,29.106]],[\"comment/56\",[]],[\"name/57\",[43,43.871]],[\"comment/57\",[]],[\"name/58\",[44,43.871]],[\"comment/58\",[]],[\"name/59\",[41,29.106]],[\"comment/59\",[]],[\"name/60\",[45,43.871]],[\"comment/60\",[]],[\"name/61\",[19,29.106]],[\"comment/61\",[]],[\"name/62\",[46,43.871]],[\"comment/62\",[]],[\"name/63\",[41,29.106]],[\"comment/63\",[]],[\"name/64\",[47,43.871]],[\"comment/64\",[]],[\"name/65\",[19,29.106]],[\"comment/65\",[]],[\"name/66\",[48,43.871]],[\"comment/66\",[]],[\"name/67\",[49,43.871]],[\"comment/67\",[]],[\"name/68\",[50,43.871]],[\"comment/68\",[]],[\"name/69\",[51,38.727]],[\"comment/69\",[]],[\"name/70\",[52,43.871]],[\"comment/70\",[]],[\"name/71\",[41,29.106]],[\"comment/71\",[]],[\"name/72\",[53,43.871]],[\"comment/72\",[]],[\"name/73\",[19,29.106]],[\"comment/73\",[]],[\"name/74\",[54,43.871]],[\"comment/74\",[]],[\"name/75\",[51,38.727]],[\"comment/75\",[]],[\"name/76\",[55,43.871]],[\"comment/76\",[]],[\"name/77\",[41,29.106]],[\"comment/77\",[]],[\"name/78\",[56,43.871]],[\"comment/78\",[]],[\"name/79\",[19,29.106]],[\"comment/79\",[]],[\"name/80\",[57,43.871]],[\"comment/80\",[]],[\"name/81\",[58,43.871]],[\"comment/81\",[]],[\"name/82\",[59,43.871]],[\"comment/82\",[]],[\"name/83\",[41,29.106]],[\"comment/83\",[]],[\"name/84\",[60,43.871]],[\"comment/84\",[]],[\"name/85\",[61,43.871]],[\"comment/85\",[]],[\"name/86\",[62,43.871]],[\"comment/86\",[]],[\"name/87\",[63,43.871]],[\"comment/87\",[]],[\"name/88\",[64,43.871]],[\"comment/88\",[]],[\"name/89\",[65,43.871]],[\"comment/89\",[]],[\"name/90\",[66,43.871]],[\"comment/90\",[]],[\"name/91\",[67,43.871]],[\"comment/91\",[]],[\"name/92\",[68,43.871]],[\"comment/92\",[]],[\"name/93\",[69,43.871]],[\"comment/93\",[]],[\"name/94\",[70,43.871]],[\"comment/94\",[]],[\"name/95\",[71,43.871]],[\"comment/95\",[]],[\"name/96\",[18,38.727]],[\"comment/96\",[]],[\"name/97\",[72,43.871]],[\"comment/97\",[]],[\"name/98\",[73,43.871]],[\"comment/98\",[]],[\"name/99\",[74,43.871]],[\"comment/99\",[]],[\"name/100\",[11,30.788]],[\"comment/100\",[]],[\"name/101\",[75,43.871]],[\"comment/101\",[]],[\"name/102\",[76,43.871]],[\"comment/102\",[]],[\"name/103\",[77,43.871]],[\"comment/103\",[]],[\"name/104\",[78,43.871]],[\"comment/104\",[]],[\"name/105\",[79,43.871]],[\"comment/105\",[]],[\"name/106\",[80,43.871]],[\"comment/106\",[]],[\"name/107\",[81,43.871]],[\"comment/107\",[]],[\"name/108\",[82,43.871]],[\"comment/108\",[]],[\"name/109\",[83,43.871]],[\"comment/109\",[]],[\"name/110\",[84,43.871]],[\"comment/110\",[]],[\"name/111\",[85,43.871]],[\"comment/111\",[]],[\"name/112\",[86,43.871]],[\"comment/112\",[]],[\"name/113\",[87,43.871]],[\"comment/113\",[]],[\"name/114\",[88,43.871]],[\"comment/114\",[]],[\"name/115\",[89,43.871]],[\"comment/115\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":11,\"name\":{\"11\":{},\"13\":{},\"17\":{},\"21\":{},\"100\":{}},\"comment\":{}}],[\"aboveamount\",{\"_index\":49,\"name\":{\"67\":{}},\"comment\":{}}],[\"aboverate\",{\"_index\":58,\"name\":{\"81\":{}},\"comment\":{}}],[\"action\",{\"_index\":18,\"name\":{\"25\":{},\"96\":{}},\"comment\":{}}],[\"actiondata\",{\"_index\":33,\"name\":{\"46\":{}},\"comment\":{}}],[\"actioneffect\",{\"_index\":60,\"name\":{\"84\":{}},\"comment\":{}}],[\"actioneffects\",{\"_index\":71,\"name\":{\"95\":{}},\"comment\":{}}],[\"additionaldata\",{\"_index\":26,\"name\":{\"33\":{},\"39\":{},\"42\":{},\"45\":{}},\"comment\":{}}],[\"address\",{\"_index\":48,\"name\":{\"66\":{}},\"comment\":{}}],[\"apikey\",{\"_index\":5,\"name\":{\"4\":{},\"35\":{}},\"comment\":{}}],[\"apirequest\",{\"_index\":4,\"name\":{\"3\":{}},\"comment\":{}}],[\"asaction\",{\"_index\":23,\"name\":{\"30\":{}},\"comment\":{}}],[\"asactiondata\",{\"_index\":38,\"name\":{\"51\":{}},\"comment\":{}}],[\"asactioneffect\",{\"_index\":66,\"name\":{\"90\":{}},\"comment\":{}}],[\"asbalanceactioneffect\",{\"_index\":63,\"name\":{\"87\":{}},\"comment\":{}}],[\"asbroadcasttxactiondata\",{\"_index\":36,\"name\":{\"49\":{}},\"comment\":{}}],[\"asclientactiondata\",{\"_index\":37,\"name\":{\"50\":{}},\"comment\":{}}],[\"asgeneralactiondata\",{\"_index\":34,\"name\":{\"47\":{}},\"comment\":{}}],[\"asparactioneffect\",{\"_index\":62,\"name\":{\"86\":{}},\"comment\":{}}],[\"aspriceactioneffect\",{\"_index\":65,\"name\":{\"89\":{}},\"comment\":{}}],[\"aspushactiondata\",{\"_index\":35,\"name\":{\"48\":{}},\"comment\":{}}],[\"asseqactioneffect\",{\"_index\":61,\"name\":{\"85\":{}},\"comment\":{}}],[\"astask\",{\"_index\":72,\"name\":{\"97\":{}},\"comment\":{}}],[\"astaskdoc\",{\"_index\":78,\"name\":{\"104\":{}},\"comment\":{}}],[\"astxconfsactioneffect\",{\"_index\":64,\"name\":{\"88\":{}},\"comment\":{}}],[\"balanceactioneffect\",{\"_index\":47,\"name\":{\"64\":{}},\"comment\":{}}],[\"belowamount\",{\"_index\":50,\"name\":{\"68\":{}},\"comment\":{}}],[\"belowrate\",{\"_index\":59,\"name\":{\"82\":{}},\"comment\":{}}],[\"body\",{\"_index\":3,\"name\":{\"2\":{},\"6\":{},\"37\":{}},\"comment\":{}}],[\"broadcasttxactiondata\",{\"_index\":30,\"name\":{\"40\":{}},\"comment\":{}}],[\"childeffect\",{\"_index\":44,\"name\":{\"58\":{}},\"comment\":{}}],[\"childeffects\",{\"_index\":46,\"name\":{\"62\":{}},\"comment\":{}}],[\"clientactiondata\",{\"_index\":32,\"name\":{\"43\":{}},\"comment\":{}}],[\"completed\",{\"_index\":41,\"name\":{\"54\":{},\"59\":{},\"63\":{},\"71\":{},\"77\":{},\"83\":{}},\"comment\":{}}],[\"confirmations\",{\"_index\":55,\"name\":{\"76\":{}},\"comment\":{}}],[\"convertstringtoarray\",{\"_index\":75,\"name\":{\"101\":{}},\"comment\":{}}],[\"currencypair\",{\"_index\":57,\"name\":{\"80\":{}},\"comment\":{}}],[\"data\",{\"_index\":22,\"name\":{\"29\":{}},\"comment\":{}}],[\"dbtasks\",{\"_index\":79,\"name\":{\"105\":{}},\"comment\":{}}],[\"deletefromdb\",{\"_index\":84,\"name\":{\"110\":{}},\"comment\":{}}],[\"extendedrequest\",{\"_index\":2,\"name\":{\"1\":{}},\"comment\":{}}],[\"generalactiondata\",{\"_index\":25,\"name\":{\"32\":{}},\"comment\":{}}],[\"generalactioneffect\",{\"_index\":40,\"name\":{\"53\":{}},\"comment\":{}}],[\"getfromdb\",{\"_index\":85,\"name\":{\"111\":{}},\"comment\":{}}],[\"getqueryparamobject\",{\"_index\":74,\"name\":{\"99\":{}},\"comment\":{}}],[\"httpstatus\",{\"_index\":13,\"name\":{\"14\":{},\"18\":{},\"22\":{}},\"comment\":{}}],[\"inprogress\",{\"_index\":21,\"name\":{\"28\":{}},\"comment\":{}}],[\"internal_server_error\",{\"_index\":15,\"name\":{\"16\":{}},\"comment\":{}}],[\"jsonresponse\",{\"_index\":8,\"name\":{\"8\":{}},\"comment\":{}}],[\"logger\",{\"_index\":86,\"name\":{\"112\":{}},\"comment\":{}}],[\"message\",{\"_index\":14,\"name\":{\"15\":{},\"19\":{},\"23\":{}},\"comment\":{}}],[\"opindex\",{\"_index\":43,\"name\":{\"57\":{}},\"comment\":{}}],[\"packchange\",{\"_index\":87,\"name\":{\"113\":{}},\"comment\":{}}],[\"page_not_found\",{\"_index\":16,\"name\":{\"20\":{}},\"comment\":{}}],[\"paractioneffect\",{\"_index\":45,\"name\":{\"60\":{}},\"comment\":{}}],[\"payload\",{\"_index\":6,\"name\":{\"5\":{}},\"comment\":{}}],[\"priceactioneffect\",{\"_index\":56,\"name\":{\"78\":{}},\"comment\":{}}],[\"publishers/push\",{\"_index\":88,\"name\":{\"114\":{}},\"comment\":{}}],[\"pushactiondata\",{\"_index\":27,\"name\":{\"34\":{}},\"comment\":{}}],[\"repeat\",{\"_index\":20,\"name\":{\"27\":{}},\"comment\":{}}],[\"runpushpublisher\",{\"_index\":89,\"name\":{\"115\":{}},\"comment\":{}}],[\"savetodb\",{\"_index\":83,\"name\":{\"109\":{}},\"comment\":{}}],[\"seqactioneffect\",{\"_index\":42,\"name\":{\"55\":{}},\"comment\":{}}],[\"something\",{\"_index\":31,\"name\":{\"41\":{},\"44\":{}},\"comment\":{}}],[\"statuscodes\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"statusresponse\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"success\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"task\",{\"_index\":68,\"name\":{\"92\":{}},\"comment\":{}}],[\"taskdoc\",{\"_index\":77,\"name\":{\"103\":{}},\"comment\":{}}],[\"taskid\",{\"_index\":69,\"name\":{\"93\":{}},\"comment\":{}}],[\"title\",{\"_index\":28,\"name\":{\"36\":{}},\"comment\":{}}],[\"tokenid\",{\"_index\":52,\"name\":{\"70\":{}},\"comment\":{}}],[\"tokenids\",{\"_index\":29,\"name\":{\"38\":{}},\"comment\":{}}],[\"txconfsactioneffect\",{\"_index\":53,\"name\":{\"72\":{}},\"comment\":{}}],[\"txid\",{\"_index\":54,\"name\":{\"74\":{}},\"comment\":{}}],[\"type\",{\"_index\":19,\"name\":{\"26\":{},\"56\":{},\"61\":{},\"65\":{},\"73\":{},\"79\":{}},\"comment\":{}}],[\"types\",{\"_index\":1,\"name\":{\"0\":{},\"7\":{}},\"comment\":{}}],[\"types/http/request\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"types/http/response\",{\"_index\":7,\"name\":{\"7\":{}},\"comment\":{}}],[\"types/task/action\",{\"_index\":17,\"name\":{\"24\":{}},\"comment\":{}}],[\"types/task/actiondata\",{\"_index\":24,\"name\":{\"31\":{}},\"comment\":{}}],[\"types/task/actioneffect\",{\"_index\":39,\"name\":{\"52\":{}},\"comment\":{}}],[\"types/task/task\",{\"_index\":67,\"name\":{\"91\":{}},\"comment\":{}}],[\"userid\",{\"_index\":70,\"name\":{\"94\":{}},\"comment\":{}}],[\"utils/dbutils\",{\"_index\":76,\"name\":{\"102\":{}},\"comment\":{}}],[\"utils/httphelpers\",{\"_index\":73,\"name\":{\"98\":{}},\"comment\":{}}],[\"walletid\",{\"_index\":51,\"name\":{\"69\":{},\"75\":{}},\"comment\":{}}],[\"wrappeddeletefromdb\",{\"_index\":82,\"name\":{\"108\":{}},\"comment\":{}}],[\"wrappedgetfromdb\",{\"_index\":81,\"name\":{\"107\":{}},\"comment\":{}}],[\"wrappedsavetodb\",{\"_index\":80,\"name\":{\"106\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/references/assets/style.css b/docs/references/assets/style.css new file mode 100644 index 0000000..8f6ed2c --- /dev/null +++ b/docs/references/assets/style.css @@ -0,0 +1,1224 @@ +:root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-icon-background: var(--light-color-background); + --light-color-accent: #c5c7c9; + --light-color-text: #222; + --light-color-text-aside: #707070; + --light-color-link: #4da6ff; + --light-color-ts: #db1373; + --light-color-ts-interface: #139d2c; + --light-color-ts-enum: #9c891a; + --light-color-ts-class: #2484e5; + --light-color-ts-function: #572be7; + --light-color-ts-namespace: #b111c9; + --light-color-ts-private: #707070; + --light-color-ts-variable: #4d68ff; + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-accent: #9096a2; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + --dark-color-link: #00aff4; + --dark-color-ts: #ff6492; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-class: #61b0ff; + --dark-color-ts-function: #9772ff; + --dark-color-ts-namespace: #e14dff; + --dark-color-ts-private: #e2e2e2; + --dark-color-ts-variable: #4d68ff; + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; +} + +@media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + --color-ts: var(--light-color-ts); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-class: var(--light-color-ts-class); + --color-ts-function: var(--light-color-ts-function); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-private: var(--light-color-ts-private); + --color-ts-variable: var(--light-color-ts-variable); + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + --color-ts: var(--dark-color-ts); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-private: var(--dark-color-ts-private); + --color-ts-variable: var(--dark-color-ts-variable); + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } +} + +html { + color-scheme: var(--color-scheme); +} + +body { + margin: 0; +} + +:root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + --color-ts: var(--light-color-ts); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-class: var(--light-color-ts-class); + --color-ts-function: var(--light-color-ts-function); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-private: var(--light-color-ts-private); + --color-ts-variable: var(--light-color-ts-variable); + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); +} + +:root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + --color-ts: var(--dark-color-ts); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-private: var(--dark-color-ts-private); + --color-ts-variable: var(--dark-color-ts-variable); + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1 { + font-size: 1.875rem; + margin: 0.67rem 0; +} + +h2 { + font-size: 1.5rem; + margin: 0.83rem 0; +} + +h3 { + font-size: 1.25rem; + margin: 1rem 0; +} + +h4 { + font-size: 1.05rem; + margin: 1.33rem 0; +} + +h5 { + font-size: 1rem; + margin: 1.5rem 0; +} + +h6 { + font-size: 0.875rem; + margin: 2.33rem 0; +} + +.uppercase { + text-transform: uppercase; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +.container { + max-width: 1600px; + padding: 0 2rem; +} + +@media (min-width: 640px) { + .container { + padding: 0 4rem; + } +} +@media (min-width: 1200px) { + .container { + padding: 0 8rem; + } +} +@media (min-width: 1600px) { + .container { + padding: 0 12rem; + } +} + +/* Footer */ +.tsd-generator { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; +} + +.tsd-generator > p { + margin-top: 0; + margin-bottom: 0; + padding: 0 1rem; +} + +.container-main { + display: flex; + justify-content: space-between; + position: relative; + margin: 0 auto; +} + +.col-4, +.col-8 { + box-sizing: border-box; + float: left; + padding: 2rem 1rem; +} + +.col-4 { + flex: 0 0 25%; +} +.col-8 { + flex: 1 0; + flex-wrap: wrap; + padding-left: 0; +} + +@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: var(--color-background); + font-family: "Segoe UI", sans-serif; + font-size: 16px; + color: var(--color-text); +} + +a { + color: var(--color-link); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; +} + +code, +pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; +} + +pre { + padding: 10px; + border: 0.1em solid var(--color-accent); +} +pre code { + padding: 0; + font-size: 100%; +} + +blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; +} + +.tsd-typography { + line-height: 1.333em; +} +.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 (max-width: 1024px) { + html .col-content { + float: none; + max-width: 100%; + width: 100%; + padding-top: 3rem; + } + html .col-menu { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + max-width: 25rem; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-menu > *:last-child { + padding-bottom: 20px; + } + html .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; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu :is(header, footer, .col-content) { + animation: shift-to-left 0.4s; + } + + .to-has-menu .col-menu { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu :is(header, footer, .col-content) { + animation: unshift-to-left 0.4s; + } + + .from-has-menu .col-menu { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu :is(header, footer, .col-content) { + transform: translate(-25%, 0); + } + .has-menu .col-menu { + visibility: visible; + transform: translate(0, 0); + display: grid; + align-items: center; + grid-template-rows: auto 1fr; + grid-gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); +} +.tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +.tsd-comment-tags { + display: flex; + flex-direction: column; +} +dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; +} +dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; +} +dl.tsd-comment-tag-group dd { + margin: 0; +} +code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; +} +h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; +} + +dl.tsd-comment-tag-group dd:before, +dl.tsd-comment-tag-group dd:after { + content: " "; +} +dl.tsd-comment-tag-group dd pre, +dl.tsd-comment-tag-group dd:after { + clear: both; +} +dl.tsd-comment-tag-group p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; +} +.tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; +} +.tsd-filter-input { + display: flex; + width: fit-content; + width: -moz-fit-content; + align-items: center; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + cursor: pointer; +} +.tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; +} +.tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; +} +.tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; +} +.tsd-filter-input input[type="checkbox"]:focus + svg { + transform: scale(0.95); +} +.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { + transform: scale(1); +} +.tsd-checkbox-background { + fill: var(--color-accent); +} +input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); +} + +.tsd-theme-toggle { + padding-top: 0.75rem; +} +.tsd-theme-toggle > h4 { + display: inline; + vertical-align: middle; + margin-right: 0.75rem; +} + +.tsd-hierarchy { + list-style: square; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-panel-group.tsd-index-group { + margin-bottom: 0; +} +.tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; +} +@media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } +} +.tsd-index-panel .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 a.tsd-parent-kind-module { + color: var(--color-ts); +} +.tsd-index-panel a.tsd-parent-kind-interface { + color: var(--color-ts-interface); +} +.tsd-index-panel a.tsd-parent-kind-enum { + color: var(--color-ts-enum); +} +.tsd-index-panel a.tsd-parent-kind-class { + color: var(--color-ts-class); +} +.tsd-index-panel a.tsd-kind-module { + color: var(--color-ts-namespace); +} +.tsd-index-panel a.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-index-panel a.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-index-panel a.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-index-panel a.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-index-panel a.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-index-panel a.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-index-panel a.tsd-is-private { + color: var(--color-ts-private); +} + +.tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; +} + +.tsd-anchor { + position: absolute; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} +.tsd-member [data-tsd-kind] { + color: var(--color-ts); +} +.tsd-member [data-tsd-kind="Interface"] { + color: var(--color-ts-interface); +} +.tsd-member [data-tsd-kind="Enum"] { + color: var(--color-ts-enum); +} +.tsd-member [data-tsd-kind="Class"] { + color: var(--color-ts-class); +} +.tsd-member [data-tsd-kind="Private"] { + color: var(--color-ts-private); +} + +.tsd-navigation a { + display: block; + margin: 0.4rem 0; + border-left: 2px solid transparent; + color: var(--color-text); + 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 .tsd-accordion-details > ul { + margin-top: 0.75rem; +} +.tsd-navigation.primary a { + padding: 0.75rem 0.5rem; + margin: 0; +} +.tsd-navigation.primary ul li a { + margin-left: 0.5rem; +} +.tsd-navigation.primary ul li li a { + margin-left: 1.5rem; +} +.tsd-navigation.primary ul li li li a { + margin-left: 2.5rem; +} +.tsd-navigation.primary ul li li li li a { + margin-left: 3.5rem; +} +.tsd-navigation.primary ul li li li li li a { + margin-left: 4.5rem; +} +.tsd-navigation.primary ul li li li li li li a { + margin-left: 5.5rem; +} +.tsd-navigation.primary li.current > a { + border-left: 0.15rem var(--color-text) solid; +} +.tsd-navigation.primary li.selected > a { + font-weight: bold; + border-left: 0.2rem var(--color-text) solid; +} +.tsd-navigation.primary ul li a:hover { + border-left: 0.2rem var(--color-text-aside) solid; +} +.tsd-navigation.primary li.globals + li > span, +.tsd-navigation.primary li.globals + li > a { + padding-top: 20px; +} + +.tsd-navigation.secondary.tsd-navigation--toolbar-hide { + max-height: calc(100vh - 1rem); + top: 0.5rem; +} +.tsd-navigation.secondary > ul { + display: inline; + padding-right: 0.5rem; + transition: opacity 0.2s; +} +.tsd-navigation.secondary ul li a { + padding-left: 0; +} +.tsd-navigation.secondary ul li li a { + padding-left: 1.1rem; +} +.tsd-navigation.secondary ul li li li a { + padding-left: 2.2rem; +} +.tsd-navigation.secondary ul li li li li a { + padding-left: 3.3rem; +} +.tsd-navigation.secondary ul li li li li li a { + padding-left: 4.4rem; +} +.tsd-navigation.secondary ul li li li li li li a { + padding-left: 5.5rem; +} + +a.tsd-index-link { + margin: 0.25rem 0; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; +} +.tsd-accordion-summary > h1, +.tsd-accordion-summary > h2, +.tsd-accordion-summary > h3, +.tsd-accordion-summary > h4, +.tsd-accordion-summary > h5 { + display: inline-flex; + align-items: center; + vertical-align: middle; + margin-bottom: 0; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} +.tsd-accordion-summary { + display: block; + cursor: pointer; +} +.tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; +} +.tsd-index-accordion .tsd-accordion-summary svg { + margin-right: 0.25rem; +} +.tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; +} +.tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; +} + +.tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; +} +.tsd-kind-icon path { + transform-origin: center; + transform: scale(1.1); +} +.tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; +} + +@media (min-width: 1024px) { + .col-content { + margin: 2rem auto; + } + + .menu-sticky-wrap { + position: sticky; + height: calc(100vh - 2rem); + top: 4rem; + right: 0; + padding: 0 1.5rem; + padding-top: 1rem; + margin-top: 3rem; + transition: 0.3s ease-in-out; + transition-property: top, padding-top, padding, height; + overflow-y: auto; + } + .col-menu { + border-left: 1px solid var(--color-accent); + } + .col-menu--hide { + top: 1rem; + } + .col-menu .tsd-navigation:not(:last-child) { + padding-bottom: 1.75rem; + } +} + +.tsd-panel { + margin-bottom: 2.5rem; +} +.tsd-panel.tsd-member { + margin-bottom: 4rem; +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, +.tsd-panel > h2, +.tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; +} +.tsd-panel > h1.tsd-before-signature, +.tsd-panel > h2.tsd-before-signature, +.tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; +} + +.tsd-panel-group { + margin: 4rem 0; +} +.tsd-panel-group.tsd-index-group { + margin: 2rem 0; +} +.tsd-panel-group.tsd-index-group details { + margin: 2rem 0; +} + +#tsd-search { + transition: background-color 0.2s; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; +} +#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: var(--color-text); +} +#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: var(--color-background); +} +#tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current, +#tsd-search .results li:hover { + background-color: var(--color-accent); +} +#tsd-search .results a { + display: block; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; +} +#tsd-search.has-focus { + background-color: var(--color-accent); +} +#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 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} + +.tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; +} +.tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; +} + +ul.tsd-parameter-list, +ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameter-list > li.tsd-parameter-signature, +ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameter-list h5, +ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +.tsd-sources { + margin-top: 1rem; + font-size: 0.875em; +} +.tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: fixed; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; +} +.tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; +} +.tsd-page-toolbar .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-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: opacity 0.1s, background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.9; +} +.tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} + +.tsd-widget.options, +.tsd-widget.menu { + display: none; +} +@media (max-width: 1024px) { + .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; +} + +img { + max-width: 100%; +} + +.tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + vertical-align: middle; + color: var(--color-text); +} + +.tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; +} + +.tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; +} + +.deprecated { + text-decoration: line-through; +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); +} + +*::-webkit-scrollbar { + width: 0.75rem; +} + +*::-webkit-scrollbar-track { + background: var(--color-icon-background); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); +} diff --git a/docs/references/assets/widgets.png b/docs/references/assets/widgets.png new file mode 100644 index 0000000000000000000000000000000000000000..c7380532ac1b45400620011c37c4dcb7aec27a4c GIT binary patch literal 480 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoH8@y+q^jrZML>b&o-U3d6^w6h1+IPUz|;DW zIZ;96kdsD>Qv^q=09&hp0GpEni<1IR%gvP3v%OR9*{MuRTKWHZyIbuBt)Ci`cU_&% z1T+i^Y)o{%281-<3TpPAUTzw5v;RY=>1rvxmPl96#kYc9hX!6V^nB|ad#(S+)}?8C zr_H+lT3B#So$T=?$(w3-{rbQ4R<@nsf$}$hwSO)A$8&`(j+wQf=Jwhb0`CvhR5DCf z^OgI)KQemrUFPH+UynC$Y~QHG%DbTVh-Skz{enNU)cV_hPu~{TD7TPZl>0&K>iuE| z7AYn$7)Jrb9GE&SfQW4q&G*@N|4cHI`VakFa5-C!ov&XD)J(qp$rJJ*9e z-sHv}#g*T7Cv048d1v~BEAzM5FztAse#q78WWC^BUCzQ U&wLp6h6BX&boFyt=akR{0G%$)mH+?% literal 0 HcmV?d00001 diff --git a/docs/references/assets/widgets@2x.png b/docs/references/assets/widgets@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4bbbd57272f3b28f47527d4951ad10f950b8ad43 GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0y~yU}^xe12~w0Jcmn z@(X6T|9^jgLcx21{)7exgY)a>N6m2F0<`Rqr;B4q1>>88jUdw-7W`c)zLE*mq8W2H z-<&Jl_Hco5BuC5n@AbF5GD82~-e8-v=#zCyUX0F-o}8pPfAv`!GN$ff+TL<~@kgt} z62eO?_|&+>xBmM$@p|z`tIKEdpPf8%qI>4r7@jn<=eta*{3~?g(zz{Ke9zc-G^gr? z-7foa?LcS!hmbwzru}ICvbWLlW8;+l-}!^=c32!^nV`+`C*;0-*Y%l94pC;Cb3GXz zzSf%a!{gVr{Y_lVuUj+a)*Ca+!-Hu%xmP&&X-2CuANY8^i{D7Kg6qzP zXz_ps9+lN8ESH{K4`yu&b~I>N9xGlE&;2u*b?+Go!AhN?m-bxlLvtC#MzDF2kFzfHJ1W7ybqdefSqVhbOykd*Yi%EDuhs z4wF{ft^bv2+DDnKb8gj1FuvcV`M}luS>lO<^)8x>y1#R;a=-ZKwWTQQb)ioBbi;zh zD!f5V)8581to1LL7c9!l^PSC$NBPYif!_vAZhmL4)v4U)4UsrLYiH_9rmQDd?)(e5 z^pcH>qvBg*i0dus2r*mp4;zKvu=P#s-ti;2obl`NjjwoYd>e(oo#j_uyRb<7Pv^If zzZ|mGHmV)8^tbO%^>eqMw(@7(&3g{jEp-Najo7V75xI_ZHK*FA`elF{r5}E*d7+j_R literal 0 HcmV?d00001 diff --git a/docs/references/functions/publishers_push.runPushPublisher.html b/docs/references/functions/publishers_push.runPushPublisher.html new file mode 100644 index 0000000..b9625a5 --- /dev/null +++ b/docs/references/functions/publishers_push.runPushPublisher.html @@ -0,0 +1,70 @@ +runPushPublisher | edge-push-server
+
+ +
+
+
+
+ +

Function runPushPublisher

+
+
    + +
  • +

    Begins listening to the 'tasks_publishing' view defined in +tasksPublishing. For every new task document received, the +publisher checks if the action is in progress. If it is, skip the +processing. If it is not, the publisher will pick up the task by +executing the push notification action.

    +

    If the action is marked as repeatable, the publisher will then mark +all ActionEffects as completed so that 'task_listening' +view can pick the task up again for processing.

    + +

    Returns

    0 if the connection is closed.

    +
    +

    Returns Promise<number>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_http_response_types.jsonResponse.html b/docs/references/functions/types_http_response_types.jsonResponse.html new file mode 100644 index 0000000..d2772ca --- /dev/null +++ b/docs/references/functions/types_http_response_types.jsonResponse.html @@ -0,0 +1,75 @@ +jsonResponse | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Construct an HttpResponse object with a JSON body.

    +
    +
    +

    Parameters

    +
      +
    • +
      body: unknown
    • +
    • +
      opts: { headers?: HttpHeaders; status?: number } = {}
      +
        +
      • +
        Optional headers?: HttpHeaders
      • +
      • +
        Optional status?: number
    +

    Returns HttpResponse

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_http_response_types.statusResponse.html b/docs/references/functions/types_http_response_types.statusResponse.html new file mode 100644 index 0000000..0f727cd --- /dev/null +++ b/docs/references/functions/types_http_response_types.statusResponse.html @@ -0,0 +1,70 @@ +statusResponse | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    A generic success or failure response.

    +
    +
    +

    Parameters

    +
      +
    • +
      statusCode: StatusCode = statusCodes.SUCCESS
    • +
    • +
      message: string = statusCode.message
    +

    Returns HttpResponse

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_Action.asAction.html b/docs/references/functions/types_task_Action.asAction.html new file mode 100644 index 0000000..ce3b57d --- /dev/null +++ b/docs/references/functions/types_task_Action.asAction.html @@ -0,0 +1,67 @@ +asAction | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns Action

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionData.asActionData.html b/docs/references/functions/types_task_ActionData.asActionData.html new file mode 100644 index 0000000..8eaf961 --- /dev/null +++ b/docs/references/functions/types_task_ActionData.asActionData.html @@ -0,0 +1,75 @@ +asActionData | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns ActionData

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionData.asBroadcastTxActionData.html b/docs/references/functions/types_task_ActionData.asBroadcastTxActionData.html new file mode 100644 index 0000000..fb80816 --- /dev/null +++ b/docs/references/functions/types_task_ActionData.asBroadcastTxActionData.html @@ -0,0 +1,75 @@ +asBroadcastTxActionData | edge-push-server
+
+ +
+
+
+
+ +

Function asBroadcastTxActionData

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns BroadcastTxActionData

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionData.asClientActionData.html b/docs/references/functions/types_task_ActionData.asClientActionData.html new file mode 100644 index 0000000..ed3cdce --- /dev/null +++ b/docs/references/functions/types_task_ActionData.asClientActionData.html @@ -0,0 +1,75 @@ +asClientActionData | edge-push-server
+
+ +
+
+
+
+ +

Function asClientActionData

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns ClientActionData

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionData.asGeneralActionData.html b/docs/references/functions/types_task_ActionData.asGeneralActionData.html new file mode 100644 index 0000000..9e1c537 --- /dev/null +++ b/docs/references/functions/types_task_ActionData.asGeneralActionData.html @@ -0,0 +1,75 @@ +asGeneralActionData | edge-push-server
+
+ +
+
+
+
+ +

Function asGeneralActionData

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns GeneralActionData

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionData.asPushActionData.html b/docs/references/functions/types_task_ActionData.asPushActionData.html new file mode 100644 index 0000000..1c30fc1 --- /dev/null +++ b/docs/references/functions/types_task_ActionData.asPushActionData.html @@ -0,0 +1,75 @@ +asPushActionData | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns PushActionData

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionEffect.asActionEffect.html b/docs/references/functions/types_task_ActionEffect.asActionEffect.html new file mode 100644 index 0000000..95dcc1d --- /dev/null +++ b/docs/references/functions/types_task_ActionEffect.asActionEffect.html @@ -0,0 +1,78 @@ +asActionEffect | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns ActionEffect

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionEffect.asBalanceActionEffect.html b/docs/references/functions/types_task_ActionEffect.asBalanceActionEffect.html new file mode 100644 index 0000000..9c5af69 --- /dev/null +++ b/docs/references/functions/types_task_ActionEffect.asBalanceActionEffect.html @@ -0,0 +1,78 @@ +asBalanceActionEffect | edge-push-server
+
+ +
+
+
+
+ +

Function asBalanceActionEffect

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns BalanceActionEffect

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionEffect.asParActionEffect.html b/docs/references/functions/types_task_ActionEffect.asParActionEffect.html new file mode 100644 index 0000000..04cc768 --- /dev/null +++ b/docs/references/functions/types_task_ActionEffect.asParActionEffect.html @@ -0,0 +1,78 @@ +asParActionEffect | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns ParActionEffect

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionEffect.asPriceActionEffect.html b/docs/references/functions/types_task_ActionEffect.asPriceActionEffect.html new file mode 100644 index 0000000..59e04f1 --- /dev/null +++ b/docs/references/functions/types_task_ActionEffect.asPriceActionEffect.html @@ -0,0 +1,78 @@ +asPriceActionEffect | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns PriceActionEffect

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionEffect.asSeqActionEffect.html b/docs/references/functions/types_task_ActionEffect.asSeqActionEffect.html new file mode 100644 index 0000000..c9fd6c2 --- /dev/null +++ b/docs/references/functions/types_task_ActionEffect.asSeqActionEffect.html @@ -0,0 +1,78 @@ +asSeqActionEffect | edge-push-server
+
+ +
+
+
+ +
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns SeqActionEffect

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_ActionEffect.asTxConfsActionEffect.html b/docs/references/functions/types_task_ActionEffect.asTxConfsActionEffect.html new file mode 100644 index 0000000..142e7df --- /dev/null +++ b/docs/references/functions/types_task_ActionEffect.asTxConfsActionEffect.html @@ -0,0 +1,78 @@ +asTxConfsActionEffect | edge-push-server
+
+ +
+
+
+
+ +

Function asTxConfsActionEffect

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns TxConfsActionEffect

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/types_task_Task.asTask.html b/docs/references/functions/types_task_Task.asTask.html new file mode 100644 index 0000000..d487459 --- /dev/null +++ b/docs/references/functions/types_task_Task.asTask.html @@ -0,0 +1,67 @@ +asTask | edge-push-server
+
+ +
+
+
+
+ +

Function asTask

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns Task

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_HTTPHelpers.convertStringToArray.html b/docs/references/functions/utils_HTTPHelpers.convertStringToArray.html new file mode 100644 index 0000000..f426ccf --- /dev/null +++ b/docs/references/functions/utils_HTTPHelpers.convertStringToArray.html @@ -0,0 +1,71 @@ +convertStringToArray | edge-push-server
+
+ +
+
+
+
+ +

Function convertStringToArray

+
+
    + +
  • +

    Converts a string to an array of strings.

    + +

    Returns

    An array of strings.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: string
      +

      The string to be converted to an array.

      +
    +

    Returns undefined | string[]

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_HTTPHelpers.getQueryParamObject.html b/docs/references/functions/utils_HTTPHelpers.getQueryParamObject.html new file mode 100644 index 0000000..565bc5e --- /dev/null +++ b/docs/references/functions/utils_HTTPHelpers.getQueryParamObject.html @@ -0,0 +1,83 @@ +getQueryParamObject | edge-push-server
+
+ +
+
+
+
+ +

Function getQueryParamObject

+
+
    + +
  • +

    Given a URL path and an array of query parameter names, returns an +object with keys for each query parameter name and values for each +query

    +

    For example, given the following URL path: v1/device?deviceId=12345 +and the query parameter name deviceId, the function will return the +string 12345.

    + +

    Returns

    The object of query parameters.

    +
    +
    +

    Parameters

    +
      +
    • +
      query: string[]
      +

      An array of query parameter names.

      +
    • +
    • +
      path: string
      +

      The URL path.

      +
    +

    Returns { [index: string]: any }

    +
      +
    • +
      [index: string]: any
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.asTaskDoc.html b/docs/references/functions/utils_dbUtils.asTaskDoc.html new file mode 100644 index 0000000..4343865 --- /dev/null +++ b/docs/references/functions/utils_dbUtils.asTaskDoc.html @@ -0,0 +1,76 @@ +asTaskDoc | edge-push-server
+
+ +
+
+
+
+ +

Function asTaskDoc

+
+
    + +
  • +

    Reads & checks an untrusted value. Throws an exception if it's wrong.

    +
    +
    +

    Parameters

    +
      +
    • +
      raw: any
    +

    Returns CouchDoc<Task>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.deleteFromDb.html b/docs/references/functions/utils_dbUtils.deleteFromDb.html new file mode 100644 index 0000000..94f6869 --- /dev/null +++ b/docs/references/functions/utils_dbUtils.deleteFromDb.html @@ -0,0 +1,83 @@ +deleteFromDb | edge-push-server
+
+ +
+
+
+
+ +

Function deleteFromDb

+
+
    + +
  • +
    +

    Type Parameters

    +
      +
    • +

      T

    +
    +

    Parameters

    +
      +
    • +
      db: DocumentScope<CouchDoc<T>>
    • +
    • +
      keys: string[]
    • +
    • +
      userId: string
    +

    Returns Promise<void>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.getFromDb.html b/docs/references/functions/utils_dbUtils.getFromDb.html new file mode 100644 index 0000000..fca228e --- /dev/null +++ b/docs/references/functions/utils_dbUtils.getFromDb.html @@ -0,0 +1,85 @@ +getFromDb | edge-push-server
+
+ +
+
+
+
+ +

Function getFromDb

+
+
    + +
  • +
    +

    Type Parameters

    +
      +
    • +

      T

    +
    +

    Parameters

    +
      +
    • +
      db: DocumentScope<CouchDoc<T>>
    • +
    • +
      keys: string[]
    • +
    • +
      userId: string
    • +
    • +
      cleaner: Cleaner<CouchDoc<T>>
    +

    Returns Promise<CouchDoc<T>[]>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.logger.html b/docs/references/functions/utils_dbUtils.logger.html new file mode 100644 index 0000000..ff37430 --- /dev/null +++ b/docs/references/functions/utils_dbUtils.logger.html @@ -0,0 +1,74 @@ +logger | edge-push-server
+
+ +
+
+
+
+ +

Function logger

+
+
    + +
  • +
    +

    Parameters

    +
      +
    • +
      Rest ...args: any
    +

    Returns void

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.packChange.html b/docs/references/functions/utils_dbUtils.packChange.html new file mode 100644 index 0000000..00bffa7 --- /dev/null +++ b/docs/references/functions/utils_dbUtils.packChange.html @@ -0,0 +1,90 @@ +packChange | edge-push-server
+
+ +
+
+
+
+ +

Function packChange

+
+
    + +
  • +

    Convert a Task object into a TaskDoc object that +implements CouchDoc.

    + +

    Returns

    +
    +
    +

    Type Parameters

    +
      +
    • +

      T

    +
    +

    Parameters

    +
      +
    • +
      doc: T
      +

      A Task object.

      +
    • +
    • +
      id: string
    +

    Returns CouchDoc<T>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.saveToDb.html b/docs/references/functions/utils_dbUtils.saveToDb.html new file mode 100644 index 0000000..9539d25 --- /dev/null +++ b/docs/references/functions/utils_dbUtils.saveToDb.html @@ -0,0 +1,81 @@ +saveToDb | edge-push-server
+
+ +
+
+
+
+ +

Function saveToDb

+
+
    + +
  • +
    +

    Type Parameters

    +
      +
    • +

      T

    +
    +

    Parameters

    +
      +
    • +
      db: DocumentScope<CouchDoc<T>>
    • +
    • +
      docs: CouchDoc<T>[]
    +

    Returns void

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.wrappedDeleteFromDb.html b/docs/references/functions/utils_dbUtils.wrappedDeleteFromDb.html new file mode 100644 index 0000000..c86cbce --- /dev/null +++ b/docs/references/functions/utils_dbUtils.wrappedDeleteFromDb.html @@ -0,0 +1,76 @@ +wrappedDeleteFromDb | edge-push-server
+
+ +
+
+
+
+ +

Function wrappedDeleteFromDb

+
+
    + +
  • +
    +

    Parameters

    +
      +
    • +
      keys: string[]
    • +
    • +
      userId: string
    +

    Returns Promise<void>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.wrappedGetFromDb.html b/docs/references/functions/utils_dbUtils.wrappedGetFromDb.html new file mode 100644 index 0000000..496ae4e --- /dev/null +++ b/docs/references/functions/utils_dbUtils.wrappedGetFromDb.html @@ -0,0 +1,76 @@ +wrappedGetFromDb | edge-push-server
+
+ +
+
+
+
+ +

Function wrappedGetFromDb

+
+
    + +
  • +
    +

    Parameters

    +
      +
    • +
      keys: string[]
    • +
    • +
      userId: string
    +

    Returns Promise<TaskDoc[]>

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/functions/utils_dbUtils.wrappedSaveToDb.html b/docs/references/functions/utils_dbUtils.wrappedSaveToDb.html new file mode 100644 index 0000000..426d1ef --- /dev/null +++ b/docs/references/functions/utils_dbUtils.wrappedSaveToDb.html @@ -0,0 +1,74 @@ +wrappedSaveToDb | edge-push-server
+
+ +
+
+
+
+ +

Function wrappedSaveToDb

+
+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/index.html b/docs/references/index.html new file mode 100644 index 0000000..f8dce95 --- /dev/null +++ b/docs/references/index.html @@ -0,0 +1,78 @@ +edge-push-server
+
+ +
+
+
+
+

edge-push-server

+
+ +

edge-push-server

+
+

This server sends push notifications to Edge client apps. It contains an HTTP server that clients can use to register for notifications, and a background process that checks for price changes and actually sends the messages.

+ + +

Setup

+
+

This server requires a working copies of Node.js, Yarn, PM2, and CouchDB. We also recommend using Caddy to terminate SSL connections.

+ + +

Set up logging

+
+

Run these commands as a server admin:

+
touch /var/log/pushServer.log
touch /var/log/priceDaemon.log
chown edgy /var/log/pushServer.log /var/log/priceDaemon.log
cp ./docs/logrotate /etc/logrotate.d/pushServer +
+ + +

Manage server using pm2

+
+

First, tell pm2 how to run the server script:

+
# install:
pm2 start pm2.json
pm2 save

# check status:
pm2 monit
tail -f /var/log/pushServer.log
tail -f /var/log/priceDaemon.log

# manage:
pm2 reload pm2.json
pm2 restart pm2.json
pm2 stop pm2.json

pm2 restart pushServer // Just the HTTP server
pm2 restart priceDaemon // Just the price checker +
+ + +

Updating

+
+

To update the code running on the production server, use the following procedure:

+
git pull
yarn
yarn prepare
pm2 restart pm2.json +
+

Each deployment should come with its own version bump, changelog update, and git tag.

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_http_request_types.ApiRequest.html b/docs/references/interfaces/types_http_request_types.ApiRequest.html new file mode 100644 index 0000000..5838f42 --- /dev/null +++ b/docs/references/interfaces/types_http_request_types.ApiRequest.html @@ -0,0 +1,133 @@ +ApiRequest | edge-push-server
+
+ +
+
+
+ +
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
apiKey: ApiKey
+
+ +
body: any
+
+ +
headers: HttpHeaders
+
+ +
method: string
+
+ +
path: string
+
+ +
payload: unknown
+
+ +
req: Request<ParamsDictionary, any, any, ParsedQs>
+
+ +
version: string
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_http_request_types.ExtendedRequest.html b/docs/references/interfaces/types_http_request_types.ExtendedRequest.html new file mode 100644 index 0000000..bc0914f --- /dev/null +++ b/docs/references/interfaces/types_http_request_types.ExtendedRequest.html @@ -0,0 +1,120 @@ +ExtendedRequest | edge-push-server
+
+ +
+
+
+ +
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
body: any
+
+ +
headers: HttpHeaders
+
+ +
method: string
+
+ +
path: string
+
+ +
req: Request<ParamsDictionary, any, any, ParsedQs>
+
+ +
version: string
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_Action.Action.html b/docs/references/interfaces/types_task_Action.Action.html new file mode 100644 index 0000000..c65b020 --- /dev/null +++ b/docs/references/interfaces/types_task_Action.Action.html @@ -0,0 +1,125 @@ +Action | edge-push-server
+
+ +
+
+
+
+ +

Interface Action

+
+

Describes types of action to be done by some service. Some properties +are optional because certain types of actions do not require the +optional properties.

+
+
+

Hierarchy

+
    +
  • Action
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ + +

Additional payload for consumption. For 'push' action type, data +must contain apiKey, body, message, and tokenIds to send +notifications.

+ +

See

    +
  • ApiKey
  • +
  • NotificationManager.init
  • +
  • NotificationManager.send
  • +
+
+
+ +
inProgress?: boolean
+

Mutex implementation to prevent race conditions.

+
+
+ +
repeat?: boolean
+

If true, the task will be reused, otherwise, the task will be +deleted after the action is completed.

+
+
+ +
type: "push" | "broadcast-tx" | "client"
+

The type of the action.

+
    +
  • 'push': An action for pushing a notification to a device.
  • +
  • 'broadcast-tx': An action for broadcasting transactions to a +network provider such as Blockbook.
  • +
  • 'client': // TODO: Add description
  • +
+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionData.BroadcastTxActionData.html b/docs/references/interfaces/types_task_ActionData.BroadcastTxActionData.html new file mode 100644 index 0000000..745b963 --- /dev/null +++ b/docs/references/interfaces/types_task_ActionData.BroadcastTxActionData.html @@ -0,0 +1,86 @@ +BroadcastTxActionData | edge-push-server
+
+ +
+
+
+
+ +

Interface BroadcastTxActionData

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
SOMETHING: string
+
+ +
additionalData?: Object
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionData.ClientActionData.html b/docs/references/interfaces/types_task_ActionData.ClientActionData.html new file mode 100644 index 0000000..c52e13f --- /dev/null +++ b/docs/references/interfaces/types_task_ActionData.ClientActionData.html @@ -0,0 +1,86 @@ +ClientActionData | edge-push-server
+
+ +
+
+
+
+ +

Interface ClientActionData

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
SOMETHING: string
+
+ +
additionalData?: Object
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionData.GeneralActionData.html b/docs/references/interfaces/types_task_ActionData.GeneralActionData.html new file mode 100644 index 0000000..a51872a --- /dev/null +++ b/docs/references/interfaces/types_task_ActionData.GeneralActionData.html @@ -0,0 +1,80 @@ +GeneralActionData | edge-push-server
+
+ +
+
+
+
+ +

Interface GeneralActionData

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
additionalData?: Object
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionData.PushActionData.html b/docs/references/interfaces/types_task_ActionData.PushActionData.html new file mode 100644 index 0000000..409c943 --- /dev/null +++ b/docs/references/interfaces/types_task_ActionData.PushActionData.html @@ -0,0 +1,107 @@ +PushActionData | edge-push-server
+
+ +
+
+
+
+ +

Interface PushActionData

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
additionalData?: Object
+
+ +
apiKey: string | ApiKey
+
+ +
body: string
+
+ +
title: string
+
+ +
tokenIds: string[]
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionEffect.BalanceActionEffect.html b/docs/references/interfaces/types_task_ActionEffect.BalanceActionEffect.html new file mode 100644 index 0000000..835ea4a --- /dev/null +++ b/docs/references/interfaces/types_task_ActionEffect.BalanceActionEffect.html @@ -0,0 +1,121 @@ +BalanceActionEffect | edge-push-server
+
+ +
+
+
+
+ +

Interface BalanceActionEffect

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+ +
aboveAmount?: string
+
+ +
address: string
+
+ +
belowAmount?: string
+
+ +
completed: boolean
+
+ +
tokenId?: string
+
+ +
type: "balance"
+
+ +
walletId: string
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionEffect.GeneralActionEffect.html b/docs/references/interfaces/types_task_ActionEffect.GeneralActionEffect.html new file mode 100644 index 0000000..1e609df --- /dev/null +++ b/docs/references/interfaces/types_task_ActionEffect.GeneralActionEffect.html @@ -0,0 +1,82 @@ +GeneralActionEffect | edge-push-server
+
+ +
+
+
+
+ +

Interface GeneralActionEffect

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
completed: boolean
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionEffect.ParActionEffect.html b/docs/references/interfaces/types_task_ActionEffect.ParActionEffect.html new file mode 100644 index 0000000..4deac6f --- /dev/null +++ b/docs/references/interfaces/types_task_ActionEffect.ParActionEffect.html @@ -0,0 +1,93 @@ +ParActionEffect | edge-push-server
+
+ +
+
+
+ +
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
childEffects: ActionEffect[]
+
+ +
completed: boolean
+
+ +
type: "par"
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionEffect.PriceActionEffect.html b/docs/references/interfaces/types_task_ActionEffect.PriceActionEffect.html new file mode 100644 index 0000000..b603ea1 --- /dev/null +++ b/docs/references/interfaces/types_task_ActionEffect.PriceActionEffect.html @@ -0,0 +1,107 @@ +PriceActionEffect | edge-push-server
+
+ +
+
+
+ +
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+ +
aboveRate?: string
+
+ +
belowRate?: string
+
+ +
completed: boolean
+
+ +
currencyPair: string
+
+ +
type: "price"
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionEffect.SeqActionEffect.html b/docs/references/interfaces/types_task_ActionEffect.SeqActionEffect.html new file mode 100644 index 0000000..bde4857 --- /dev/null +++ b/docs/references/interfaces/types_task_ActionEffect.SeqActionEffect.html @@ -0,0 +1,100 @@ +SeqActionEffect | edge-push-server
+
+ +
+
+
+ +
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
childEffect: ActionEffect
+
+ +
completed: boolean
+
+ +
opIndex: number
+
+ +
type: "seq"
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_ActionEffect.TxConfsActionEffect.html b/docs/references/interfaces/types_task_ActionEffect.TxConfsActionEffect.html new file mode 100644 index 0000000..719f59c --- /dev/null +++ b/docs/references/interfaces/types_task_ActionEffect.TxConfsActionEffect.html @@ -0,0 +1,107 @@ +TxConfsActionEffect | edge-push-server
+
+ +
+
+
+
+ +

Interface TxConfsActionEffect

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
completed: boolean
+
+ +
confirmations: number
+
+ +
txId: string
+
+ +
type: "tx-confs"
+
+ +
walletId: string
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/interfaces/types_task_Task.Task.html b/docs/references/interfaces/types_task_Task.Task.html new file mode 100644 index 0000000..dfb7cd0 --- /dev/null +++ b/docs/references/interfaces/types_task_Task.Task.html @@ -0,0 +1,103 @@ +Task | edge-push-server
+
+ +
+
+
+
+ +

Interface Task

+
+

Describes a task that can be stored in the db_tasks database.

+

taskId and userId are required to construct the _id of the +couchDB document. The _id is used to partition the documents by +user for performance and security reasons.

+
+
+

Hierarchy

+
    +
  • Task
+
+
+
+ +
+
+

Properties

+
+
+

Properties

+
+ +
action: Action
+
+ +
actionEffects: ActionEffect[]
+
+ +
taskId: string
+
+ +
userId: string
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules.html b/docs/references/modules.html new file mode 100644 index 0000000..290b0c7 --- /dev/null +++ b/docs/references/modules.html @@ -0,0 +1,60 @@ +edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/publishers_push.html b/docs/references/modules/publishers_push.html new file mode 100644 index 0000000..8144805 --- /dev/null +++ b/docs/references/modules/publishers_push.html @@ -0,0 +1,62 @@ +publishers/push | edge-push-server
+
+ +
+
+
+
+ +

Module publishers/push

+
+
+
+
+

Index

+
+

Functions

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/types_http_request_types.html b/docs/references/modules/types_http_request_types.html new file mode 100644 index 0000000..0e052cb --- /dev/null +++ b/docs/references/modules/types_http_request_types.html @@ -0,0 +1,64 @@ +types/http/request-types | edge-push-server
+
+ +
+
+
+
+ +

Module types/http/request-types

+
+
+
+
+

Index

+
+

Interfaces

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/types_http_response_types.html b/docs/references/modules/types_http_response_types.html new file mode 100644 index 0000000..929693b --- /dev/null +++ b/docs/references/modules/types_http_response_types.html @@ -0,0 +1,69 @@ +types/http/response-types | edge-push-server
+
+ +
+
+
+
+ +

Module types/http/response-types

+
+
+
+
+

Index

+
+

Variables

+
+
+

Functions

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/types_task_Action.html b/docs/references/modules/types_task_Action.html new file mode 100644 index 0000000..75a9793 --- /dev/null +++ b/docs/references/modules/types_task_Action.html @@ -0,0 +1,67 @@ +types/task/Action | edge-push-server
+
+ +
+
+
+
+ +

Module types/task/Action

+
+
+
+
+

Index

+
+

Interfaces

+
+
+

Functions

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/types_task_ActionData.html b/docs/references/modules/types_task_ActionData.html new file mode 100644 index 0000000..0a46861 --- /dev/null +++ b/docs/references/modules/types_task_ActionData.html @@ -0,0 +1,86 @@ +types/task/ActionData | edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/types_task_ActionEffect.html b/docs/references/modules/types_task_ActionEffect.html new file mode 100644 index 0000000..924b828 --- /dev/null +++ b/docs/references/modules/types_task_ActionEffect.html @@ -0,0 +1,92 @@ +types/task/ActionEffect | edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/types_task_Task.html b/docs/references/modules/types_task_Task.html new file mode 100644 index 0000000..08a94a6 --- /dev/null +++ b/docs/references/modules/types_task_Task.html @@ -0,0 +1,67 @@ +types/task/Task | edge-push-server
+
+ +
+
+
+
+ +

Module types/task/Task

+
+
+
+
+

Index

+
+

Interfaces

+
+
+

Functions

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/utils_HTTPHelpers.html b/docs/references/modules/utils_HTTPHelpers.html new file mode 100644 index 0000000..0b2f14c --- /dev/null +++ b/docs/references/modules/utils_HTTPHelpers.html @@ -0,0 +1,64 @@ +utils/HTTPHelpers | edge-push-server
+
+ +
+
+
+
+ +

Module utils/HTTPHelpers

+
+
+
+
+

Index

+
+

Functions

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/modules/utils_dbUtils.html b/docs/references/modules/utils_dbUtils.html new file mode 100644 index 0000000..a5aa9f6 --- /dev/null +++ b/docs/references/modules/utils_dbUtils.html @@ -0,0 +1,88 @@ +utils/dbUtils | edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/types/types_task_ActionData.ActionData.html b/docs/references/types/types_task_ActionData.ActionData.html new file mode 100644 index 0000000..d345e82 --- /dev/null +++ b/docs/references/types/types_task_ActionData.ActionData.html @@ -0,0 +1,64 @@ +ActionData | edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/types/types_task_ActionEffect.ActionEffect.html b/docs/references/types/types_task_ActionEffect.ActionEffect.html new file mode 100644 index 0000000..37087f9 --- /dev/null +++ b/docs/references/types/types_task_ActionEffect.ActionEffect.html @@ -0,0 +1,67 @@ +ActionEffect | edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/types/utils_dbUtils.TaskDoc.html b/docs/references/types/utils_dbUtils.TaskDoc.html new file mode 100644 index 0000000..2cfc091 --- /dev/null +++ b/docs/references/types/utils_dbUtils.TaskDoc.html @@ -0,0 +1,65 @@ +TaskDoc | edge-push-server
+
+ +
+ +
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/variables/types_http_response_types.statusCodes.html b/docs/references/variables/types_http_response_types.statusCodes.html new file mode 100644 index 0000000..e11cd89 --- /dev/null +++ b/docs/references/variables/types_http_response_types.statusCodes.html @@ -0,0 +1,81 @@ +statusCodes | edge-push-server
+
+ +
+
+
+
+ +

Variable statusCodesConst

+
statusCodes: { INTERNAL_SERVER_ERROR: { httpStatus: number; message: string }; PAGE_NOT_FOUND: { httpStatus: number; message: string }; SUCCESS: { httpStatus: number; message: string } } = ...
+
+

Type declaration

+
    +
  • +
    INTERNAL_SERVER_ERROR: { httpStatus: number; message: string }
    +
      +
    • +
      httpStatus: number
    • +
    • +
      message: string
  • +
  • +
    PAGE_NOT_FOUND: { httpStatus: number; message: string }
    +
      +
    • +
      httpStatus: number
    • +
    • +
      message: string
  • +
  • +
    SUCCESS: { httpStatus: number; message: string }
    +
      +
    • +
      httpStatus: number
    • +
    • +
      message: string
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/references/variables/utils_dbUtils.dbTasks.html b/docs/references/variables/utils_dbUtils.dbTasks.html new file mode 100644 index 0000000..ae0b989 --- /dev/null +++ b/docs/references/variables/utils_dbUtils.dbTasks.html @@ -0,0 +1,65 @@ +dbTasks | edge-push-server
+
+ +
+
+
+
+ +

Variable dbTasksConst

+
dbTasks: nano.DocumentScope<TaskDoc> = ...
+
+
+

Generated using TypeDoc

+
\ No newline at end of file From a1ba27e8bce91ea7081269d4220144f74371cadc Mon Sep 17 00:00:00 2001 From: Xipu Li Date: Mon, 18 Jul 2022 16:21:19 -0700 Subject: [PATCH 12/12] Add server architecture docs --- docs/api.md | 14 ++++++++ docs/assets/Action-Server.jpg | Bin 0 -> 66124 bytes docs/assets/push-publisher-pseudocode.png | Bin 0 -> 148419 bytes docs/assets/push-publisher-views.png | Bin 0 -> 207104 bytes docs/overview.md | 17 +++++++++ docs/publishers/push-publisher.md | 42 ++++++++++++++++++++++ 6 files changed, 73 insertions(+) create mode 100644 docs/api.md create mode 100644 docs/assets/Action-Server.jpg create mode 100644 docs/assets/push-publisher-pseudocode.png create mode 100644 docs/assets/push-publisher-views.png create mode 100644 docs/overview.md create mode 100644 docs/publishers/push-publisher.md diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..2c1a5f6 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,14 @@ +# Push Server CRD API +## Overview +Clients can interact with the push server through a CRD API that allows for the creation, reading and deletion of `Task` documents. + + +## Routers +As a REST API, the following routers implement HTTP methods: + +|Router Name| HTTP Method | Description | +|-----------| ----------- | ----------- | +|`getTaskRoute`| GET | Expect to get an array of `taskIds`. If the array is empty, it will get all tasks for the given `userId`. | +|`createTaskRoute`| POST | Construct a body and returns it as an HttpResponse. The body will include a payload that conforms to the `Task` type. It will write to the CouchDB database to create such task. | +|`deleteTaskRoute`| DELETE | Remove tasks from the database. If the `taskIds` array is empty, it will remove all tasks under the `userId`. | + diff --git a/docs/assets/Action-Server.jpg b/docs/assets/Action-Server.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d6313f8c441b6518e235fe2a78f9955649a17a9 GIT binary patch literal 66124 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 literal 0 HcmV?d00001 diff --git a/docs/assets/push-publisher-pseudocode.png b/docs/assets/push-publisher-pseudocode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c146918ce48fb6be6ca63def8ed3001db71639 GIT binary patch literal 148419 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∾&fIosgHSgn~ze(lik&hi{bmQ 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�n7uf4vp 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 literal 0 HcmV?d00001 diff --git a/docs/assets/push-publisher-views.png b/docs/assets/push-publisher-views.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ca3365a5c1a4806466773fd03f5037cca29cef GIT binary patch literal 207104 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

feLL} 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 z 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 C6}FZD literal 0 HcmV?d00001 diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 0000000..47761e7 --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,17 @@ +# Push Server Overview + +## Introduction +The push server handles all the push notifications for end users. + +The server itself consists of an API interface and a number of publishers/listeners. Below you can find documentation for the API inteface and specific publishers/listeners. + +* [API](./api.md) +* [Push Publisher](./publishers/push-publisher.md) + + +## Architecture +The push server is constructed as a number of independent microservices: + + + +The core component of the server is the CouchDB database, with which publishers and listeners perform their operations based on the changes in the database. \ No newline at end of file diff --git a/docs/publishers/push-publisher.md b/docs/publishers/push-publisher.md new file mode 100644 index 0000000..c92cb97 --- /dev/null +++ b/docs/publishers/push-publisher.md @@ -0,0 +1,42 @@ +# Push Publisher +## Overview + +The push publisher is responsible for pushing notifications to end users. + +The new version of the push server is designed to accommodate the "action-queue" feature of the Edge app. Users will have the ability to configure an arbitrary number of transactional actions and to "chain" them all together with predefined sequences. + +Some servers will then process these actions. The push publisher's job, then, is to handle push notifications once tasks are done. + +## Architecture +The publisher directly interacts with a CouchDB database, named 'db_tasks'. However, for performance reasons, we create two "views" for the database. A view is simply an interface that displays a set of documents based on certain query conditions. + +### Views + +Since the push publisher only pushes notifications for completed tasks, it is best to have a view that shows all completed tasks, and another view to show all incompleted tasks. + + + +`Task` is a data type modeled as below: +```js +taskId: string +userId: string +actionEffects: ActionEffect[] +action: Action +``` + +The `task_publishing` view contains all `Task`s that have every `ActionEffect` marked as completed. This is the view that the push publisher is listening for changes. + +Similarly, the `task_listening` view contains `Task`s that have at least one incomplete `ActionEffect`. + +## Publisher Logics +The push publisher gets a stream of `Task` documents from the `task_publishing` view. For each eligible document, the publisher pushes a notfication to devices. + + + +Depending on the `Action` of each task, the publisher may delete a task document if the `Action`'s `repeat` flag is marked as false. + +Otherwise, the publisher loops through the array of `ActionEffect`s, and set the `completed` flag to false for each one. Upon updating the document, the `task_listening` view will automatically pick up the `Task`, thereby allowing the `Task` to be processed repeatedly. + +To prevent race conditions, the push publisher also manipulate the `inProgress` flag in the `Action` property. + +The mutex implementaion coupled with the dual-view design abstractly reap the benefits of a message queue where each task can only be picked up by one service.